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

 
 
 
«Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу.»
Bill Gates
Русский | Українська


Микропроцессоры и микроконтроллеры :: Микроконтроллерные вычислители :: 10.3 Измерение длительности ШИМ-импульсов с автоматическим запуском таймера

10.3 Измерение длительности ШИМ-импульсов с автоматическим запуском таймера

Измерение длительности ШИМ-импульсов с автоматическим запуском таймера

 

В микроконтроллерах семейства MCS-51 имеется возможность управлять запуском таймера с помощью уровня внешнего сигнала, подаваемого на вход INTx. Эта возможность активна при установке бита GATE=1 в регистре TMOD. При этом таймер следует включить программно один раз в блоке инициализации, а текущие запуски и остановы будут происходить в соответствии с фазой входного ШМ-импульса (рис.2.3)

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

; Измерение длительности ШИМ с автоматич. запуском таймера

dseg

org 30h

dataL: ds 1  ; Ячейки для результата измерения (2 байта)

dataH:ds

org 0

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

org 0003h            ; Обработчик прерывания INT0

movdataL,TL0   ; Фиксация результата измерений

movdataH,TH0   ; в памяти

movTL0,#0      ; Обнуление таймера

movTH0,#0      ; для следующего цикла

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

orgXXXX

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

movTMOD,#00001001b ; Настройка таймера Т0

movIE,#10000001b   ; Разрешение прерывания INT0

setbIT0         ; Прерывание INT0 принимаем по срезу

movTL0,#0      ; Начальное обнуление таймера

movTH0,#0

jbP1.0,$  ; Ожидание завершения предыдущего импульса

setbTR0     ; Включение таймера – но он еще не работает   

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

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

    . . .

    . . .

jmpmain_calc

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

Обработчик прерывания INT0 в данном примере реализован непосредственно на векторе прерывания (адрес 0003h). В сложных программах с необходимостью обработки других прерываний может потребоваться перенос обработчика в другое место в памяти программ, а по адресу 0003h разместить команду перехода на эту процедуру.

Важно отметить, что период ШМ-импульсов, как правило, гораздо меньше, чем период дискретности алгоритмов управления. Поэтому предлагаемый подход существенно освобождает ресурсы процессора, т.к. не требует программного ожидания изменения фаз ШМ-импульсов. Обработчик прерывания в минимальной реализации занимает всего 12 машинных циклов (с учетом его вызова).

Максимальное значение ширины измеряемых импульсов при 16-битовой конфигурации таймера составляет ТВ max =65536 ТМЦ, а минимальное ТВ min =ТМЦ.

Таймер Т2 не имеет возможности запуска от внешнего сигнала, поэтому его желательно использовать для формирования периода дискретности работы контроллера или для синхронизации последовательного порта, если таймер Т1 нужен для измерения ширины или периода другой серии импульсов.

2.3. Получение физического значения параметра, измеренного как ШИМ

Данные, полученные в результате измерения длительности ШМ-импульса, необходимо пересчитать в значение того физического параметра, который измеряется системой. Для этого необходимо знать период ШМ-импульсов – ТШИМ , определяемый схемотехникой внешнего ШМ-модулятора. Также необходимо знать минимальное и максимальное значение измеряемого параметра – PMIN и PMAX .

Максимальное значение измерения на таймере в 16-битовой конфигурации составляет Nmax = 65535, а минимальное Nmin = 1, что соответствует граничным значениям ШМ-сигнала. Схема ШИМ должна обеспечивать значение периода ШМ-импульсов таким, что

ТШИМ < (Nmax ×Ti).

Кроме того, при изменении физического измеряемого параметра P в пределах от PMIN  до PMAX  схема ШИМ должна обеспечивать изменение ширины выходного импульса t в пределах от tPminдо tPmaxтакие, что

.

Это значит, что при крайних значениях измеряемого параметра ширина ШМ-импульсов не должна достигать своих крайних значений.

После расчета внешних схем измерительной системы (например, по рис. 2.1) и их изготовления нужно выполнить градуировку измерительного канала. Желательно использовать такие датчики, которые работают на линейном участке в измеряемом диапазоне физического параметра (из этого предположения мы исходим в дальнейших расчетах).

Необходимо путем эксперимента определить значения N для границ изменения параметра:   NPmax и NPmin. Тогда значение измеренного параметра P можно рассчитать как:

P = KP×N + BP ,

где ,  и

Естественно, что коэффициент KP и смещение BP могут быть определены заранее и подставлены в программу в виде значений констант.