Устройство RS-485 Modbus к MCU

У меня есть устройство (счетчик энергии), которое отправляет данные по RS-485 (протокол Modbus). И я хочу собрать его с MCU. Важно то, что я пытаюсь спроектировать доску и хочу, чтобы она была масштабируемой. Это означает, что у меня может быть подключено 1 устройство или, может быть, 2 или 3 устройства (с разными идентификаторами ведомых устройств). У меня есть следующие вопросы:

  • Я думаю, что мне нужен MCU с UART, а затем мне нужно добавить драйвер RS-485 ( например, этот ), и я в порядке? Я имею в виду, что Modbus — это всего лишь протокол, так что на этапе проектирования я не должен беспокоиться об этом?
  • Должен ли я рассмотреть MCU с 1 UART или мне нужно больше? Может ли MCU с сигнальным UART взаимодействовать с несколькими устройствами? Я имею в виду, что один UART будет обеспечивать только линии Rx и Tx, поэтому его легко подключить к одному устройству. Но как справиться с большим?
  • Нужно ли мне обрабатывать все данные Modbus вручную? Это можно легко сделать с ПК, но как я могу сделать это с моим MCU? Мне нужно будет определить коды функций, расположение данных и все это с нуля? Или есть доступные библиотеки для некоторых микроконтроллеров?

Заранее спасибо!

Рекомендуем загрузить спецификации с Modbus.org

Ответы (2)

Да, очевидно, вам нужен UART. Ваш водитель тоже выглядит нормально. Достаточно одного UART. Не пытайтесь создать свой проект, если вы не знакомы с такими терминами, как шинная система, RS485, физический уровень, UART, RS232, полудуплекс, топология Master-Slave, арбитраж шины. Благодаря этому вы поймете, что такое шинная система и как работают несколько устройств на одной линии. Хорошей отправной точкой являются заметки по применению от некоторых поставщиков rs485 и учебные пособия, например этот .

Лично я использовал ST3485, у которого есть примечания по применению, объясняющие некоторые основные вещи здесь , но вы можете найти ту же информацию и у всех других поставщиков.

Для расшифровки прошивки и протокола существует множество библиотек. Прежде всего, вы должны знать, хотите ли вы создать ведущее или ведомое устройство. Для всего вышеперечисленного: Google — ваш друг. Но чтобы гугл находил нужные вещи, нужно знать терминологию (что искать)!

Спасибо за информацию. Ваша первая ссылка - хороший обзор. Вы правы, что можно найти что угодно, если правильно пользоваться гуглом, но это не всегда легко сделать. Вы дали хорошее представление о спецификациях/учебниках поставщиков. До сих пор я занимался только простой прямой связью. Так что многоточечная связь для меня немного непонятна.

Возможно, вы захотите рассмотреть аппаратное обеспечение на ранней стадии, если это MODBUS-RTU. Протокол MODBUS-RTU имеет 3-1/2-символьное условие MARK для обозначения START/END, которое может не поддерживаться обычным UART.

В MODBUS ASCII такой проблемы нет — в качестве разделителей используются символы двоеточия и CR/LF. Конечно, недостаток в том, что это намного медленнее.

Для MODBUS-RTU одним из решений является подключение входа RXD к входу таймера. Таким образом, вы можете определить состояние MARK с помощью таймера.
@KubaOber Именно поэтому вы должны рассмотреть это на ранней стадии - выделить (скорее всего) дополнительный контакт и некоторое внутреннее оборудование таймера.
Спасибо. Это своего рода ловушка, о которой я не знал. Насколько я понимаю, нет возможности быстро оценить для определенного MCU, если это так и можно найти только в глубине спецификации?
Да, вам придется изучить особенности периферийных устройств ЦП, если вам нужно поддерживать эту разновидность Modbus.