10.2 Варианты программной реализации измерения ширины импульсов
Варианты программной реализации измерения ширины импульсов
При выборе принципов измерения длительности ШМ-импульсов имеет смысл учитывать такие факторы:
– возможность приема ШМ-импульсов аппаратными средствами микроконтроллера (прерывания, таймеры);
– минимизация программных действий по обработке ШМ-импульсов.
Можно предложить несколько вариантов приема и измерения длительности входных ШМ-импульсов, которые будут рассмотрены ниже. В любом из вариантов требуется измерять длительность импульса в некоторых единицах времени – Ti– периоде подсчитываемых импульсов от ГТИ, поэтому аппаратным средством измерения является таймер (рис. 2.3).
Рисунок 2.3 – Принцип измерения ширины импульсов
1. Программно-управляемое измерение длительности ШМ-импульсов
Данный подход основан на программном опросе уровня сигнала на входной линии микроконтроллера, на которую поступают ШМ-импульсы. Когда программно фиксируется высокий (активный) уровень ШИМ-сигнала, нужно включить средство измерения – таймер. При программной фиксации низкого уровня – завершении активной фазы импульса – таймер нужно выключить; накопленное в таймере значение выражает длительность импульса в единицах Ti.
Внешние ШМ-импульсов можно подавать на любой вход МК, который можно программно проверить – например, Р1.0. Измерения нужно выполнять циклически. Поскольку обычно кроме измерения длительности импульсов необходимо проводить некоторые вычисления, то возврат к очередному измерению может попасть на середину активной фазы текущего импульса. Поэтому в программе нужно обеспечить включение таймера именно по началу активной фазы импульса:
; Программно-управляемое измерение длительности ШИМ
dseg
org 30h
dataL: ds 1 ; Ячейки для результата измерения (2 байта)
dataH:ds 1
cseg
orgXXXX
movTMOD,# 00000001b ; Настройка таймера Т0 (тайминг)
movIE,#0 ; Прерывания запрещены
. . .
PWM: movTL0,#0 ; Цикл измерений – обнуление таймера
movTH0,#0
jbP1.0,$ ; Ожидание завершения
; предыдущего импульса
jnbP1.0,$ ; Ожидание начала нового импульса
setbTR0 ; Начало измерения – включение таймера
jbP1.0,$ ; Ожидание завершения текущего импульса
clrTR0 ; Окончание измерения – выкл. таймера
movdataL,TL0 ; Фиксация результата измерений
movdataH,TH0 ; впамяти
. . . ; Необходимая обработка данных
jmpPWM ; Возврат к началу цикла измерений
Примечание: символ $ означает переход на адрес текущей команды – т.е. зацикливание
Очевидное достоинство такого подхода – простота программной реализации за счет линейности программы и строгой последовательности проверок.
Серьезный недостаток – непроизводительное ожидание смены фаз импульса, причем длительность ожидания непостоянна, зависит от ширины импульса.
|