LED controller: выбор микроконтроллера

Существует несколько способов решить нашу задачу. В основном они различаются способами реализации драйвера светодиодного светильника, но именно этот аспект является решающим для выбора микроконтроллера.

Вариант №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). Кроме того, если мы захотим перейти к варианту с дискретным драйвером канала у нас будет резерв по вычислительной мощности для реализации программного регулятора.

На этом, пожалуй, всё с микроконтроллером. Следующим важным этапом будет выбор драйвера.

About the Author: admin

Добавить комментарий