Модуль с плавной регулировкой яркости
Плавная регулировка яркости света триаком связана с тем, что яркость ламп накаливания зависит от эффективного напряжения. Чем оно ниже, тем меньше яркость. Устройства подобного типа имеют название «диммер».
Тиристор или триак открывается сигналом, подаваемым на управляющий электрод. Осциллограмма напряжения на нагрузке, лампе накаливания представлена на рис. 2.5.
В верхней части отображено напряжение, интересующее нас, а внизу - переменное силовое напряжение 220 В.
При подаче управляющего сигнала триак открывается, и напряжение полностью падает на нагрузке. При переходе напряжения через ноль триак закрывается. Напряжение на лампе накаливания появится только после прихода следующего управляющего сигнала. В данном случае частота управляющих сигналов 100 Гц. Усеченное синусоидальное напряжение на лампе накаливания в данном случае равнозначно подключению лампы к напряжению -110 В. Яркость лампы уменьшается.
Сдвигая момент подачи управляющего сигнала ближе к моменту перехода напряжения через ноль (рис. 2.6 - маркерами помечены моменты подачи управляющего сигнала), мы получим большую яркость. Удлиняя время подачи управляющего сигнала после перехода напряжения через ноль (рис. 2.7), мы получим меньшую яркость свечения лампы.
При построении модуля следует включать светодиод оптрона в нужные моменты времени, изменяя яркость свечения настольной лампы или торшера. И настольная лампа, и торшер включаются в розетку, имеющую фазовый и нулевой провод. Организовать сканирование силового напряжения для выявления переходов через ноль не сложно, получатся разные решения, зависящие от конкретных условий реализации.
А вот при использовании модуля вместо обычного выключателя мы столкнемся с трудностью - отсутствием нулевого провода в зоне выключателя. Без него мы не можем синхронизировать подачу управляющих сигналов на триак с моментами перехода напряжения через ноль. Если бы нулевой провод был в зоне выключателя, для получения синхронизирующих импульсов можно было бы использовать другой тип оптрона: светодиод - фототранзистор. Светодиод через конденсатор (чтобы не устанавливать резистор большой мощности) и резистор (ограничивающий ток через светодиод) мы подключили бы между фазой и нулем силового напряжения. При обычном светодиоде (не двухполярном) мы получили бы возможность отмечать один из двух переходов через ноль за период силового напряжения. Но как быть, если нулевой провод отсутствует? Можно поступить двояко - в том месте, где будет установлен системный блок питания 12 В, соединить общий схемный провод с защитным заземлением. При этом в точке установки модуля на место выключателя мы будем иметь возможность сделать схему синхронизации. Второй вариант - подключение цепи оптрона для синхронизации управления параллельно триаку. Напряжение на нем выглядит, как показано на рис. 2.8 или на рис. 2.9.
Как видно из рисунков, мы можем осуществить синхронизацию.
Определившись со схемой регулировки, постараемся решить, как будем регулировать яркость - плавно или ступенями.
В любом случае мы будем регулировать яркость ступенями, но их можно сделать маленькими или большими. На мой взгляд, градация переходов с тремя-четырьмя уровнями яркости в полной мере устроит любого. А большинству пользователей достаточно будет двух ступеней - полная яркость и треть яркости. Вопрос этот не принципиальный, и каждый решит его сам.
Второй аспект данной проблемы - использовать ли для временной задержки подачи управляющего импульса встроенный таймер или пустой цикл в программе? Или реализовать эту процедуру с использованием встроенного в микроконтроллер PIC16F628A блока ШИМ. ШИМ - аббревиатура названия способа Широтно-Импульсной Модуляции. Я остановлюсь на максимально наглядном варианте - использую пустой цикл.
Наконец, последнее, что меня в настоящий момент может беспокоить, - не будет ли свет «мигать»? Причина этого беспокойства в том, что контроллер будет осуществлять несколько процессов:
• сканировать напряжение сети -220 В для определения моментов перехода напряжения через ноль, нужных для синхронизации;
• запускать управляющий импульс, который включит триак, по истечении времени задержки после обнаружения перехода через ноль напряжения сети;
• прослушивать порт USART с целью выявления команд, адресованных модулю.
Системные команды следуют одна за другой. Модуль будет реагировать на все команды, даже когда они адресованы не ему. Пока модуль разбирается с системными командами, он может пропускать управление триаком, а светильник будет выключаться.
Попробуем «прикинуть», как это будет выглядеть. Длительность полуволны частой 50 Гц составляет 10 мс. Возьмем средний интервал «свободного» от управления времени 5 мс. С другой стороны при скорости в сети 2400 бит/с прием одного байта займет около 4 мс. Остается надеяться, что я неправильно понимаю работу USART. Проверим. Если не получится, я готов отказаться от регулировки яркости. Но тем, кому очень хочется иметь модуль выключателя света с регулируемой яркостью, пока можно предложить:
• поэкспериментировать с изменением тактовой частоты контроллера до 20 МГц и скоростью сетевой работы 115 200 бит/с;
• поэкспериментировать с работой по прерыванию (для сетевых команд);
• в основной программе все команды и запросы перемежать паузами, что замедлит сетевую работу системы, но может оказаться не столь ощутимо, в конечном счете;
• если совсем ничего не получится, использовать внешнюю микросхему обслуживания управления включения света, например контроллер для связи с системой, а полученное время задержки переписывать во внешний счетчик, который будет синхронизирован с частотой сети 50 Гц, и подавать управляющие импульсы на оптрон;
• поискать, нет ли еще каких-либо интересных решений.
Тем не менее, попробуем реализовать программу и проверить ее работу в MPLAB.
Требования к модулю диммера:
• регулирование яркости лампы накаливания на 3 уровнях: полная яркость, половинная яркость, минимальная яркость;
• получение команд от центрального управляющего устройства в формате L14$1N, где 1 - полная яркость, 5 - выключение;
• статус модуль не передает.
Для тех, кто хотел бы запрашивать состояние диммера, я думаю, не составит труда взять эту часть программы из предыдущих решений. Аналогично обстоит дело и с уровнями яркости, командой выключения и полного включения.
Реализация модуля. Вывод RA3 подключим к сканирующему оптрону. Переход через ноль будет отображаться состоянием «1». Для основного программного модуля контроллера два события - появление системной команды и импульс синхронизации с силовой сетью - будут служить точками отклика.
Переделав текст программы, немного «повозившись» с устранением остаточных ошибок после переделки, я вначале сталкиваюсь с проблемой (в отладчике MPLAB) плохой обработки сканирования силовой сети. Справившись с этим, я никак не могу получить изменение яркости (предполагаемой) из-за того, что сетевые команды «пропадают». В конечном счете, программа приобретает следующий вид.