Mehrere Sensoren über I²C

OP #7513490
Lesenswert?

Hallo zusammen,

ich habe eine Frage zur I²C Schnittstelle, da ich vorhabe mehrere Sensordaten die mithilfe eines Arduinos ausgelesen werden und über meinen Flightcontroller (Pixhawk) an die Groundcontrolstation gesendet werden. Die freie Schnittstelle am Flightcontroller ist die I²C Schnittstelle, daher stelle ich mir die Frage ob es sinnvoll ist meine Sensoren an ein Breakoutboard (https://cdn-learn.adafruit.com/downloads/pdf/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout.pdf) anzuschließen, welches mit dem Arduino verbunden ist. Über den Arduino gehen die verarbeiteten Daten dann an den Flightcontroller und an die Groundcontrollstation.

Ist da der richtige Weg? Ich bin euch für hilfreiche Antworten sehr dankbar!

OP #7513511
Lesenswert?

Harald K. schrieb:

Und der "Flight Controller"? Welche Rolle spielt dessen I2C-Schnittstelle?

Überhaupt, was exakt für ein Ding ist das? "Pixhawk" ist als Beschreibung etwas arg zu ungenau:

https://pixhawk.org/

Der Pixhawk (6c) befindet sich im Flugzeug und sendet die Daten via Telemetrie an die Groundcontrollstation.

Welche Probleme stellen sich dir? Welche erwartest du?

Die Auswertung der verschiedenen Daten

#7513512
Lesenswert?

Einen Multiplexer benötigst Du typischerweise, wenn mehrere Sensoren mit gleicher Adresse an den Bus angeschlossen werden sollen und sich diese Adresse:

  • nicht individuell ändern lässt
  • die Anzahl einstellbarer IDs nicht ausreicht
  • die Umstellung zu aufwändig ist (vorprogrammiert o.ä.)
OP #7513515
Lesenswert?

Harald A. schrieb:

Einen Multiplexer benötigst Du typischerweise, wenn mehrere Sensoren mit gleicher Adresse an den Bus angeschlossen werden sollen und sich diese Adresse:

  • nicht individuell ändern lässt
  • die Anzahl einstellbarer IDs nicht ausreicht
  • die Umstellung zu aufwändig ist (vorprogrammiert o.ä.)

Okay also verstehe ich es richtig, das es für meinen Anwendungsfall nicht unbedingt notwendig ist?

Breakoutboard? Flightcontroller? Willst du ein Breakoutboard in einem Flugmodell einsetzen?

Ja das war soweit der Plan

#7513516
Lesenswert?

Thomas E. schrieb:

Der Pixhawk (6c) befindet sich im Flugzeug und sendet die Daten via Telemetrie an die Groundcontrollstation.

Das ist ja schön für ihn.

https://docs.holybro.com/autopilot/pixhawk-6c/pixhawk-6c-ports

Wenn man sich dieses hübsche Bild ansieht, erkennt man, daß die I2C-Schnittstelle des µCs im Controller (ST32H743) genutzt wird:

https://docs.holybro.com/autopilot/pixhawk-6c/system-diagram-and-pinout

Und das ist mit sehr, sehr hoher Wahrscheinlichkein ein I2C-Master. Da kannst Du keinen Arduino dranhängen, der da herumhampelt, sondern die Firmware dieses ST32 muss sich selbst drum kümmern, Deine I2C-Sensoren anzusteuern.

OP #7513518
Lesenswert?

Und das ist mit sehr, sehr hoher Wahrscheinlichkein ein I2C-Master. Da kannst Du keinen Arduino dranhängen, der da herumhampelt, sondern die Firmware dieses ST32 muss sich selbst drum kümmern, Deine I2C-Sensoren anzusteuern.

Macht es denn einen Unterschied ob der Pixhawk die Daten vom Sensor oder vom Arduino bekommt?

#7513535
Lesenswert?

Thomas E. schrieb:

Frank K. schrieb:

Und wie sind Arduino und Pixhawk miteinander verbunden?

fchk

Arduino und Pixhawk benutzen die selbe Masse(GND).

  • SDA-Leitung des Arduino mit der SDA-Leitung des Pixhawk.
  • SCL-Leitung des Arduino mit der SCL-Leitung des Pixhawk

Das gibt Bruch. Garantiert. Der Pixhawk kann keinen Multimaster-Betrieb. Außerdem muss die nur das Interface stimmen, sondern beide Seiten müssen auch das gleiche High-Level Protokoll sprechen. Ist wie bei USB: Du kannst von der Hardware her so ziemlich alles anschließen, musst aber spezielle Treiber installieren, damit der PC das USB-Gerät kennt. Und der Pixhawk wird Deinen Arduino nicht kennen. Definitiv nicht.

Was geht:

  • Der Pixhawk hat zwei CAN-Busse. Die sind üblicherweise frei.
  • Statt eines Arduinos nimmst Du einen Teensy 4.0 oder 4.1. Die haben einen CAN-Controller drin, und Du brauchst einen externen CAN-Transceiver (z.B. MCP2562).
  • Pixhawk und Teensy können über die CAN-Hardware mit dem UAVCAN Protokoll sprechen und Daten austauschen.

https://dev.px4.io/v1.10_noredirect/en/uavcan/

Das ist so umsetzbar und wird auch so gemacht.

fchk

OP #7513541
Lesenswert?

Frank K. schrieb:

Was geht:

  • Der Pixhawk hat zwei CAN-Busse. Die sind üblicherweise frei.
  • Statt eines Arduinos nimmst Du einen Teensy 4.0 oder 4.1. Die haben einen CAN-Controller drin, und Du brauchst einen externen CAN-Transceiver (z.B. MCP2562).
  • Pixhawk und Teensy können über die CAN-Hardware mit dem UAVCAN Protokoll sprechen und Daten austauschen.

https://dev.px4.io/v1.10_noredirect/en/uavcan/

Das ist so umsetzbar und wird auch so gemacht.

fchk

Vielen lieben Dank das ist sehr hilfreich! Arduino und Pixhawk können ja über das Mavlink Protokoll kommunizieren, gibt es da nicht eine Möglichkeit?

#7513548
Lesenswert?

Thomas E. schrieb:

Vielen lieben Dank das ist sehr hilfreich! Arduino und Pixhawk können ja über das Mavlink Protokoll kommunizieren, gibt es da nicht eine Möglichkeit?

Ja, aber Mavlink geht nur über UART - über I2C ist es meines Wissens nicht spezifiziert. Und CAN ist im Regelfall schneller.

Wenn Du einen UART frei hast und Dein Arduino mit 3.3V arbeitet (Pixhawk ist ein 3.3V System), dann ist das auch ein Weg.

fchk

PS: Teensy verwendet auch die Arduino-IDE.

#7513857
Lesenswert?

Thomas E. schrieb:

Arduino und Pixhawk können ja über das Mavlink Protokoll kommunizieren

das Widerspricht sich mit (Wikipedia) : "It is used mostly for communication between a Ground Control Station (GCS) and Unmanned vehicles..."

Ich glaube, du weißt noch gar nicht welches Gerät mit welchem kommunizieren soll.

  • Was haben die Sensoren für eine Schnittstelle?
  • Wer (Arduino / Pixhawk) kann die Sensordaten verarbeiten und hat die Schnittstelle dafür?
  • Welche Komponente muss mit wem über welche Schnittstelle kommunizieren?
  • Welche Komponente sendet die Daten zum Boden?
  • Welches Gerät empfängt die Daten am Boden?

Zeichne mal einen Signallaufplan wo alle Komponenten zu erkennen sind. Schau dir an welche Komponente welche Schnittstelle hat und für allem wofür kann man sie nutzen.

Moderator (Firma: Titel) Persönliche Seite #7513869
Lesenswert?

Thomas E. schrieb:

Lothar M. schrieb:

Thomas E. schrieb:

Die freie Schnittstelle am Flightcontroller ist die I²C Schnittstelle

Lothar M. schrieb: Wer ist bei diesem Datentransfer der Master?

Der Arduino ist der Master und die Sensoren die Slaves, so hatte ich es mir zumindest überlegt

Meine Frage war die: wenn beim Flightcontroller "die freie Schnittstelle" der I2C ist, und du diesen I2C mit dem Arduino verbindest, wer ist bei dieser Verbindung dann der Master?

Ich wollte damit auslösen, dass du dieses planlose Herumirren beendest, dir einen "Plan zeichnest", damit du einen Plan hat. Also das, was

Obelix X. schrieb:

Zeichne mal einen Signallaufplan wo alle Komponenten zu erkennen sind.

Ausnahmsweise darf man diesen Übersichtsplan dann auch mal "Schema" nennen.

Thomas E. schrieb:

Arduino und Pixhawk können ja über das Mavlink Protokoll kommunizieren,

Es sind Daten, die mit irgendeinem Protokoll auf einer Schnittstelle übertragen werden. Die ganz konkrete Frage lautet also: welche Schnittstelle willst/kannst du zwischen Arduino und Pixhawk zur Übertragung der Daten nach dem Mavlink-Protokoll verwenden?

Mach dich schlau, was eine Schnittstelle und was ein Protokoll ist. Derzeit sind für dich diese beiden Begriffe gleich. Das ist falsch. Ich kann z.B. Daten per Mavlink-Protokoll auch über "Schnittstellen" wie UART, SPI, CAN, Ethernet, WLAN, Email oder sogar per Postreiter übertragen. Je nach "Schnittstelle" ist dann die Übertragungsrate schneller oder langsamer.

BTW: wozu neben dem Beitrag "Kommunikation zwischen Arduino und Flugcontroller" ein zweiter Thread zum selben Thema?

#7513881
Lesenswert?

Lothar M. schrieb:

BTW: wozu neben dem Beitrag "Kommunikation zwischen Arduino und Flugcontroller" ein zweiter Thread zum selben Thema?

Weil er denkt, wenn er noch einen Thread auf macht wird sich irgendwann seine absolute Unwissenheit lichten und er wird plötzlich alles verstehen und die Lösung wird ihm auf dem Silbertablett präsentiert. Nur noch ein Thread und es ist soweit.

#7513950
Lesenswert?

Obelix X. schrieb:

Thomas E. schrieb:

Arduino und Pixhawk können ja über das Mavlink Protokoll kommunizieren

das Widerspricht sich mit (Wikipedia) : "It is used mostly for communication between a Ground Control Station (GCS) and Unmanned vehicles..."

Nein, das widerspricht sich nicht. Schon mal einen Pixhawk in den Fingern gehabt?

Sein Pixhawk hat drei Anschlüsse, die mit "Telem1", "Telem2" und "Telem3" bezeichnet sind. Das sind 3.3V UARTs (Telem 1+2 mit RTS/CTS) plus GND plus 5V Versorgung. Diese Anschlüsse sind eigentlich für Telemetriesender gedacht, die über 868MHz oder 2.4Ghz mit der Grundstation über Mavlink sprechen. Man kann natürlich auch was anderes anschließen, was Mavlink kann und einen 3.3V UART hat. Und für Mavlink zu seinem Arduino/Teensy muss er eben einen dieser drei Ports nehmen. Ggf geht Mavlink auch über den USB-Port, aber den würde ich hier mal außen vor lassen wollen.

fchk

#7514024
Lesenswert?

Frank K. schrieb:

Und für Mavlink zu seinem Arduino/Teensy muss er eben einen dieser drei Ports nehmen.

Also soll der Pixhawk über UART (Schnittstell) per Mavlink (Protokoll) die Sensortdaten an den Arduino senden? Das bedeutet, Sensoren an Pixhawk anschließen über I2C (die vom Pixhawk selbst)? Was macht der Arduino dann mit den Sensordaten, wenn direkt an den Pixhawk ein Telemetriesender angeschlossen werden kann?

Moderator (Firma: Titel) Persönliche Seite #7514032
Lesenswert?

Obelix X. schrieb:

Also soll der Pixhawk ... die Sensortdaten an den Arduino senden?

Nein, genau andersrum. Aber das sehen wir dann leicht im noch anzufertigenden Signalflussschema.

Thomas E. schrieb:

da ich vorhabe mehrere Sensordaten die mithilfe eines Arduinos ausgelesen werden

Um den Signalfluss zu verdeutlichen: die Sensordaten werden vom Arduino eingelesen.

#7514284
Lesenswert?

Obelix X. schrieb:

Thomas E. schrieb:

Weil viele andere Ports bereits belegt sind

Viele andere Ports sind aber egal. Es geht um den einen I2C Bus. An einem I2C Bus können mehrere Teilnehmer angeschlossen werden. Die müssen nur unterschiedliche Adressen haben.

... und von der Firmware des Pixhawk unterstützt werden. Das ist dann im Endeffekt das hüpfende Komma, das die Auswahl begrenzt.

fchk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren