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

 
 
 
«Программирование на С похоже на быстрые танцы на только что отполированном полу людей с острыми бритвами в руках»
Waldi Ravens.
Русский | Українська


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

9.2 Варианты программной реализации измерения частоты импульсов

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

1. Задача простого подсчета внешних импульсов. Её решают путем подачи таких импульсов на внешний счетный вход таймеров Т0, Т1 или Т2. При этом выбранный таймер нужно настроить на режим подсчета внешних импульсов. Як правило, таймер используют в 16-битовой конфигурации. Например, при использовании таймера Т0 нужно записать в регистр управления таймерами TMOD число 00000101b.

2. Измерение частоты импульсов на основе подсчета их количества за фиксированный интервал времени. Возможны два подхода к такому измерению – с программной реализацией интервала и на основе другого таймера.

Для программной реализации интервала измерения ТИ можно воспользоваться  подпрограммою задержки, например Delay1s из программы МОНИТОР:

cseg

mov  TMOD, #00000101b  ; Настройка таймера Т0

. . .   ; на режим подсчета внешних импульсов

setb  TR0      ; Начало измерения

call  Delay1s  ; Задержка на 1с

clr   TR0      ; Завершение измерения.

. . . ; Результат содержится в регистрах TL0 и TH0

Достоинства такого подхода – простота и наглядность.

Недостатки:

·  непроизводительные действия процессора в интервале подсчета;

·  затраты времени на измерение – т.е. задержка в поступлении даннях.

Максимальная частота внешних импульсов при такому подходе к измерению ограничена разрядностью таймерных регистров: , а минимальная частота связана с интервалом измерения: .

Более эффективным является использование второго таймера, например, Т1, для реализации интервала измерения. Для простоты рассмотрим постановку задачи,  где интервал измерения составляет ТИ = 50 мс при FQ = 12 МГц.

org 0000h

jmp   start    ; Вектор стартового перехода

org 001Bh

jmp   proc_T1  ; Переход на обробку прерывания

org 0030h        ; Блок инициализации

start: mov  TMOD,#00010101b ; Настройка таймеров

    mov  IE,#10001000b   ; Разрешение прерывания от Т1

    mov  TL1,#Low(Nst)   ; Задание стартового числа

    mov  TH1,#High(Nst)

    . . .        ; Другие действия

    mov  TL0,#0   ; Обнуление таймера, который считает

    mov  TH0,#0   ; внешние импульсы

    setb TR1 ; Запуск таймеров – начало интервала

    setb TR0 ; и начало подсчета

    . . .        ; Другие действия в программе

“int”. . .  ; На одной из команд возникает прерывание при

    . . .  ; завершении интервала измерения (50мс)

Proc_T1: ; Процедура обработки прерывания от таймера Т1

    clr  TR1 ; Останов таймеров – конец интервала

    clr  TR0 ; и завершение подсчета импульсов

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

    mov  R4,TH0

    . . .        ; Другие действия при завершении интервала

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

В данном примере, поскольку ТИ  невелик, следует учитывать аппаратные ограничения МК на частоту внешних импульсов: , то есть за интервал ТИ может быть подсчитано только 25000 импульсов. Минимальная частота определяется так же: .

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

В целом принцип измерения частоты определяется временной диаграммою на рис. 1.2.

Абсолютное значение измеряемой частоты импульсов может быть рассчитано как . Нужно отметить, что с увеличением интервала измерения ТИ  точность результата возрастает.

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

Рисунок 1.2 – Принцип измерения частоты импульсов