Приветствую всех. При разработке данного устройства не стояло целей создать что-то конкретное, просто идея и просто ее реализация. Спектр применения ограничивает лишь фантазия. Итак, единственной задачей было создание управления тремя каналами ШИМ и их различными комбинациями при помощи одной переменной. За переменную был взят АЦП (значение аналого цифрового преобразователя). 10 битный АЦП микроконтроллеров AVR способен дать 1024 значения (2 в 10 степени). Достаточно для количества градаций цветовой палитры, чтобы плавно изменять оттенки. Основа конструкции микроконтроллер AVR attiny13. Он имеет всего 2 канала аппаратного ШИМа, поэтому реализовался программный ШИМ.
От идеи к реализации:
Для программной реализации необходимо задействовать два прерывания - для реализации программной ШИМ прерывания по таймеру (таймер 0) и прерывания по завершению преобразования АЦП (ADC_vect). Это первая часть. Вторая - инициализация порта, таймера и АЦП и алгоритм смены цветов. Для этого не мало важно знать правило, по которому происходит смена оттенков цветов. Будем использовать порядок как в радуге. Между прочим, чтобы посмотреть как смешиваются цвета, далеко лезть не нужно, в том же пэйнте или другом редакторе, содержащем инструменты с палитрой цветовой гаммы можно посмотреть это. Источником опорного напряжения для АЦП выбираем напряжение питания (5 вольт). При старте в программе заложено что-то типа инициализации - на полсекунды загорается каждый цвет RGB светодиода, чтобы было видно, что все исправно технически, а также все три цвета вместе - если белый цвет, то с балансом белого все в порядке. Мало ли. Теперь это же в программном коде.
#define LED1 PB0 #define LED2 PB1 #define LED3 PB2 #define LED_PORT PORTB #define LED_DDR DDRB #define BUTTON1 PB3 #define B_PORT PORTB #define B_DDR DDRB // прерывание по переполнению таймера 0 ISR (TIM0_OVF_vect) { if (count++ > pwm) { count=0; red_b = red; //сохранием значения в буфер green_b = green; blue_b = blue; LED_PORT |=(1<0) {B=1;} if (ADC>2) {B=2;} if (ADC>254) {B=3;} if (ADC>508) {B=4;} if (ADC>762) {B=5;} if (ADC>1016) {B=6;} if (B==1) {green=pwm;blue=0;red=0;} if (B==2) {blue=A; green=pwm; red=0;} if (B==3) {green=(pwm-(A-254)); blue=pwm; red=0;} if (B==4) {red=(A-508); blue=pwm; green=0;} if (B==5) {blue=(pwm-(A-762)); red=pwm; green=0;} if (B==6) {red=pwm;blue=0;green=0;} } // конец while(1) } // конец main
Работа ШИМ человеческим глазом не заметна, то есть мерцаний нет. Если глаз вооружить камерой, то немного заметно, ну оно и понятно, камера по своим параметрам может много чего незаметного глазу человека усмотреть.
В итоге вышло такое устройство:
В качестве RGB светодиода использовался кусочек светодиодной ленты на RGB светодиодах (1 юнит, это 3 светодиода). Лента требует питания 12 вольт, поэтому был собран DC-DC повышающий преобразователь 5 вольт - 12 вольт на микросхеме MC34063 для питания либо от USB порта, либо от нескольких батареек 1,5 вольта для возможности использовать портативно устройство. Если планируется использовать это, например от бортовой сети автомобиля 12 вольт, то MC34063 нужно заменить на понижающий стабилизатор (либо схемно с MC34063, либо заменить на LM7805 и соответственно расключить источники +12 и +5 вольт). Также стоит отметить, что светодиодная лента у себя на борту уже содержит токоограничительные резисторы, подобранные в соответствии с балансом белого цвета.
В качестве ключевых элементов используется микросхема ULN2003. Фактически это несколько транзисторов в корпусе микросхемы. Каждый канал способен выдержать 0,5 ампера, а в сумме по каналам 2,5 ампера, это стоит учитывать для возможной нагрузки. Также микросхему можно заменить на биполярный транзисторы или полевые для мощной нагрузки, но для полевых рекомендуется, в таком случае, использовать драйверы, можно самые простые.
Стабилитрон VD1 используется для защиты порта микроконтроллера от высокого напряжения (естественно, это относительное сравнение, так как для микроконтроллера 12 вольт уже высокое напряжение) и его номинал составляет 5,1 вольта. Можно применить 5,6 или в крайнем случае другой номинал близкий к значению в 5 вольт. Стабилитрон обязательно стоит применять только в случае, если напряжение, подаваемое на АЦП будет превышать 5 вольт. Конденсатор C6 можно не применять, поставил его просто для надежности. Дроссель в обвязке MC34063 можно использовать другого номинала в разумных пределах. R1, при подключении к источнику напряжения является делителем напряжения, им можно как настраивать цвет по умолчанию от зеленого до красного, так и подстраивать диапазоны напряжения при измерении.
Функционал не большой, но можно найти широкий диапазон применения от декоративного до информативного или просто побаловаться с RGB светодиодами. В зависимости от настроения всегда можно покрутить ручку потенциометра и сменить подсветку по вкусу или приделать к схеме делитель напряжения (или без него) и получится этакий вольтметр, имеющий вместо цифровых показаний цвет, соответствующий определенному напряжению. Ясное дело, такой вольтметр не сгодится для точных измерений, а вот как индикатор нескольких уровней напряжения с плавным изменением цвета между ними вполне не плохо. В конце концов, подавая выпрямленный усиленный звуковой сигнал с микрофона или аудиосистемы, можно получить одноканальную простейшую цветомузыку или индикатор громкости, соответствующей определенному цвету, в конце концов ночник. Схема не имеет сложностей и проста в повторении, отлично подойдет для обучающих целей начинающих радиолюбителей, позволяет проявить фантазию при изготовлении.
Стоит отметить, что в палитре цветов нет желтого и оранжевого. Так сделано, потому, что задумкой было сделать зеленый низкий уровень напряжения на АЦП, а красный - высокий, желтый и оранжевый - это смешение зеленого и красного (это единственная комбинация, не задействованная в устройстве).
Устройство собиралось на макетной плате. Потенциометр соединен с напряжением питания 5 вольт.
К статье прилагается проект протеус (для симуляции может потребоваться мощный ресурс компьютера, иначе будет притормаживать), прошивка для микроконтроллера, макетная печатная плата для attiny13 (15 и так далее с аналогичной распиновкой), на которой собиралось устройство, исходный код (AS4), а также небольшое видео (к сожалению, не удалось передать в нем всю цветовую палитру изменения цвет из-за ограниченности возможностей матрицы камеры, в реальности выглядит более эффектно).
Конфигурация фьюз битов для микроконтроллера attiny13:
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
IC1 | МК AVR 8-бит | ATtiny13A | 1 | Поиск в магазине Отрон | ||
IC2 | Составной транзистор | ULN2003 | 1 | Поиск в магазине Отрон | ||
IC3 | DC/DC импульсный конвертер | MC34063A | 1 | Поиск в магазине Отрон | ||
VD1 | Стабилитрон | BZX55C5V1 | 1 | Поиск в магазине Отрон | ||
VD2 | Диод Шоттки | 1N5819 | 1 | Поиск в магазине Отрон | ||
R1 | Потенциометр | 10 кОм | 1 | Переменный или подстроечный резистор | Поиск в магазине Отрон | |
R2, R9 | Резистор | 1.5 кОм | 2 | Поиск в магазине Отрон | ||
R3 | Резистор | 10 кОм | 1 | Поиск в магазине Отрон | ||
R4-R6 | Резистор | 240 Ом | 3 | Поиск в магазине Отрон | ||
R7 | Резистор | 12 кОм | 1 | Поиск в магазине Отрон | ||
R8 | Резистор | 1 кОм | 1 | Поиск в магазине Отрон | ||
R10 | Резистор | 180 Ом | 1 | Поиск в магазине Отрон | ||
R11 | Резистор | 0.25 Ом | 1 | 0.2 - 0.3 Ом, можно подбором нескольких в параллель | Поиск в магазине Отрон | |
C1, C3, C8 | Конденсатор | 100 нФ | 3 | Поиск в магазине Отрон | ||
С2 | Конденсатор | 10 мкФ | 1 | Поиск в магазине Отрон | ||
С4 | Конденсатор | 590 пФ | 1 | Поиск в магазине Отрон | ||
C5, C6 | Электролитический конденсатор | 1000 мкФ | 2 | 1 можно не использовать | Поиск в магазине Отрон | |
С8 | Конденсатор | 100 мкФ | 1 | Поиск в магазине Отрон | ||
L1 | Дроссель | 100 мкГн | 1 | Поиск в магазине Отрон | ||
S1 | Тактовая кнопка | TC-A109 | 1 | Поиск в магазине Отрон | ||
Скачать список элементов (PDF)
Прикрепленные файлы:
- 24.hex (2 Кб)
- proteys rgb.rar (15 Кб)
- отладочная tiny13.lay6 (62 Кб)
- 24.rar (15 Кб)
Комментарии (4) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
Я лично возьму этот проект как пример кода для себя. Вполне возможно, что поменяю МК на что-то типа ATtiny 84, сделаю приём данных для ШИМ по последовательному порту и буду использовать как фонарик, контролируемый каким-либо другим устройством.
[Автор]