Moin, mal keine Frage sondern ein Ausbruch von Begeisterung. Ich hab eben ein MS5611 Barometer zum Laufen bekommen und bin völlig baff. Zuerst hatte ich eine kleine Höhenmessung in meinem Nexus 4 gebastelt. Da weiß ich nur, daß ein Bosch Sensor drin ist. Ob nun BMP085 oder BMP180 weiß ich nicht. Mit 2000 Werten gemittelt war das schon nicht übel, rauschte aber locker um 5-10Pa oder mehr. Wäre ich aber mit hingekommen. Direkt mit einem BMP085 war ein Desaster. Der erste war im Arsch, der zweite auch nicht so dolle. Unbrauchbar für die Höhenregelung für einen Multicopter. Mit dem Code anbei lese ich den MS5611 mit 1Hz aus und das rauscht max um 2-3 Pa! Einzelne Werte! Ich kann den mit 50Hz auslesen (bei höchstem Oversampling) oder noch schneller, wenn man die Temperatur nur selten ausliest. Wenn man das mittelt, steht die Höhe wie ne Eins! Nur, daß das gerade mit geschätzt 1m pro Minute driftet weil scheinbar der Luftdruck gerade fällt aber dafür kann der Sensor nix. Ich kann mich an den Daten, die ich per BT aufs Handy bekomme kaum satt sehen. Der Code anbei darf gerne für private Projekte genutzt werden... Das ist auf Rechenzeit optimiert, etwas Rumgeturne mit den Variablentypen. In den letzten Schritten der Druckberechnung geht theoretisch etwas Genauigkeit verloren, da die Mantisse von Double nur 52bit ist. Praktisch passiert da aber nichts. Und ja, das geht noch etwas besser in Bascom. Reicht mir aber so erstmal. Mal sehen, ob ich es schaffe, die unsachlichen Antworten bzgl. Bascom zu ignorieren... Gruß, Norbert
Dank deiner Begeisterung habe ich mir den auch bestellt und warte nun sehnsüchtig, dass er bei mir eintrifft. Mal schauen ob ich deine Freude dann teilen kann :)
Hi, würde mich freuen zu hören, wie Du damit klarkommst. Wenn Du eigenen Code schreibst: Mach das Schritt für Schritt und teste es mit den Zahlenbeispielen aus dem Datenblatt. Du suchst Dich nachher sonst zu Tode. Mit C mag das ev. etwas eleganter als mit Bascom gehen aber bleibt doch ein Monstrum. Gruß, Norbert
Der MS5611 ist wohl das Beste was man zur Zeit in diesem Preissegment bekommen kann. Ich habe ihn schon ca. 3 Jahre erfolgreich in verschiedenen Multisensoren für Höhe und Vario im Einsatz. Damals musste man aber noch knapp 50€ für ihn berappen. Gruß Ingo
Bisher habe ich den BMP180 und den LPS331 probiert, aber die rauschen so stark, dass ich beim Filtern ne zu große Verzögerung reinbekomme. Bevor ich nun einen riesigen Filter entwerfe, versuch ich mal das Problem mit dem MS5611 an der Wurzel zu packen, dann wird auch der Filter nich so aufwendig :)
Erfahrung wie sich das beim MPL3115A2 darstellt? Der ist bei mir grad in Arbeit. Wirkte eigentlich recht stabil, aber eine produktive Datenauswertung folgt noch. Laut Datasheet 1,5Pa Noise bei Einstellung auf 128x Oversampling (19Pa ohne). Freudlicherweise kann man sich Kompensations- und Kalibrier-Rechnung sparen, das Ergebnis ist bereits fertig, je nach Wunsch in Druck oder Höhe.
:
Bearbeitet durch User
seb schrieb: > Bisher habe ich den BMP180 und den LPS331 probiert, aber die rauschen so > stark, dass ich beim Filtern ne zu große Verzögerung reinbekomme. Dann kannst du vielleicht etwas mehr zu Vergleich der Sensoren sagen. Für den BMP180 lese ich für 4 Pa RMS-Rauschen aus dem Datenblatt eine Wandlungszeiten von BMP180 13,5 ms (high resolution Mode) Aber wie ist das beim LPS331 zu verstehen? Für den gleichen Rauschlevel komme ich auf LPS331 (Res_Conf 0x77 lt. Tab.17, internal average 128 lt. Tab.15) Mit welcher Rate werden diese 128 samples für die Mittelung gemessen. Bei der max. ODR von 25Hz käme man gerade auf 25 Hz/128 entsprechend 5 s für unkorrelierte Samples. Das kann doch fast nicht sein :-(
Für den BMP180 stimmt das so, wie du geschrieben hast. Beim LPS331 hab ich auch höchste Genauigkeit eingestellt (intern 128 Samples) und dann einfach auf den Interrupt gewartet. Ich kann mich an die Zeit nicht mehr erinnern, die für die Wandlung benötigt wurde, da das Rauschen den Sensor für meine Zwecke aussortiert hat. Es waren auf alle Fälle keine 5 Sekunden :) Ich werde mir den Sensor nochmal hernehmen, weil ich jetzt ein gescheites Breakoutboard habe. Die ersten Messungen habe ich mit fliegender Verdrahtung getätigt, evtl sind da noch Störungen reingekommen.
Übrigens, wie kommst du bei 25Hz (40ms) / 128 Samples auf 5 s? Bei mir sind das 312 µs :)
Anbei mal ein plot mit Höhenmessung aus nem Ultraschall (HCSR04) und dem MS5611 Sensor. Wenn man die Barometerdaten noch etwas filtert, den Offset entfernt und (im Nahbereich) mit dem Ultraschall (dessen Werte auch noch Winkelabhängig behandelt wurden..) fusioniert, kann man schon nen Kopter recht easy autonom starten und landen lassen ;)
Hi, seb schrieb: > Ultraschall (dessen Werte > auch noch Winkelabhängig behandelt wurden..) Das brauchst Du nicht bzw. ist falsch. Steht der Copter etwas schief und ist der Boden innnerhalb der "Reichweitenkeule" des US, ist das Signal immer der kürzeste und somit senkrechte Weg zum Boden (ebener Boden vorrausgesetzt). Ich würde so vorgehen: Die Reichweite des US ist ja bekannt, sagen wir mal 6m bei idealen Bedingungen. Dann würde ich unter z.B. 4m: 1. den Drucksensor auf Höhe kalibrieren (der driftet Dir wetterbedingt teilweise um Meter pro 5 Min. weg) und 2. nur den US benutzen denn der ist um Dimensionen genauer und immer absolut. Also nix mit Fusionieren, damit versaust Du nur das US-Signal sondern höchstens kombinieren. Ich hab das Ganze übrigens aufgegeben. Alle möglichen Teilkomponenten (inkl GPS und Kompass)funktionierten bei mir zwar auch in Software schon aber das alles zu einem funktionierendem System zusammenzuhäkeln ist nochmal ne andere Nummer und dazu fehlt mir einfach die Zeit. Spätestens als ich gesehen habe, wie das bei DJI funktioniert - wenn ich da wirklich Bock drauf hab nehme ich irgendwann "einfach" das Geld in die Hand. Gruß, Norbert
Was genau meinst du mit "kompliziert"? Eine einfache Regelung/Steuerung für nen Kopter selbst zu implementieren oder aufwendigere Algorithmen incl Datenaufbereitung, Fusion, Regler und Modell zu entwerfen und zu implementieren? Zumindest ne Steuerung mit lediglich Gyro/Acc, Empfänger auswerten, fertige Motorregler ansteuern und nem einfachen PID ist machbar. Alle zusätzlichen Features (RTOS, Kalman, Zustandsregler für Lage & Höhe, Positionsregler, Bodenstation etc.) kann man ja nach und nach basteln, wenn man Lust und Laune hat. Zumindest weiß man dann genau, was der Kopter macht und ist nicht auf andere angewiesen (Updates, Fehlerbehebung etc.). Und wenn er abschmiert kann man die Schuld nicht auf andere schieben ;) Hab jetzt übrigens mal seit 1000 Sekunden den Baro am laufen, bisher driftet nix. Man muss auch die Einsatzbereiche betrachten: Baro eher in Höhen über 5m, da sind Drifts von +-2m völlig egal.
Hi, na klar ist das alles machbar. Ich hab ein KK2.0 Board und die Signale der Kanäle "verbogen". Zum Ausrichten nach Kompass hat das funktioniert aber die Höhenregelung hat dann schon auf Anhieb erstmal beschissen funktioniert. Das geht ja auch nur am lebenden Objekt. Dazu dann "Coming Home" per GPS. GPS auslesen hat funktioniert. Ich hab nicht wirklich aufgegeben, ich hab einfach nicht soviel Zeit um das alles umzusetzen. Bevor das ewig rumsteht, wird das alles jetzt verkloppt (Hexacopter für 3s und 3x 5Ah Lipos). Interesse? Das mit der Höhe ist ausserhalb der Reichweite vom US natürlich unkritisch. Der Drift ist Wetter wenn sich der Luftdruck ändert. Von schlecht zu gut sind so einige 10hPa, also einige 1000Pa - 1Pa = 8,3cm oder so. Ich hab schon umgerechnet >5m in 10-15 Minuten gesehen. Ist der Luftdruck wetterbedingt gerade konstant, driftet auch nix. Gruß, Norbert
Hallo, evenuell kann mir jemand helfen! Ich verwende den selben Sensortyp! Mit I2CRead bekomme ich auch die Sensoradresse (bei mir &EE anstatt wie im TO &EC). Jedoch habe ich als Temperatur: 2002 Pressure: 331067 Heigh: 0 (klar, ändert sich ja nix) Jemand eine Idee?
PS: Wenn ich die Adresse am Chip auf &EC einstelle und den Code anpasse, dann klappt es! Aber ich brauche &EE, dann klappt es nicht mehr!
Moin, Alex W. schrieb: > Mit I2CRead bekomme ich auch die > Sensoradresse (bei mir &EE anstatt wie im TO &EC). Hä? Die Adresse kannst Du nicht lesen oder einstellen, die ist fest und steht im Datenblatt. &hEC ist zum lesen und &hED ist schreiben. Mit &hEE versuchst Du zu schreiben aber das Chip Select Bit = 1 deaktiviert den Chip. Alex W. schrieb: > Aber ich brauche &EE, dann klappt es nicht mehr! Kann ja auch nicht. Warum brauchst Du &hEE? Gruß, Norbert
Norbert S. schrieb: > Kann ja auch nicht. Warum brauchst Du &hEE? Ein anderer Sensor hat die selbe Adresse.
Moin, Dann leg den CS-Eingang auf Masse, dann ist das Bit immer 0 (wenn ich das DB richtig verstanden habe), egal wie Du das Bit in der Adresse sendest. Dann sollte &hEE gehen. Gruß, Norbert
Norbert S. schrieb: > Die Adresse kannst Du nicht lesen oder einstellen, die ist fest und > steht im Datenblatt. > &hEC ist zum lesen und &hED ist schreiben. Die I2C-Adresse vom MS5611 ist nicht fest. Mit dem CSB-Pin kann man zwischen zwei verschiedenen Adressen auswählen. Mit CSB=1 liegt der Chip auf I2C-Adresse 0x76, i.e. erstes Byte 0xEC (lesen) bzw. 0xED (schreiben). Mit CSB=0 liegt der Chip auf 0x77, i.e. erstes Byte 0xEE (lesen) bzw. 0xEF (schreiben). (s. Datenbaltt S.6 "I2C MODE" und 11 "I2C INTERFACE") RTFM
Norbert S. schrieb: > Dann leg den CS-Eingang auf Masse, dann ist das Bit immer 0 (wenn ich > das DB richtig verstanden habe) Hast du nicht. Chip-Select gibt es nur im SPI-Mode. Solange der Protocol Select Pin (PS) auf High liegt, ist das I2C-Interface aktiv und dann legt der invertierte Logikpegel vom CSB Signal das unterste Bit der I2C-Adresse fest (Datenblatt S. 5 "Serial Interface") CSB an Masse bedeutet: Unterstes Bit = 1
W.A. schrieb: > Die I2C-Adresse vom MS5611 ist nicht fest. Mit dem CSB-Pin kann man > zwischen zwei verschiedenen Adressen auswählen. > Mit CSB=1 liegt der Chip auf I2C-Adresse 0x76, i.e. erstes Byte 0xEC > (lesen) bzw. 0xED (schreiben). Mit CSB=0 liegt der Chip auf 0x77, i.e. > erstes Byte 0xEE (lesen) bzw. 0xEF (schreiben). (s. Datenbaltt S.6 "I2C > MODE" und 11 "I2C INTERFACE") Moin, Ahh, es dämmert, so war das. Das ist 3 Jahre her und spontan wurde mir das aus Code und Datenblatt nicht ganz klar. Danke für die Klarstellung. Gruß, Norbert
W.A. schrieb: > erstes Byte 0xEE (lesen) bzw. 0xEF Das war es! Habe vergessen das &ED auf &EF zu legen
W.A. schrieb: > Mit CSB=1 liegt der Chip auf I2C-Adresse 0x76, i.e. erstes Byte 0xEC > (lesen) bzw. 0xED (schreiben). Mit CSB=0 liegt der Chip auf 0x77, i.e. > erstes Byte 0xEE (lesen) bzw. 0xEF (schreiben). Sorry, da sind lesen und schreiben vertauscht (unterstes Bit Read=1, Write=0), also 0xED bzw. 0xEF zum Lesen und 0xEC bzw. 0xEE zum Schreiben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.