Da ich aber zwangsläufig alle mit belästige, streue ich ein paar Sachen mit ein, die ein Interessent "vom Fach" als Eulen nach Athen betrachten wird.
Hallo Kollege, der Du wie ich mit allen möglichen Sensoren rummachst. Du wirst das kennen, den größten Teil an Zeit und Nerven lässt man eigentlich nicht mit der Algorithmik, sondern mit dem Skalieren, "Beruhigen" und der Kompensation der Sensoren., jeweils sehr spezifisch, natürlich. (So war mein "schlimmster Feind" bis dato der HMC5843 3-dim. Magnetfeldsensor, seine magn. Kompensation, bis der endlich in einem neigungskompensierten Kompass verlässlich spielte.)
Hier geht's um einen Höhenmesser, basierend auf barometrischem Druck,
genullt (Initialdruck == Höhe Null) auf Grasnarbenhöhe. Verwendet wird der MEMS Drucksensor SCP1000 von VTI (s.a.), hier mit dem SPI (4-Wire-Interface @500kHz), I2C@400kHz gibt's auch.
Hier meine Hints:
Der Sensor soll mit einer Betriebsspg. von 2,4..3,3V betrieben werden, Sparkfun's Breakout, z.B., sagt witzigerweise 3,3V. Sieht man sich aber "Pressure error over supply voltage range" an (s.Anhang), sowie "Temperature error over supply voltage range" (s.Anhang), geht einem ein Seifensieder auf. Das Ding hat eine eigene Temp.kompensation, eh nicht das Gelbe vom Ei (s.u.), die basiert natürlich auf dem eingebauten und auch extern auslesbaren Temp.sensor! Ergo sollte man die Betriebsspg. bei ~2,7V wählen, und nicht 3,3V.
Ich habe eine Si-Diode hinter einen 3,3V-Stabi gehängt, mit einem 910Ohm-Metallschichtwiderstand zusätzlich belastet, kleiner Elko parallel. Heraus kommen 2,68V.
Nun kommt die Crux:
Mein Microcontroller ist ein ATmega 328p@16MHz. Dessen Betriebsspg. ist aufgrund des Gesamtspannungskonzepts deutlich über 2,7V, auch über 3,3V. Daraus werden 3,3V simpel stepdown gemacht für einige andere Sensoren, der SCP1000 hat einen eigenen 3,3V-Stabi mit Reduzierer (s.o.), und die Gyros ADXRS610 brauchen ja stabil 5,0V, also R/C-Spg. verdoppelt und stabilisiert.
Andererseits macht es sich bei Entwicklg./Debugging natürlich auch gut, alternativ die "R/C"-Spg. aus dem FTDI beziehen zu können, also aus dem USB des PCs, das sind dann hier 4,84V.
Die Crux ist, dass einem das SPI zw. MC und SCP1000 die Betriebsspg. des MC in den Drucksensor zieht, so waren's eben 3,9xV statt der angestrebten 2,7. Das ist ganz außerhalb der Range, sogar außerhalb der Specs, die Temp.kompensation des SCP1000 kann man so knicken.
Es reicht nun aus, die Signale MOSI und CSB (Slave Select) via einen Pegelwandler zu entkoppeln.
(Pegelwandler ist der hier.)
Uff, das wäre geschafft.
Die nächste Frage ist: High Speed Mode @~9Hz, 15 Bits Auflösung oder High Resolution Mode @~1,8Hz, 17 Bits Auflösung? Um sicher zu gehen seitens der Specs bzgl. Minimum der Output-Update-Rate, lese ich mit 1,587 oder 7,874Hz. Denkt man an schnelle Modelle wie in F5B, ist es eigentlich eine rhetorische Frage, - High Speed Mode wäre angesagt. Die Frage ist nur, was die unterschiedliche Auflösung (17 vs. 15 Bits) an Messwertstreuung ausmacht. Immerhin entspricht 1 Pa Druckunterschied auf Meeresspiegelhöhe in etwa 8 Zentimetern Säule.
Vorausgesetzt, die Temp.kompensation stimmt und der Umgebungsdruck ist wirklich konstant, streut es mit 17 Bits Auflösung um etwa +- 17cm, maximale Ausreißer bei 43cm, mit 15 Bits Auflösung verdoppelt sich das in etwa.
Ich habe mich letztendlich für die High-Speed-Variante entschieden, dass muss aber jeder für sich betrachten, in einem X-Copter wären wohl eher 17 Bits angesagt.
Nun noch die Temperaturkompensation:
Der Hersteller VTI sagt: Ist kompensiert. So so..., aber nicht hinreichend gut für unsere Zwecke. Für Millibar-Messungen mag das reichen (1 Millibar == 100 Pa (1hPa), entsprechend 8m Höhensäule.
Die ganze Sache ist auch kritisch bzgl. des Messens der Umgebungstemperatur, die geht ja in die Höhenberechnung aus der Druckänderung ein:
Höhendiff(m) = (Temp(K) * Gaskonstante-Luft / Gravitationskonstante) * log(Initialdruck/Momentandruck)
Mein Drucksensor wird durch den MC darunter aufgeheizt, bei 23,9C Umgebungstemp. registriert der Temp.sensor im SCP1000 eine Erhöhung um 5C innerhalb 20 Minuten nach Kaltstart. Dabei zeigt sich ein trotzdem noch verbleibender Temp.koeffizient von +23 Pa/1C, was zur Kompensation mittels der Differenz Initial- zu Momentantemperatur (Temp.sensor im SCP) herauszurechnen ist.
Für das Messen der Umgebungstemp. in der Höhenformel oben ist dieser Temp.sensor also ungeeignet. Ich nehme stattdessen den Sensor in einem der Gyros ADXRS610, zwar im selben Gerätegehäuse, aber am anderen Ende, weg vom "Wattfraß" Prozessor. In denselben 20 Min Warm-up werden hier nur +0,4 Grad Celsius Anstieg registriert. Trotzdem bleibt die Temperaturmessung etwas kritisch, gerade bei direkter Sonneneinstrahlung.
So, lieber Kollege. Nun bleibt mir nur zu hoffen, dass Dir mein Gelaber etwas Zeit und Nerven ersparen kann, - und übrig, Dir viel Erfolg zu wünschen.

Kommentar