Hallo zusammen Ich beschäftige mich gerade mit einem Projekt, bei dem ich Beschleunigungsdaten x,y,z aus einem BMA180 auslese und über Bluetooth auf den PC übertrage. Ich habe die Breakout Boards von Sparkfun im Einsatz (SEN-09723). Ansteuerung habe ich über SPI realisiert. Es funktioniert auch alles soweit, nur ist mir folgendes aufgefallen: x,y,z Werte stimmen nicht wenn ich auf den Erdmittelpunkt zeige. Normalerweise müssten dann ca. 9,81m/s² angezeigt werden. Ich habe jetz 4 verschiedene Boards verwendet, aber es gibt immer eine Abweichung. Die maximale Abweichung, die ich beobachtet habe beträgt immerhin fast 1m/s² (Anzeigewert -10,8m/s²). In der "Gegenrichtung" bekomme ich ca. 9m/s² d.h. die Daten sind mit einem Offset von ca. 0,9m/s² behaftet. Falls ich das richtig im Datenblatt gelesen habe, wird der Sensor werkskalibriert ausgeliefert, allerdings gilt diese Kalibrierung nur für mode_config=00 (ich benutze diesen Modus). Weiters steht, dass es durch Veränderungen des Offsets kommen kann, wenn der Sensor auf einen Print gelötet wird. Kann es sein, dass durch diesen Prozess ein Offset von 1m/s² zustande kommt? Hat jemand einen Vorschlag, was man hier machen könnte? Kommt man um eine Kalibrierung herum? Gibt es vielleicht Sensoren, die nicht kalibriert werden müssen oder einen geringeren Offset haben? Übrigens, ich habe auch die Temperaturen von 4 verschiedenen Boards ausgelesen -> Temperatur reichte von 23°C bis 27°C. Zum Auslesen habe ich ein und dasselbe "Testboard" benutzt, habe nur die Breakout Boards umgesteckt, also Hard- und Software sind immer dieselben. Freue mich auf ein Feedback von euch Gruß Christian
Also der Offset ist definitiv zu groß. Hast Du da vielleicht Ausschussware angedreht bekommen? Welchen Messbereich benutzt Du und filterst Du die Werte die vom Sensor kommen noch? In den kleinen Messbereichen wird nämlich das Rauschen relativ heftig, da sollte man dann noch ein Filter drauf packen. Sind auf dem Bord die Kondensatoren direkt am Sensor mit drauf?
Hallo Guido Danke für deinen Beitrag. Das sind meine Einstellungen: Messbereich: +/-2g Modus: Low noise mode (Standard Modus) Bandwidth: 10Hz Sample skipping ist aktiviert -> Interrupt wird 20mal pro Sekunde generiert Die Breakoutboars habe ich von Waterott bestellt -> http://www.watterott.com/de/Breakout-Board-BMA180 Die Kondensatoren sind ca. 2mm vom jeweiligen Pin entfernt Hier ist der Code für 1mal auslesen + Umrechnung: while (!PIF4); //auf Interrupt warten PIF4 = 0; CS_BMA180 = 0; SPIWriteByte(0x82); //Write control byte to BMA180 Read, start address 0x02 -> x-Achse LSB x_LSB = SPIReadByte(); x_MSB = SPIReadByte(); y_LSB = SPIReadByte(); y_MSB = SPIReadByte(); z_LSB = SPIReadByte(); z_MSB = SPIReadByte(); temp = SPIReadByte(); CS_BMA180 = 1; if (x_MSB >> 7) x = - (0x2000 - ((x_MSB & 0x7F) << 6) | (x_LSB >> 2)); else x = ((x_MSB & 0x7F) << 6) | (x_LSB >> 2); if (y_MSB >> 7) y = - (0x2000 - ((y_MSB & 0x7F) << 6) | (y_LSB >> 2)); else y = ((y_MSB & 0x7F) << 6) | (y_LSB >> 2); if (z_MSB >> 7) z = - (0x2000 - ((z_MSB & 0x7F) << 6) | (z_LSB >> 2)); else z = ((z_MSB & 0x7F) << 6) | (z_LSB >> 2); Ich habe in der Zwischenzeit 4 Boards getestet: eines zeigt auf allen 3 Achsen große Abweichungen (~60mg) eines zeigt nur auf einer Achse eine große Abweichung (~40mg) eines stimmt relativ genau (Abweichung bei einer Achse ~20mg) eines würde ich als genau bezeichnen Hier noch ein Auszug aus den Registern (nach der Initialisierung), vielleicht ist das auch noch hilfreich Adresse Inhalt 0x00 0x03 0b00000011 0x01 0x14 0b00010100 0x02 0x1D 0b00011101 0x03 0x0E 0b00001110 0x04 0x2D 0b00101101 0x05 0xFD 0b11111101 0x06 0xF1 0b11110001 0x07 0x3F 0b00111111 0x08 0x04 0b00000100 0x09 0x00 0b00000000 0x0A 0x00 0b00000000 0x0B 0x00 0b00000000 0x0C 0x00 0b00000000 0x0D 0x10 0b00010000 0x0E 0x00 0b00000000 0x0F 0x00 0b00000000 0x10 0x00 0b00000000 0x20 0x08 0b00001000 0x21 0x04 0b00000100 0x22 0x15 0b00010101 0x23 0x00 0b00000000 0x24 0xEE 0b11101110 0x25 0xEE 0b11101110 0x26 0xA0 0b10100000 0x27 0x65 0b01100101 0x28 0x00 0b00000000 0x29 0x17 0b00010111 0x2A 0x50 0b01010000 0x2B 0x00 0b00000000 0x2C 0x4D 0b01001101 0x2D 0x54 0b01010100 0x2E 0x75 0b01110101 0x2F 0xA6 0b10100110 0x30 0x88 0b10001000 0x31 0x84 0b10000100 0x32 0xA4 0b10100100 0x33 0xAC 0b10101100 0x34 0xAA 0b10101010 0x35 0x25 0b00100101 0x36 0x56 0b01010110 0x37 0x6A 0b01101010 0x38 0x7C 0b01111100 0x39 0x6A 0b01101010 0x3A 0x68 0b01101000 Gruß Christian
Bei 60mg Abweichung kann das auch gut eine mechanische Abweichung durch die Montage auf den Boards sein, das Lot stellt ja nicht absolut sicher, dass die Sensoren immer ganz genau grade sitzen. Dazu kommt dann noch der Offsetfehler des Sensors. Ich würde es mal mit einer Nullpunktkalibrierung versuchen.
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.