Разработка мастера Modbus с использованием STM32F030CCT6 и SN75HVD10 (3,3 В).
Когда я отправляю следующее сообщение из UART: 01 03 00 00 00 06 c5 c8
Я вижу следующие прицелы (верхний A, нижний B).
Однако при отправке одного и того же сообщения с использованием Raspberry PI (5V) и кабеля преобразователя RS-485 можно увидеть следующие области:
Как видите, каналы здесь перевернуты. Что на A с использованием SN75HVD10 находится на B с использованием RPi. Так что я подумал про себя, ладно, давай поменяем кабели. Но потом микроконтроллер перестает реагировать и на прицеле не видно никаких следов.
Что можно сделать, поменяйте "каналы". Кроме того, почему сигнал не снижается до 0 В?
К сожалению, это распространено. Стандарты RS485 и Modbus определяют A и B иначе, чем ваш трансивер, а также многие другие трансиверы.
Итак, ваша схема должна где-то поменять местами A и B. Так как Modbus B - приемопередатчик A должен иметь подтягивающее значение, а Modbus A - приемопередатчик B должен иметь понижающее сопротивление, резисторы соответствуют приемопередатчику, поэтому поменяйте местами только Modbus A и B.
Приемопередатчик также имеет внутреннее понижение на выводе B, что совпадает с опусканием Modbus A.
Так что это нельзя решить, просто инвертируя данные UART.
Вы также должны использовать одну и ту же точку заземления между вашими устройствами. Если они имеют общее заземление через источники питания или другие заземляющие контакты, это нормально, но если они изолированы друг от друга, вам нужен заземляющий провод между устройством RS485.
Инвертируйте полярность UART в вашем микроконтроллере (Idle High vs Idle Low)
В противном случае, как вариант, привяжите вывод данных трансивера к низкому уровню (я думаю, может быть к высокому), а вместо этого подключите ваш TX к выводу включения TX (DE),
Ларс Стенберг