Модификация LED фонарика Космос c6011

в 7:46, , рубрики: stm32f103, микроконтроллер, программирование микроконтроллеров, светодиоды

Решил поделиться результатами своего-хобби проекта, возможно кто-то из любителей DIY найдет это инересным и захочет повторить или как-то использовать. Был у меня такой фонарик "Космос 6011LED", его все еще можно купить на ozon или wildberries (и не только там). Однажны он сломался, я его разобрал и увидел что корпус очень хорошо подходит для модификации - все модульное, есть свободное место и можно заменить его электронную начинку своей собственной: поменять светодиоды на цветные, добавить микроконтроллер для "умного" управления их яркостью и в итоге сделать его многоцветным и многорежимным.

В оригинале фонарик дает холодный белый свет. Слева на фото оригинальный экземпляр, справа - модифицированный.

Оригинальный фонарик (слева) и модифицированный (справа)
Оригинальный фонарик (слева) и модифицированный (справа)

Подробно о процессе переделки - в это видео

По светодиодам - выбор пал на LED формата "пиранья", они хорошо вписываются в этот корпус и дают достаточно яркий свет. По высоте в каждую линейку помещается как раз 8 светодиодов, 4 пары: красный, желтый, зеленый и синий. Желтый я добавил к стандартному RGB трио для того, чтобы сместить цветовую температуру в "теплую" сторону.

Далее на очереди был вопрос с микроконтроллером - какой выбрать. Семейство STM32 для меня было безальтернативным выбором, поскольку уже был опыт работы с ними, а на изучение чего-то нового (arduino например) не было времени и желания. Внутри линейки STM32 - я ранее работал с STM32F407, но его я счел избыточно мощным для такого проекта. Было важно, чтобы у выбранного чипа было доступно 16 выходов ШИМ (для управления 4 линейками LED, по 4 пары светодиодов в каждой). В итоге выбор пал на STM32F103RBT6. При относительно маленьком корпусе LQFP64 - у него доступны те самые 16 выходов ШИМ, по 4 на каждый таймер TIM1 .. TIM4.

В оригинальном фонарике используется свиново-кислотный аккумулятор на 2 Ач, я решил использовать более емкий литий-ионный на 5 Ач, подходящий по размерам. Оказалось, что не так-то просто подобрать компактный контроллер заряда для литиевой батареи. Сначала я попробовал контроллер MCP73831T-2ACI - он работает, но выдает ток заряда всего 500 мА (маловато для 5Ач) и сильно греется для такого маленького корпуса (sot-23-5). В итоге подошел контроллер TP4056 - он выдает ток зарядки около 1А, если немного позаботиться о теплоотводе (детали на видео, 23:20).

Далее - рутинная работа по дизайну принципиальных схем, разводке печатных плат, подбору элементов. Первая итерация получилась наполовину удачной, (допустил несколько ошибок), но со второго раза получилась практически "чистая" сборка.

Отдельно отмечу момент с питанием микроконтроллера, т.к. здесь я сначала "прокололся" - поставил линейный регулятор на 2.5V, но не посмотрел на его падение напряжения, а оно оказалось огромным - около 1.1V. Как следствие - при разряде литиевой батареи до 3.1V напряжение на выходе регулятора падало для 2V, что является его минимально допустимым напряжением питания для МК. Ниже - микроконтроллер начинает уходить в reset. Вылечилось заменой на другой линейный регулятор с более низким падением напряжения, около 0.4V. Тогда даже при нижем напряжении на выходе литиевой батареи, около 3V, на выходе регулятора все еще имеем стабильные 2.5V.

И самый интересный (для меня по крайней мере) блок работ - это разработка прошивки, особенно ее алгоритмической части, определяющей, как светодиоды будут мигать и менять яркость. На базовом уровне управление яркостью идет с помощью ШИМ и таймеров. Каждый таймер управляет яркостью одной светодиодной линейки, но скважностью импульса по каждому из 4-х выходов таймера можно управлять независимо. Далее, "уровнем выше" алгоритм определяет, как будет меняться яркость во времени. Пожалуй самый интересный режим, ради которого я все это делал - это имитация пламени - такое теплое, пульсирующее свечение. С точки зрения алгоритма - яркость каждого столбика меняется по кусочно-линейной функции, с элементом случайности (см. видео, 20:30). Это дало неплохой результат, при том что сам алгоритм несложный.

Неожиданным для меня моментом было то, что этот микроконтроллер "не умеет" нативно работать с числами float - они там эмулируются, и это в разы медленее, чем операции с числами int (сразу вспомнились компьютеры 386SX без сопроцессора). Пришлось переписать всю математику с использованием только чисел integer, и это сработало.

С самого начала это задумывалось как хобби проект и я не собирался его монетизировать (дорого, нерентабельно), хотелось только сделать несколько таких фонариков на подарки друзьям, что я и сделал (к новому году - самое оно). Файлы проекта я выложил в открытый доступ.

В архиве - принципиальные схемы и печатные платы (разработаны в KiCAD), проект прошивки (разработан в Visual Studio 2015 с плагином Visual GDB). В принципиалках я указывал ссылки на даташиты, почти все можно купить в Чип и Дип. Кое-что пришлось заказать на aliexpress (провода с разъемами JST XH например).

В получасовом видео не получилось рассказать про все тонкости и нюансы, поэтому если будут вопросы - буду рад ответить в комментариях.

Автор:
graywolf2004

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js