Frage:
Arduino Due- und BNO055-Adresse im i2c-Modus
BunkSB
2015-07-31 18:34:00 UTC
view on stackexchange narkive permalink

Ich habe ein Projekt, in dem ich mehrere IMUs benötigen muss, das BNO055-Shuttle-Board (ich habe mein Projekt hier erklärt). Ich schaffe es, die Euler-Winkel von einem BNO055-Sensor zu erhalten, der die Adresse hat 0x29, weil ich I2C_MODE_ADR_SEL mit einer HIGH-Ebene verknüpft habe.

Ich hätte gerne einen anderen Sensor mit der Adresse 0x28. Wie im Datenblatt angegeben, muss ich den I2C_MODE_ADR_SEL mit einem LOW-Level (mit dem GND) verknüpfen. Der i2c-Scanner vom Arduino Playground erkennt kein i2c-Gerät.

Ich weiß nicht, wie ich meinen Sensor wechseln soll Adresse, kann mir jemand bei diesem Problem helfen?

Drei antworten:
alvaroferran
2016-02-27 15:49:36 UTC
view on stackexchange narkive permalink

Ich habe MotioSuit gebaut, einen Mocap-Anzug, der auf dem BNO055 basiert und derzeit 9 Sensoren hat, aber bis zu 18 haben kann.

https://hackaday.io/project/9266- motiosuit

Die Sensorplatine und die Bibliothek sind Open Source und im Link dokumentiert. Ich hoffe, es hilft!

Sie können erwähnen, dass Multiplexing mithilfe des TI-Chips http://www.ti.com/product/PCA9548A und des Codes https://github.com/bqlabs/I2C-multiplexer verwendet wird.
Wow sorry, ich habe es gerade gesehen. In der Tat wird alles im verlinkten Text erklärt. Nur zur Klarstellung, das ist eine Abzweigung von https://github.com/alvaroferran/I2C-multiplexer, die ich tatsächlich für genau dieses Projekt geschrieben habe :)
Hoppla. Ich habe vermisst, dass Sie der Autor des Schnittstellencodes waren. Ich suchte nach BN055-Code, wurde vom Hackaday-Projekt abgelenkt und übersprang Google, um den BN055-Code zu finden. Danke für die Links.
Keine Sorge, ich bin froh, dass es nützlich war :)
James Waldby - jwpat7
2015-07-31 20:25:34 UTC
view on stackexchange narkive permalink

Gemäß Tabelle 4-7 auf Seite 90 des BNO055-Datenblattes auf adafruit.com unterstützt der BNO055 drei I2C-Adressen: 0x28 oder 0x29 im Slave-Modus (ausgewählt von COM3 als niedrig oder hoch, jeweils) oder 0x40 in der HID-I2C-Konfiguration.

Gemäß dem Diagramm auf Seite 2 in Datei BNO055_Shuttleboard_Flyer.pdf (Boschs Beschreibung des BNO055-Shuttle-Boards), COM3 on Pin 17 des BNO055 (oder PSERCOM3) ist über den 0Ω-Jumper R106 mit dem mittleren Pin von J102 verbunden.

Wenn Sie Daten von fünf verschiedenen BNO055 abrufen möchten, müssen Sie möglicherweise einen Multiplexer verwenden (oder mehrere E / A), um COM3 auf einer BNO055-Karte auf einen anderen Pegel als auf den anderen vier einzustellen und eine der fünf Karten für den Zugriff auszuwählen. Beispielsweise könnten Sie einen 7438 verwenden (z. B. einen MM74HC138 oder DM74LS138). Wenn Sie die Adresseingabe des 7438 auf j setzen, wird die Zeile Yⱼ (von Y₀ bis Y₇) niedrig, während das andere Yᵢ hoch bleibt. Das BNO055 mit an Yⱼ angeschlossenem COM3 wäre dann das einzige BNO055, das auf die I2C-Adresse 0x28 reagiert.

Zum Testen können Sie mehrere BNO055 einrichten und mehrere separate E / A-Leitungen verwenden, um mehrere COM3-Eingänge zu steuern. Die Verwendung separater E / A-Leitungen erfordert fünf E / A-Leitungen für fünf COM3s gegenüber drei E / A-Leitungen für einen 7438-Multiplexer. Das Speichern von zwei Leitungen ist möglicherweise nicht den zusätzlichen Aufwand wert, einen Multiplexer zu erwerben und zu verwenden.

Ein anderer Ansatz besteht darin, zwei weitere Arduino-Einheiten (z. B. Pro Mini oder Micro) zu verwenden, um separate I2C-Busse für zusätzliche BNO055 zu unterstützen. Diese Hilfs-Arduinos könnten eine gewisse Datenreduktion durchführen, bevor sie Daten (über serielle oder I2C) an das Haupt-Arduino senden.

Beachten Sie, dass mir nicht klar ist, dass die Verwendung von mehr als einem oder zwei BNO055 sinnvoll ist. Wenn sich die Zusammenstellung von BNO055 mehr oder weniger als Einheit durch den Raum bewegt, sich jedoch Einstellungen, Rollraten usw. zwischen BNO055 unterscheiden, sind etwa 3/4 der Daten von verschiedenen BNO055 gleich. Möglicherweise könnten stattdessen weniger allgemeine Sensoren (z. B. ohne Magnetometer) mit unterschiedlichen I2C-Adressen verwendet werden.

Das Projekt zielt darauf ab, die Bewegungen der oberen Extremität zu überwachen. Im Moment möchte ich nur einen Arm überwachen. Ich benötige nur 3 Sensoren (einen am Arm, einen am Unterarm und einen an der Brust), daher brauche ich keinen Multiplexer. Mein Problem ist, dass ich den Sensor nicht zum Laufen bringen kann, wenn ich einen niedrigen Pegel an den Pin lege, der die Adresse auswählt. Ich habe versucht, es mit dem GND oder einem digitalen Pin des Arduino zu verbinden, der einen niedrigen Pegel sendet, und jedes Mal, wenn der i2c-Scanner den Sensor nicht erkennt.
Ich würde (mit einem Messgerät oder einem Oszilloskop) erneut prüfen, ob Pin 6 PS0 und Pin 5 PS1 niedrig sind und Pin 17 COM3 beim Anschließen oder Trennen von Masse niedrig oder hoch wird, und ich würde auch versuchen, an der Adresse 0x28 zu lesen, selbst wenn die Der I2C-Scanner sieht diese Adresse nicht. Welches I2C-Scannerprogramm verwenden Sie?
Ich benutze diesen http://playground.arduino.cc/Main/I2cScanner
Ich habe mit einem Oszilloskop geprüft, ob PS0 und PS1 niedrig sind (jeweils 0 V) ​​und COM3 bei Anschluss an die Quelle bei 3,3 V und bei Anschluss an Masse bei 0 V liegt. Ich habe gelesen, dass ich vielleicht Pull-up-Widerstände verwenden sollte. Wäre ich in meinem Fall nützlich?
Keine Klimmzüge nötig. Siehe S. 89 von BST_BNO055_DS000_12.pdf, Tabelle 4.6, die besagt, dass COM3 über ein internes Pullup verfügt, typ. 40K. Beachten Sie, dass nach Tabelle 4.4 steht: „Es ist nicht zulässig, die Protokollauswahlstifte schwebend zu halten“, dh die PS-Stifte sollten hoch oder niedrig gebunden sein. Haben Sie versucht, die Adresse 0x28 mit nur einem angeschlossenen BNO055 zu verwenden?
Ja, ich habe es mit nur einem BNO055 versucht. Ich habe die PS-Pins jedes Mal mit dem GND verbunden. Es gelang mir, zwei BNO055 gleichzeitig zu verwenden, einen am zweiten I2C-Eingang (SDA1, SCL1) und 1,5 kOhm Pull-up-Widerstände (an der Adresse 0x29) und den anderen am regulären I2C (PIN 20 und 21). . Auch hier funktioniert es nur mit der Adresse 0x29.
Craig.Feied
2017-05-15 00:31:34 UTC
view on stackexchange narkive permalink

Obwohl dies eine ältere Frage ist, glaube ich, dass es immer noch Leute gibt, die nach einer Lösung für dieses Problem suchen. Die Dokumentation für das BNO055 Shuttle Board ist ziemlich dünn. Ich habe ein wenig des folgenden Schaltplans hinzugefügt.

BNO055 Com3 (Pin 17) ist auf Pin 22 der Shuttle-Platine (12C_MODE_ADR_SEL) dargestellt. Dieser Pin muss über einen Widerstand entweder mit dem Shuttleboard-Pin 4 (SD0, GND) oder mit dem Shuttleboard-Pin 5 (SD1) verbunden werden. Das Datenblatt erwähnt den 2-Positionen-Jumper J102, der dies erreichen sollte. Es gibt jedoch Versionen des Shuttle-Boards, die diesen Jumper oder einen Ort zur Montage nicht enthalten. Auf dem Foto des OP-Setups (unten eingefügt, falls seine Verbindung unterbrochen wird) wird der Jumper-Header über den drei Löchern neben Pin 3 (GND) installiert, und der mittlere Pin wird zum linken oder rechten Pin gesprungen Stellen Sie die Adresse auf 0x028 oder 0x029 ein.

Wenn Sie keinen Jumper haben, verbinden Sie die Pins einfach direkt: Wenn ich Pin 17 über einen 10K-Widerstand mit Pin 4 verbinde, funktioniert dies mit dem Arduino-Beispielscanner siehe I2C-Adresse 0x28.

Ich persönlich mag das Adafruit BNO055-Board viel besser als das Shuttle - es hat einen Spannungsregler und viele andere Ergänzungen und verwendet 0x028 als Standard-I2C-Adresse

Für diejenigen, die in der Arduino-Code-Umgebung arbeiten und mehr als zwei BNO055-Geräte integrieren möchten und keinen Multiplexer verwenden möchten, empfehle ich möglicherweise die Teensy-Familie der 32-Bit-ARM-Cortex-CPU Bretter. Diese sind vollständig mit Arduino Code-kompatibel, bieten jedoch mehr als einen I2C-Bus. Tatsächlich bietet der Teensy 3.6 (180 MHz !! mit 1M Flash, 256K RAM, 4K EEPROM, einer FPU) vier * separate I2C-Drahtschnittstellen an verschiedenen Ports, sodass 8 der BNO055-Geräte verwendet werden können.

Ich persönlich war sehr zufrieden mit der Leistung und Funktionalität der Teensy-Boards, wenn sie mit mehreren BNO055-Geräten verwendet werden.

BNO055 Shuttle Board Pinout The OP's Shuttle Board



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...