Статья №14
В этой статье мы опять вернемся к рассмотрению проблемы формирования ШИМ – сигнала для регуляторов мощности электроприборов, работающих на переменном токе.
Основным преимуществом представленного ниже регулятора мощности является практически полное отсутствие электромагнитных помех, которые обусловлены включением или выключением тока нагрузки внутри полупериода напряжения. Помехи будут минимальны, если нагрузку включать и выключать в начале или в конце полупериода.
Всё это требует применить метод ступенчатого регулирования мощности, когда мощность на нагрузке определяется количеством полупериодов подводимого напряжения. Применение полевого транзистора в качестве элемента, управляющего нагрузкой, позволяет включать и выключать нагрузку при напряжении ниже 1В. Описанный ниже регулятор имеет 8 ступеней регулирования (максимальное число полупериодов – 8), т.е. дискретность регулирования составляет 12,5%. Временные диаграммы работы регулятора изображены на Рис.1.
Схема регулятора мощности приведена на Рис.2. Импульсы частотой следования 100 Гц формируются из сетевого напряжения с помощью диодного моста VD3 – VD6. И через оптопару DA2 и элементы микросхемы (CD-4011 или 564 ЛА7) DD2.1, DD2.4 поступают на вход INT0 микроконтроллера DD1 (ATtiny2313). Количество ступеней мощности (полупериодов напряжения от 1 до 8) задаётся с терминала Bascom и передаётся по RS-232 на UART микроконтроллера.
Шим – импульсы формируются микроконтроллером и с вывода РВ0 через оптопару DA3 поступают на элемент управления нагрузкой – транзисторную сборку DA1, транзисторы которой соединены параллельно для увеличения токово – нагрузочной способности. Диод VD1 cлужит для предохранения затвора от отрицательного напряжения. Диод VD2 шунтирует нагрузку от противо - ЭДС, в случае, если нагрузка имеет индуктивный характер.
На ЖКИ – индикаторе типа МТ-16S2H индуцируется количество полупериодов напряжения в ШИМ – сигнале: в лог.0 и лог.1 и слово «Аrbeit» (на нижней стоке индикатора).
При задании мощности следует переключить тумблер TS1 из состояния «работа», в состояние «программ.».
Программа для микроконтроллера регулятора мощности “RP1” состоит из цикла основной программы, а так же подпрограмм обработки прерываний по INT0 и обработки прерываний по приёму.
В цикле основной программы DO…LOOP включается светодиод (PD6), и на ЖКИ отображаются количество полупериодов в ШИМ – сигнале : в лог.1 и лог.0. Во второй строке ЖКИ отображается слово «работа».
В подпрограмме «RxD» обрабатываются прерывания по приёму. С терминала Bascom задаётся количество полупериодов в сигнале лог.1, и включается нагрузка (РВ0=1). Количество полупериодов в сигнале лог.0 определяется выражением: 8 – N, здесь N-первоначально заданное количество импульсов в сигнале лог.1.
В подпрограмме «Pulse» обрабатываются внешние прерывания по INT0. Подсчитывается количество синхроимпульсов, приходящих на вывод микроконтроллера INT0 (PD2). Если это количество совпадёт с заданным, то заданное количество изменяется на Nновое =8-Nпрежнее , где 8 – максимальное число ступеней регулирования, при этом переключается логический уровень на РВ0. Таким образом, на выводе РВ0 формируется ШИМ – сигнал (см. Рис.1)
Текст программы приводится ниже:
$regfile = "attiny2313a.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Pind.0 = Input 'UART RXD
Config Portd.1 = Output 'UART TXD
Config Int0 = Falling 'прерывание по спаду импульса
Config Pind.2 = Input 'INT0
Config Portd.6 = Output 'cветодиод
Config Portb.0 = Output 'нагрузка
Dim N As Byte 'объявление переменных
Dim Counters As Byte
Dim N2 As Byte
On Urxc Rxd 'определение подпрограмм обработки прерываний
On Int0 Pulse
Enable Interrupts 'разрешение прерываний
Enable Urxc 'по приёму
Enable Int0 'внешнее
Reset Portb.0 'начальные установки '
N = 0
Do 'основной цикл
Set Portd.6 'вкл. светодиода
N2 = 8 - N
Cls
Lcd "N1=" ; N ; " " ; "N2=" ; N2 'отображение на ЖКИ числа полупериодов
Lowerline 'отображение на нижнем ур-не ЖКИ
Lcd "Arbeit"
Loop
Pulse: 'обработка INT0
Incr Counters 'инкриминировать
If Counters = N Then 'если счёт = кол-ву заданных полупериодов
N = 8 - N 'пересчёт
Toggle Portb.0 'переключение выхода управ. нагрузкой
Counters = 0 'сброс счёта
End If
Return
Rxd: 'обработка Urxc
Reset Portb.0 'выкл. нагрузки
Reset Portd.6 'выкл. светодиода
N = 0
Input "ENTER N=1...8:" , N 'ввод с терминала числа положительных ‘полупериодов
Set Portb.0 'вкл. нагрузки
Return
End 'end program
Недостатком подобных регуляторов, изменяющих число подаваемых на нагрузку полупериодов сетевого напряжения , заключается в том, что подача нечётного числа полупериодов приводит к образованию в потребляемом токе постоянной составляющей, способной вызывать нежелательное подмагничивание магнитопроводов подключённых к этой же сети трансформаторов и электродвигателей.
На таймерах в Bascom можно создавать генераторы прямоугольных импульсов с изменяемой частотой, которую можно изменять по определённой сетке (с определённым шагом).
На Рис.3 представлена схема генератора прямоугольных импульсов, который построен на микроконтроллере ATtiny2313. Значение частоты задаётся с терминала Bascom по RS-232. Сигнал прямоугольной формы (меандр) снимается с вывода микроконтроллера РВ3. Значение частоты отображается на ЖКИ – индикаторе типа MT-16S2H.
Программа «Freq» основана на определённом конфигурировании счётчика – таймера. При данной конфигурации счётчик, достигая значения, записанного в регистре сравнения Compare A, сбрасывается , а уровень логического сигнала на выводе ОС1А (РВ3) переключается на противоположный:
Config Timer1= Timer, Preskale=1024, Compare A=Toggle, Clear Timer1
Программа состоит из основного цикла DO…LOOP, в котором происходит отображение (LCD) на ЖКИ - индикаторе значения генерируемой частоты, и подпрограммы обработки прерывания по приёму, где осуществляется задание значений частоты от 0 до 100Гц сеткой 1Гц с терминала Bascom с помощью эффекта «эхо». Далее происходит пересчёт заданной частоты в количество импульсов при определённой частоте работы таймера – счётчика и запись в регистр сравнения Compare A.
Текст программы “Freq” приведён ниже:
$regfile = "attiny2313a.dat"
$crystal = 4000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Pind.0 = Input 'RXD
Config Portd.1 = Output 'TXD
Config Portb.3 = Output 'выход Timer1
Config Timer1 = Timer , Prescale = 1024 , Compare A = Toggle , Clear Timer = 1 'коэфф.дел.=1024,по совпад.- переключ. OC1A и очистить таймер
Stop Timer1 'начальная установка таймера
Timer1 = 0
Dim F As Byte 'объявление переменных
Dim X As Integer
Dim T As Single
Const P = 0.256
On Urxc Rxd 'определение подпрограммы обраб. прерыв.
Enable Interrupts ’разрешение прерываний
Enable Urxc ’прерывание по приёму
Do 'основной цикл
Cls
Lcd "F=" ; F ; "Hz" 'отображение на ЖКИ частоты
Loop
Rxd: 'подпрограмма прерывания по приёму
Input "Enter F = 1-100 Hz :" , F 'задание частоты
T = 500 / F ' определение длит. импульса
X = T / P ' определение кол-ва отсчётов
Compare1a = X 'запись в регистр сравнения
Timer1 = 0
Start Timer1 'пуск таймера
Return
End 'end program
Cледует отметить, что точность установки частоты составляет 0,032%. Стабильность работы генератора повысится, если вместо внутреннего RC – генератора микроконтроллера использовать навесной кварц.
Используя методику создания подпрограмм в Bascom, которая была описана в предыдущих статьях, а также различные сетки изменения частоты, можно получать генераторы для нескольких диапазонов частоты.
Все приведённые в статье программы находятся в приложении 1.