Для автоматизации большого дома появилась задача включения/выключения мощных нагрузок — насосов бассейна, бойлеров и даже гостевых комнат целиком (когда в них никто не живет), причем хотелось еще и знать количество потребляемой ими энергии. Но готовых устройств с необходимыми характеристиками (и даже близко к ним) — не нашлось. Пришлось выдумывать самому. Первая версия оказалась не очень пригодной к эксплуатации, но показала, что немного труда и получится вполне законченное устройство.
Признаюсь честно, опыта в создании мощных устройств переменного тока у меня практически нет. Поэтому при разработке этого устройства я постарался перестраховываться по-максимуму — грозоразрядники, широкие дорожки, предназначенные для напаивания мощных медных шин, экранирование в промежуточных слоях платы. В первой версии не обошлось без эксцессов и ошибок (например, в даташите на модуль питания Voltage output 1 и Vout1 — оказались не одним и тем же, так что пришлось резать дорожки, а разъем microUSB я развел просто неправильно, так что порт на нем не работает).
Для коммутации были выбраны 80-амперные бистабильные реле EW80. Надо сказать, выбор не слишком удачный — корпус негерметичный и в местных условиях большой влажности может оказаться непригодным. К сожалению, выбор мощных бистабильных реле у доступных поставщиков не слишком велик, так что придется либо заливать герметиком каждое реле отдельно, либо корпус целиком. В качестве управляющих ключей я взял имевшиеся под рукой драйвера мосфетов ADP3624 (по одному на каждую пару реле), позволяющие подавать напряжение на обмотки в обоих полярностях и обесточивать их после срабатывания. Потребление измеряют датчики холла ACS759-100, а напряжение сети — через маломощный трансформатор. В качестве АЦП и управляющего микроконтроллера выступает STM32F373CBT6.
Для упрощения подключения готового устройства — входное напряжение подается на один разъем, а ко всем каналам коммутации будут протянуты медные шины 7x3мм, напаиваемые поверх дорожек платы. В условиях возможно очень длинных проводов до нагрузки (многие десятки метров) — было решено коммутировать одновременно и ноль и фазу, чтобы избежать проблем с наводками, перекосами и просто для безопасности. Так как плата не предназначена для работы без внешних устройств защиты («пробки», УЗО) — на ней отсутствуют предохранительные элементы, имеются только грозоразрядники для защиты от высоковольтных импульсов. На каждом канале имеется индикаторный светодиод, также есть схема подачи сигналов тревоги («пищалка» и реле для 10 ампер внешней нагрузки), но в программном обеспечении их использование пока не реализовано.
Управляется устройство по последовательному порту с гальванической развязкой (теоретически есть возможность использовать и USB-порт), с простым протоколом, аналогичным примененному в моем диммере. Позднее я заменю его на MQTT-over-serial.
Должен сразу сказать, что схема получилась не очень удачной и в следующей версии немного изменится — стабильность напряжения 3.3 вольт для питания датчиков тока и контроллера не выдерживает никакой критики, что приводит к погрешностям измерения мощности в пару-тройку десятков ватт (даже при отсутствующей нагрузке), скорее всего я поставлю стабильные источники референсного напряжения 3.3v на каждый датчик отдельно. Возможно также стоит использовать 16-битный АЦП в контроллере, но, к сожалению, скорость его работы не слишком высока — сейчас ток и напряжение измеряется примерно 5000 раз в секунду, что теоретически можно делать и 16-битным, но мне пока не удалось добиться устойчивой его работы с множеством каналов через DMA.
Прошивка контроллера раз в десять секунд выводит данные о потреблении нагрузки на каждом канале и сетевом напряжении, принимая команды на включение-выключение каналов. Софт очень сырой, его тоже придется порядком переделывать и добавлять различные функции контроля (например на перенапряжение в сети, перегрузку, перегрев платы и тому подобное).
Автор: vasimv