Roon_Boh
@Roon_Boh
Сломав зубы о гранит, продолжаю его рассасывать

Есть ли примеры согласования МК по RS-485, где в шине более двух устройств?

Есть ли примеры согласования МК по RS-485, где в шине более двух устройств?
Хочу посмотреть как нормальные люди организовывают прием и отправку данных по RS-485, где в шине более двух устройств (хотя бы два).
Хотелось бы сделать без ведомого, просто одно устройство посылает сообщение, а два других его слушают, если один из двух понял что эт сообщение ему то он его принимает и обрабатывает, после чего отсылает ответ. Предполагается использовать двух проводную (одна пара) схему, и отсутствие ведущего.

Помогите пожалуйста гугл поиск не помог.

Уточнение: сама по себе RS-485 -последовательная шина. А хотелось бы ее заюзать как параллельную!
Схемотехнические вопросы интересны лишь в вопросе одной двух пар, и большой длины проводов. (советы по разводке, нагрузке, емкости и прочие могу найти и сам).
Вобщем то я бы заюзал i2c (у меня не более 15 метров), но вот необходимость опрашивать с ведомого все приемники (в моем случае 20) это уже жесть. Жесть потому что на передау даных будет завеено прерывание, и тогда мои приемники будут 50% времени парсить линию, или же тогда ведомый долго не будет знать что там твориться у ведомого.
Да что РС что И2С хороши для того чего они созданы, но мне нужна именно локальная сеть равноправная (звезда) когда при изменении на одном устройстве, оно само вышло в эфир и сообщило об изменении.

Я уже подумаю о двух проводном ЮАРТ, взять его и запаралелить, в случае необходимости, устройство, почитало линию, и если идет чья то передача даных, то подождало рандомное время, если не ведется передача, то послала в эфир необщодимый восьми битный байт, а все остальные его получили и пропарсили и исходя из этой команды приняли или не приняли действия.
  • Вопрос задан
  • 2092 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmitryITWorksMakarov
@DmitryITWorksMakarov
Насколько помню в стандарте RS-485 три линии: A, B и 0 (плюс в особо запущенных случаях экран). А то убежит потенциал линий А и В далеко за пределы питания, приемник в насыщение уйдет и будет некорректно работать, а как максимум из строя может выйти. Хотя конечно это все зависит от электромагнитной обстановки и длины линии.

Непонятно какое интересует согласование.
Если физическое, то между А и B необходимо в самых дальних точках линии поставить терминальные резисторы 100 Ом 0,25 Вт.
Плюс необходимо обеспечить начальное смещение линий, притянув B через резистор к питанию, а А через резисторы к нулю в каком-то одном месте линии. Линия по умолчанию должна находиться в состоянии, когда Ub > Ua.

Что касается логического согласования, про взаимодействие без ведомого. То стандарт rs485 это не определяет, но можно делать обычное разрешение коллизий. Шлешь посылку и сам читаешь. Если пришло, то что отправлял, значит в этот момент никто ничего не передавал и посылка ушла успешно. Если принятое отличается, от переданного, значит коллизия (два передатчика одновременно передавали). Ждешь случайное время меньше T и повторяешь передачу. Т - настраивается, зависит от активности взаимодействия и количества абонентов.
Ответ написан
@LampTester
Начнем с того, что RS-485 представляет собой только требования к физическому уровню. На уровне побайтовой передачи это чаще всего UART.

Далее, мне кажется, что вы запутались в понятиях ведущего-ведомого и последовательной-параллельной шины. RS-485 - последовательная шина, но ничто не запрещает использовать топологию "звезда", которая, как я понял, вам нужна. Если одно устройство передает, а остальные принимают - то оно и есть ведущий, а остальные - ведомые.

Я делал похожую систему, работающую через RS-485. Так вот я взял конвертеры уровней RS-485 и подключил их к UART'у. Протокол был самописный, пакетный, с одним ведущим и кучей (по требованиям до 200+) ведомых. В таком варианте все работает. Еще раз, RS-485 не тождественен Profibus, Modbus и прочим протоколам - они работают поверх него.
Ответ написан
Papayaved
@Papayaved
FPGA, MCU
Боюсь без контроллера шина на RS-485 не получиться. Для общей шины надо использовать трансформатор как в Ethernet, специальные микросхемы драйверов как у CAN или открытый коллектор - тогда физических конфликтов на шине не будет и ни чего не сгорит. Но надо иметь механизм обработки коллизий - когда несколько устройств хочет выйти на шину одновременно.

Согласование требуется на концах линий - два терминатора (резистора) по 120 Ом. Все устройства должны быть подключены последовательно, а не звездой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы