Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Путь LED-самурая
Немного предыстории — около года назад я опубликовал обзорную статью, где была описана минимальная отладочная плата для микроконтроллера серии STM32F405. Особого интереса тогда публикация не вызвала. А зря. Согласен, слишком много «расплодилось» подобных решений на просторах интернета.
Но полезное, как известно, никогда не пропадает даром. И этот случай — тому подтверждение. Недавно коллега открыл небольшую фирму, занялся строительством жилых домов «под ключ». Одним из устройств, которое ему было очень нужно — это система управления динамическим освещением.
Паяльник, гугл, отрицание, гнев, торг, депрессия, принятие — вот его путь в одном предложении.
Теперь обо всем по порядку.
Предыстория
В первой строке поиска, выдаваемого поисковыми системами, будет конечно же система, собранная на arduino. Признаюсь — я не имею опыта большого работы с этой платформой, но наш интерес лежит в области графического языка программирования Ladder, чем оный похвастатья (пока по крайней мере) не может. Среди прочего, там значилось 16 разрядный ШИМ и 21 выходной канал, плюс автоматическая настройка яркости в зависимости от освещённости. И вишенка на торт — наличие онлайн режима, то есть контроль работы алгоритма программы без изменения её функциональности.
Конечно же, первая мысль была — вот оно, реальное применение! Добавить выходные каналы в прошивку, и на языке LAD реализовать алгоритм, раскидав по подпрограммам типичные задачи. Оживить шину I2C и подключить датчик освещенности. И само собой, всё на базе операционной системы реального времени. Отладка и программирование — через порт USB при помощи бесплатной программы Autoshop. Всё просто.
Реализация проекта — аппаратная часть
Все подобные проекты имеют в своей основе низковольтную часть, рассчитанную на напряжение 12В. Я решил, что не стоит отходить от этого решения. Выходные ключи типа NCV8402 рассчитаны на номинальный ток 2А, напряжение до 42В, имеют защиту от перенапряжения, короткого замыкания и перегрева. Да, они конечно дороже обычного MOSFET с такими же параметрами, но меня подкупило наличие защит. Увы, контроллер ничего не будет знать, если что-то будет не так с выходным каналом.
Но мы то умножать умеем! Если взять 21 канал, да помножить на 2А, получим 42А. А это весьма приличный ток, и клеммные присоединения на плате рассчитаны только на 10А. Что же это получается, «Акела промахнулся?»? На этот вопрос есть ответ, и он расположен с обратной стороны печатной платы. Вы можете увидеть фото под спойлером.
Фото печатной платы - вид снизу
Как видно на фото, здесь подготовлены широченные дорожки для наплавления дополнительного слоя проводника припоем. А для увеличения нагрузочной способности силовые провода можно припаять напрямую на эти дорожки.
Продолжим нашу фотосессию.
Фото печатной платы - вид сверху
Собранная печатная плата
Немного коснусь визуализации. Так как нет у меня своей виллы, на которой может потребоваться подобная система, я собрал имитацию, используя зелёную пластину от детского набора для пластилина и самую дешевую LED ленту из ближайшего хозяйственного магазина. Вот так она выглядит — фото под спойлером.
Имитатор лестницы
В качестве датчика освещённости я применил готовую плату с сенсором MAX44009. Это старый знакомый, имеет диапазон измерения от 0,045 до 188000 люкс. Использование именованных физических единиц в подобном проекте — это несомненно плюс. Наличие интерфейса I2C меня вполне устраивает — простой и надёжный.
Ещё мне захотелось иметь аппаратные часы с календарём, благо что для этого надо всего лишь поставить батарейку. Плюсом к этому получаем энергонезависимую память — которая, для данного проекта хоть и не очень важна, но это хороший бонус для других решений.
Да, всякие вкусности типа гальванических развязок применять не стал — применение далеко не промышленное, а сильно удорожать прибор совсем не хотелось.
Товарищам-эстетам замечу, что я знаю про протокол DMX. ШИМ для управления светодиодами в наше время выглядит как динозавр в берёзовой роще. Но цена на обычную ленту сейчас меньше на порядок( судя по ценам в местных розничных магазинах), и чтобы ночью босяком прошлёпать к холодильнику, подсветки белого цвета без оттенков радуги будет вполне достаточно.
Принципиальная электрическая схема и файлы гербер доступны для скачивания по ссылке с github.
Программная часть
Когда дело касается программирования, то мне всегда нравится, когда программа понятна для человека, который её не писал. Такого эффекта можно добиться, если в одном месте собрать части кода, которые выполняют одну определённую задачу — например, блок драйверов, управление выходными каналами, подпрограмма инициализации при включении и т.д.
По ссылкам ниже вы сможете скачать программу, написанную в среде программирования AutoShop v3.02. Ссылка на AutoShop.
В программе все комментарии на английском. Делаю так потому, чтобы было понятно всем, включая моего заказчика, который родом из Сербии.
Как это работает
Так как аппаратная часть выполнена особым образом, то пришлось использовать зарезервированные адреса в области памяти системных регистров. Например, D8030 — этот регистр содержит величину освещённости в люкс. Из-за того, что регистр 16 разрядный, он имеет максимальную величину 32677 люкс при 188000 возможных. Далее, система имеет 4 аналоговых входа(3.3В на входе равно 4095 в регистре АЦП), и значение этих входов соответственно передаётся в регистры D8031 -D8034.
В данной версии программы я эти входа не использую, но это весьма хороший задел на будущее.
Немного опишу функционал — плата имеет пять дискретных входов, X0-X4. X0 и X1 используются для запуска алгоритма при движении вверх по лестнице, а X3 и X4 для запуска при движении вниз. Входа предназначены для ручного управления от выключателя и для управления от пироэлектрического датчика.
Фотография платы с отсоединённым блоком ЦПУ под спойлером.
Внешний вид платы
При нажатии на выключатель активируется защита от дребезга контактов длительностью 300 мсек, и если таймер отработает положенное время — то запускается соответствующая программа.
Вход Х2 предназначен для выбора программы. Сейчас реализовано две программы — плавное включение и отключение всех ступеней одновременно и плавное включение одна за другой и плавное выключение всех.
Работа программы 1
Работа программы 2
Имеется защитный таймер на 120 секунд — по истечении этого времени алгоритм автоматически отключает запущенную программу.
Можно настроить и количество ступеней — от 2 до 21. Для этого просто надо изменить значение регистра D98 в подпрограмме инициализации SBR_init. Несколько типичных скриншотов программы показаны ниже. Для отображения картинки в большом масштабе — ПКМ + Открыть картинку в новой вкладке.
Подпрограмма инициализации
Реализация драйвера ШИМ
Часть реализации программы 2
Подпрограмма прерывания с периодом 5 мсек
Редактор программы позволяет не только изменить программу, но и загрузить её в устройство и проверить её работу. Проверка, как и программирование, происходит визуально. При этом работа устройства не нарушается! Это кажется невероятным, но это так.
Режим онлайн
Дополнительные материалы
Ниже будет приведена ссылка на github, где в открытом доступе схема для обоих модулей и прошивка, а также gerber файл для производства печатной платы.
Проект на Github
ссылка
Дальнейшее развитие
Как и полагается, дальнейшее развитие подразумевает собой решение технических проблем, свойственных прототипу. К сожалению, проблемы имеются и в данном приборе. Например, при подаче питания происходит автоматическая активация выхода PB4 как ножки NJTRST интерфейса JTAG. И увы, это приводит к «промаргиванию» выходного канала. Если для F1 серии достаточно в регистр AFIO_MAPR записать в битовое поле SWJ_CFG[2:0] соответствующее значение, то можно подобного избежать. Но для F4 серии подобного мне обнаружить не удалось. Если у вас есть прямое решение, не связанное с костылями — то прошу, поделитесь.
Конечно же, тут просто просится развязка хотя бы на оптопарах, шина 485, побольше гальваники… Я это тоже прекрасно понимаю, но пока тестирую на вот таком прототипе.
Я готов бесплатно дать точно такой же модуль тому, кто предложит наиболее интересный вариант сотрудничества в плане дальнейшего развития этого решения.
Жду ваших комментариев и отзывов.