Неверный вывод при использовании SN75HVD10 (RS485)

Разработка мастера Modbus с использованием STM32F030CCT6 и SN75HVD10 (3,3 В).

это схемаСхема

Когда я отправляю следующее сообщение из UART: 01 03 00 00 00 06 c5 c8

Я вижу следующие прицелы (верхний A, нижний B).Отправлено с использованием SN75HVD10

Однако при отправке одного и того же сообщения с использованием Raspberry PI (5V) и кабеля преобразователя RS-485 можно увидеть следующие области:Отправлено с использованием Raspberry PI

Как видите, каналы здесь перевернуты. Что на A с использованием SN75HVD10 находится на B с использованием RPi. Так что я подумал про себя, ладно, давай поменяем кабели. Но потом микроконтроллер перестает реагировать и на прицеле не видно никаких следов.

Что можно сделать, поменяйте "каналы". Кроме того, почему сигнал не снижается до 0 В?

Итак, оказалось, что когда я поменял местами каналы, он начал работать, но у меня была ошибка в коде моего MCU, из-за которой MCU зависал, когда связь начинала работать.

Ответы (2)

К сожалению, это распространено. Стандарты RS485 и Modbus определяют A и B иначе, чем ваш трансивер, а также многие другие трансиверы.

Итак, ваша схема должна где-то поменять местами A и B. Так как Modbus B - приемопередатчик A должен иметь подтягивающее значение, а Modbus A - приемопередатчик B должен иметь понижающее сопротивление, резисторы соответствуют приемопередатчику, поэтому поменяйте местами только Modbus A и B.

Приемопередатчик также имеет внутреннее понижение на выводе B, что совпадает с опусканием Modbus A.

Так что это нельзя решить, просто инвертируя данные UART.

Вы также должны использовать одну и ту же точку заземления между вашими устройствами. Если они имеют общее заземление через источники питания или другие заземляющие контакты, это нормально, но если они изолированы друг от друга, вам нужен заземляющий провод между устройством RS485.

С другой стороны - Carlo Gavazzi EM-24, так что я ничего не могу контролировать. Я использовал mikroe.com/rs485-33v-click в качестве руководства по проектированию схем. Не в офисе сейчас, но почему вы не думаете, что достаточно инвертировать uart, как это предлагает reroute?
Я не говорил, что вам нужна переадресация. Если они идут к разъему, вы можете просто перевернуть провода. Ваш modbus_a на схеме действительно modbus_b, а modbus_b на схеме действительно modbus_a. Но вы не можете быть уверены и в других устройствах. EM-24 говорит, что A- это D-, а B+ это D+. FTDI говорит, что B — это D-, а A — это D+. Щелчок говорит, что A — это D+, а B — это D-. RS485 говорит, что логика 1 отключена, поэтому A низкий, не инвертированный, B высокий, инвертированный. Но трансиверы говорят, что Логика 1 означает A высокий, не инвертированный, B низкий, инвертированный. Это беспорядок. Только переворачивая провода, вы получаете подтягивания и подтягивания в правильном направлении, согласно modbus и UART
Что за хреновый стандарт :), в понедельник сделаю еще тесты. Спасибо за помощь, добрый незнакомец 🙏
Не совсем - стандарт RS485 твердый и не имеет места для интерпретации, а Modbus строится поверх стандарта RS485, это тоже твердый стандарт. Просто стандарт предписывает что-то не интуитивно понятным, если только вы не понимаете перспективу. Поскольку RS232 имеет логическую 1 в качестве состояния OFF/MARK с выходом -12 В и логический 0 в качестве состояния ON/SPACE с выходом +12 В, выход RS485 A следует этой логической инверсии. В основном, с инвертированной логикой, RS485 A инвертируется от логических данных, а B неинвертируется. Многие трансиверы говорят, что A не инвертируется из логических данных, а B инвертируется.
Так что оказалось, что у меня была ошибка в коде MCU, из-за которой он зависал, как только связь начинала работать (переворачивая кабели). Спасибо за отличное объяснение!

Инвертируйте полярность UART в вашем микроконтроллере (Idle High vs Idle Low)

В противном случае, как вариант, привяжите вывод данных трансивера к низкому уровню (я думаю, может быть к высокому), а вместо этого подключите ваш TX к выводу включения TX (DE),

Функция инвертирования UART могла бы работать, но она оставила бы подтягивания и опускания неправильным образом.