Давно хотел себе нормальный фонарь. В итоге "схема" пришла к такому виду:
Но перед этим я наступил на логарифмечское количество граблей...
Идея
Идея простая - собрать достаточно яркий фонарь, с защитой от перегрева светодиода и плавным управлением яркостью.
И стробоскоп! Запилить - просто, поиграться 5 минут и забить - бесценно. Да, это всё видос Гайвера про перчатку времени не давал мне покоя.
Всё это должно работать от свинцового аккумулятора. (Вы видели цены на литий? Есть целый год мивину (дошик) - такая себе перспектива.)
Наверное, это всё можно было заменить на самое просто термореле и NE555, но это не наши методы. Слишком просто!
Поэтому решено было делать это всё вокруг отладочной платы STM32:
1. Переменный резистор к stm32
2. Полевой транзистор между DC-DC и светодиодом.
3. Крутим резистор - считываем через ADC напряжение - меняем заполненность PWM
4. На всякий случай прикручиваем ds18b20, чекаем температуру и занижаем яркость при перегреве (>50C).
5. При остывании - возвращаем яркость обратно.
6. Как источник питания - используем готовый DC-DC бустер, со стабилизацией по току (обязатльно) и напряжению.
Всё просто? Справится даже человек, который не разбирается в электронике? А вот фиг.
Проблема первая. Укрощение полевика.
Изначально я планировал подключить полевой транзистор прямо к ноге таймера STM32. Напрямую. Но тут меня ждал крупный фэйл. Да, полевик действительно может управляться от 3.3V
Только работает он при этом в линейном режиме, а не как ключ. От чего его сопротивление не минимальное, заметно ограничивает ток и греется.
Что бы ввести MOSFET транзистор в ключевой режим - нужно около 10-12 вольт, но STM32 на ноге выдаёт не более 3.3V.
Логичное решение - сделать простейший усилитель, с эмиттерным повторителем на выходе.
Изначально в гуглении готовых решений управления мосфета от 3.3V я наткнулся на комплементарный эмиттерный повторитель.
Я тогда ещё не знал его свойства - усиливает ток, а напряжение дублирует. А мне нужно было ещё и напряжение поднять.
Поэтому нужного мне результата не добился. А заодно спалил почти десяток STM32, т.к. не поставил токоограничительный резистор между ногой STM32 и входом эмиттерного повторителя. В итоге между эмиттером и базой протекал слишком большой ток и stm32 выгорала. К сожалению, слишком поздно это понял.
После этого, я изучил тонну теории и испробовал на практике множество разных вариантов в онлайн симуляторе: http://www.falstad.com/circuit/circuitjs.html
И начал делать
Было ОЧЕНЬ много вариантов.
Я даже писал расчёт усилительных и ключевых каскадов на JS.
БЕСПОЛЕЗНО! Просто заваливались фронты и плыла заполненность PWM при высокой частоте (100-200 khz). Устанавливаешь 50% - а там 70% по факту.
У меня не было осцилографа, что бы заняться отладкой и пофиксить этот баг без соответствующего опыта построения подобных схем.
Со временем я устал от этих попыток запилить хэнджоб драйвер и я купил готовый - MC33151PG.
Проблема вторая. КРУТИСТОР ШУМИТ.
Ну не сам крутистор, конечно. Идея была такая:
1. Подключаю потенциометр как делитель напряжения. Крайние к 3.3V и GND, а средний в ADC. Типа так:
2. Читаю ADC, меняю заполненность PWM.
Всё просто, никаких проблем не должно быть. Но и тут я нашёл грабли:
1. У меня оказались только обратно логарифмические потенциометры. А нужны были линейные. Пробовал программно переводить логарифм в линейный по таблице, но результат не понравился. Пришлось ждать линейные.
2. Внезапно, мои отладочные платы STM32 шумят в опорное напряжение. Там нет отдельного опорного напряжения. И нормального фильтра.
Значение ADC даже при КЗ с gnd скачет до 5 (из 4095), а в потенциометре - ещё больше, до десятка и выше. Зависит от позиции.
Что я только не делал. И экранированный провод, и конденстаторы подбирал и хитрые алгоритмы усреднения делал. В итоге всё равно получалась хрень, даже если удавалось задушить помехи, то образовывались две заметные мёртвые зоны у потенциометра. В самом начале и в самом конце. Мне это не понравилось.
Без осцилографа это сложно победить и я просто отказался от потенциометра в пользу очень крутой штуки - энкодера.
Отчявшись пробовал NE555 - частота плывёт, та же проблема плавности, сложно
Проблема третья. Энкодер ШУМИТ.
В STM32 энкодер вешается на таймер. Энкодер генерирует импульсы и таймер по ним увеличивает/уменьшает свой счётчик и генерирует IRQ при переполнении. Обычно Энкодер настраивают на один щелчок (импульс), а далее в обработчике прерывания определяют направление и инкрементят/декрементят нужную переменную.
Я так же попробовал. В итоге, направление было часто совсем рандомное, а не то, в какую сторону я кручу.
Да, это фиксится кондёрами и алгоритмами. НО ПРИ ЭТОМ. Если установить IRQ при 100 щелчках, то внутренний счётчик таймера правильно инкрементился и декрементился от 0 до 100, без лишних скачков, ровно в ту сторону, в которую я кручу. С высокой точностью! Но при этом я не нашёл способа генерировать прерывание, когда инкрементится внутренний счётчик таймера. Он умеет генерировать его только при переполнении.
Поэтому я не нашёл ничего лучше, как заюзать второй таймер и с определённым интервалом читать текущее значение у первого таймера. И если оно изменилось более, чем на 90%, то считать это переполнением.
Получился простой код:https://github.com/Azq2/stm32_fonarik/blob/master/src/main.c#L227
Который крутит encoder_value на любое кол-во в минус и в плюс.
Проблема четвёртая. ЛОГАРИФМЫ.
Даже после замены регулятора на энкодер - яркость всё равно не регулировалась плавно. После 30% резкий скачёк яркости.
И вот тут я понял, что человек воспринимает уровень яркости не линейно, а почти по логарифмической кривой!
Т.е. возможно я решал несуществующую проблему с переменным резистором, но отступать было поздно.
В итоге написал простой генератор: https://github.com/Azq2/stm32_fonarik/blob/master/lg.php
Который генерирует 101 уровень яркости (полный оборот энкодера)
И всё стало круто и плавно.
Немного о конструкции
Использовать канализационные фитинги и кулер от LGA775, который идеально входит в 110-ю трубу? Да Алекс Гайвер чёртов гений!
Именно это стало окончательной мотивацей заняться этим проектом.
Блок со светодиодом был реализовано в точности, как в его видео. (но криво)
Как дрель использовались ножницы, путём их вращения........
Термодатчик закреплён на рандомный термоклей. Ещё не отвалился.
Сам корпус дальше хоть и использует канализационные трубы, но уже сильно отличается. За основу взята муфта и редуктор 150 -> 110
Блок электроники.
Вся электроника смонтирована внутри редуктора.. Дополнительно завернул в пакет от STM32, что бы если отвалится - не было КЗ.
Зачем 2 ключа с радиаторами?
Я cпалил DC-DC случайным КЗ. Пришлось внешний фет использовать.
Сама плата контроля выглядит так:
Содержит в себе DC-DC 5V, STM32 и ключи управления индикатором статуса.
Крепёж аккуумулятора.
Изначально я планировал использовать 110-ю трубу, но аккумулятор туда не влез. Почему же квадратный аккумулятор, который явно меньше 11 см со всех сторон, не влез в 110 трубу???
Просчитался немного. Поэтому пришлось использовать 150-ку с редкутором в 110.
После этого аккумулятор стал слишком маленьким для муфты
Поэтому обклеил пенопластом корпус изнутри (на термосопли)
И покрыл его антистатик пакетами от использованных STM32.
В теории, это ещё и должно уберечь аккумулятор от случайных падений. Но это не точно.
Но пришлось отказаться от некоторых пенопластовых блоков, ради циркуляции воздуха. Воздух проходит через весь корпус к радиатору светодиода.
Задняя крышка
Задняя крышка изнутри обклеена сеткой от комаров, что бы внутрь не всасывались крупные предметы.
Внешний вид
Фонарь выглядит так:
Задняя панель может некорретно отображаться с некоторых браузеров.
На самом деле:
1. Изначально планировался встроенный Power Bank
Была наивная идея использовать для этого LM7805. А ведь он - линейный стабилизатор. Уже при 1A мог конкурировать с Тvidia GTX1080.
Я уже не стал делать SMPS buck, хотел побыстрее закончить. Отверстия остались - заткнул выключателями.
2. Тактовых кнопок не было, поэтому стробоскоп сейчас включается тумблером.
В будущем переработаю, запасная заглушка ждёт своего времени.
Программная часть
Исходный код: https://github.com/Azq2/stm32_fonarik
Характеристики
1. Почти 130 Вт при 100% яркости, ёмкость аккумулятора 12V * 12Ah т.е в идеале на 100% ~1 час работы. КПД питания 75%.
2. В идеале 8500 люмен, если верить китайцам.
3. Плавный уровень яркости. Сохраняется во flash.
4. Стробоскоп 15-1000 Гц. Самая полезная функция.
5. Брутальный кустарный внешний вид, при этом весит 5 кг.
Как показала практика, ограничения из-за перегрева не происходит.
Вложения
-
88.1 KB Просмотры: 20
Изменено: