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 |
----------- ----------------- -------
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.
trosley
Jono