Forum: PC-Programmierung [C] Tachometer Radius Verlauf berechnen


von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

Ich stehe Mathematisch gerade völlig auf dem Schlauch :-D

Gegeben: Ich habe einen Tacho mit vollem Radius von 360°. Auf diesem ist 
die Geschwindigkeit nichtlinear verteilt. Kann ich diese Nichtlinearität 
berechnen? Ich finde schon schwer das "Problem" korrekt auszudrücken.

Die Geschwindigkeit verteilt sich auf 800 Knoten. Auf den ersten ~90° 
des Tachos sind es 150 Knoten, auf ~120° sind es dann 200 Knoten usw... 
Ich gebe am besten mal ein Bild mit, da sieht man es besser wie ich das 
meine.

Wie kann ich dies am besten Berechnen? Ich brauche eure Intelligenz :-D

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich würde ganz klassisch Bleistift und Millimeterpapier benutzen. Auf 
die Skala ein Winkelgradskala zeichnen und Werte ablesen. Die Winkel auf 
der Horizontalen, die Skalenwerte auf der Vertikalen, dann die 
verbinden.
Das ergibt eine Gerumme, (krumme Gerade), für die man dann eine 
Näherungsformel bestimmt. Dazu sollte man Anleitungen im Web finden.

von H. H. (hhinz)


Lesenswert?


von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Rene K. schrieb:
> Nichtlinearität berechnen

Was soll die Berechnung bringen? Für solche Aufgaben gibt es 
"Fitfunktionen", mit denen man eine Näherungsgerade findet.
Klassisch auf linearem, halblogarithmischem, umgekehrt 
halblogarithmischem und doppeltlogarithmischem Papier, damit war man 
früher mal zufrieden.

Eine Tabellenkalkulation wie Excel oder Libre Office Calc kennt sicher 
solche Fitfunktionen und kann sie auf dem Bildschirm darstellen.

LINEST scheint dazu gedacht zu sein:
https://wiki.documentfoundation.org/Documentation/Calc_Functions/LINEST
Calculates the straight line that best fits a supplied data set and 
optionally returns detailed statistics on the regression.
oder auch LOGEST:
https://wiki.documentfoundation.org/Documentation/Calc_Functions/LOGEST/de
oder vielleicht das:
https://extensions.libreoffice.org/en/extensions/show/improved-trend-lines

: Bearbeitet durch User
von Rene K. (xdraconix)


Angehängte Dateien:

Lesenswert?

H. H. schrieb:
> https://de.wikipedia.org/wiki/Prandtlsonde

Ich weiß jetzt auch nicht wie mir die Funktionsweise der Staudruckröhre 
mit dem Problem der Skala helfen könnte. Mir ist bewusst wie die 
Arbeitsweise einer Staudruckröhre ist.

Christoph db1uq K. schrieb:
> Ich würde ganz klassisch Bleistift und Millimeterpapier benutzen. Auf
> die Skala ein Winkelgradskala zeichnen und Werte ablesen.

Jaaaa... so ähnlich habe ich das nun auch gemacht. Ich habe mir die 
Winkel der 100er Stellen ausgemessen und habe mir eine LUT Tabelle 
daraus gemacht. Die Zwischenschritte Interpoliere ich. Klappt ganz 
wunderbar.
1
typedef struct {
2
    float value;   // 0..800
3
    float angle;   // Grad
4
} ScalePoint;
5
6
ScalePoint scale[] = {
7
    {   0, 0 },
8
    { 100, 35 },
9
    { 200, 139 },
10
    { 300, 193 },
11
    { 400, 231 },
12
    { 500, 263 },
13
    { 600, 291 },
14
    { 700, 314 },
15
    { 800, 336 }
16
};
17
18
#define SCALE_COUNT (sizeof(scale)/sizeof(scale[0]))
19
#define DEG_OFFSET
20
21
float interpolSpeedToAngel(float value)
22
{
23
    // Begrenzen
24
    if (value <= scale[0].value)
25
        return (scale[0].angle)+DEG_OFFSET;
26
27
    if (value >= scale[SCALE_COUNT - 1].value)
28
        return (scale[SCALE_COUNT - 1].angle)+DEG_OFFSET;
29
30
    // Passendes Segment suchen
31
    for (int i = 0; i < SCALE_COUNT - 1; i++)
32
    {
33
        if (value >= scale[i].value && value <= scale[i + 1].value)
34
        {
35
            float v0 = scale[i].value;
36
            float v1 = scale[i + 1].value;
37
            float a0 = scale[i].angle;
38
            float a1 = scale[i + 1].angle;
39
40
            float t = (value - v0) / (v1 - v0);
41
            return (a0 + t * (a1 - a0))+DEG_OFFSET;
42
        }
43
    }
44
45
    return 0.0f; // sollte nie passieren
46
}

So, jetzt ab ins Bett... bin Hundemüde :-D


Dankeschön für den Denkanstoß.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.