Проблемы Arduino <-> BBB UART с использованием двунаправленного преобразователя уровня (5 В в 3,3 В)

У меня возникла странная проблема с интерфейсом между 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 |
-----------             -----------------               -------
Когда вы говорите: «Преобразователь уровней отлично работает с моим 3,3 В USB / FTDI», вы имеете в виду, что сторона 3,3 В подключена к FTDI, а сторона + 5 В подключена к Arduino? Вы сделали матрицу всех напряжений со стороной 3,3 В, подключенной к BBB, и стороной + 5 В, подключенной к Arduino (также с обоими напряжениями питания). Сначала запишите все входные и выходные напряжения, а затем поднимите провода, идущие к входному контакту преобразователя (с каждой стороны, по одному), и сначала установите вход на +5 В (или +3,3 В, если применимо) и запишите. выходное напряжение, и сделать то же самое для земли.
Отредактировано, чтобы включить то, что работает и не работает, с большей ясностью :)

Ответы (1)

Странно кажется, что Arduino выдает напряжение как на RX, так и на TX, в то время как BBB выдает напряжение только на линию TX.

Я предполагаю, что двунаправленный LLC не может определить, в каком направлении должна происходить связь, и поэтому BBB не может передавать данные на Arduino.

Этот Sparkfun LLC такой же, как тот, который я использую на канале BBB -> Arduino, но на стороне Arduino -> BBB просто используется делитель напряжения. Я настроил эту установку, и теперь она работает.