Koppeln von Sensoren per USB statt GPIO

  • Hallo liebe Forengemeinde,

    ich bin noch neu hier, daher erst mal zu meiner Person. Ich bin aktuell 25 Jahre alt, Masterstudent im Bereich Mechatronics und habe zuvor Automotive Engineering (Ba.) studiert. Da ich mich breiter aufstellen wollte habe ich das Mechatronikstudium begonnen. Nun stehe ich in einer Projektarbeit und soll eine Drehzahlerfassung für einen Prüfstand (sowohl mit Hallsensor, als auch mit einem optischen Sensor) bauen, welche die Signale an einen Raspberry Pi 4 B schickt. Die Sensoren benötigen aber jeweils eine höhere Spannung, als die GPIO Pins des RP bereitstellen.

    Da das 'System' nicht an seinem Platz stehen bleiben wird, sollten die Kabel am Besten einfach zu handhaben sein und auch geschirmt (es können Magnetfelder vorhanden sein), deshalb würde mich interessieren, ob es möglich wäre die Daten statt über die GPIO-Anschlüsse alternativ über USB 2.0 in den Raspberry einzuspeisen und zu verarbeiten?

    Ich kann mir vorstellen, das die dünnen Käbelchen der GPIO-Anschlüsse häufiges An- und Umstecken nicht so lange mitmachen.

    Ich würde quasi ein USB 2.0 Kabel mit offenem Ende kaufen und an dieses den Hall-Sensor anlöten (Das USB 2.0 Kabel besitzt 4 Anschlüsse, für die Spannung, die Masse und zwei Datenleitungen, von denen eine Datenleitung frei bleiben würde, da die Hallsensoren nur einen Digitalen Output Pin besitzen). Könnte ich dadurch meine Daten übertragen und die Spannung bereitstellen (die Sensoren benötigen unter 5V aber eben mehr als die 3,3V, welche die GPIO-Pins hergeben).

    Falls die Datenübertragung so nicht funktionieren sollte, könnte ich alternativ die Energie für den Sensor bereitstellen (der Bedarf eines Hall-Sensor liegt irgendwo zwischen 10-30 mA, für den optischen Sensor bin ich nicht sicher) und die Digitalen Messdaten per GPIO übertragen?

    Im Falle, dass auch das nicht möglich ist, gibt es noch weitere Alternativlösungen? Ich habe auch an einen Spannungswandler gedacht, welcher die Spannung von 230V aus der Steckdose auf 'Sensortaugliche' 5-10V wandelt, jedoch müsste ich dann ebenfalls diese Leitung in den Prüfstand verlegen, was ich, sofern möglich, vermeiden möchte.

    Ich hoffe ich habe kein Thema eröffnet, das es schon gab oder das trivial ist, jedoch bin ich auf dem Gebiet noch sehr unerfahren und hoffe daher auf einige Tipps! :conf:

    Grüße Paniklos

  • Zur hilfreichsten Antwort springen
  • USB ist ein serielles Protokoll, das zwischen einen Master und einen Slave funktioniert.

    Du kannst nicht einfach einen Hall Sensor (als Slave) anlöten und das Kabel an der USB Buchse des Pi anstecken.

    Da Du im Automotive Bereich zuhause bist, hast Du den CAN Bus in Erwägung gezogen ? Oder RS 485 ?

    Wenn Du die GPIOs zur Drehzahlerfassung verwenden willst, geht das über einen Pegelwandler; allerdings ist die Eingangsfrequenz der GPIOs ziemlich beschränkt und nicht echtzeitfähig. Der Pi ist kein Microkontroller, sondern ein Multiuser/Multitasking Linux Computersystem.

    Servus !

    PS: Datenerfassung mit Mikrokontroller, Darstellung/Visualisierung/Speicherung am Pi. Dazwischen irgendein robuster, störsicherer Bus.

    RTFM = Read The Factory Manual, oder so

  • Da das 'System' nicht an seinem Platz stehen bleiben wird, sollten die Kabel am Besten einfach zu handhaben sein und auch geschirmt (es können Magnetfelder vorhanden sein), deshalb würde mich interessieren, ob es möglich wäre die Daten statt über die GPIO-Anschlüsse alternativ über USB 2.0 in den Raspberry einzuspeisen und zu verarbeiten?

    Das könnte man mit einem RP2040 hinbekommen. Die USB-Schnittstelle ist ein virtueller serieller Port und darüber könnten die Messdaten von einem Master ausgelesen werden. Der RP2040 wird dann auch über USB versorgt und stellt die 5V und 3.3V für externe Sensoren zur Verfügung. Du könntest dann auch mehrere Sensoren an einem RP2040 anschließen.

    Programmieren kann man den mit Micropython, C/C++ oder Assembler. Zusätzlich hat der RP2040 noch einen PIO, mit dem man z.B. VGA-Signale erzeugen kann. So schnell wird sich dein Motor aber nicht drehen können.

    Wenn es störungssicher sein soll, braucht man über WLAN nicht lange nachzudenken.

    Es kommt sicherlich noch der Vorschlag den ESP8266 oder ESP32 als MQTT Node zu nutzen.

    BTW: CAN-Bus und RS485 sind störungssicher. Fehlen nur noch CAN-Bus/RS485 Sensoren.

  • Wenn die Daten unbedingt per USB in den RPi kommen sollen, nimmt man sich einen kleinen Controller ( z.B. einen ATTiny85, den gibt's für kleines Geld schon fertig als Digistump, welcher über die Arduino IDE programmierbar wäre ) und ein Beispielprojekt wo man darüber Signale einliest, sollte sich auch finden lassen.

  • Hallo Zusammen,

    danke für eure schnellen Antworten!

    Ich hätte vielleicht direkt zu beginn mehr Daten vom Projekt nennen sollen:

    So wird die Drehzahl (Hall) an der Welle des Rollenprüfstands abgegriffen (somit schwer zu erreichen und durch Wirbelstrombremsen evtl. die Magnetfelder), die Drehzahl (optisch) an der Felge des zu testenden Fahrzeuges und am Ende soll noch ein Drehmomentsignal mit eingefügt werden, dies aber erst in einem zweiten Schritt. Der Plan war im Raspberry Pi 4 die Signale (immer alle Signale eines Zeitpunkts) zu sammeln und anschließend an ein Messgerät (ZES) weiterzuleiten. Im Messgerät wird dann anschließend die Leistung des Fahrzeugs ausgewertet.

    Vom RP zum ZES hatte ich auch an den Canbus gedacht, jedoch wären mit einem entsprechenden Pi-Head doch die gesamten GPIO-Pins vergeben oder? Dadurch könnte ich ja dann alternativ eigentlich nur noch die USB-Ports vom Mikrocontroller zum RP4 benutzen?

    Alternativ hatte ich überlegt, ob es möglich wäre, die Messdaten vom PI auch per LAN in das Messgerät zu schicken, sodass die GPIO-Pins frei bleiben.

    Aus den Antworten lese ich heraus, das ein Mikrocontroller wie der RP-Pico oder der von Fliegenhals erwähnte ATTiny85 also unumgänglich sind?

    Somit müsste ich also meinen Hallsensor und im anderen Fall den optischen Drehzahlsensor jeweils mit einem Mikrocontroller verbinden und die Signale von diesem Mikrocontroller dann in den RP4 leiten? Liege ich da richtig?

    Geht das per USB wenn ich die Signale im RP sammeln und dann jeweils die Signale aller Sensoren zu einem bestimmten Zeitpunkt weiterleiten möchte?

    Ich bedanke mich für eure Hilfe!

    Gruß

  • @DeaD_EyE

    Wenn ich dich richtig verstehe, dann kann ich also meinen RP-Pico an den USB-Port des RP4 anschließen und über die GPIO-Pins des Pico die Sensoren mit einer Spannung bis zu 5V versorgen? Oder meintest du, dass ich den Pico per USB-Port verbinde und die Sensoren über einen zweiten USB-Port mit Strom versorge und nur das optische Signal in den Pico per GPIO leite?

    • Hilfreichste Antwort

    Wenn ich dich richtig verstehe, dann kann ich also meinen RP-Pico an den USB-Port des RP4 anschließen und über die GPIO-Pins des Pico die Sensoren mit einer Spannung bis zu 5V versorgen?

    Bei 5V sollte man aufpassen. Der RPi0-4 und RP2040 arbeiten mit 3.3V und alles darüber ist meistens tödlich.

    Die meisten Sensoren und ICs können aber auch mit 3.3V betrieben werden.

    Der RP2040 wird via USB mit 5V versorgt, wandelt mit einem Spannungswandler die Spannung auf 3.3V und nutzt diese für den Mikrocontroller.

    Die 5V vom USB-Anschluss und die 3.3V vom Wandler stehen auf den PINs zur Verfügung, um z.B. Sensoren mit 5V/3.3V zu versorgen.

    Gleichzeitig wird der USB-Anschluss als virtueller serieller Port erkannt, über den dann Daten z.B. ausgegeben werden können.

    Darüber programmiert man auch den Controller.


    Der Host, an dem der RP2040 dann angeschlossen wird, muss die Daten dann einfach auswerten und versorgt auch den RP2040 mit 5V über denselben Stecker.

    Ob das auswertende Gerät ein Raspberry Pi 4 oder etwas ganz anderes ist, spielt keine Rolle.

    Es könnte sogar ein Windows-PC die seriellen Daten (die du selbst im Programmcode ausgeben musst) verarbeiten.


    Die USB-Kabel sollten nicht länger als 5 Meter sein.

  • Hallo DeaD_EyE,

    danke für die Info mit dem RP-Pico, ich werde das jetzt einmal probieren, mal schauen ob da was rauskommt :-)!

    Werde dann jetzt zuerst einmal probieren eine Drehzahlerfassung hinzubekommen auf einem Pico und danach weiterschauen.

    Gruß Paniklos

  • Hallo Zusammen,

    nachdem ich jetzt ein Buch zu Python durchgeackert habe, bin ich leider noch immer nicht wirklich weitergekommen. Ich habe nun einen Hallsensor und schließe diesen an meinem 2040 über den VBUS an, sodass er mit 5V Spannung versorgt wird. Den Digital Output habe ich auf einen GPIO Pin (Pin 15) gelegt und Ground eben auf Ground...

    Leider finde ich nirgendwo wie ich jetzt zumindest mal Daten meines Sensors einlesen bzw. ausgeben kann.

    Hat mir evtl. jemand einen Tipp?

    Btw: Es ist ja Micropython, was auf dem 2040 werkelt. Mein Problem ist einfach, das ich die Befehle nicht kenne.

  • Ich wuerde es so probieren:

    * ein Interrupt-Handler der bei jedem Impuls eine globale Variable hochzaehlt

    * ein Hauptprogramm das den Zaehler jede Sekunde (besser ein laengeres Intervall) ausliest und die Differenz berechnet

    Achtung: irgendwann wird der Zaehler ueberlaufen. Das Hauptprogramm muesste negative Differenzen verwerfen


  • Ich hatte 500 Hz PWM DC 1 % als Signal auf Pin 0 gegeben.


    Der letzte Teil in der Methode _count ist der kritische.

    Optimieren ließe sich das noch mit einem deque objekt. Es unterstützt aber keine iteration, deswegen die List Comprehension summe = ....

    Einmal editiert, zuletzt von RestlessMud46765 (2. August 2021 um 01:14)

  • ps915 2. Februar 2024 um 20:59

    Hat das Label RPi 4 hinzugefügt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!