Главная » Статьи » Полезная информация

Сетевой диммер 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.= Output
Opto Alias Portd.0
Opto = 0

Enable Interrupts
Enable Timer0
Start Timer0
Enable Int0

Wt = 195                                     'минимальный накал
= 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

 







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


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

 



 Управление лампочкой метод конечно не ограничивается, этим же способом можно управлять и другой нагрузкой - нагревателями, двигателями и пр.
 
 
 
 
Категория: Полезная информация | Добавлено: 26.04.2013
Просмотров: 88396 | Комментарии: 65 | Теги: dimmer | Рейтинг: 4.9/11
Всего комментариев: 651 2 3 »
0  
65 exersizze   (17.01.2017 10:03) [Материал]
Конденсатор не имеет большого значения, скорее всего неправильная частота работы контроллера. Фьюзы не трогали? снимите предделитель на 8 (фьюз CKDIV8)

64 Prorokzv   (16.01.2017 23:05) [Материал]
Подскажите пожалуйста конденсатор С1 у вас на 0,05 мкФ, я ничего не перепутал? Подключаю правда 0,047 мкФ схема не работает, либо включен либо выключен.

0  
63 exersizze   (28.12.2016 10:50) [Материал]
Butsun, оптосимисторы со встроенным детектором нуля, типа МОС306х не годятся для регулировки накала ламп...

+1   Спам
62 Butsun   (28.12.2016 00:16) [Материал]
Вот, кому интересно... подключение нагрузки к МК... полезно) И есть хитрость, если использовать МОС3063, то ноль ловить нам не надо... http://eugenemcu.nichost.ru/articles/applications/268-mcu-triac

61 vakulyuk   (09.12.2016 14:49) [Материал]
Спасибо) Я принцип действия понял, а вот откуда взялась именно цифра 195 не понял, теперь понял, что подобрали эксперементально.. У меня минимум получился 147, а на 146 уже в полный накал..

0  
60 exersizze   (09.12.2016 13:53) [Материал]
pchela5, ну так это в военное, а у нас в мирное время все примерно)) Нашел ГОСТ 32144-2013 в котором сказано


Цитата
Номинальное значение частоты напряжения электропитания в электрической сети равно 50 Гц.

Для указанного показателя КЭ установлены следующие нормы:

- отклонение частоты в синхронизированных системах электроснабжения не
должно превышать ±0,2 Гц в течение 95% времени интервала в одну неделю и
±0,4 Гц в течение 100% времени интервала в одну неделю

59 pchela5   (09.12.2016 13:32) [Материал]
> Полуволна в нашей электросети по времени длится примерно 10 мс

В военное время значение синуса может достигать трёх! © Как так примерно? 50 Гц обязаны держать сети, иначе рассинхронизация может пойти и всё накроется медным тазом.

0  
58 exersizze   (09.12.2016 12:43) [Материал]
Чтобы понять откуда взялась цифра 195 надо сначала въехать в принцип работы: когда начинается новая полуволна (ток прошел через ноль), таймер начинает считать до своего переполнения и после этого откроет симистор. Если мы в него положим значение 255 тогда он переполнится практически сразу и симистор будет открыт все время пока ток снова не пройдет через ноль. Короче, симистор будет пропускать полуволну полностью. На следующей полуволне все повторится.

Теперь уменьшим стартовое значение таймера. Значит между прохождением тока через ноль и переполнением таймера пройдет больше времени, но чтобы получить минимальный накал необходимо чтобы таймер успел переполнится пока не закончилась та полуволна, которая запустила таймер



Полуволна в нашей электросети по времени длится примерно 10 мс, значит в таймер надо закладывать значение которое даст переполнение не позднее 10 мс.
У меня на практике с такой частотой работы контроллера и получилось минимальное значение 195.

57 vakulyuk   (09.12.2016 11:56) [Материал]
А почему минимальный накал при 195? Насколько минимум можно занизить Wt?

+1   Спам
56 sany2   (20.11.2015 06:46) [Материал]
добавить кнопки например:
pinc.1=input
pinc.0=input

вместо
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
Пишем
if pinc.0=0 then
decr Wt
end if
if pinc.0=0 then
incr Wt
end if

55 Eugene   (18.11.2015 20:43) [Материал]
Уважаемый автор!!!
Помогите переделать вашу программу чтобы можно было с помощью кнопок +,- управлять выходной мощностью.
И почему-то ваша программа не хочет моделироваться в протеусе.
Помогите пожалуйста!!!
Заранее спасибо.

+1   Спам
54 aleksandr   (26.05.2014 21:47) [Материал]
Моё сообщение от 18:33 - решено.

53 aleksandr   (26.05.2014 18:33) [Материал]
Здравствуйте, друзья! Помогите переделать часть программы из этого примера, чтобы лампочка после разгорания не гасла, а так и оставалась включённой.

52 sasha_1973   (10.01.2014 18:05) [Материал]
Пишите на форуме, Вам помогут.

51 sasha_1973   (10.01.2014 18:04) [Материал]
Говорите что именно, скину на мыло

50 koteika   (10.01.2014 12:15) [Материал]
уже нашел Ваш вариант http://bascomavr.3bb.ru/viewtopic.php?id=1113
проект в протеусе работает, жаль в исходнике все самое интересное на ассемблере, а я его вообще не понимаю:(.
от сюда прошивка работает в том-же проекте, пока не начинаю переделывать её под управление кнопками, и по UART. в чем проблема не пойму

49 sasha_1973   (10.01.2014 11:19) [Материал]
Давайте почту, скину рабочий вариант.

48 koteika   (10.01.2014 10:41) [Материал]
"Все равно что-то не получается включить симуляцию, т.е. симуляция работает пару секунд потом, останавливается:
https://dl.dropboxusercontent.com/u/52618061/Proteus.png"
та-же петрушка не работает симуляция((

47 sasha_1973   (10.01.2014 09:33) [Материал]
Симуляцию не хотите добавить, у меня есть готовая, на 1 и 3 фазы?

46 exersizze   (26.12.2013 23:48) [Материал]
dossalab, можно, но придется подбирать частоту чтобы время переполнения таймера осталось прежним (в отличии от 8и битного "нулевого таймера"  Timer1 считает до 65535).
Очень рекомендую ознакомится с этим http://decada.org.ru/project/lessons/bascom_avr/10/

45 dossalab   (25.12.2013 21:31) [Материал]
Можно ли перевести устройство на Timer1?И как?

44 emmgold   (23.12.2013 14:26) [Материал]
Вот тут http://forum.easyelectronics.ru/viewtopic.php?f=14&t=17314 интересная схема, если управлять полевиком ШИМ сигналом, то вполне получится вот такая картина но с очень узкими периодами, сильно меньше частоты. http://avrproject.ru/dimmer/sinuspwm1.png

43 exersizze   (22.12.2013 14:02) [Материал]
emmgold , это почему же?

42 emmgold   (21.12.2013 16:16) [Материал]
А если частоту ШИМ увеличить раз в 100. И париться не нужно.

41 myweb   (12.11.2013 01:59) [Материал]
Все равно что-то не получается включить симуляцию, т.е. симуляция работает пару секунд потом, останавливается:
https://dl.dropboxusercontent.com/u/52618061/Proteus.png
https://dl.dropboxusercontent.com/u/52618061/noname1.hex

40 exersizze   (09.11.2013 22:21) [Материал]
В протеусе есть инструменты для генерирования различных сигналов, в том числе и синуса



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

Проект для ознакомления по ссылке http://avrproject.ru/dimmer/dimmer.dsn

39 myweb   (09.11.2013 20:48) [Материал]
Можно ли прикрепить архив проекта Proteus к статье? Только начинаю знакомство с микроконтроллерами и Proteus - много вопрос...
Скажите, как вы подаете переменное напряжение на схему в Proteus?

38 exersizze   (22.10.2013 01:46) [Материал]
а ведь и вправда) спасибо! исправлю график.

+1   Спам
37 TomaTLAB   (22.10.2013 00:23) [Материал]
"Если использовать управление с помощью ШИМ, ключ через который регулируем сигнал (например симистор) будет открываться и пропускать в нагрузку куски синусоиды, имеющие разную мощность. Как итог, никакого плавного регулирования не получится, а будет безупорядоченный сигнал на выходе"
Будет так, но не так как показано на картинке. Симистор откроется первым же импульсом и уже не закроется до перехода тока через ноль.

36 TomaTLAB   (22.10.2013 00:18) [Материал]
И еще оно замечание касаемо двигателей. Единственное, ну кроме нагревателей и лампочек, да и то не всех :), что более мене "спокойно" относится к фазо-импульсному регулированию, это коллекторные двигатели.
Все остальное будет усиленно этому регулированию сопротивляться :)

1-30 31-60 61-65
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация
Логин:
Пароль: