Измерение временных интервалов

В задачах управления часто возникает необходимость измерения промежутка времени между двумя событиями. Обычно события в объекте управления представляются сигналами от двоичных датчиков. Считая событиями фронт и спад импульса, можно определять временные характеристики импульсных сигналов: длительность, период и скважность.

Простейшим способом измерения длительности импульса является программный. Для обнаружения событий (фронт и спад импульсного сигнала) в этом случае используются типовые процедуры WAIT, а отсчёт времени ведется программным способом. Для "положительного" импульсного сигнала, поступающего на вход Т0, программа измерения его длительности будет иметь вид:

MSCONT: MOV R7, #0;сброс счётчика

WAIT0: JNT0 WAIT0;ожидание фронта сигнала

COUNT: INC R7;инкремент счётчика

JT0 COUNT;ожидание спада сигнала

EXIT:...;выход из процедуры

После выхода из процедуры содержимое счетчика R7 пропорционально длительности импульса.

Для нормальной работы этой программы необходимо, чтобы обращение к ней производилось в моменты, когда на входе Т0 присутствует сигнал нулевого уровня. Верхний предел измеряемой длительности “положительного” импульса составит 255(1 + 2) мкс = 765 мкс. Этот предел может быть увеличен включением в цикл COUNT дополнительных команд NOP. Максимальная погрешность измерений 3 мкс.

Для измерения длительности сигнала может быть использован таймер. Особенно эффективно использование для этой цели таймера в 8051 Intel, имеющего вход разрешения счёта (альтернативная функция входа INT). Измеряемый сигнал можно, например, подавать на вход INT0, а измерение длительности при этом будет выполняться в Т/С0. Программа измерения длительности “положительного” импульса будет выглядеть так:

MOV TMOD, #00001001B;настройка T/C0

MOV TH0, #0;сброс таймера

MOV TL0, #0

SETB TCON.4;старт T/C0

WAIT0: JNB P3.2, WAIT0;ожидание 1

WAITC: JB P3.2, WAITC;ожидание 0

CLR TCON.4;стоп T/C0

EXIT:...;выход из процедуры

Управление программе должно быть передано при условии, что на входе INT0 присутствует низкий уровень. Прерывания от T/C0 и внешнее прерывание по входу INT0 должны быть запрещены. По завершении программы в T/C0 будет находиться число, пропорциональное длительности “положительного” импульса на входе INT0. Верхний предел измерения равен 65 536 мкс, а максимальная погрешность 1 мкс.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: