Всем привет!
Недавно мы писали о том (раз, и два), что выпустили новую версию контроллера для автоматизации — Wiren Board 5. Сегодня мы подробно расскажем, пожалуй, о самом главном в контроллере — его модулях расширения.
![image](https://habrastorage.org/files/ae7/908/2bb/ae79082bb5de430391e26b92bb9bcd99.jpg)
Зачем это нужно.
Нашей первой идеей было сделать достаточно универсальный контроллер для домашней и коммерческой автоматизации — с разными проводными и беспроводными интерфейсами, RS-485, входами для подключения кнопок, реле и т. д. Преимуществом такого подхода является очень высокое отношение функциональность/цена: за небольшие деньги пользователь получает кучу интерфейсов.
Опыт применений первых версий контроллеров показал, что обычно используется только несколько интерфейсов.
Причем если используются проводные интерфейсы, то их быстро начинает не хватать: например, если счетчики и периферийные устройства подключаются по RS-485 и имеют разные протоколы, то часто они не совместимы и их надо подключать на разные порты. Если подключаются кнопки, счетчики и датчики с выходами “сухой контакт”, то соответствующих входов нужно очень много и их не хватает, и т. д.
Часто заказчики просят какие-то очень специфические функции. Конечно, можно “перерисовать” контроллер, чтобы реализовать нужную функциональность, но запуск новой ревизии оборудования, пусть даже с небольшими изменениями — это большое дело, работы на 2-3 месяцев:
- Четырехслойная плата — большие сроки изготовления, как прототипа, так и серии.
- Вручную платы такой сложности паяются плохо — серию необходимо отдавать на автоматический монтаж, а не на ручной.
- Для каждой новой версии платы требуется новая оснастка и софт для проверки.
Из-за этого очень хотелось бы иметь контроллер в виде:
- Базового контроллера, с базовым функционалом и большим заделом на расширение
- Ряда простых плат расширения, “без мозгов”, с удобным подключением.
Такая схема имеет следующие плюсы:
- Специфические функции легко добавить в контроллер. Под заказчика легко изготавливаются платы расширения. Они двухслойные, простые в разработке и удобные для ручной пайки.
- Новые ревизии (исправление ошибок, улучшение конструкции) для контроллера и плат расширения делаются отдельно. Ускоряется разработка и запуск в продажу.
В результате долгих раздумий родилась модульная конструкция WB5.
Первый тип модулей — это напаиваемые на плату контроллера микросборки.
- GSM (при монтаже на автоматической линии на часть контроллеров не устанавливаем модуль). Неудобно, но другого способа не придумали.
- Wi-Fi и радио 433МГц. Маленькие платки, припаиваются уже на собственных мощностях перед сборкой партии для заказчика.
Про другие типы расскажем подробнее.
Мезонинные модули
![image](https://habrastorage.org/files/5bc/be0/c82/5bcbe0c82e3543aca4f94c348cf90fd4.jpg)
Эти модули устанавливаются вторым этажом внутрь корпуса на DIN-рейку:
- Аккумуляторный модуль. С его разработкой пришлось изрядно повозиться. Там все сложно, но не интересно.
- Второй Ethernet (скоро выходит)
- Дисплей (в планах)
Модули расширения.
Это маленькие платки, ставятся вертикально в контроллер. В контроллере Wiren Board 5 для них есть два слота, на каждый слот по три клеммника. На гребенки выведены питание, интерфейсы UART, SPI, I2C, GPIO. При сборке платы прижимаются корпусом сверху, так что выпасть от вибрации не смогут.
Уже разработаны:
-RS-232.
-CAN (Изолированный)
-RS-485 (Изолированный)
-АЦП — (скоро будет) входы напряжения, входы 0-20мА, датчики PT100 и PT1000
-ЦАП — выходы 0-10В
-3 входа "сухой контакт"
-GPS/Glonass
-Дополнительный 1-Wire
-Карта microSD
-Реле SPDT 6А
В основном они простые, про схемотехнику рассказывать особо нечего, поэтому идем дальше.
Модули ввода-вывода.
А вот про этот тип стоит рассказать подробней.
Часто возникают задачи, когда требуется большое количество каналов ввода-вывода — подключение импульсных счетчиков, управление контакторами и т. д. В этом случае, подключаем внешние, боковые модули, которые стыкуются к контроллеру последовательно до 8 штук.
Для модуля ввода-вывода нужны дополнительные GPIO. Проще всего это сделать с помощью так называемых GPIO расширителей по I2C. У нас используются расширители MCP23008 и MCP23016. У них есть три ножки для выставления адреса, таким образом возможно иметь до 8 устройств на шине. Адреса раздаются так — 000 100 010 001 — последовательно по модулям.
На модулях входов инвертируются адреса, и они получают адреса 111 011 101 110. Это позволяет подключать до 8 штук (4+4) и в перспективе автоматически определять их тип — вход это или выход.
![image](https://habrastorage.org/files/e16/4c5/096/e164c50964e343458e173a533fc8a6aa.jpg)
Слева направо модули: входов/выходов TTL, “сухих контактов”, “High side switch”, “Входы 220V”, релейный блок.
Подробней о каждом:
Релейный блок.
8 Реле на 10А@230В, с защитой от искрения контактов на варисторах.
Чтобы уменьшить потребление и нагрев, после включения реле можно снизить ток на управляющей катушке в 2 раза. Простейший способ — использовать схему как на рисунке 1 — Включать реле двумя транзисторами, один с резистором. Подаем сигнал — открываются оба транзистора — течет номинальный ток, через время R1C1 транзистор Q1 закрывается — ток течет через R2. Уменьшив ток в 2 раза, уменьшаем потребление в 2 раза.
![image](https://habrastorage.org/files/233/72e/523/23372e523f8a43ee851e089f2fe2a359.png)
Более разумный способ управления реле — использовать ШИМ. Тогда, снизив ток в 2 раза, уменьшим потребление в 4 раза. Хорошо, когда есть микроконтроллер: у него много каналов шима, можно управлять им напрямую транзистором. Но что делать, если ШИМа нет? Надо его сделать. Возьмем 555-ый таймер, точнее его реинкарнацию MIC1557, и пусть он нам генерирует ШИМ со скважностью 50%. На диодах собираем логический элемент “ИЛИ”. Так при включении любого из реле таймер отключается и на реле поступает полные 5В.
![image](https://habrastorage.org/files/d07/5c8/ad8/d075c8ad8ed243729fe9206f841fec55.png)
Модуль “Входы 220V”
Модуль для определения наличия напряжения в сети. 8 каналов.
Самое простое решение для мониторинга 220 V — оптрон с резистором. Проблема такого простого решения в том, что у оптронов большой разброс CTR (коэффициент передачи по току) и для надежной работы требуется хотя бы 1 ма тока, и срабатывать вход должен от 50В АС — в итоге на резисторе выделяется много тепла. А т. к. входов 8 — то на плате будет очень жарко.
Есть разные способы уменьшения нагрева. Например, можно использовать оптрон с транзисторным Дарлингтоновским выходом (большой CTR), а вместо резистора использовать конденсатор. Конденсатор мы ставить не стали, а использовали следующую хитрость: если посмотреть на характеристику оптронов “CTR от входного тока”, то видно, что кривая имеет пик при токе 1-2 ма. Поэтому если подавать ток короткими импульсами по 1 ма, можно обеспечить высокий CTR при низком среднем входном токе. Динистор и конденсатор формируют нам эти импульсы.
Пояснения по схеме: R4-R6 заряжают С2, при достижении ~35В срабатывает динистор, при этом R3 задает ток 1-2 ма через оптрон. D1 защищает оптрон от обратной полярности. R1 C1 усредняют импульсы.
Модуль “сухих контактов”
Для подключения кнопок, импульсных счетчиков и т. д.
Вход срабатывает при замыкании на землю.
Есть групповая гальваническая изоляция. Защита от подачи напряжения до 30 В.
Модуль входов/выходов TTL
Это GPIO с защитой от перенапряжений на полифьюзе и защитном диоде. Уровни — 5V TTL.
Модуль “High side switch”
Предназначен для управления низковольтной нагрузкой (на выход подает напряжение 12- 45В, ток до 0,5А).
Тут мы решили отойти от любимого принципа изобретать свой велосипед и использовали готовую микросхему типа интеллектуальный ключ BTS4880R. В микросхеме есть встроенная защита от перенапряжений, перегрева, короткого замыкания и т. д.
Заключение
В этой статье мы рассказали про аппаратные решения, которые используются в модулях расширения и ввода-вывода для Wiren Board. В следующей статье расскажем про их применение, зачем они нужны и как в целом пользоваться контроллером.
P.S.
Наша компания расширяется, и мы ищем в команду ещё одного системного программиста под Linux — разрабатывать ПО для наших устройств. Задачи интересные, условия гибкие, код пишем сразу на гитхаб. Подробности в описании вакансии.