Микропроцессоры и микроконтроллеры

 
 
 
«Человеку свойственно ошибаться, но для нечеловеческих ошибок нужен компьютер»
Русский | Українська


Микропроцессоры и микроконтроллеры :: Микроконтроллерные вычислители :: 11.2 Принципы программной реализации выходных ШМ-сигналов

11.2 Принципы программной реализации выходных ШМ-сигналов

Несмотря на то, что в микроконтроллерах семейства MCS-51 отсутствуют встроенные аппаратные ШИМ-генераторы, сформировать ШМ-сигнал на выводе МК достаточно просто. Для этих целей удобно использовать таймер в режиме автоперезагрузки стартового числа. Используемая разрядность таймера NT соответствует разрядности счетчика NC из примера согласно п.3.1.

Возможные состояния таймера лежат в пределах от 0 до . Если значение периода ШМ-импульсов определить как , где TG–в данном случае период импульсов от внутреннего ГТИ, подсчитываемых таймером, то в каждом таком периоде активной фазе ШИМ-импульса будет соответствовать некоторое количество N1 периодов TG, а неактивной (нулевой) фазе – количество N0.

Важно, что всегда (N1 + N0) × TG = TШИМ , или . Следовательно, в двоичной арифметике значения N1 и N0являются обратными и могут быть получены друг из друга логической инверсией.

Таким образом, при использовании таймера в режиме автоперезагрузки необходимо поочередно загружать в счетный регистр значение стартового числа для отработки таймером N1 или N0 периодов TG. По прерыванию текущее содержимое регистра перезагрузки будет перемещаться в счетный регистр. В обработчике прерывания от таймера нужно изменять содержимое регистра перезагрузки на противоположное, а также изменять значение выходного ШИМ-импульса. Заметим, что стартовые числа для фаз   и  .

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

init_Tequ  00000010b ; Таймер Т0 используем для генерации ШИМ

                        ; в режиме автоперезагрузки (NT=8)

init_IEequ  10000010b ; Разрешено прерывание от таймера Т0

dataPWMequ  40h       ; Ячейка РПД, в которую основная программа

; помещает рассчитанную длительность

; активной фазы ШМ-импульса

PulsebitP1.0      ; ШМ-импульс будем выдавать по линии Р1.0

org 0

jmpmain_prog     ; Переход на основную программу

org 000Bh               ; Обработчик прерывания от таймера Т0

xrlTH0,#0FFh          ; Формирование длительности следующей фазы

cplPulse         ; Изменение фазы ШМ-импульса

reti               ; Возврат в основную программу

orgXXXX

main_prog:              ; Основная программа

movTMOD,#init_T0 ; Настройка таймеров и прерываний

movIE,#init_IE

movTL0,#246      ; Начальное стартовое число для фазы 1 (min)

movTH0,#10       ; Начальное стартовое число для фазы 0 (max)

setbPulse         ; Установка начального значения импульса

setbTR0           ; Включение таймера Т0

main_calc:              ; Вычисления по алгоритмам,

     . . .             ; выполняемые с нужным периодом дискретности

     . . .              ; Расчет управляющего воздействия

     . . .

clrTR0           ; Останов таймера Т0

movTL0, dataPWM  ;Формирование нового стартового числа

xrlTL0, #0FFh    ; для фазы «1»

movTH0, dataPWM  ; Новое стартовое число для фазы «0» 

setbPulse         ; Установка начального значения импульса

setbTR0           ; Включение таймера Т0

     . . .

jmpmain_calc

Останов таймера в основной программе для задания новых стартовых чисел занимает всего 8 машинных циклов (3% текущего периода TШИМ) и за счет инерционности исполнительных устройств не повлияет на равномерность работы оборудования. Этот останов происходит не каждый период ШИМ, а только один раз за  периодов.

Важно, что период работы основной программы должен быть значительно больше периода генерации выходного ШМ-сигнала: .

Например, в системе УУМС период аппаратного выходного ШИМ составляет
TШИМ = 0.0005 с, тогда как периоды дискретности обычно составляют 0,1 … 0,5 с.




<< Предыдущая статья
«11.1 Вывод аналоговых сигналов из МК»