Как сделать диммер на основе Ардуино

В современных домохозяйствах большинство устройств (лампочки, телевизоры, кондиционеры и т.д.) запитываются от напряжения переменного тока. Мы можем управлять включением и выключением этих устройств с помощью платы Arduino и реле, эти способы управления домашними электронными устройствами рассматривались на нашем сайте в проектах автоматизации дома. Но если нам нужно не просто управлять процессами включения/выключения устройств, а нужно еще, к примеру, регулировать яркость свечения лампы или частоту вращения вентилятора, то здесь нам необходимо использовать методы управления фазами и статические переключатели наподобие симисторов (TRIAC) для управления фазами напряжение переменного тока.

В данной статье мы рассмотрим создание регулятора силы света (диммера, dimmer) лампы переменного тока на основе платы Arduino и симистора. Для переключения режимов лампы переменного тока мы будем использовать симистор (TRIAC) – быстродействующий электронный переключатель, наиболее хорошо подходящий для проектов подобного вида.

На нашем сайте вы можете также посмотреть проекты, в которых использовалась регулировка силы света:

  • регулятор силы свечения светодиода на микроконтроллере AVR ATmega32;
  • автоматическое управление яркостью свечения светодиода с помощью Arduino;

Методика обнаружения перехода через ноль

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

Принцип работы симистора

Симистор (симметричный триодный тиристор, в англ. TRIAC) представляет собой переключатель переменного тока с тремя выводами, который можно переключить при помощи подачи отпирающего импульса на его управляющий вывод (затвор). Но в отличие от других подобных переключателей, которые проводят ток в одном направлении, симистор может управлять током в обоих направлениях. В нашем проекте мы будем использовать симистор BT136.

Принцип управления симистора переменным током показан на следующем рисунке.

Как показано на рисунке, мы можем переключать, к примеру, симистор на угле 90 градусов при помощи подачи отпирающего импульса на его управляющий вывод. В этом случае мы будем подавать ток на лампу только в половине времени положительной полуволны сигнала (на графике время t1), соответственно, лампа будет гореть вполовину мощности. Уменьшая или увеличивая это время мы можем заставить лампу гореть ярче или тусклее.

Частота сигнала переменного тока в нашей сети составляет 50 Гц, соответственно, период сигнала равен 1/f =20 миллисекунд. Значит, половина периода будет равна 10 мс. Поэтому мы можем изменять время t1 на приведенном графике для управления яркостью свечения лампы переменного тока в диапазоне от 0 до 10 мс (10000 мкс).

Сетевой диммер 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
AsBit
‘1-плавно зажигаем лампочку, 0-гасим
Config
Int0 = Falling
On
Int0 Imp
ConfigTimer0
=
Timer
, Prescale = 1024 ‘переполнение за 0,032 сек
Dim
Wt
AsByteOnTimer0
Perepolnenie
Config
Portd.0 =
Output
Opto
Alias
Portd.0 Opto = 0
EnableInterruptsEnableTimer0StartTimer0Enable
Int0 Wt = 195 ‘минимальный накал N = 1
Wait
2
Do
‘бесконечный цикл
LoopEnd
Imp: ‘прерывание от детектора нуля
Timer0
= Wt ‘чем большее значение сюда положим, тем быстрее переполнится таймер
StartTimer0If
N = 1
Then
‘плавно зажигаем лампу
Incr
Wt ‘увеличиваем до максимального значения
If
Wt = 255
Then
N = 0
EndIfElse
‘плавно гасим
Decr
Wt ‘уменьшаем до минимального значения
If
Wt = 195
Then
N = 1
EndIfEndIfReturn
Perepolnenie: ‘переполнение таймера
StopTimer0
‘останавливаем таймер Opto = 1 ‘включение симистора
Waitus
100 Opto = 0 ‘выключение оптосимистора
Return

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

Butsun

, оптосимисторы со встроенным детектором нуля, типа МОС306х не годятся для регулировки накала ламп…

+1
Спам

62
Butsun
(28.12.2016 00:16) [Материал]

Вот, кому интересно… подключение нагрузки к МК… полезно) И есть хитрость, если использовать МОС3063, то ноль ловить нам не надо… https://eugenemcu.nichost.ru/articles/applications/268-mcu-triac

0
Спам

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% времени интервала в одну неделю

0
Спам

59
pchela5
(09.12.2016 13:32) [Материал]

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

0
58
exersizze
(09.12.2016 12:43) [Материал]

Чтобы понять откуда взялась цифра 195 надо сначала въехать в принцип работы: когда начинается новая полуволна (ток прошел через ноль), таймер начинает считать до своего переполнения и после этого откроет симистор. Если мы в него положим значение 255 тогда он переполнится практически сразу и симистор будет открыт все время пока ток снова не пройдет через ноль. Короче, симистор будет пропускать полуволну полностью. На следующей полуволне все повторится. Теперь уменьшим стартовое значение таймера. Значит между прохождением тока через ноль и переполнением таймера пройдет больше времени, но чтобы получить минимальный накал необходимо чтобы таймер успел переполнится пока не закончилась та полуволна, которая запустила таймер

0
Спам

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

0
Спам

55
Eugene
(18.11.2015 20:43) [Материал]

Уважаемый автор!!! Помогите переделать вашу программу чтобы можно было с помощью кнопок +,- управлять выходной мощностью. И почему-то ваша программа не хочет моделироваться в протеусе. Помогите пожалуйста!!! Заранее спасибо.

+1
Спам

54
aleksandr
(26.05.2014 21:47) [Материал]

Моё сообщение от 18:33 — решено.

0
Спам

53
aleksandr
(26.05.2014 18:33) [Материал]

Здравствуйте, друзья! Помогите переделать часть программы из этого примера, чтобы лампочка после разгорания не гасла, а так и оставалась включённой.

0
Спам

52
sasha_1973
(10.01.2014 18:05) [Материал]

Пишите на форуме, Вам помогут.

0
Спам

51
sasha_1973
(10.01.2014 18:04) [Материал]

Говорите что именно, скину на мыло

0
Спам

50
koteika
(10.01.2014 12:15) [Материал]

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

0
Спам

49
sasha_1973
(10.01.2014 11:19) [Материал]

Давайте почту, скину рабочий вариант.

0
Спам

48
koteika
(10.01.2014 10:41) [Материал]

«Все равно что-то не получается включить симуляцию, т.е. симуляция работает пару секунд потом, останавливается: https://dl.dropboxusercontent.com/u/52618061/Proteus.png» та-же петрушка не работает симуляция((

0
Спам

47
sasha_1973
(10.01.2014 09:33) [Материал]

Симуляцию не хотите добавить, у меня есть готовая, на 1 и 3 фазы?

0
Спам

46
exersizze
(26.12.2013 23:48) [Материал]

dossalab,

можно, но придется подбирать частоту чтобы время переполнения таймера осталось прежним (в отличии от 8и битного «нулевого таймера» Timer1 считает до 65535). Очень рекомендую ознакомится с этим https://decada.org.ru/project/lessons/bascom_avr/10/

0
Спам

45
dossalab
(25.12.2013 21:31) [Материал]

Можно ли перевести устройство на Timer1?И как?

0
Спам

44
emmgold
(23.12.2013 14:26) [Материал]

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

0
Спам

43
exersizze
(22.12.2013 14:02) [Материал]

emmgold

, это почему же?

0
Спам

42
emmgold
(21.12.2013 16:16) [Материал]

А если частоту ШИМ увеличить раз в 100. И париться не нужно.

0
Спам

41
myweb
(12.11.2013 01:59) [Материал]

Все равно что-то не получается включить симуляцию, т.е. симуляция работает пару секунд потом, останавливается: https://dl.dropboxusercontent.com/u/52618061/Proteus.png https://dl.dropboxusercontent.com/u/52618061/noname1.hex

0
Спам

40
exersizze
(09.11.2013 22:21) [Материал]

В протеусе есть инструменты для генерирования различных сигналов, в том числе и синуса

0
Спам

39
myweb
(09.11.2013 20:48) [Материал]

Можно ли прикрепить архив проекта Proteus к статье? Только начинаю знакомство с микроконтроллерами и Proteus — много вопрос… Скажите, как вы подаете переменное напряжение на схему в Proteus?

0
Спам

38
exersizze
(22.10.2013 01:46) [Материал]

а ведь и вправда) спасибо! исправлю график.

+1
Спам

37
TomaTLAB
(22.10.2013 00:23) [Материал]

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

0
Спам

36
TomaTLAB
(22.10.2013 00:18) [Материал]

И еще оно замечание касаемо двигателей. Единственное, ну кроме нагревателей и лампочек, да и то не всех :), что более мене «спокойно» относится к фазо-импульсному регулированию, это коллекторные двигатели. Все остальное будет усиленно этому регулированию сопротивляться

1-30
31-60 61-65

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

Схема проекта

Схема регулятора силы света (диммера) на Arduino и симисторе представлена на следующем рисунке.

Схема соединения симистора и оптопары показана на следующем рисунке.

Эту схему мы собрали на перфорированной плате, у нас получилась конструкция следующего вида:

Оптопару MCT2E и соединения с ней мы также разместили на перфорированной плате и подсоединили ее к понижающему трансформатору.

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

Создание проекта

Файл, новый проект: File -> New Project

Выбираем нужный МК: STM32F103C8

Включаем отладчик: System Core -> SYS -> Debug: Serial Wire Частоту тактирования (по умолчанию 8 МГц) не изменяем.

Нажимаем на любой удобный вывод (у меня это PB12) и выбираем GPIO_EXTI (External Interrupt), для удобства можно обозвать как AC_Zero (ПКМ -> Enter user label):

Настраиваем внешнее прерывание ( GPIO mode -> External Interrupt Mode with Rising edge trigger detection), нам нужно заходить в него по падающему фронту (переход от низкого уровня к высокому) — для схемы с развязкой. Для схемы без развязки выбираем по обоим фронтам (GPIO mode -> External Interrupt Mode with Rising/Falling edge trigger detection).

Любое название и для Keil: Project Name: zero_crossingToolchain/IDE: MDK-ARM, Min Version: V5.27

Генерируем код и открываем проект: GENERATE CODE -> Open Project

Тестирование работы проекта

На следующих трех рисунках показаны 3 степени регулировки яркости лампы переменного тока.

1. Маленький шаг регулировки.

2. Средний шаг регулировки.

3. Максимальный шаг регулировки.

Материалы

Вариант 1

Для удобства следует разбить список покупок на несколько основных пунктов, в зависимости от того, для чего мы будем использовать те или иные инструменты. Так, вам будет необходимо собрать:

  1. Детектор для отслеживания пересечений с нулем. Для этой части проекта потребуется H11AA11 с парой резисторов на 10кОм, а также мостовой выпрямитель на 400 Вольт и ещё пара резисторов на 30 кОм. Для удобства стоит прикупить и 1 разъем, а также стабилизатор на 5.1 Вольт.
  2. Драйвер для лампы. Здесь достаточно будет простого светодиода, а также MOC3021 с резистором 220 Ом (можно и больше), а еще резистором на 470 Ом и 1 кОм, и один симистор, подойдет версия TIC Также можете докупить ещё один разъем.
  3. Вспомогательные элементы. Конечно, при спайке не обойтись без проводов и куска текстолита 6 на 3 см.

Когда вы соберёте все необходимые элементы, придёт время спайки, поэтому, помимо выше перечисленного, потребуются также паяльник и канифоль с припайкой. Плату вы можете расчертить и сделать самостоятельно или воспользоваться специальным принтером, если есть в наличии. Варианты расположения дорожек можно найти на нашем сайте или спроектировать всё самостоятельно, по вашему желанию.

Вариант 2

Для нашего второго альтернативного варианта нам понадобятся:

1x — 330 Ом резистор 2x — 33К резистора 1x — 22К резистор 1x- 220 Ом резистор 4x — 1N4508 диоды 1x — 1N4007 диоды 1x — Диод Zener 10V.4W 1x — Конденсатор 2.2uF / 63V 1x — Конденсатор 220nF / 275V 1x — Arduino / Ардуино 1x — Оптрон: 4N35 1x — МОП-транзистор: IRF830A 1x — Лампа: 100 Вт 1x — Питание 230 В 1x — Розетка 1x — Паяльная плата и паяльный комплект

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]