Доброго здравия, уважаемые читатели!
Китайская компания Waveshare в последнее время совсем распоясалась и завалила интернет-площадки довольно интересными решениями (иногда не очень) на базе SoC ESP32. Представляю вам обзор довольно интересного модуля на DIN-рейку Waveshare ESP32-S3-RS485-CAN. Данное устройство представляет собой готовое к монтажу на DIN-рейку решение для создания узлов сбора данных с сенсоров RS485, шлюзов и прочего подобного оборудования. А также на его основе можно создавать модульные решения для “умного дома”, постепенно наращивая функционал и устанавливая датчики и исполнительные устройства там, где это необходимо.
Одно важное уточнение: приложение (прошивку, скетч) для этого модуля вы должны будете написать сами – точно так, как вам это нужно, а не сделал кто-то другой. Например можно воспользоваться статьей [Arduino ESP32 шаг за шагом]. Ну а в этой небольшой статье рассмотрим только “железную” начинку и схему.
Например у меня сейчас он работает в качестве личной метеостанции – собирает данные с различных Modbus датчиков и отправляет их на локальный MQTT-сервер (для остальной автоматики), на “Народный мониторинг” и т.д. Но это временно, потом я найду ему другое, более полезное применение.
В продаже можно найти две версии – со встроенной антенной и с разъемом для внешней антенны (с индексом -U на конце). Встроенная антенна, несмотря на опасения, очень даже не плоха – работает уверенно.
Основные технические характеристики
Модуль создан основе SoC ESP32-S3R8 с 32-разрядным двухъядерным процессором Xtensa LX7, способным работать на частоте 240 МГц. По умолчанию в вашем распоряжении имеется 16 МБ Flash-памяти и 8 МБ PSRAM (дополнительной оперативной памяти) на интерфейсе OPI. Этого хватит для самых требовательных приложений.
На борту имеются следующие интерфейсы:
- изолированный интерфейс RS485 для подключения к различным промышленным модулям или датчикам RS485 Modbus
- изолированный CAN-интерфейс обеспечивает легкий доступ к различным CAN-устройствам
- порт USB Type-C для подключения питания 5В, загрузки прошивки и отладки
- встроенный DC-DC блок питания с клеммами с поддержкой широкого диапазона входного напряжения 7–36 В
- дополнительный разъем SH1, на который выведены GPIO1, GPIO2 и 3.3В – его можно использовать для управления нагрузкой и подключения других датчиков, например для шины I2C.
На плате также имеется чип часов реального времени (RTC) для корректной работы по расписаниям в случае отсутствия подключения к интернету. Кроме того есть еще один встроенный внутри корпуса штыревой разъем для подключения пользовательских внешних устройств, если это будет необходимо.
Всё это упаковано в защитный корпус, крепящийся на стандартную DIN-рейку, его размеры указаны ниже. По высоте он нормально входит в стандартный бокс, а вот по ширине он занимает 1½ модуля, поэтому придется “поколдовать” закрывая оставшееся окно.
Потребляемая мощность от источника питания 12В в при подключенном WiFi около 0,5 ~ 1 Вт, но все, конечно, зависит от сценария применения. В момент опроса шины потребляемый ток от источника питания:
Плата
Вскрывается корпус довольно легко, достаточно поддеть отверткой две защелки по бокам корпуса. И мы получаем доступ к плате и всему, что на ней находится.
ESP32-S3– микроконтроллер (точнее SoC) с рабочей частотой до 240 МГц, поддержкой Wi-Fi и BLE на частоте 2,4 ГГц.- Импульсный преобразователь питания DC-DC, обеспечивает стабилизированное выходное напряжение 5В с током до 2 А для неизолированных цепей.
- Гребенка для подключения к другим модулям или периферии. На нее выведены некоторые контакты SoC.
- Винтовые клеммы питания, сюда можно подавать постоянное напряжение от 7 до 36 В.
- Порт USB Type-C для питания модуля 5 В, загрузки прошивки и отладки по USB JTAG, это не USB-UART преобразователь
- Разъем для подключения перезаряжаемой батареи часов реального времени RTC (SH1.0), и это должна быть именно перезаряжаемая батарейка, а не обычная литиевая.
- Встроенная керамическая антенна для версии
ESP32-S3-RS485-CAN; переключение встроенной антенны на разъем для внешней можно выполнить путем перепайки резистора, об этом подробнее ниже. - Разъем IPEX1 для подключения внешней антенны, для версии
ESP32-S3-RS485-CAN-Uон подключен по умолчанию. - Микросхема flash-памяти объемом 16 МБ.
- Цифровой изолятор сигналов
π163E31– защищает микроконтроллер от помех и одновременно позволяет согласовать логические уровни сигналов. - Микросхема приемопередатчика CAN-шины
- Светодиодные индикаторы:
- PWR – индикатор питания
- RS485 – загорается зеленым, когда порт RS485 отправляет данные; загорается синим, когда порт RS485 принимает данные
- CAN: мигает во время передачи данных
- Кнопка загрузки прошивки ESP32
- Кнопка сброса ESP32
- DC/DC изолятор питания – преобразователь питания 5В → 5В, но с гальванической развязкой.
- Перемычка для подключения согласующего резистора шины RS485.
- Перемычка для подключения согласующего резистора шины CAN.
- Клеммная колодка для шин RS485 и CAN.
- Микросхема часов RTC
PCF85063. - Импульсный DC-DC преобразователь – стабилизатор входного напряжения
- Низковольтный линейный стабилизатор напряжения
ME6217C33M5Gна 3,3В для изолированной части схемы, выходной ток до 800 мА (макс.) - Микросхема приемопередатчика RS485
- Защитные TVS-диоды – эффективно подавляют импульсные перенапряжения и переходные скачки напряжения в цепи.
Схема питания
Схема питания достаточно сложная:
- На первом этапе импульсный DC-DC преобразователь на микросхеме
XL1509-ADJE1понижает входное напряжение до 5В (5Vна схеме) с током до 2А (макс.). Непосредственно не используется. - Затем напряжение 5В проходит через еще один DC-DC преобразователь
B0505LS-1W (K-CUT)с гальванической развязкой и током до 200 мА. Таким образом мы получаем “изолированные” 5В (Relay-5VиSGNDна схеме). “Изолированное” напряжение используется для питания приемопередатчиков шин RS485 и CAN. - Затем неизолированное напряжение 5В понижается до 3,3В еще одним DC преобразователем на микросхеме
MP1605GTF-Z(3V3на схеме) с током до 2А (макс.) – используется для питания микроконтроллера, часов и прочего оборудования. - Изолированное напряжение 5В, в свою очередь, понижается LDO-стабилизатором
ME6217C33M5Gи мы получаем 3,3В с током до 800 мА (Relay-3V3на схеме) – используется для питания приемопередатчиков шин RS485 и CAN.
Входные цепи дополнительно защищены диодами от перенапряжения и переполюсовки.
К точке 5V (неизолированные 5В) через защитный диод подключено напряжение 5В с USB-разъема. Таким образом, можно вполне безопасно одновременно подключать и внешний источник питания и USB-разъем от компьютера, но схема компьютера будет гальванически связана со внешним источником питания (по общей “земле”).
SoC
Модуль построен на базе чипа ESP32-S3R8, то есть с интегрированной 8 МБ PSRAM в одном и том же корпусе микросхемы. Здесь использован именно чип, а не модуль, поэтому необходимая обвязка (кварц, FLASH-память и т.д.) распаяны где-то рядом.
Я проверил чип утилитой Flash Download Tool, результаты соответствуют заявленным характеристикам:
start detect chip...please wait chip sync ... Chip is ESP32-S3 (QFN56) (revision v0.2) Features: Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded PSRAM 8MB (AP_3v3) Crystal is 40MHz MAC: 288485b7451d Manufacturer: 20 Device: 4018 Status value: 0x200200 Detected flash size: 16MB
Антенна
На плате установлена керамическая SMD-антенна C3 на частоту 2,4 ГГц, и одновременно с ней рядом установлен разъем IPEX для подключения внешней антенны. Для переключения режима работы требуется перепаять резистор 0 Ом, обведенный зеленым. Резистор очень маленький, без микроскопа перепаять его сложно, а и с микроскопом тоже, поэтому проще купить готовый вариант: в модификации ESP32-S3-RS485-CAN этот резистор припаян как на фото, для модификации ESP32-S3-RS485-CAN-U – в другом положении.
Стоит отметить, что именно в данном изделии установлена достаточно качественная антенна (в отличие от дешевых плат типа ESP32-C3-MINI), которая обеспечивает сигнал не хуже внешних антенн “от роутера”. Например сигнал от роутера на расстоянии примерно 45 метров, данным модулем ESP оценен на уровне примерно -70 dBi, а на другом контроллере на точно таком-же удалении с внешней антенной – 72 dBi. Лично я не ожидал такого успеха после неудач с дешевыми китайскими платками.
GPIO
Выводы ESP, которые задействованы в схеме либо выведены на разъемы:
Темно-зеленым цветом выделены GPIO, которые уже где-то используются. Светло-зеленые вы можете использовать по своему усмотрению. Питание на гребенку выведено не изолированное. Но на рисунке выше указаны не все GPIO.
Аппаратные контроллеры I2C и UART
Если вы решите подключать к рассматриваемой плате что-то по шине I2C, то вам следует учитывать, что один из двух аппаратных контроллеров I2C уже задействован – он занят RTC на выводах GPIO38 – RTC_SCL, GPIO39 – RTC_SDA (см. следующий абзац). Но на ESP32-S3 имеется ещё один I2C, и его вы можете использовать на любых свободных выводах для своих целей.
С UART немного иная картина. ESP32-S3 имеет три аппаратных контроллера UART. UART0 частно занят портом прошивки и отладки, но на данной плате он не используется. Допустим вы решили собрать шлюз RS485 ↔ CAN и вам нужны оба интерфейса одновременно. И нужен еще один, например чтобы подключить какое-то устройство. Тогда вы можете, используя конфигуратор sdkconfig, перенастроить вывод консоли исключительно на USB JTAG и использовать третий UART контроллер по своему усмотрению. Ну а если вы используете только один интерфейс (RS485 или CAN), то у вас и вовсе в запасе целых два UART.
Часы реального времени
Для обеспечения бесперебойной работы по расписанию, например в автономном режиме или в режиме сна, модуль оснащен микросхемой часов реального времени PCF85063AT. Он подключен к SoC по шине I2C 0 и использует выводы GPIO38 – RTC_SCL, GPIO39 – RTC_SDA, GPIO40– RTC_INT (выход прерывания от часов). Прерывание может быть использовано для того, чтобы “будить” процессор по расписанию, когда тот находится в режиме сна.
Микросхема и кварцевый резонатор расположены на нижней стороне платы, разъем для подключения батареи резервного питания – на верхней.
Важно! Вставлять в разъем обычную CR2032 опасно! Плата будет её заряжать, что может привести к перегреву и возгоранию.
Для корректной работы в этом устройстве нужна перезаряжаемая батарейка 3В, например LIR2032, в продаже они есть – но почти все без провода и разъема. Можно купить вариант с выводами на плату и самому припаять нужный разъем.
Другой вариант: можно просто выпаять диод D7, через который, собственно и идет зарядка. Расположен он, по всей видимости, на верхней стороне платы, около разъема (но нужно проверить! плата уже стоит и работает, я уже этого сделать не могу). В этом случае вы сможете подключить обычную CR2032 для ноутбуков (с проводом и разъемом), в продаже их много и разных.
Изоляция “внешних” шин RS485 и CAN
Отдельный изолированный источник питания для внешних интерфейсов – это еще половина проблемы. Нужно еще “развязать” и цифровые сигналы. Этим занимается микросхемка π163E31.
На плате она выглядит так:
Следует учитывать, что этот цифровой изолятор вносит дополнительные задержки в передаваемые сигналы и ограничивает скорость передачи по шинам. Поэтому максимальная скорость передачи по RS485, может быть ниже теоретического предела.
Шина RS485
Приемопередатчик RS485 собран на микросхеме SP3485EN по классической схеме с принудительным управлением “прием-передача” от отдельной ножки микроконтроллера. Сигналы управления и данные предварительно проходят через “цифровой изолятор”, который описан выше.
Сторона шины RS485 имеет хорошо продуманную двухступенчатую систему защиты, в которой учтен стандарт шины RS-485, у которой диапазон синфазного напряжения на линии может быть в пределах -7…+12 В.
Во-первых на входе установлен газовый разрядник B32-150-LF на 150 В — для отвода основной энергии мощных дифференциальных («линия-линия»), но относительно «медленных» импульсов, например грозовых. Но в данном включении он никак не защитит от синфазных импульсов («линия-земля»). Газовый разрядник — это относительно «медленный» прибор, ему нужно время, чтобы ионизировался газ и он перейдет в проводящее состояние. За это время импульс может успеть дойти до микросхемы и сжечь её, но за это отвечает вторая линия защиты.
Второй эшелон защиты – TVS-диоды SMF6.5СА (дифференциальная защита «линия-линия») и SMF12СА (защита «линия-земля»). TVS-диоды это по сути очень мощные стабилитроны (в данном случае симметричные), они обеспечивают необходимое быстродействие и «подрезают» остаточное напряжение до безопасного для трансивера уровня. Это достаточно мощная и энергоемкая защита, но не самая “быстрая”.
Параллельно им включена SM712 — это специально разработанный асимметричный быстродействующий TVS-массив: внутри у него два диода на 12 В и два на 7 В. Это позволяет ему идеально попадать в рабочий диапазон напряжений RS-485 и не мешать связи, но при этом быстро и точно «срезать» опасные выбросы (ESD, короткие импульсы), не давая им дойти до микросхемы трансивера.
Между разрядником и TVS-защитой включены PPTP BSMD1206-050 – самовоcстанавливающиеся предохранители, которые призваны защитить сами TVS-диоды от длинных импульсов или постоянного напряжения, если таковое случайно попадет на линии связи.
На плате присутствует необязательный терминатор (подключаемый перемычкой) – оконечный резистор 120 Ом, который вы можете подключить, если это крайнее устройство на линии.
Интерфейс RS485 (UART) имеет теоретическую скорость передачи до 5 Мбит/с. Однако из-за добавления схем изоляции, преобразования уровней и защиты на плате фактическая рабочая скорость будет несколько ниже. Производитель рекомендует устанавливать значение не выше 115200 бит/с. Точное значение скорости передачи следует проверять в зависимости от реальной среды связи и приложения.
Шина CAN
Шина CAN 2,0 (TWAI) реализована на микросхеме TJA1051T/3/1J – это быстродействующий современный трансивер для шины сети контроллеров производства NXP, совместимый с 3.3 В и 5 В логикой. Версия /3 означает, что VIO (вывод 5) питается от 3.3 В, а VCC (вывод 3) — от 5 В. Это позволяет напрямую подключать его к ESP32 (3.3 В) без согласования логических уровней. Но здесь, также, как и в случае с RS485, здесь и питание и линии данных изолированы от основной схемы микроконтроллера.
Сторона шины защищена специализированной TVS сборкой на 24В – SM24CANB-02HTG.
На плате присутствует необязательный терминатор (подключаемый перемычкой) – оконечный резистор 120 Ом, который вы можете подключить, если это крайнее устройство на линии связи.
Интерфейс CAN (TWAI) имеет теоретическую скорость передачи до 1 Мбит/с.
Настройка платы в IDE
По сути это обычная ESP32-S3, поэтому программировать ее можно в любой удобной вам IDE и с любым фреймворком: Arduino, PlatformIO или ESP-IDF. На сайте производителя есть специальная статья, посвященная этому (на английском).
Я за полчаса запустил на этой плате из старых проектов – “метеостанция”, собранный в PlatformIO и для платформы ESP-IDF. Всё заработало “с полпинка” – все заработало сразу и без каких либо проблем. Мне потребовалось только изменить разметку флеш памяти, дабы иметь возможность использовать весь доступный размер.
Для работы вам понадобится USB-кабель, компьютер и установленная IDE. Сайт разработчика рекомендует также иметь RS485↔USB и CAN↔USB адаптеры для отладки передачи данных, но можно просто воспользоваться каким-то датчиком.
Настройка платы в Arduino IDE
Если вы планируете работать с данным модулем в Arduino IDE, то в списке доступных плат этот модуль вы вряд ли найдете. Рекомендуется выбрать универсальный профиль ESP32S3 Dev Module и вручную установить параметры платы:
Руководство по настройке Arduino IDE для работы с микроконтроллерами семейства ESP32 вы найдете по ссылке.
Демонстрационных примеров “не густо”, но для удобства освоения модуля компания Waveshare разработала несколько простых библиотек, которые вы можете найти в архиве с демо-скетчами:
- WS_Information – информация о плате
- WS_GPIO – выводы, жестко привязанные к интерфейсам платы
- WS_Struct – общие типы данных
- WS_RTC – утилиты для работы с часами
- WS_CAN – простейшая библиотечка для работы с CAN поверх UART
- WS_RS485 – простейшая библиотечка для работы с RS485 поверх UART
- WS_PCF85063 – работа с микросхемой часов
- WS_WIFI – WEB-интерфейс для работы с платой
Так же в архиве можно найти несколько популярных библиотек.
Настройка платы в ESP-IDF
Демонстрационных примеров для ESP-IDF нет. В Waveshare, видимо, посчитали, что они никому не нужны.
В ESP IDE необходимо выбрать TARGET = esp32s3 и соответствующий порт, все остальные параметры платы настраиваются через систему конфигурации проекта sdkconfig.
Источники информации
Страница описания продукта на сайте производителя
Справочные материалы от производителя (Wiki)
-= Каталог статей (список по разделам) =- -= Архив статей (плитки, все подряд) =-
























