Forum: Mikrocontroller und Digitale Elektronik Mehrere Sensoren über I²C


von Thomas E. (rc_flyer)


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!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Die freie Schnittstelle am Flightcontroller ist die I²C Schnittstelle
Wer ist bei diesem Datentransfer der Master?

von Thomas E. (rc_flyer)


Lesenswert?

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

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

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/

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Thomas E. schrieb:
> Ist da der richtige Weg?

Welche Probleme stellen sich dir?
Welche erwartest du?

von Thomas E. (rc_flyer)


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

von Harald A. (embedded)


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.ä.)

von Obelix X. (obelix)


Lesenswert?

Breakoutboard? Flightcontroller?

Willst du ein Breakoutboard in einem Flugmodell einsetzen?

von Thomas E. (rc_flyer)


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

von Harald K. (kirnbichler)


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.

von Frank K. (fchk)


Lesenswert?

Und wie sind Arduino und Pixhawk miteinander verbunden?

fchk

von Thomas E. (rc_flyer)


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?

von Obelix X. (obelix)


Lesenswert?


von Harald K. (kirnbichler)


Lesenswert?

Thomas E. schrieb:
> Macht es denn einen Unterschied ob der Pixhawk die Daten vom Sensor oder
> vom Arduino bekommt?

O ja. Lies Dir durch, was I2C ist. "Obelix" hat da was einfaches 
verlinkt.

von Thomas E. (rc_flyer)


Lesenswert?

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

von Thomas E. (rc_flyer)


Lesenswert?

Verbesserungsvorschläge sind gerne willkommen!

von Obelix X. (obelix)


Lesenswert?

Thomas E. schrieb:
> - SDA-Leitung des Arduino mit der SDA-Leitung des Pixhawk.
> - SCL-Leitung des Arduino mit der SCL-Leitung des Pixhawk

Und wo ist da dein Sensor?

von Harald K. (kirnbichler)


Lesenswert?

Thomas E. schrieb:
> Verbesserungsvorschläge sind gerne willkommen!

Du musst herausfinden, was Dein "Flight Controller" überhaupt mit seiner 
I2C-Schnittstelle anstellt. Was macht dessen Firmware damit?

Ohne dieses Wissen ist jede weitere Betrachtung völlig witzlos.

von Frank K. (fchk)


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

von Thomas E. (rc_flyer)


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?

von Frank K. (fchk)


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.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Thomas E. schrieb:
> Okay also verstehe ich es richtig, das es für meinen Anwendungsfall
> nicht unbedingt notwendig ist?

Beantworte doch erst mal die Rückfragen!

von Obelix X. (obelix)


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.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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?

: Bearbeitet durch Moderator
von Cyblord -. (cyblord)


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.

von Obelix X. (obelix)


Lesenswert?

Lothar M. schrieb:
> BTW: wozu neben dem Beitrag "Kommunikation zwischen Arduino und
> Flugcontroller" ein
> zweiter Thread zum selben Thema?

Der andere Thread ist älter als dieser hier.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Obelix X. schrieb:
> Der andere Thread ist älter als dieser hier.
Da kann man nicht von "älter" sprechen: der letzte Post im "alten" 
Thread war am 11.10. morgens, der erste Post des "neuen" war 11.10. 
nachmittags.

von Frank K. (fchk)


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

von Obelix X. (obelix)


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?

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Obelix X. (obelix)


Lesenswert?

Der Pixhawk hat doch auch I2C warum nicht die Sensoren da anschließen?

Eigentlich möchte ich mit meinen Fragen eher den TO zum nachdenken 
anregen als selber Antworten zu bekommen. ;-D

von Thomas E. (rc_flyer)


Lesenswert?

Obelix X. schrieb:
> er Pixhawk hat doch auch I2C warum nicht die Sensoren da anschließen?

Weil viele andere Ports bereits belegt sind

Die Antwort auf die anderen Fragen folgt in kürze

von Obelix X. (obelix)


Lesenswert?

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.

Aber auch dass sehen wir dann ja in deinem Schema.

: Bearbeitet durch User
von Frank K. (fchk)


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

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
Noch kein Account? Hier anmelden.