(Betr.: C auf ATMEGA 328) Hallo, eine Sensor-Kennlinie lautet wie folgt: a=17,1218388508 (offset) b=0,1455858690 (Factor) c=0,0000885752 (quadratic) pulsetime = a + b*Temp + c*Temp² (quadratische Funktion) Wertebereich für Temp = 40..170°C Das Ergebnis (pulsetime) muss eigentlich nur in 0,05 Schritten genau sein.. Ich würde gerne Float-Berechnungen umgehen (wg. Geschwindigkeit), daher die Frage, kann man das ganze (quadratisch) irgendwie mit Festkomma rechnen ? (Festkommaarithmetik) oder ist es schneller*, einfach eine Wertetabelle anzulegen (lookuptable) *bzgl. Ausführungsgeschwindigkeit) ? Der Vorteil, wenn ich es als quadratischen Formel implementieren würde, wäre, dass man zur Kalibration einfach die drei Faktoren a,b,c einstellbar macht. (System muss regelmäßig wiederkehrend kalibriert werden, Sensoren werden nach einiger Zeit ausgetauscht, da verschlissen)
Friedo B. schrieb: > C auf ATMEGA 328 Friedo B. schrieb: > Das Ergebnis (pulsetime) muss eigentlich nur in 0,05 Schritten genau > sein.. Wie meinen? Eine Ganzzahl auf 0.05 genau? Friedo B. schrieb: > oder ist es schneller*, einfach eine Wertetabelle anzulegen > (lookuptable) *bzgl. Ausführungsgeschwindigkeit) ? Ja. > Der Vorteil, wenn ich es als quadratischen Formel implementieren würde, > wäre, dass man zur Kalibration einfach die drei Faktoren a,b,c > einstellbar macht. 3 Ecken zum Abgleich. Das nenne ich nicht "einfach"... :-o BTW: > a=17,1218388508 (offset) > b=0,1455858690 (Factor) > c=0,0000885752 (quadratic) float kennt nur 6 signifikante Stellen. Das ist dir klar? Du hast also reell nur > a=17,1218 (offset) > b=0,145585 (Factor) > c=0,0000885752 (quadratic)
ob nun Wertetabelle oder Festkomma schneller ist, ist abhängig davon wieviele Werte du in der Tabelle hättest. Festkomma ist natürlich überhaupt nur sinnvoll wenn du mit ganzzahlen einen vertretbaren Wertebereich erstellen kannst. z.B.: wir machen deine 3 floats zu 3 int32 indem wir einfach alle 3 zahlen mit z.B. 1000000 mutliplizieren, dann hast du a=17121838 b=145585 c=88 musst halt schauen das du eine möglichst hohen Faktor nimmst, aber nich so hoch das eine Zahl 2^31 (2147483648) übersteigen kann, bzw. 2^32 wenn du kein vorzeichen brauchst.
Was mich noch interessieren würde: Was ist das für ein Sensor? Welche Genauigkeit und Auflösung brauchst du? Was ist das Ausgangssignal? Was bewirkt der Sensor?
Danke schon mal ! Wertebereich "Temp" = 40 ... 170 (steht ja oben schon) Wertebereich Ergebnis = ca. 23 ... 44 (kann man ja ausrechnen ;-) habe jetzt noch das hier gefunden: --> http://www.mikrocontroller.net/articles/Festkommaarithmetik das fand ich interessant -> ich denke, so könnte ich das hinbekommen. Es geht ja neben Addition nur um Multiplikation (siehe Formel) also wenn ich Euch richtig verstanden habe: Berechnung in Float: "langsam" Berechnung in Festkommaarithmetik: "schneller" Lookup-Table: "am schnellsten" (auch mit 100-200 Wertepaaren ?) (?) B.T.W. haben die ARM Cortex M0 / M3 eigentlich FPU's ?
Friedo B. schrieb: > (auch mit 100-200 Wertepaaren ?) Egal wieviele Wertepaare. Solang dir der Speicher nicht ausgeht, ist die Lookup-Tabelle immer am schnellsten. Und wenn du dir durch eine Tabelle die komplette Float-Bibliothek einsparen kannst, darf die schon recht groß werden um auf denselben Flash-Bedarf zu kommen. Als Mittelweg kannst du dir auch nur eine Tabelle mit Stützpunkten anlegen, und dazwischen linear interpolieren.
"irgendwer" schrieb: > ob nun Wertetabelle oder Festkomma schneller ist, ist abhängig davon > wieviele Werte du in der Tabelle hättest. OK. Εrnst B✶ schrieb: > Egal wieviele Wertepaare. Solang dir der Speicher nicht ausgeht, ist die > Lookup-Tabelle immer am schnellsten. OK, alles klar... > Als Mittelweg kannst du dir auch nur eine Tabelle mit Stützpunkten > anlegen, und dazwischen linear interpolieren. ich denke darauf wird's hinauslaufen... Danke noch mal.
Friedo B. schrieb: >> Als Mittelweg kannst du dir auch nur eine Tabelle mit Stützpunkten >> anlegen, und dazwischen linear interpolieren. > ich denke darauf wird's hinauslaufen... Hat dann wiederrum den Vorteil, dass du praktisch jede beliebige Kurvenform hinkriegst. Hat allerdings den Nachteil, dass du bei Kalibrieren mehr Aufwand treiben musst. > Der Vorteil, wenn ich es als quadratischen Formel implementieren > würde, wäre, dass man zur Kalibration einfach die drei Faktoren > a,b,c einstellbar macht. Und die 3 Faktoren kriegt derjenige, der die Kalbrierung machen muss, wo her?
Karl Heinz Buchegger schrieb: > Und die 3 Faktoren kriegt derjenige, der die Kalbrierung machen muss, wo > her? aus einer Wertetabelle (Hihi). Ich würde eine Kalibriervorschrift erstellen, welche Werte für einen Sensor gemessen werden müssen, und diese Tabelle mit Interpolation verwenden - genauer wirds nicht. Gruss Reinhard
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.