Helmut Stettmaier
User
Hallo Modellflug-Vario-Entwickler,
zur Zeit habe ich ein neues Flugmodell-Variometer in der Erprobung; das Bild zeigt einen Prototyp, das ist ganz bestimmt noch nicht die endgültige Hardware (man sieht die Patches:-); vielen Dank an Ingo Stahl, ohne den das alles kaum zustande gekommen wäre. Als Drucksensor kommt der aktuelle MS5611 zum Einsatz. Das Gerät ist noch eine ziemliche Baustelle aber es fliegt bereits und macht richtig Freude.
Nun aber zum Grund, warum ich hier schreibe:
Besonders interessant an dem Ding ist die Art, in der die arg verrauschten Daten des MS5611 aufbereitet werden: Ich setze als Rauschfilter eine lineare Ausgleichsrechnung ein und lade andere Vario-Entwickler ein, sich das mal anzusehen.
Das Diagramm skizziert grob das Verfahren: Zu jedem Auswerte-Zeitpunkt wird in die "Wolke" der originalen, verrauschten Druckwerte eine Kurve gerechnet und an deren rechten Ende ausgewertet: Der Wert der Kurve ist der Druck und die Steigung der Kurve (rot) ist der Druckgradient.
Dieses ziemlich aufwändige Filter ist, in aller Bescheidenheit, anderen Methoden durchaus überlegen:
- Die Höhenberechnung ist hoch auflösend und hat Potenzial für richtig gute Geräte.
- die Vario-Berechnung weist eine erfreulich geringe "Ansprechzeit" auf,
- die Glättungsleistung ist durchaus befriedigend (100% geht nicht).
Die Mathematik hinter den Routinen ist etwas komplex und erfordert einen leistungsfähigen 32-Bit-uController, so wie er auch z.B. auf den neuen ARM-Arduinos zu finden ist.
Der uController LPC812 von NXP, den ich verwende, kommt mit dem Rechenaufwand bestens zurecht. Es werden weniger als 3 Millisekunden für eine Rechnung benötigt - ich war sehr erstaunt als ich die entsprechenden Messungen am LSA gesehen hatte.
Die Filter-Routinen belegen in meiner Implementierung nur etwa 3¼k Bytes Flash, darin enthalten sind die Altimeter- und Variometer-Routinen und der benötigte Teil der double-Arithmetik-Library. Die Anforderungen an den Datenspeicher sind kaum höher als als bei anderen Geräten dieser Art.
Ich habe die Absicht, diese Routinen frei zu geben (GPL oder sowas), sobald sie einen ausreichenden Qualitätslevel erreicht haben und rechtliche Fragen geklärt sind.
Derzeit sind die Routinen noch nicht öffentlich zugänglich, wer sich aber ernsthaft dafür interessiert und sich an der Erprobung beteiligen möchte, den lade ich ein, hier zu schreiben oder mich anzumailen (keine PN, die lese ich zu selten).
Für diese Interessenten gibt es 2 Arten von Dokumentation: Eine Beschreibung der eingesetzten Mathematik und eine doxygen-Doku der API ...und natürlich die C-Quellen.
Man kann die Routinen einfach benützen und (bessere) Varios damit bauen: Man muss ein Modul importieren (als C-Quelle), ein #define anpassen und ein paar Aufrufe programmieren. Ingo hat das heute innerhalb kürzester Zeit hingekriegt...
Oder man kann sich auch an der Weiterentwicklung der Routinen versuchen, das erfordert dann ein tieferes Einsteigen.
Es gibt durchaus noch was zu tun: Andere Vario-Hardware (eine Arduino-Referenz-Implementierung?) und viele Varios, auch für andere RC-Systeme als M-Link erstellen. Und Fehler rausmachen.
Mein Wunsch wäre, dass es Verbesserungen aus der Community gibt und nach einer gewissen Zeit sich niemand mehr Gedanken um die Aufbereitung der Druckdaten aus einem aktuellen Drucksensor machen muss, wenn er ein Modellflug-Vario bauen will...
Recht schöne Grüße aus Olching,
Helmut
zur Zeit habe ich ein neues Flugmodell-Variometer in der Erprobung; das Bild zeigt einen Prototyp, das ist ganz bestimmt noch nicht die endgültige Hardware (man sieht die Patches:-); vielen Dank an Ingo Stahl, ohne den das alles kaum zustande gekommen wäre. Als Drucksensor kommt der aktuelle MS5611 zum Einsatz. Das Gerät ist noch eine ziemliche Baustelle aber es fliegt bereits und macht richtig Freude.
Nun aber zum Grund, warum ich hier schreibe:
Besonders interessant an dem Ding ist die Art, in der die arg verrauschten Daten des MS5611 aufbereitet werden: Ich setze als Rauschfilter eine lineare Ausgleichsrechnung ein und lade andere Vario-Entwickler ein, sich das mal anzusehen.
Das Diagramm skizziert grob das Verfahren: Zu jedem Auswerte-Zeitpunkt wird in die "Wolke" der originalen, verrauschten Druckwerte eine Kurve gerechnet und an deren rechten Ende ausgewertet: Der Wert der Kurve ist der Druck und die Steigung der Kurve (rot) ist der Druckgradient.
Dieses ziemlich aufwändige Filter ist, in aller Bescheidenheit, anderen Methoden durchaus überlegen:
- Die Höhenberechnung ist hoch auflösend und hat Potenzial für richtig gute Geräte.
- die Vario-Berechnung weist eine erfreulich geringe "Ansprechzeit" auf,
- die Glättungsleistung ist durchaus befriedigend (100% geht nicht).
Die Mathematik hinter den Routinen ist etwas komplex und erfordert einen leistungsfähigen 32-Bit-uController, so wie er auch z.B. auf den neuen ARM-Arduinos zu finden ist.
Der uController LPC812 von NXP, den ich verwende, kommt mit dem Rechenaufwand bestens zurecht. Es werden weniger als 3 Millisekunden für eine Rechnung benötigt - ich war sehr erstaunt als ich die entsprechenden Messungen am LSA gesehen hatte.
Die Filter-Routinen belegen in meiner Implementierung nur etwa 3¼k Bytes Flash, darin enthalten sind die Altimeter- und Variometer-Routinen und der benötigte Teil der double-Arithmetik-Library. Die Anforderungen an den Datenspeicher sind kaum höher als als bei anderen Geräten dieser Art.
Ich habe die Absicht, diese Routinen frei zu geben (GPL oder sowas), sobald sie einen ausreichenden Qualitätslevel erreicht haben und rechtliche Fragen geklärt sind.
Derzeit sind die Routinen noch nicht öffentlich zugänglich, wer sich aber ernsthaft dafür interessiert und sich an der Erprobung beteiligen möchte, den lade ich ein, hier zu schreiben oder mich anzumailen (keine PN, die lese ich zu selten).
Für diese Interessenten gibt es 2 Arten von Dokumentation: Eine Beschreibung der eingesetzten Mathematik und eine doxygen-Doku der API ...und natürlich die C-Quellen.
Man kann die Routinen einfach benützen und (bessere) Varios damit bauen: Man muss ein Modul importieren (als C-Quelle), ein #define anpassen und ein paar Aufrufe programmieren. Ingo hat das heute innerhalb kürzester Zeit hingekriegt...
Oder man kann sich auch an der Weiterentwicklung der Routinen versuchen, das erfordert dann ein tieferes Einsteigen.
Es gibt durchaus noch was zu tun: Andere Vario-Hardware (eine Arduino-Referenz-Implementierung?) und viele Varios, auch für andere RC-Systeme als M-Link erstellen. Und Fehler rausmachen.
Mein Wunsch wäre, dass es Verbesserungen aus der Community gibt und nach einer gewissen Zeit sich niemand mehr Gedanken um die Aufbereitung der Druckdaten aus einem aktuellen Drucksensor machen muss, wenn er ein Modellflug-Vario bauen will...
Recht schöne Grüße aus Olching,
Helmut