Вариация на тему регуляторов мощности для 220В. Схема построена на симисторе с «опторазвязкой» и контролем перехода фазы через «0». Управляется все это микроконтроллером ATmega8A. Мощность выбирается кнопками и показывается на LED-дисплее.
Вершина эволюции регулятора мощности – сделать его цифровым. Не ахти как полезно, скорее все же трудоемко и затратно, но данный вариант регулятора намного удобнее «аналогового» в плане управления и информативности. Кроме того управляющие цепи гальванически развязаны с сетью 220В, что немного «развязывает руки» монтажнику систем и конечному пользователю.
Кратко об основных особенностях регулятора:
- Индикация мощности на LED-индикаторе от 1 до 100%.
- Мощность регулируется нажатием кнопок UP/DOWN.
- Мощность регулируется пошагово через 10%
- Выбранное значение мощности сохраняется в памяти при отключении и восстанавливается при запуске.
- Используется LED-индикатор повышенной яркости.
- Нажатия кнопок подтверждаются звуковым сигналом.
- Гальваническая развязка сети 220В и органов управления.
- Силовой компонент регулятора – симистор.
- Контроль перехода фазы через «0».
- Использование помехоподавляющих компонентов в цепи управления симистором.
- Сигнализация готовности регулятора к работе после подключения к сети.
Основа регулятора микроконтроллер ATmega8A в корпусе DIP-28 только потому, что был экземпляр с убитым АЦП. При этом порт ввода/вывода PORT.C работал. Особой необходимости такого контроллера в такой схеме нет и при самостоятельной разработке печатной платы его можно заменить на любой другой – из 8кб памяти используется не более 20%. Мега удобна своим количеством ног – к ней напрямую, без дополнительных микросхем, подключен LED-индикатор, кнопки, пищалка и управление симистором. Кроме того, цена на нее совсем немного дороже ATtiny2313, а возможностей гораздо больше.
Микроконтроллер тактируется от внутреннего генератора 8МГц – это нужно учесть при прошивке fuse-ов. Т.к. микроконтроллер впаивается в печатную плату без использования «панельки/кроватки», «фьюзы» лучше прошить перед впаиванием – на случай, если что-то пойдет не так. Такой способ монтажа микросхемы МК позволил отказаться от использования межслойных перемычек. На всей плате нет ни одной перемычки – активно используются выводы компонентов.
Управляющая программа МК написана на бейсике в BASCOM-AVR. Принцип фазного управления симистором прекрасно описан здесь. Думаю, нет смысла переписывать чужой труд заново. Тем более, мой исходник на бейсике хорошо прокомментирован и трудностей с пониманием возникнуть не должно.
'------------------------------------------------------------------------------
$regfile = "m8adef.dat" 'ATmega8A
$crystal = 8000000 '8МГц (деление на 8 отключить)
$baud = 9600 '------------------------------------------------------------------------------
Ddrb = &B11111111 'PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0
Ddrc = &B11111111 'N/C, RESET, PC5, PC4, PC3, PC2, PC1, PC0
Ddrd = &B11001010 'PD7, PD6, PD5, PD4, PD3, PD2, TXD, RXD
'------------------------------------------------------------------------------
Dim Count_led As Byte 'счетная переменная
Dim Count_debounce As Byte 'счетная переменная
Dim N(3) As Integer 'значения трех разрядов
Dim Wt As Byte 'регулировка времени открытия симистора
Dim Led As Byte 'индикация мощности
'------------------------------------------------------------------------------
Config Int0 = Falling 'вход детектора 0
On Int0 Imp_0 'обработка прерывания INT0
'------------------------------------------------------------------------------
Config Timer0 = Timer , Prescale = 1024 'переполнение каждые 0,032сек.
On Timer0 Perepolnenie_0 'обработка прерывания TIMER0
'------------------------------------------------------------------------------
Dig1 Alias Portc.1 'сотни
Dig2 Alias Portc.3 'десятки
Dig3 Alias Portc.5 'единицы
Opto Alias Portd.3 'управление симистором
Up_button Alias Pind.4 'кнопка UP
Down_button Alias Pind.5 'кнопка DOWN
Buzzer Alias Portd.6 'пищалка
'------------------------------------------------------------------------------
Enable Interrupts 'разрешаем использование прерываний
Enable Timer0 'разрешаем прерывание по переполнению TIMER0
Enable Int0 'разрешаем внешнее прерывание INT0
'------------------------------------------------------------------------------
Wt = 195 'минимальный накал
Maine: 'основной цикл
Do
If Count_debounce > 40 Then Reset Buzzer 'антидребезг
Gosub Refresh_led 'обработка индикации
If Up_button = 0 And Buzzer = 0 Then
If Wt < 255 Then Wt = Wt + 6 'увеличиваем мощность
Set Buzzer 'пикаем
Count_debounce = 0 'сбрасываем счетчик антидребезга
End If
If Down_button = 0 And Buzzer = 0 Then
If Wt > 195 Then Wt = Wt - 6 'уменьшаем мощность
Set Buzzer 'пикаем
Count_debounce = 0 'сбрасываем счетчик антидребезга
End If
Select Case Wt 'соответствие открытия симистора % мощности
Case 195 : Led = 1
Case 201 : Led = 10
Case 207 : Led = 20
Case 213 : Led = 30
Case 219 : Led = 40
Case 225 : Led = 50
Case 231 : Led = 60
Case 237 : Led = 70
Case 243 : Led = 80
Case 249 : Led = 90
Case 255 : Led = 100
End Select
Loop
End
'------------------------------------------------------------------------------
Refresh_led: 'подготовка данных для вывода на индикатор
N(1) = Led 'разбиваем число на цифры
N(2) = N(1)
N(3) = N(1)
N(1) = N(1) / 100 '1 цифра
N(1) = Abs(n(1))
N(2) = N(2) Mod 100 '2 цифра
N(2) = N(2) / 10
N(2) = Abs(n(2))
N(3) = N(3) Mod 10 '3 цифра
N(3) = Abs(n(3))
Incr Count_led 'выбираем разряд для загрузки
If Count_led > 3 Then Count_led = 1 'всего 3 разряда
Set Dig1 : Set Dig2 : Set Dig3 'гасим индикатор
Portb = Lookup(n(count_led) , Digits) 'закидываем в порт код цифры
Select Case Count_led 'включаем соответствующий разряд индикатора
Case 1 : If N(1) <> 0 Then Reset Dig1 'гашение незначащего 0 в 1 разряде
Case 2 : If N(3) <> 1 Then Reset Dig2 'гашение незначащего 0 в 2 разряде
Case 3 : Reset Dig3 '3 разряд
End Select
Waitms 2 'частота обновления индикатора
Return
'------------------------------------------------------------------------------
Imp_0: 'прерывание от детектора нуля
Timer0 = Wt 'чем большее значение, тем быстрее переполнится таймер
Start Timer0
Return
'------------------------------------------------------------------------------
Perepolnenie_0: 'переполнение TIMER0
Stop Timer0
Set Opto 'включение симистора
Waitus 100 'курим
Reset Opto 'выключение симистора
Incr Count_debounce 'антидребезг
Return
'------------------------------------------------------------------------------
Digits: 'цифры, выводимые на LED-индикатор
Data &B00000011 , &B10011111 , &B00100101 , &B00001101 , &B10011001 '0 1 2 3 4
Data &B01001001 , &B01000001 , &B00011111 , &B00000001 , &B00001001 '5 6 7 8 9
'------------------------------------------------------------------------------
LED-индикатор работает в режиме динамической индикации. Используется яркий красный 3-разрядный индикатор с общим анодом. Аноды разрядов индикатора подключены к МК через инверторы на транзисторах. Катоды сегментов объединены внутри индикатора и подключены к МК через токоограничивающие резисторы. Такой способ позволяет использовать довольно мощные (яркие) индикаторы, что особенно важно при эксплуатации регулятора в производственных условиях.
Стоит сказать, что схема напрочь отказалась симулироваться в Proteus-е. Ни в одной, даже самой новой версии. Восьмая версия Proteus вообще бесполезный монстр – нововведений ноль, ресурсов жрет больше, удобства меньше, прежние косяки остались. Файлы симулятора есть в приложенном архиве, если кому интересно.
П/п двухсторонняя, компоненты и проводники располагаются по обеим сторонам. Размер 73х84мм, при желании можно уменьшить плату на пару сантиметров. Китайцы наверняка уместили бы все в спичечном коробке, как обычно наплевав на надежность. Цитата из «видика» 90-х: «Дружище тебя, как и всех, привлекли красные точки…?». Просто в DipTrace-е до сих пор нет нормальных 3D компонентов, вот и приходится выкручиваться. Самое интересное, как обычно, с другой стороны.
Тактовые кнопки используются «большие», т.к. регулятор делается для практического применения, а не для понта. Незадействованные участки платы «залиты землей», кроме высоковольтной части. Особое внимание заслуживает способ монтажа радиатора симистора — получается своеобразный сэндвич. На плате предусмотрены отверстия для крепления радиатора.
Стабилизатор напряжения 7805 в данной версии регулятора используется в корпусе ТО-220. Практические испытания показали, что в таком типоразмере нет необходимости (я перестраховался) и его вполне можно заменить стабилизатором 78L05 в корпусе ТО-92. «Пищалка» 5-вольтовая, потребляет ток не более 20мА, поэтому подключена напрямую к микроконтроллеру. Регулятор питается от трансформатора с выходным напряжением 10-15В, что в паре с оптронами позволило обеспечить 100% гальваническую развязку цепей управления.
А можно получить готовую прошивку ? я не силен в программировании, но опыт в прошивании контроллеров есть. Заранее буду благодарен))
fly-ruslan@mail.ru
Можно, добавил архив в конец статьи.
были вопросы нельзя написать в личку
не симулируется потому что не подаете синусоидальный сигнал на вход МК
Добрый день. Собрал цифровой регулятор мощности
э но с прошивкой не могу разобраться. Как выставить фьюзы? Программатор TL866A.
В начале статьи есть картинка с фьюзами. Главное выставить частоту на 8МГц, все остальное по умолчанию.
Правильно ли я выставляю фьюзы? Посмотрите закинул на файлообменник. https://dropmefiles.com/iHmZQ
Правильно ли я выставляю фьюзы? Посмотрите закинул на файлообменник. https://dropmefiles.com/iHmZQ
Прошил, частота 8МГц. При включении индикация 100, при нажатии кнопки DOWN -90, после контроллер наверное зависает зумер пищит, на кнопки не реагирует. НЕХ брал с прикрепленного архива. Разводка пп правильная 100%. в чем может быть причина зависания работы программы?
У меня тоже «разводка пп правильная 100%» — работает.