У меня возникла странная проблема с интерфейсом между Arduino и BeagleBoneBlack через UART.
Arduino — это логика 5 В, а BBB — логика 3,3 В, поэтому я использую двунаправленный преобразователь логических уровней от sparkfun .
Преобразователь уровня отлично работает с моим 3,3-вольтовым USB / FTDI-чтением с моего ноутбука. Когда я подключаю GND, 3,3 В, RX, TX, но когда я использую BBB, я ничего не получаю, пока не отключу линию 3,3 В. Интересно - на моем компе с помощью кабеля FTDI я получаю фигню, ЕСЛИ не подключено 3.3v.
На ВВВ при отключенном опорном напряжении 3.3в преобразователь уровня вроде бы конвертирует из 5в - 2.5в (вместо положенных 5в-3.3в), и меня это плавающее напряжение утомляет.
Я сделал делитель напряжения на резисторах, и с опорным низковольтным 1,6в связь еще работает, но опять же - не с опорным низковольтным 3,3в.
Буду рад предложениям, почему это может быть так!
Редактировать:
Чтобы уточнить с помощью сладкого ASCII-арта:
Это работает (как и должно):
___________ _________________ ________ ____________
| | <-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 |
----------- ----------------- -------- ------------
Это не работает (и не должно, так как нет ref LV):
___________ _________________ ________ ____________
| | <-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 |
----------- ----------------- -------- ------------
Это работает (но не должно):
___________ _________________ _______
| | <-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 |
----------- ----------------- -------
Это работает (также не должно):
___________ _________________ _______
| | <-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 |
----------- ----------------- -------
Это не работает (но должно):
___________ _________________ _______
| | <-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 |
----------- ----------------- -------
Странно кажется, что Arduino выдает напряжение как на RX, так и на TX, в то время как BBB выдает напряжение только на линию TX.
Я предполагаю, что двунаправленный LLC не может определить, в каком направлении должна происходить связь, и поэтому BBB не может передавать данные на Arduino.
Этот Sparkfun LLC такой же, как тот, который я использую на канале BBB -> Arduino, но на стороне Arduino -> BBB просто используется делитель напряжения. Я настроил эту установку, и теперь она работает.
ткросли
Джоно