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

Сетевой диммер 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
Просмотров: 45900 | Комментарии: 56 | Теги: dimmer | Рейтинг: 4.9/11
Всего комментариев: 561 2 »
+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)
И еще оно замечание касаемо двигателей. Единственное, ну кроме нагревателей и лампочек, да и то не всех :), что более мене "спокойно" относится к фазо-импульсному регулированию, это коллекторные двигатели.
Все остальное будет усиленно этому регулированию сопротивляться :)

35 sany2   (11.10.2013 07:28)
Нормальный мост,нормальная оптопара-если конечно исправные.Как вариант-попробуйте поставить 200 ком после моста,а не до(хотя вряд ли...)

34 AzM   (10.10.2013 23:53)
Кстати, теперь R3 как поставил 56K очень сильно греется

33 AzM   (10.10.2013 23:49)
Понизил сопротивление. Поставил R3 номиналом 56K 1W. Ситуация не изменилась. Мерею напряжение AC после R3 = 1-2 Вольта, так и должно быть?? Почему такой напряжение?? В качестве диодного моста используется RS207?? Пригоден ли он для этого?? Оптопару PC817 пока менять не пробывал. Стоит попробывать?

32 exersizze   (09.10.2013 19:08)
Да понизьте сопротивление, возможно оптопара не открывается и не дает импульс на микроконтроллер. Можно поставить два резюка в 100к в параллель.

31 AzM   (09.10.2013 01:41)
Я извиняюсь! Заработало управление симистором. Дело было в нерабочем оптосимисторе moc3020. После замены всё заработало как надо. Но детектор нуля так и не работает. Может быть дело в том, что я установил R3 номиналом в 100K, а не 82 как на схеме??

30 AzM   (08.10.2013 13:02)
Лампа постоянно горит в пол накала и помаргивает с частотой где 25 гц. МК отключен. Если выход 1 от MOC3020 через подключить к +5V, лампа вспыхивает на всю. Если подключить его к земле, естественно лампа как горит в пол накал и моргает, так и моргает дальше. Вы какой именно выход в виду имеете? ножка 2 и так на земле.

29 AzM   (08.10.2013 10:39)
Вы имеете в виду MOC3020?? Так он и так ножкой 2 подключен к земле. Если подключить R5 который идёт на ножку 1 оптопары к + но лампа вспихивает на 100% накала. А если к земле, ничего не меняется. У меня такое предчувствие, что дело в BT137-600, хотя менял на другой, картина такая же. Надо попробывать заменить его на BT136-600E, хотя сомневаюсь поможет. Кстати, датчик нуля также неработает. Но тут может быть дело в том, что я вместо 82K 1W, поставил 100K 1W, другого просто не было.

28 exersizze   (07.10.2013 19:02)
AzM,  а если вход оптосимистора подключить к земле, лампа не горит?

27 AzM   (07.10.2013 07:11)
Здравствуйте! Собрал плату почти точно по Вашей схеме. Симистор BT137-600D, оптопара MOC3020. Номинал резисторов как у Вас и даташите. Подключил лампочку(накал.) на выход 220V 60W. Лампочка горит в пол накала и моргает где в половину частоты сети. Отключил контроллер. Ситуация не поменяла. Видимо симистор почему открывается. При подключении выхода, который идёт на МК с R5 к плюсу питания, лампочка вспихивает во весь накал. Пытался включить подключить снабберную цепочку как в даташите. Ситуация с ней не поменялась. Пожалуйста, подскажите в чём может быть проблема??

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






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.