Hallo
Nachdem ich meinen Differenzdrucksensor mit einen Instrumentenverstärker
zum laufen gebracht habe sollen die Werte auf dem Display erscheinen.
Das tun sie auch.
Nur folgendes will ich erreichen.
Es soll später mal die Fluggeschwindigkeit eines Flugzeugs gemessen
werden TRUE Airspeed.
Die Anschlüsse kommen einmal an das Staurohr und eines an den Statischen
Druck.(Fahrtmesser).
Nun will ich ereichen das die anzeige nicht wackelt sondern so schön
ruhig ist wie im richtigen Flugzeug oder im Auto.
wie kann ich eine Lineare beschreibung der Werte hinbekommen so das die
anzeige bei gleicher geschwindigkeit nicht immer ca +- 5km/h anzeigt.
Danke
Ich denke was du machen willst, ist eine künstliche Trägheit einzubauen.
Zunächst solltest du immer aus mehreren Messungen einen Mittelwert
bilden um um das Rumgezappel des (der) letzten Bits zu minimieren (ich
denke das wirst du schon gemacht haben, also z.B. 10 mal abtasten und
daraus den Mittelwert).
Um die Trägheit zu erreichen würde ich immer den aktuellen Wert
speichern und gucken wie die Änderung zum neuen Wert ist. Nun kannst du
selbst bestimmen wie schnell das ganze System reagieren soll. Angenommen
du willst max. 5 km/s Anstieg haben. Du speicherst also z.B. 200 km/h
als letzten Wert. Solange die Geschwindigkeit zunimmt (Delta-v =
positiv) addierst du also 1 km/h jede 200ms dazu. Wird er negativ ziehst
du wieder 1 km/h alle 200ms wieder ab, bis eben das delta-v Null ist
(hier sollte man eine kleine Toleranz einbauen, damit auch hier nicht
hin un hergesprungen wird.
So zumindest jetzt meine Idee.
> Um die Trägheit zu erreichen würde ich immer den aktuellen Wert> speichern und gucken wie die Änderung zum neuen Wert ist. Nun kannst du> selbst bestimmen wie schnell das ganze System reagieren soll.> Angenommen du willst max. 5 km/s Anstieg haben...
Und was haben die angezeigten Werte dann mit der Geschwindigkeit zu tun?
Wozu soll diese künstliche Verschlechterung des Sensors gut sein?
>Wozu soll diese künstliche Verschlechterung des Sensors gut sein?
Das ist keine Verschlechterung sondern nur eine Trägheit. Damit siehts
halt toller aus als wenn er hüpft. Die Genauigkeit bleibt ja gleich.
Wenn du z.B. nur jede Sekunde bei einem Auto die Geschwindigkeit
abtastest würde dein Tacho (sofern es nicht träge wäre) immer z.B in 10
km/h Schritten springen, sähe doch ein wenig seltsam aus, oder findest
du nicht?
Im übrigen sollte es auch 5 (km/h)/s Anstieg heißen, aber ich denke das
geht aus dem Zusammenhang hervor.
Für die True Airspeed musst Du aber noch die Lufttemperatur messen...
Ein Differenzdrucksensor gibt Dir nur den Staudruck (indicated
Airspeed).
Gruss,
Thorsten
> Wenn du z.B. nur jede Sekunde bei einem Auto die Geschwindigkeit> abtastest würde dein Tacho (sofern es nicht träge wäre) immer z.B in 10> km/h Schritten springen, sähe doch ein wenig seltsam aus, oder findest> du nicht?
Du beschreibst hier leider das genaue Gegenteil :)
Wenn man mehr "Mess"-werte haben will als man wirklich misst kann man
interpolieren, damit die Änderungen zwischen zwei Messungen schön
glatt verläuft. In deinem Beispiel würde ich also nur alle paar Sekunden
die Geschwindigkeit messen und die Tachonadel gedämpft hinterherzuckeln
lassen. In gewisser Weise muss man also den aktuellen "wahren" Wert aus
bereits gemessenen Werten aus der Vergangenheit schätzen!
Unser OP kann aber offenbar sogar öfter als er die Messwerte anzeigen
muss messen. Da seine Werte offenbar stark rauschen, kann er sie
verbessern in dem er nur alle paar Mal den letzten Mittelwert ausgibt.
Und das ist dann nicht geraten, das ist tatsächlich näher am
"tatsächlichen" Wert.
> Im übrigen sollte es auch 5 (km/h)/s Anstieg heißen, aber ich denke das> geht aus dem Zusammenhang hervor.
Haben wir glaub ich alle verstanden :)
>Unser OP kann aber offenbar sogar öfter als er die Messwerte anzeigen>muss messen. Da seine Werte offenbar stark rauschen, kann er sie>verbessern in dem er nur alle paar Mal den letzten Mittelwert ausgibt.
Das hatte ich ja am Anfang schon geschrieben, bloß da er (der
Fragesteller) als Beispiel ein Auto genannt hat, habe ich das als
Trägheit interpretiert (ich war ja auch nicht der einzige). Zudem
verhindert eine Mittelwertbildung nicht unbedingt das Springen, wenn
z.B. durch den ADC nur 5 km/h aufgelöst werden können. Denn dann würde
würde es auch springen. Wenn man eine Trägheit einbaut springt er nicht
sondern singt oder steigt langsam anstatt zu springen. Finde ich für
solche Anzeigen wo man ständig rauguckt angenehmer (so wirds bei den
digitalen Autotachos auch gemacht.
Und ich glaube auch kaum, dass sein Fluggerät so extrem an
Geschwindigkeit pro Sekunde zunimmt, und das mit 5 (km/h)/s war ja auch
nur ein beispiel. Wenn das ding mit 3g beschleunigt dann macht man eben
90 (km/h)/s Anstieg, das reicht dann auch aus um nicht veraltete Werte
zu haben und dennoch eine "softe" Anzeige.
Da weder Controllertyp noch favorisierte Programmiersprache genannt
wurde (oder ich es übersehen habe) gehe ich mal von AVR und ASM aus.
Ich verwende gerne den gleitenden Mittelwert über 256 Messungen, was
recht gut dazu geeignet ist, Messwert-Ausreißer zu eliminieren und den
Messwert zu "beruhigen". Messgenauigkeit geht dabei nicht verloren. Es
wird neben den zwei Registern für das Ergebnis (adwl, adwh) nur noch ein
Register für die Nachkommastellen (adwn) gebraucht. Hier wurden zwei
Temp-Register (xl, xh) verwendet, weil ich einen Offset im Messwert
brauchte, normal reicht da ein Temp-Register. Die Wertigkeit "1/256"
wird durch Byteshifting erreicht.
>> Müsste es hier nicht>> add adwn,xl>> lauten?
Genau!!!!!!
Das kommt davon, wenn man "Kosmetik" betreibt, wenn man schnell mal
einen Namen ändert, den man beim Programmieren nicht optimal vergeben
hat, und dabei eine Zeile übersieht... 8-(
Im Original sieht es sooooooo aus:
1
ADCC: ;ISR ADC-Wandlung fertig
2
in srsk,sreg ;SREG sichern (Exklusivregister)
3
push xh
4
push xl
5
sub adcn,adwl ;1/256 des
6
sbc adwl,adwh ;ADC-Wertes
7
sbc adwh,null ;mit Übertrag rausnehmen
8
lds xl,adcl ;ADC-Wert L einlesen
9
lds xh,adch ;ADC-Wert H einlesen
10
adiw xh:xl,messoffset ;Messwertverschiebung
11
add adcn,xl ;1/256 des neuen ADC-Wertes
12
adc adwl,xh ;1/256 des neuen ADC-Wertes
13
adc adwh,null ;mit Übertrag addieren
14
pop xl
15
pop xh
16
out sreg,srsk ;SREG wiederherstellen
17
reti ;fertig...
Ist übrigens aus der Laminator-Temperatur-Regelung...
Danke für Deine genaue Analyse und Deinen Hinweis auf den Fehler, denn
Müll sollte nicht unwidersprochen stehen bleiben.
Gruß aus dem sonnigen Flachland,
Hannes