Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Измерение временных параметров импульсов

Читайте также:
  1. III. АМПЛИТУДНЫЙ СПЕКТР ИМПУЛЬСОВ
  2. А. Анализ современных дидактических комплектов начального обучения и их образовательных, обучающих, воспитательных и развивающих возможностей
  3. Адсорбция. Зависимость от параметров системы
  4. Антропометрическое измерение по методу Bolton
  5. В арифметических выражениях кроме переменных, указанных в списке формальных параметров, могут присутствовать и другие переменные.
  6. В ИНОЕ ИЗМЕРЕНИЕ
  7. В современных паровых котлах эту схему применяют редко.

Используется цифровой способ измерения периода импульсов: подсчет числа временных импульсов с эталонным периодом за время длительности измеряемого периода. При измерении периода импульсов с помощью таймера Т1 в режиме захвата требуются минимальные программные ресурсы, поэтому этот способ является предпочтительнее других. Таймер Т1 должен быть настроен в режим захвата с помощью регистра TCCR1B и на выполнение функции таймера. Значение коэффициента деления входного делителя частоты выберем равным 8. При частоте тактового генератора 16мГц на вход таймера будут поступать импульсы с периодом 0,5мкс. Так период импульсов может быть определен как разность между соседними фронтами или срезами, то соответственно выбирается тип входа захвата (фронт или срез).

Рисунок 63

После включения таймера он начинает счет времени в единицах 0,5мкс. В режиме захвата фронтом измеряемого импульса содержимое таймера (время первого фронта tf1) аппаратно помещается из таймера в регистр захвата ICR1 и вызывается функция обработки прерывания по захвату (предварительно прерывания по захвату разрешены), в которой необходимо значение tf1 из ICR1 поместить в переменную tf1. Таймер продолжает счет времени и в момент второго фронта tf2 фиксируется его время наступления в том же регистре захвата и опять вызывается функция прерывания по захвату. Теперь в ней необходимо значение tf2 из ICR1 поместить в переменную tf2 и вычислить период как разность Т= tf2 – tf1.

Так как функция прерывания вызывается два раза и, каждый раз выполняются в ней различные действия, то необходимо идентифицировать эти входы. Это может быть осуществлено проверкой значения некоторой переменной в начале подпрограммы обработки прерываний. Исходное значение этой переменной нулевое. Тогда при проверке, если ее значение равно нулю, то это первый вход в подпрограмму. Следовательно, нужно сохранить содержимое ICR1, установить значение переменной в единицу и произвести выход из функции обработки прерываний. Если значение переменной равно единице (зафиксировано время второго фронта), то необходимо сбросить таймер Т1, выполнить вычитание для получения значения периода снова установить значение переменной равное нулю, если требуется непрерывное измерение.

Значение периода после вычитания получится в единицах по 0,5мкс. Для перевода значения периода в микросекунды необходимо разделить полученное значение на 2.

Для измерения длительности положительного импульса необходимо при первом входе в подпрограмму прерывания по захвату перенастроить вход захвата ICP на захват по срезу импульса.

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

 

# include <mega16.h>

sfrw = 0x26; //В файле mega16 нет имени полного регистра

//объявление имени 16разрядного регистра, 0х26-адрес ICR1.

unsigned int tf1, tf2,T; // Объявление переменных (16 разрядные беззнаковые)

unsigned char n; //n - идентификатор фронт1 / фронт2 импульса

 

main ()

{

OCR0 =32; // Значение соответствующее периоду звукового сигнала

# asm ("sei")

TIMSK = 0x20; //Разрешение прерываний по захвату

TCCR1B = 0x42; //Захват по фронту, коэффициент деления 2

TCCR1A = 0;

DDRB.3 = 1; //Для вывода звуковых импульсов с помощью Т0

while (1); // Работает (измеряет) таймер Т1.

}

 

interrupt [ TIM1_CAPT ]

void meas (void) //Функция прерывания при захвате. Время фронтов в ICR1

{

if (n = = 0) //Если ноль, то захват был по первому фронту

{

tf1 = ICR1 / 2; //Фиксация времени фронта в переменной и сразу

// в микросекундах

n = 1; // По второму фронту будет выполняться ветвь еlse

}

Еlse

{

n = 0; //Для следующего измерения

tf2 = ICR1 >> 1; //Фиксация времени второго фронта в микросекундах

T = tsr - tfr; //Измеренный период в микросекундах

if (Т >200) TCCR0 = 0x1D; // Если Т >200мкс, то включить звук

TCCR0 = 0; // Иначе выключить звук

}

 

TCNT1 = 0; // Для измерения следующего периода

}

 


Дата добавления: 2015-07-20; просмотров: 121 | Нарушение авторских прав


Читайте в этой же книге: Операторы | Оператор if-else (ветвления ) | Оператор switch | Оператор цикла for | Программный способ формирования временных интервалов на языке Ассемблер | Программный способ формирования временных интервалов на языке СИ | Генерация пакета импульсов | Генератор заданного числа пакетов импульсов | Формирование импульсных сигналов управления с использованием таймеров микроконтроллера | Обработка динамического дисплея |
<== предыдущая страница | следующая страница ==>
Особенности схемы дисплея в учебной системе управления.| Обработка клавиатуры

mybiblioteka.su - 2015-2024 год. (0.007 сек.)