Arduino <-> BBB UART-Probleme mit bidirektionalem Pegelwandler (5 V bis 3,3 V)

Ich habe ein seltsames Problem bei der Schnittstelle zwischen einem Arduino und BeagleBoneBlack über UART.

Der Arduino ist 5-V-Logik und der BBB ist 3,3-V-Logik, also verwende ich einen bidirektionalen Logikpegelwandler von sparkfun .

Der Pegelwandler funktioniert gut mit meinem 3,3-V-USB / FTDI-Messwert mit meinem Laptop. Wenn ich GND, 3,3 V, RX, TX anschließe, aber wenn ich die BBB verwende, bekomme ich nichts, es sei denn, ich trenne die 3,3-V-Leitung. Interessanterweise bekomme ich auf meinem Computer mit dem FTDI-Kabel Müll, es sei denn, die 3,3 V sind angeschlossen.

Auf der BBB scheint der Pegelwandler bei getrennter 3,3-V-Referenzspannung von 5 V auf 2,5 V (anstelle der beabsichtigten 5 V auf 3,3 V) umzuwandeln, und ich bin dieser schwebenden Spannung überdrüssig.

Ich habe einen Spannungsteiler mit Widerständen hergestellt, und mit der Referenz-Niederspannung von 1,6 V funktioniert die Kommunikation immer noch, aber noch einmal - nicht mit der Referenz-Niederspannung von 3,3 V.

Ich würde mich über Vorschläge freuen, warum dies der Fall sein könnte!

Bearbeiten:

Zur Verdeutlichung mit süßer ASCII-Kunst:

Das funktioniert (wie es sollte):

___________             _________________               ________         ____________
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> |      | <-USB-> | Computer |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | FTDI | <-USB-> | Computer |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  | <-LV (3.3v)-> |(3.3v)| <-USB-> | Computer |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> |      | <-USB-> | Computer |
-----------             -----------------               --------         ------------

Das funktioniert nicht (und sollte es auch nicht, da es keinen ref LV gibt):

___________             _________________               ________         ____________
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> |      | <-USB-> | Computer |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | FTDI | <-USB-> | Computer |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  |               |(3.3v)| <-USB-> | Computer |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> |      | <-USB-> | Computer |
-----------             -----------------               --------         ------------

Das funktioniert (muss aber nicht):

___________             _________________               _______
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | BBB | (Actually reading about 2.5v)
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | BBB | (on these two lines)
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  |               | BBB |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
-----------             -----------------               -------

Das funktioniert (sollte auch nicht):

___________             _________________               _______
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (1.6v)-> | BBB |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (1.6v)-> | BBB |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  | <-LV (1.6v)-> | BBB | (Using a voltage divider)
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
-----------             -----------------               -------

Das geht nicht (sollte aber):

___________             _________________               _______
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | BBB |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | BBB |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  | <-LV (3.3v)-> | BBB |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
-----------             -----------------               -------
Wenn Sie sagen "Der Pegelwandler funktioniert gut mit meinem 3,3-V-USB / FTDI", meinen Sie damit, dass die 3,3-V-Seite mit dem FTDI und die + 5-V-Seite mit dem Arduino verbunden ist? Haben Sie eine Matrix aller Spannungen erstellt, wobei die 3,3-V-Seite an die BBB und die +5-V-Seite an den Arduino angeschlossen ist (wobei auch beide Versorgungsspannungen angeschlossen sind). Zeichnen Sie zuerst alle Eingangs- und Ausgangsspannungen auf und heben Sie dann die Drähte an, die zum Eingangsstift des Wandlers führen (jede Seite, einzeln), und stellen Sie den Eingang zuerst auf +5 V (oder +3,3 V, je nach Bedarf) und zeichnen Sie auf Ausgangsspannung, und machen Sie dasselbe für Masse.
Bearbeitet, um etwas mehr Klarheit darin aufzunehmen, was funktioniert und was nicht :)

Antworten (1)

Seltsamerweise scheint es, als ob der Arduino Spannung sowohl über RX als auch über TX ausgibt, während die BBB nur Spannung auf der TX-Leitung ausgibt.

Ich vermute, dass die bidirektionale LLC nicht erkennen kann, in welche Richtung die Kommunikation erfolgen soll, und daher die BBB nicht in der Lage ist, an den Arduino zu senden.

Diese Sparkfun LLC ist die gleiche wie die, die ich auf dem BBB -> Arduino-Kanal verwende, aber die Arduino -> BBB-Seite verwendet nur einen Spannungsteiler. Ich habe dieses Setup manipuliert, und es scheint jetzt zu funktionieren.