
Перед новым годом, мы с семьёй традиционно наряжаем ёлку. И для украшения часто используем гирлянду. Я подумал, почему бы не сделать маленькую гирлянду для своей настольной ёлочки.
Всё началось с выбора светодиодов. Решил выбрать 3мм светодиоды жёлтого свечения. Для управления ими использовал микроконтроллер ATtiny13a, так как его ножек хватает для задачи, а для питания схемы использовал 12 вольт.
Задача контроллера обслуживать 4 канала гирлянды и одну кнопку. На каждый канал, установил транзистор для управления нагрузкой. Питание микроконтроллера осуществляется линейным понижающим стабилизатором на 5 вольт, а 12 вольт идут через транзисторы на гирлянду.
Вероятно возник вопрос: «Почему 4 канала»? Отвечу, что это было сделано для создания эффектов, то есть для комбинирования линий гирлянды. Количество линий определило наличие свободных ножек у микроконтроллера. Оставшийся пин использовал под кнопку для переключения эффектов свечения гирлянды.
Изготовление гирлянды.
Начну с того, как рассчитать количество светодиодов на канал:
Необходимо узнать падение напряжения. У меня получилось 1.8В на жёлтых светодиодах.
Делим напряжение питания (12В) на напряжение падения (1.8В), получаем чуть больше 6. Следовательно на каждый канал будет установлено 6 последовательно включённых светодиода.
Остаётся только спаять гирлянду. Для этого потребовалось 24 светодиода(6 на каждую часть гирлянды), провода и термоусадка.
Печатная плата
Плату я проектировал с учётом изготовления по технологии ЛУТ (вся разводка произведена на нижнем слое). Перемычки обозначены на верхнем слое. Сопротивление резисторов, которые относятся к анодам светодиодов(R7 - R10), надо рассчитывать в зависимости от использования определённых светодиодов. Резисторы и конденсаторы использованы в smd исполнении(для посадочных мест 0805, так же можно использовать компоненты 0603).


Программа.
Это самое интересное, что реализовано в проекте. У меня была идея добавить режимы с ШИМ, но у контроллера нет достаточного количества ножек аппаратных поддерживающих ШИМ, и поэтому решил реализовать его программно-аппаратным путём(аппаратным, так как всё равно используется таймер-счётчик).
Для увеличения скорости переполнения счётного регистра таймер-счётчика установил максимальную частоту контроллера. Получается, что при чистоте 9.6МГц (E: FF, H: FF, L: 7A), прерывание по переполнению счётного регистра срабатывает каждые 0.027 мс. Следовательно получается реализовать программный ШИМ и оставить время для работы основной программы(так как вне прерывания остаётся около 300 тактов для выполнения программы).
В самом прерывании, переменная считает до максимального значения разрешения ШИМ (который можно изменить) и обнуляется по достижению. В то время как в основной программе сравнивается значение с этой переменной и выставляется нужный сигнал (высокий или низкий определённой длительности) на выбранный канал.
В программе пять режимов:
Включенная гирлянда
Поочерёдное мигание каждым из каналов гирлянды
Плавное увеличение и уменьшение яркости (при помощи ШИМ),
Так же как в предыдущем, но каждый канал проходит этот цикл и переключается на следующий по завершению.
Выключенная гирлянда(удобно, для того чтобы не отключать от сети)
Рассмотрим осциллограмму каждого из режимов. В первом и последнем режиме нет ничего интересно. А вот три последующих рассмотрим:
1. Циклическое переключение каналов:
Примечание: смена фронтов на Channel 3, это нажатие кнопки. А после её отжатия начинает работать выбранный режим.
2. Плавное возрастание и уменьшение значений ШИМ:
3. Циклическое переключение каналов с ШИМ каждого из них:
Ближе:
Кнопка для переключения режимов отрабатывает по отжатию и циклически считает номер для установки определённого режима. Так же количество режимов можно изменить.
В памяти микроконтроллера остаётся ещё около 300 байт для написания программы, так что можно ещё добавить эффекты для гирлянды.
Код я оформил, так чтобы легко можно было бы изменить скорость каждого из режимов и разрешение ШИМ (я выбрал шести битный, так как это оптимально по плавности и скорости).
1 2 3 4 5 6 7 8 9 10 11 12 | // ===== USER SETTINGS =====#define NUMBER_MODES 5 //Count of modes/effects// ------------------------------------#define PWM_RESOLUTION 64 //Bit PWM (64 - 6-bit) - 500Hz ///////// (127 - 7-bit) - 300Hz ///////// (255 - 8-bit) - 130Hz// ------------------------------------ #define DELAY_BOUNCE_BUTTON 1480 //Button chatter elimination (~40ms) //(x - count) * 0.027ms#define DELAY_SWITCH_BLINK 15000 //Garland Channel Switching (405ms) //---------------------// ------------------------------------#define DELAY_DIMMING_MODE_1 1000 //PWM values increase time, for the effect this value is half (1000ms) //(x - count) * 1ms #define DELAY_DIMMING_MODE_2 110 //PWM values increase time, for the effect this value is complete (110ms) //----------------- |
Прикрепленные файлы:
- PCB_GARLAND_top.pdf (20 Кб)
- PCB_GARLAND_ver1_0_0_bottom.pdf (33 Кб)
- main_1.c (6 Кб)
- GARLAND_ver1_0_6.hex (2 Кб)






0 Комментарии