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

 
 
 
«Опасность не в том, что компьютер однажды начнет мыслить, как человек, а в том, что человек однажды начнет мыслить, как компьютер»
Русский | Українська


Микропроцессоры и микроконтроллеры :: Микроконтроллерные вычислители :: 10.2 Варианты программной реализации измерения ширины импульсов

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         ; Возврат к началу цикла измерений

Примечание: символ $ означает переход на адрес текущей команды – т.е. зацикливание

Очевидное достоинство такого подхода – простота программной реализации за счет линейности программы и строгой последовательности проверок.

Серьезный недостаток – непроизводительное ожидание смены фаз импульса, причем длительность ожидания непостоянна, зависит от ширины импульса.




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