Сетевой диммер 220V на микроконтроллере

 Сегодня я поделюсь результатами своих экспериментов в области управления нагрузками, подключенными к бытовой сети 220 вольт. А именно займемся диммированием – будем плавно зажигать и гасить лампочку накаливания с помощью микроконтроллера.  На первый взгляд тут ничего сложного нет –  используем ШИМ и регулируем в свое удовольствие. Но не стоит забывать что напряжение в розетке переменное, а значит что сделать это будет немного сложнее. Дальше будет немного теории, схема и метод управления.

При работе с высоким сетевым напряжением следует быть осторожным и внимательным! Ни в коем случае не дотрагиваться до оголенных участков схемы.  

 Так почему же нельзя в данном случае использовать простой шим сигнал? Как известно в розетке у нас переменное напряжение синусоидальной формы, как на рисунке ниже.

 Если использовать управление с помощью ШИМ, ключ через который регулируем сигнал (например симистор) будет открываться и пропускать в нагрузку куски синусоиды, имеющие разную мощность. Как итог, никакого плавного регулирования не получится, а будет безупорядоченный сигнал на выходе:

 Для того чтобы этого избежать, мы должны знать когда включать и выключать симистор, то есть привязать управляющий сигнал к управляемому. Как? Все просто, достаточно знать когда сигнал проходит через 0. Зная где начинается каждая следующая полуволна мы сможем открывать и закрывать ключ в нужные моменты, тем самым отдавая нагрузке одинаковую мощность. А изменяя время, которое управляющий ключ находится в открытом состоянии мы можем плавно изменять отдаваемую мощность. 

 Момент прохождения сетевого напряжения через 0, можно определять с помощью оптопары. Для того чтобы детектировать начало каждой полуволны (и отрицательной и положительной) оптопару подключаем через диодный мост. Таким образом на выходе детектора нуля получаем короткие положительные импульсы в момент когда напряжение в сети проходит через 0.  

 Для наглядности приведу картинку с виртуального осциллографа смоделлированной схемы в proteus. Синим цветом изображен исходный сигнал (~220V), красным – сигнал после выпрямления диодным мостом. Зеленым цветом изображены импульсы на выходе оптопары U3.

                                          

 Сигнал с детектора нуля можно завести на вход внешнего прерывания, чтобы ловить начало новой полуволны, а дальше открывать симистор U4 (я использовал BT16-600) на необходимое время. Для опторазвязки я использовал оптосимистор MOC3022 (U2).  Остается только подсчитать время на которое нужно открывать симистор. При частоте сетевого напряжения равной 50 Гц время полупериода (длительность одной полуволны) составит 0,01 сек. То есть если мы откроем симистор на 0,005 сек, мы пропустим половину полуволны, мощность составит 50%, если откроем симистор на 0,01 сек (или больше), пропустим всю полуволну и отдаваемая мощность составит 100%. Тут думаю все понятно.  код в Bascom-AVR

$regfile = “attiny2313.dat”

$crystal = 8000000

Dim N As Bit                                 ‘1-плавно зажигаем лампочку, 0-гасим

Config Int0 = Falling

On Int0 Imp

Config Timer0 = Timer , Prescale = 1024      ‘переполнение за 0,032 сек

Dim Wt As Byte

On Timer0 Perepolnenie

Config Portd.0 = Output

Opto Alias Portd.0

Opto = 0

Enable Interrupts

Enable Timer0

Start Timer0

Enable Int0

Wt = 195                                     ‘минимальный накал

N = 1

Wait 2

Do                                           ‘бесконечный цикл

Loop

End

Imp:                                         ‘прерывание от детектора нуля

 Timer0 = Wt      ‘чем большее значение сюда положим, тем быстрее переполнится таймер

 Start Timer0

 If N = 1 Then                               ‘плавно зажигаем лампу

  Incr Wt                                    ‘увеличиваем до максимального значения

   If Wt = 255 Then

    N = 0

   End If

 Else                                        ‘плавно гасим

   Decr Wt                                   ‘уменьшаем до минимального значения

    If Wt = 195 Then

     N = 1

    End If

 End If

Return

Perepolnenie:                                ‘переполнение таймера

 Stop Timer0                                 ‘останавливаем таймер

 Opto = 1                                    ‘включение симистора

 Waitus 100

 Opto = 0                                    ‘выключение оптосимистора

Return

      

                минимальный накал                        средний накал                                    максимальный накал

и не большое видео

 Управление лампочкой метод конечно не ограничивается, этим же способом можно управлять и другой нагрузкой – нагревателями, двигателями и пр.


Взято с: avrproject.ru


Категория: AVR
Метки:

Написать коментарий

*
= 3 + 6

Добавить изображение

Последние статьи