Хочу поделиться с сообществом своей реализацией многофункционального модуля. Выглядит вот так:
Размеры 200x100 мм. В сравнении со стандартными корпусами gainta:
Крепится на дин рейку при помощи трёх таких штуковин:
Изначально планировал использовать корпус d9mg, однако в него убиралось только 12 реле, 10 дискретных входов и 9 аналоговых входов, что меня совсем не устраивало. Поэтому было решено обойтись без корпуса, но использовать держатели печатных плат на дин рейку.
На борту устройства:
- 18 каналов реле (до 220В до 7А)
10 дискретных входов (до 32В)
10 дискретных выходов (до 24В до 0.5А)
10 1wire входов (сейчас поддержка только ds18b20)
8 аналоговых входов (0-10В)
6 выходов шим (до 32В до 5А)
Изначально планировал использовать вместо электромагнитных реле – твердотельные реле на 2А OMRON G3MB-202. На алиэкспресс они стоят по $1. Однако оказалось, что серию G3MB больше не выпускают, а на её место пришла G3MC. И на digikey одна релюшка стоит $7, что определённо слишком дорого с учётом курса. И что сейчас продают на алиэкспресс в качестве G3MB не понятно – то ли подделку, то ли запасы.
Дискретные входы реализованы через оптопары, выходы – через полевые транзисторы IRF7303. ШИМ – биполярный драйвер плюс полевик IRF540. На рабочем проекте на них закреплены ещё радиаторы.
Так же выведен разъём SPI, что позволяет подключать сдвиговый регистр или внешний АЦП и т.п.
Управляется всё, конечно же, посредством интернета через браузер или GET/POST запросами.
Так же реализован MODBUS RTU, т.е. можно управлять по RS-485.
У каждого входа/выхода можно настроить элементарную логику работы. Понятнее будет из фотографий админки.
Больше здесь: https://drive.google.com/folderview?id= ... aring#grid
Например, у нас сработал дискретный вход, мы проверяем значение на аналоговом входе и температуру на 1wire входе, в зависимости от показаний включаем реле или дискретный вход, или шим. Или просто сообщаем серверу о срабатывании входа и ждём указаний. Или можем отправить команду на другой модуль.
У аналоговых и 1wire входов можно задать настройки гистерезиса, т.е. сделать терморегулятор.
У выходов (дискретных, реле, шим) есть возможность задать расписание работы. Например, каждый будний день включать в 5 вечера и выключать в 7.
Эта простая логика позволяет избавить центральный сервер от не нужной работы. Самый элементарный пример это датчик движения, подключенный к дискретному входу и датчик освещённости, подключённый к аналоговому входу. Есть движение и темно – включим свет.
В основе лежит STM32F417VET6 (168MHz, 512KB Flash, 128KB SRAM + 64 KB CCM). В качестве phy – LAN8720A (RMII 10/100 Ethernet).
Всё поставлено на рельсы FreeRTOS. TCP/IP стек LwIP.
Если пинговать флудом (~ по 250 пакетов в секунду) пакетами по 1.5KB в течении, например, суток, то теряется от 1 до 3% пакетов.
У stm32 нет eeprom, как у atmega, но данные можно хранить во флеш. Таким образом в начале флеша хранится бутлоадер (позволяет загружать прошивку через интернет), далее пользовательские настройки бутлоадера, потом пользовательские настройки прошивки и затем, непосредственно, сама прошивка.
Батарейка нужна для часов реального времени, которые встроены в stm32, точнее говоря для их счёта, когда отсутствует питание.
Печатная плата получилась 4-слойной, так как на ДПП не удалось адекватно развести питание.
Заказывал на pcbway.com. За 5 плат получилось $113 плюс доставка.
Паял феном. Единственная проблема была с LAN8720, так как она в корпусе QFN, и даже феном не получалось с первого раза правильно припаять.
Принципиальная схема здесь: https://drive.google.com/file/d/0B2wCEv ... ef=2&pli=1
Стоит отметить, что на изображениях выше показана первая версия модуля, во время эксплуатации которого были выявлены недочёты. Соответственно схема и фотографии в некоторых моментах не совпадают и на устройстве из фотографий нет некоторых элементов.
Забавная ситуация получилась с релюшками. В первом варианте они питаются от 5В. Доверившись описанию на сайте магазина, я посчитал что они будут потреблять порядка 0.6А. Соответственно, регулятора напряжения MC34063 мне бы хватило. Однако впоследствии оказалось, что они потребляют целых 1.3А, из-за чего всё ужасно сильно грелось. 0.6А – для питания 12В. Таким образом пришлось переделывать схему питания: входное напряжение 7-35В через LM2596 понижается до 5В, дальше через MC33269 до 3.3В и повышается через MC34063 до 12В для питания релюшек и полевых транзисторов.
Исходный код бутлоадера и прошивки выложу в ближайшее время, если будет интерес, так как его нужно немного «причесать».
Что в планах:
- добавить поддержку большего количества 1wire устройств
реализовать SSL, благо 417 поддерживает шифрование на уровне железа
сделать аналогичные модули, но меньших размеров с поддержкой Wi-Fi (на модуле SPWF01SC от ST) для размещения в каждой комнате (т.е. чтобы не тянуть всю проводку в щиток)