mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC Werte sauber aufs display bringen


Autor: Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: 3353 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tiefpassfilterung ?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mittelwertbildung über mehrere Messwerte ?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Johnny Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Timbo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bilde den Mittelwert aus den Messwerten der letzten Sekunde und 
aktualisiere die Geschwindigkeitsanzeige nur einmal pro Sekunde.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die True Airspeed musst Du aber noch die Lufttemperatur messen...
Ein Differenzdrucksensor gibt Dir nur den Staudruck (indicated 
Airspeed).

Gruss,
Thorsten

Autor: Johnny Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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 :)

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten.

Ich versuche es heute mal umzusetzten.

Danke

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
ADCC:                   ;ISR ADC-Wandlung fertig
 in srsk,sreg               ;SREG sichern (Exklusivregister)
 push xh
 push xl
 sub adwn,adwl              ;1/256 des 
 sbc adwl,adwh              ;ADC-Wertes
 sbc adwh,null              ;mit Übertrag rausnehmen
 lds xl,adcl                ;ADC-Wert L einlesen
 lds xh,adch                ;ADC-Wert H einlesen
 adiw xh:xl,messoffset      ;Messwertverschiebung
 add adcn,xl                ;1/256 des neuen ADC-Wertes
 adc adwl,xh                ;1/256 des neuen ADC-Wertes
 adc adwh,null              ;mit Übertrag addieren
 pop xl
 pop xh
 out sreg,srsk              ;SREG wiederherstellen
 reti                       ;fertig...

...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hannes Lux wrote:

Hi Hannes

>
> ADCC:                   ;ISR ADC-Wandlung fertig
>  in srsk,sreg               ;SREG sichern (Exklusivregister)
>  push xh
>  push xl
>  sub adwn,adwl              ;1/256 des
>  sbc adwl,adwh              ;ADC-Wertes
>  sbc adwh,null              ;mit Übertrag rausnehmen
>  lds xl,adcl                ;ADC-Wert L einlesen
>  lds xh,adch                ;ADC-Wert H einlesen
>  adiw xh:xl,messoffset      ;Messwertverschiebung
>  add adcn,xl                ;1/256 des neuen ADC-Wertes
> 

Müsste es hier nicht

   add adwn,xl

lauten?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
>>
>>  add adcn,xl                ;1/256 des neuen ADC-Wertes
>> 
>
> 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:
ADCC:                   ;ISR ADC-Wandlung fertig
 in srsk,sreg               ;SREG sichern (Exklusivregister)
 push xh
 push xl
 sub adcn,adwl              ;1/256 des 
 sbc adwl,adwh              ;ADC-Wertes
 sbc adwh,null              ;mit Übertrag rausnehmen
 lds xl,adcl                ;ADC-Wert L einlesen
 lds xh,adch                ;ADC-Wert H einlesen
 adiw xh:xl,messoffset      ;Messwertverschiebung
 add adcn,xl                ;1/256 des neuen ADC-Wertes
 adc adwl,xh                ;1/256 des neuen ADC-Wertes
 adc adwh,null              ;mit Übertrag addieren
 pop xl
 pop xh
 out sreg,srsk              ;SREG wiederherstellen
 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.