Feed aggregator
2026/03/11_rs485 - Уже неделю бьюсь с RS485
Мы из столбов и толстых перекладин
За складом оборудовали зал.
Там Гамлета играл ефрейтор Дядин
И в муках руки кверху простирал.
Евгений Винокуров
Вторую неделю бьюсь с RS485 и не могу победить. Есть китайские мопеды (в количестве), у них процессор с дисплеем на приборке и батарея, имеющая три сигнальных провода rs485: черный — земля, белый — А, серый (или синий) — B. Землю можно не подключать, но конечно пробую по-всякому. Подключаю провода к свистку rs485-uart, читаю посылки. Расшифровываю протокол, он оказывается прост и довольно стандартен (позже я даже нашел, что его реверснули и китайцы и получили то же):
[ ТЕКСТ ПОД КАТОМ: Доступен только в оригинальной заметке на сайте ]
Нарисовал себе читалку-инструментик прямо на вебе (благо Chrome десктопа позволяет работать с UART): https://lleo.me/uart/ Подслушиваю разговор мопеда с батареей. На запрос мопеда 31CE 02 (чтение) с данными 02 2B или 2D 37 не отвечает никто, если батареи нет, а если есть — она отвечает 31CE 82 с инфо (включая серийник) и состоянием (процент заряда, напряжение, ток, температура, вольтаж на каждой банке). Я знаю о ней всё:
[ ТЕКСТ ПОД КАТОМ: Доступен только в оригинальной заметке на сайте ]
В общем, посылки получаю, расшифровываю, формат известен, данные правильные, контрольные суммы сходятся, и всё это точно RS485, не RS232, не CAN и не LIN. Казалось бы, могу и сами отправлять их в линию, и меня услышат. Но хрен там — меня не слышат. Слева — посылки нормального человека, справа — с моего свистка:
Нет положенных в rs485 размахов аплитуды, каждый канал уходит в минус только до средней линии. Над этой загадкой я бился, потом подсказали друзья. Мой китайский свисток в принципе раньше работал мастером нормально, но если он не мастер и линия подтянута, работать нормально не сможет. В драйвере rs485 на микросхеме MAX458 есть сигнал DT (ноги 2,3), который переключает ее в прием/передача. Этим должен управлять комп, но китайцы делают «автораспознавание»: тупо завели TX через транзистор. Поэтому когда 1, MAX458 честно передает 1, а когда 0, передача выключается, сигналы падают к уровням тишины, и 0 не отрабатывается по полной амплитуда. Ставят эту дурацкую схему, разумеется, как в дешевые китайские свистки, так и во многие дорогие (традиционный херушка на воротничок любителям ориентироваться в мире суеверий по цене).
Ну ок, не вопрос. Я выяснил, что вторая микросхема свистка uart CH340C имеет выводы RTS и DTR (не все варианты CH340 их имеют), припаял с ножки 14 резистор 10k и выставляю с компа RTS принудительно на время передачи (JS в Chrome и это умеет).
Результат — теперь мои сигналы стали идеальными:
Казалось бы, проблема решена? Но нет, батарея все равно меня не слышит от отвечать не хочет :) Все остальное, разумеется, уже перепробовал: землю, полярности A/B, тайминги, 120 Ом терминатор, линию никто не глушит, посылки не накладываются, сами на 100% соответствуют формату, и их последовательность тоже (пробовал слать в батарею и вообще всё, что слышно в мопеде). Причем, батарея посылку слышит — она явно «просыпается» по первой же посылки: уровни тишины линии сдвигаются на 0.5V вверх, через какое-то время засыпает снова. Но отвечать мне считает ниже своего достоинства. Больше идей у меня пока нет. Может, у вас есть?
Бывало, выйдет, головой поникнет,
Как надо, руки скорбно сложит, но
Лишь только «быть или не быть?» воскликнет,
Всем почему-то делалось смешно.
Евгений Винокуров
