Der Mikrokopter besitzt zur Höhenmessung einen Luftdrucksensor MPX4115A von Motorola/Freescale. Dieser ist in der Lage Luftdrücke von 15-115 kPa, das entspricht 150-1150 mBar zu messen und eine zum Luftdruck proportionale Spannung auszugeben. Laut Datenblatt liefert der Luftdrucksensor eine Spannung von
\(U(p) = p \cdot 46 \frac{\mathrm{mV}}{\mathrm{kPa}} = p \cdot 4.6 \frac{\mathrm{mV}}{\mathrm{mBar}}\)
Um die Spannung auszuwerten ist der Luftdrucksensor mit einem der A/D-Wandler Eingänge des Atmel Mikroprozessors verbunden. Da nur relativ kleine Druckänderungen erwartet werden ist der Luftdrucksensor über einen nichtinvertierenden Operationsverstärker verbunden, dessen Nullpunkt so verschoben werden kann, dass die zu messende Spannung in den Messbereich des A/D-Wandlers fällt der dank externe Referenzspannung einen Messbereich von 0-3 V besitzt. Der Verstärker hat einen Verstärkungsfaktor von
\(g_\mathrm{HW} = 1 + 18000 \cdot \frac{1}{6800 +\frac{1}{680}} \approx 30.12\)
Der A/D-Wandler wandelt die Spannungen zwischen 0 V und 3 V in Digitalwerte zwischen 0 und 1023 um (10 Bit Auflösung). Wir erhalten also
\(ADC(U) = \frac{1024}{3000} \frac{\mathrm{Schritte}}{\mathrm{mV}}\)
Die Software der Flight-Ctrl liest diese Werte regelmäßig aus und mittelt darüber. Die Routine funktioniert schematisch (Die genaue Routine findet sich z.B. hier. Vielen Dank an killagreg für die Erklärungen.)
tmp_pressure = 0; count = 0; while (true) { tmp_pressure += ADC; if (++count >= 5) { tmp_pressure /= 2; pressure = tmp_pressure; tmp_pressure /= 2; } }
Bei ersten Mal wird also der Wert des A/D-Wandlers fünfmal aufsummiert und anschließend durch 2 geteilt. Nun wird immer der neue Druck mit Hilfe des alten berechnet in der Form
\(\left(\frac{p}{2}\right)_{i+1} =\left(\frac{p}{2}\right)_i + \frac{5}{4} \cdot ADC\)
Die Folge konvergiert im Grenzfall gegen
\(g_\mathrm{SW} = \frac{2}{ADC} \cdot \lim_{i \to \infty} \left(\frac{p}{2}\right)_i = \frac{2}{ADC} \cdot \frac{5}{3} ADC = \frac{10}{3}\)
Die Software verstärkt also den eingelesen Wert nochmals um den Faktor 10/3. Also erhalten wir insgesamt einen Wert von
\(ADC(g_\mathrm{HW} \cdot U(p)) \cdot g_{SW} \approx \frac{10}{3} \cdot 30.12 \cdot p \cdot 4.6 \frac{\mathrm{mV}}{\mathrm{mBar}} \cdot \frac{1024}{3000} \frac{\mathrm{Schritte}}{\mathrm{mV}} = 157.64 \frac{\mathrm{Schritte}}{\mathrm{mBar}}\)
Machen wir nun eine kleine Testmessung bei der wird den ADC Wert auf dem Boden auf 0 setzen und heben nun den Mikrokopter bis zur Decke und wieder herunter so erhalten wir mit Umrechnung folgendes Diagramm:
Die barometrische Höhenformel gibt eine Beziehnung zwischen Druck und Höhe an:
\(p(h) = 1013.25 \cdot \left( 1 - \frac{0.0065 \cdot h}{288.15\, \mathrm{m}} \right)^{5.255} \mathrm{mBar}\)
Bestimmt man die Inverse so läßt sie aus Druck die Höhe bestimmen:
\(h(p) = \frac{288.15}{0.0065} \cdot \left( 1 - \left( \frac{p}{1013.25\, \mathrm{mBar}} \right)^{\frac{1}{5.255}} \right) \mathrm{m}\)
Gehen wir jetzt idealerweise von aus, das unser Kopter am Anfang bei 0 m Höhe stand so erhalten wir als Zimmerhöhe:
\(h(p(0\,\mathrm{m})-0.33\, \mathrm{mBar}) = 2.75 \mathrm{m}\)
Das ist zwar etwas zuviel, aber wir befinden uns ja auch nicht direkt auf Meereshöhe. Trotzdem ist es erstaunlich, dass der Luftdrucksensor Druckänderungen in dieser Größenordnung messen kann.
Hallo Herr Müller,
Ich beschäftige mich mit dem Thema Mikrokopter seit ca 15 Jahren.
Habe diverse Kopter gebaut.
Zum Thema Luftdrucksensor. Ich verwende unter anderem selbst gebaute Platinen entsprechend MK Flight Control Version 1.3 mit dem MPX 4115A und TS914
Das funktioniert prima.
Wichtig ist die Vorspannung an Pin 13 des Operationsverstärkers TS914
Bei mir stelle ich die per Potentiomenter auf 4.0 Volt ein.
Ich erreiche eine Genauigkeit von weniger als 30 cm.
Wenn Sie sich das Signal auf dem Oszilloskop ansehen, werkennen Sie wie wichtig das Filter am Ausgang des TS914 ist.
Besonders die Software interessiert mich. Die schreibe ich selber.
Dabei hat mir als Vorlage eine Version von "killagreg" sehr geholfen.
Wissen Sie wie ich mit ihm in Kontakt treten könnte?
Es gibt da einen kleinen aber sehr unagenehmen Bug in seiner SW-Version auf den ich jetzt erst nach Jahren gekommen bin. Vielen Dank.
Viele Grüße
Bernhard Stralka
Offenbach
sonnenwald.stralka@t-online.de
Hallo Herr Straka,
Ich selbst haben meinen Mikrokopter schon vor Jahren verkauft und seitdem leider auch keinen Kontakt mehr zur Community. 🙁 Da das Forum unter o.g. Link nicht mehr erreichbar scheint, habe ich leider auch keine weiteren Infos.
Mit besten Grüßen
Tobias Müller