Существует несколько способов решить нашу задачу. В основном они различаются способами реализации драйвера светодиодного светильника, но именно этот аспект является решающим для выбора микроконтроллера.
Вариант №1
Все управление драйвером (генерация ШИМ, регулирование тока и напряжения в каждом канале, контроль КЗ и обрывов) осуществляется микроконтроллером (программно).
Преимуществами этого метода является небольшое количество внешних компонентов и их небольшая стоимость. Кроме микроконтроллера нам нужна только пара транзисторов и gate драйвер. Также к преимуществам можно отнести полный контроль над логикой работы драйвера — можно создать любой регулятор, какой только понравится.
Существенным недостатком такого метода является повышенная сложность программной части — делать всё придется ручками. Токовый драйвер — это система с обратной связью (строго говоря — с двумя: по току и напряжению), и обрабатывать эти обратные связи придется вручную. Кроме того, вполне естественное желание поднять частоту ШИМ (в общем случае, чем она выше — тем лучше) навязывает нам в этом случае более мощный микроконтроллер.
Вариант №2
Управление каналом мы делегируем специально обученной микросхеме-драйверу. А сами будем только задавать ей максимальный ток и управлять яркостью с помощью специального вывода на микросхеме.
Преимуществом является то, что мы избавляемся от самого сложного программно-аппаратного куска, заменив его отработанным аппаратным решением. Это снижает сложность ПО, позволяет нам использовать слабенький 8-битный МК.
Но, за все нужно платить. В данном случае недостатком метода является стоимость. Стоимость драйверов (а их нам надо аж 4 штуки) и обвязки к ним. Обвязка, к слову, может быть довольно многочисленна (сильно зависит от конкретного драйвера), т. к. драйвер представляет из себя по сути DC/DC преобразователь с контролем тока.
Кроме того, наличие драйвера не избавляет нас от необходимости иметь 4 канала ШИМ для управления яркостью. Но этот ШИМ не является для драйверов рабочим, а значит что высокая частота тут не нужна.
Второй вариант предпочтительнее. Изобретать деревянные велосипеды интересно только по молодости, когда у тебя есть неколебимая уверенность, что все вокруг ничего не понимают и ты один знаешь как надо. Чуть позже приходит понимание, что в мире полно умных людей (в том числе тех, кто умнее тебя), которые всё уже придумали до тебя. Иногда имеет смысл положиться на их опыт и заимствовать хорошие решения.
Выбор микроконтроллера
Итак, настало время выбрать МК. Микроконтроллер будет выполнять следующие задачи:
- генерация ШИМ сигналов на 4 канала драйвера;
- обмен данными с сервером по интерфейсу Ethernet;
- обработка дискретных входных сигналов (выключатель, датчики движения и т. д.);
- запись настроек в энергонезависимую память.
Нам потребуется как минимум 14 GPIO (2 выключателя, датчик движения, датчик освещенности, 2 кнопки для ручного диммирования, 4 выхода ШИМ, 4 входа для переключателей на плате, управляющих различными настройками устройства). UART для отладки, SPI для связи с сопроцессором W5500, обеспечивающим Ethernet тем, у кого его нет, но очень хочется.
Пришло время сравнить пару-тройку наиболее распространенных МК, чтобы понять что нам больше подойдет.
МК |
GPIO* |
PWM channels |
SPI |
Ethernet |
Стоимость решения**, руб. |
ATMEGA8535 | 27 | 4 | + | MCU+W5500 | 237+241=478 |
MSP430G2553 | 10 | 6 | + | MCU+W5500 | 146+241=387 |
STM8L151K | 23 | 7 | + | MCU+W5500 | 88+241=329 |
TM4C1294 | 80 | 8 | + | MCU | 1300 |
STM32F107R | 45 | 16 | + | MCU+EthPHY | 377+142=519 |
* без учета мультиплексированных с SPI и UART
** имеется в виду стоимость решения, обеспечивающего связь по Ethernet. Цены указаны по данным на 30.10.18 у одного из поставщиков в СПб с опцией поставки от 1 дня и количеством от 1 штуки.
И вот тут наступает неожиданный поворот сюжета! Казалось бы, победитель определен — это самый дешевый вариант, удовлетворяющий нашим требованиям. Но не тут то было! Все дело в том, что мы пилим openSource проект) А это значит, что использовать коммерческие IDE для этого — не комильфо! Более того, недавно я полностью перешел на линукс, а значит искать надо не просто бесплатную IDE, но и кроссплатформенную. Кроссплатформенность нужна для того, чтобы человек, который захочет повторить мой проект на винде смог это сделать просто открыв мой проект без дополнительных танцев с бубном. Именно поэтому варианты вроде «vim + sdcc + openocd + stm8_gdb» я не рассматриваю.
МК |
IDE |
Язык программирования |
Лицензия |
Windows |
Linux |
ATMEGA8535 | Atmel Studio |
С/C++ |
Платная |
+ |
— |
IAR for AVR |
С/C++ |
Платная |
+ |
— |
|
Codevision AVR |
С/C++ |
Платная |
+ |
— |
|
Arduino IDE |
Wiring |
Бесплатная |
+ |
+ |
|
MSP430G2553 | CodeComposer Studio |
C/C++ |
Бесплатная |
+ |
+ |
IAR for MSP |
C/C++ |
Платная |
+ |
— |
|
STM8L151K | IAR for STM8 |
C/C++ |
Платная |
+ |
— |
IDEA |
C/C++ |
Бесплатная |
+ |
— |
|
TM4C1294 | CodeComposer Studio |
C/C++ |
Бесплатная |
+ |
+ |
IAR for ARM |
C/C++ |
Платная |
+ |
— |
|
STM32F107R | IAR for ARM |
C/C++ |
Платная |
+ |
— |
CosmicIDE |
C/C++ |
Платная |
+ |
— |
|
TrueSTUDIO |
C/C++ |
Бесплатная |
+ |
+ |
|
Keil |
C/C++ |
Бесплатная |
+ |
— |
И вот теперь, когда мы уточнили условия, оказалось что как раз под STM8 нормальной кроссплатформенной бесплатной IDE нету :(. Arduino IDE вроде бы везде работает, но не дает нормального доступа к железу, заставляя нас писать на каком-то извращенном Wiring с обещанием потом всё собрать как надо.
Итого, в сухом остатке у нас только STM32 с TrueSTUDIO от Atollic. Для этой задачи он, наверное, несколько избыточен, но в таком варианте мы сможем прикрутить Ethernet прямо к контроллеру, не используя внешние сопроцессоры (типа WIZnet W5500). Кроме того, если мы захотим перейти к варианту с дискретным драйвером канала у нас будет резерв по вычислительной мощности для реализации программного регулятора.
На этом, пожалуй, всё с микроконтроллером. Следующим важным этапом будет выбор драйвера.