Simpel Vario mit Druckanschluss
- FuniCapi
- Offline
- Platinum Mitglied
- Beiträge: 1716
- Dank erhalten: 836
Jep, ist mir auch schon aufgefallen.
Sobald man den Thread über den Titellink öffnet ist er wieder da.
Gruss Lukas
Sobald man den Thread über den Titellink öffnet ist er wieder da.
Gruss Lukas
von FuniCapi
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- nichtgedacht
- Autor
- Visitor
- Dank erhalten: 0
Hi,
ich lasse inzwischen die Programmschleife frei laufen und messe mit dem
Oszilloskop 23 - 24ms Wiederholzeit. Die Zeit schwankt um ca. 1ms durch
Ausführen der Kommunikation Richtung Empfänger. Die Schwankung ist für
den Zweck unerheblich.
ich hab' noch mal ein bischen einfache Theorie wie der Filter funktioniert
Ermitteln der Steigung eines verrauschten Signals als Differenz der Ausgangssignale zweier paralleler Tiefpassfilter
Ein Tiefpass mit einer konstanten Rampe als Eingangssignal liefert am Ausgang
nach einer "Einschwingzeit" dieselbe Rampe aber um eine konstante Zeit versetzt.
Dieser Versatz ist Tau, hier T genannt. Bei einem analogen passiven RC-Tiefpass ist
T = R * C
Aus der Zeichnung kann unmittelbar die Steigung entnommen werden als
1.) dx / (T2 - T1)
Die bekannte digitale Formel für ein sogenanntes Exponentialfilter ist:
2.) output[n] = output[n-1] - alpha * (output[n-1] - input)
Dieser Algorithmus bildet als IIR Filter ein einfaches RC-Glied nach.
Für dieses digitale Äquivalent zum RC Glied gilt folgender Zusammenhang:
3.) alpha = dt / (RC + dt)
mit dt als Abtastintervall
3a.) RC = dt / alpha - dt = Tau
Die Steigung des Eingangssignals ( 1., 3.) ist also:
4.) dx / (dt / alpha2 - dt - ( dt / alpha1 - dt ) )
= dx / ( dt / alpha2 - dt / alpha1 )
Während dx einfach die Differenz der Ausgänge und poportional zur Steigung ist,
gibt der Teiler in diesem Bruch die Verstärkung resp. Abschwächung an.
Wählt man die alphas mit 0.15 und 0.05 und ist dt 24ms ergibt sich
für den Teiler:
24ms / 0.05 - 24ms / 0.15 = 0,32
Man muß also einfach die Differenz der Ausgänge mit 1 / 0,32 multiplizieren
um die Steigung des Signals am Eingang zu erhalten.
Ergebnisalgorithmus:
r_altitude0 = r_altitude0 - 0.15 * (r_altitude0 - relativeAltitude);
r_altitude1 = r_altitude1 - 0.05 * (r_altitude1 - relativeAltitude);
climb = (r_altitude0 - r_altitude1) * 3,125;
Hier mal ein Bild aus LTSpice. Die Zeitkonstanten sind frei erfunden, zeigen aber wie schnell
der Filter ist wenn man ein bischen Rauschen zulässt.
Gruß
Dieter
ich lasse inzwischen die Programmschleife frei laufen und messe mit dem
Oszilloskop 23 - 24ms Wiederholzeit. Die Zeit schwankt um ca. 1ms durch
Ausführen der Kommunikation Richtung Empfänger. Die Schwankung ist für
den Zweck unerheblich.
ich hab' noch mal ein bischen einfache Theorie wie der Filter funktioniert
Ermitteln der Steigung eines verrauschten Signals als Differenz der Ausgangssignale zweier paralleler Tiefpassfilter
Ein Tiefpass mit einer konstanten Rampe als Eingangssignal liefert am Ausgang
nach einer "Einschwingzeit" dieselbe Rampe aber um eine konstante Zeit versetzt.
Dieser Versatz ist Tau, hier T genannt. Bei einem analogen passiven RC-Tiefpass ist
T = R * C
Aus der Zeichnung kann unmittelbar die Steigung entnommen werden als
1.) dx / (T2 - T1)
Die bekannte digitale Formel für ein sogenanntes Exponentialfilter ist:
2.) output[n] = output[n-1] - alpha * (output[n-1] - input)
Dieser Algorithmus bildet als IIR Filter ein einfaches RC-Glied nach.
Für dieses digitale Äquivalent zum RC Glied gilt folgender Zusammenhang:
3.) alpha = dt / (RC + dt)
mit dt als Abtastintervall
3a.) RC = dt / alpha - dt = Tau
Die Steigung des Eingangssignals ( 1., 3.) ist also:
4.) dx / (dt / alpha2 - dt - ( dt / alpha1 - dt ) )
= dx / ( dt / alpha2 - dt / alpha1 )
Während dx einfach die Differenz der Ausgänge und poportional zur Steigung ist,
gibt der Teiler in diesem Bruch die Verstärkung resp. Abschwächung an.
Wählt man die alphas mit 0.15 und 0.05 und ist dt 24ms ergibt sich
für den Teiler:
24ms / 0.05 - 24ms / 0.15 = 0,32
Man muß also einfach die Differenz der Ausgänge mit 1 / 0,32 multiplizieren
um die Steigung des Signals am Eingang zu erhalten.
Ergebnisalgorithmus:
r_altitude0 = r_altitude0 - 0.15 * (r_altitude0 - relativeAltitude);
r_altitude1 = r_altitude1 - 0.05 * (r_altitude1 - relativeAltitude);
climb = (r_altitude0 - r_altitude1) * 3,125;
Hier mal ein Bild aus LTSpice. Die Zeitkonstanten sind frei erfunden, zeigen aber wie schnell
der Filter ist wenn man ein bischen Rauschen zulässt.
Gruß
Dieter
von nichtgedacht
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FuniCapi
- Offline
- Platinum Mitglied
- Beiträge: 1716
- Dank erhalten: 836
Du gehst bei deiner Simulation von einem Steigen aus das deutlich über dem Messrauschen liegt.
Schlussendlich bleibt nur testen im realen Flug übrig. Ich werden deinen Code mal testen, bzw. zu meinem dazu fügen. So kann ich durch umschalten im Flug vergleichen. Zudem habe ich dadurch einen Log der beide Steigraten beinhaltet. Dann kann man das Rauschen und die Ansprechzeit der beiden Messwerte gut vergleichen. Ich bin sehr gespannt wie gut deine Filtermethode ist.
Gruss Lukas
Schlussendlich bleibt nur testen im realen Flug übrig. Ich werden deinen Code mal testen, bzw. zu meinem dazu fügen. So kann ich durch umschalten im Flug vergleichen. Zudem habe ich dadurch einen Log der beide Steigraten beinhaltet. Dann kann man das Rauschen und die Ansprechzeit der beiden Messwerte gut vergleichen. Ich bin sehr gespannt wie gut deine Filtermethode ist.
Gruss Lukas
Last Edit:16 Aug. 2018 19:39
von FuniCapi
Letzte Änderung: 16 Aug. 2018 19:39 von FuniCapi.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- nichtgedacht
- Autor
- Visitor
- Dank erhalten: 0
Hi,
an diesem verlängerten Flug mit meinem DLG kann man schön den stimmigen Phasenbezug zwischen der
angezeigten Höhe und dem angezeigten Steigen erkennen. Natürlich hat auch die angezeigte Höhe einen
kleinen time lag aber das Vario scheint mir recht spontan zu sein und hat sich schon bei vielen Flügen als
sehr nützlich erwiesen.
Die Höhe lasse ich inzwischen mit Dezimeter Auflösung ausgeben. Sonst werden unschöne Treppchen dargestellt.
Gruß
Dieter
an diesem verlängerten Flug mit meinem DLG kann man schön den stimmigen Phasenbezug zwischen der
angezeigten Höhe und dem angezeigten Steigen erkennen. Natürlich hat auch die angezeigte Höhe einen
kleinen time lag aber das Vario scheint mir recht spontan zu sein und hat sich schon bei vielen Flügen als
sehr nützlich erwiesen.
Die Höhe lasse ich inzwischen mit Dezimeter Auflösung ausgeben. Sonst werden unschöne Treppchen dargestellt.
Gruß
Dieter
von nichtgedacht
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- nichtgedacht
- Autor
- Visitor
- Dank erhalten: 0
Hallo zusammen,
es gibt jetzt auch ein LUA Script für das Mini-Vario.
Eine Version mit fest eingestelltem Sensor "mini_vario" und eine Version
mit frei wählbarem Sensor und Parametern
www.jetiforum.de/index.php/lua-fuer-die-...t-hoehen-graph#94274
Gruß
Dieter
es gibt jetzt auch ein LUA Script für das Mini-Vario.
Eine Version mit fest eingestelltem Sensor "mini_vario" und eine Version
mit frei wählbarem Sensor und Parametern
www.jetiforum.de/index.php/lua-fuer-die-...t-hoehen-graph#94274
Gruß
Dieter
von nichtgedacht
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- nichtgedacht
- Autor
- Visitor
- Dank erhalten: 0
Hallo zusammen,
ich habe jetzt die Library github.com/jarzebski/Arduino-MS5611 gecloned
und umgebaut. Das Original setzt das Datenblatt vom MS5611 sehr schön um.
Leider sind dort zwischen dem Absetzen der AD Conversion Kommandos für
Temperatur und Druck und dem Auslesen des jeweiligen Ergebnisregisters delays
eingebaut. Bei höchster Auflösung der Wandlung jeweils 10ms delay.
Man muss laut Datenblatt maximal 9,04 ms warten bis die Wandlung abgeschlossen ist.
Ich habe das nun auf interruptgesteuert umgebaut und gewinne so praktisch 20ms pro kompletter
Abfrage (Temperatur, Luftdruck) um einen aufwändigeren Filter berechnen zu können. Außerdem
wird ein Flag von der ISR gesetzt (data_ready) das in der Programmschleife zum präzisen Timing
benutzt werden kann und beim Lesen des Luftdrucks automatisch wieder zurück gesetzt wird.
github.com/nichtgedacht/Arduino-MS5611-Interrupt
Gruß
Dieter
ich habe jetzt die Library github.com/jarzebski/Arduino-MS5611 gecloned
und umgebaut. Das Original setzt das Datenblatt vom MS5611 sehr schön um.
Leider sind dort zwischen dem Absetzen der AD Conversion Kommandos für
Temperatur und Druck und dem Auslesen des jeweiligen Ergebnisregisters delays
eingebaut. Bei höchster Auflösung der Wandlung jeweils 10ms delay.
Man muss laut Datenblatt maximal 9,04 ms warten bis die Wandlung abgeschlossen ist.
Ich habe das nun auf interruptgesteuert umgebaut und gewinne so praktisch 20ms pro kompletter
Abfrage (Temperatur, Luftdruck) um einen aufwändigeren Filter berechnen zu können. Außerdem
wird ein Flag von der ISR gesetzt (data_ready) das in der Programmschleife zum präzisen Timing
benutzt werden kann und beim Lesen des Luftdrucks automatisch wieder zurück gesetzt wird.
github.com/nichtgedacht/Arduino-MS5611-Interrupt
Gruß
Dieter
von nichtgedacht
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 1.086 Sekunden