Измерение периода сигнала

Автор: | 23.07.2017

Здравствуйте!

По работе столкнулся с задачей измерения периода сигнала при помощи микроконтроллера AtMega64. Входной сигнал имеет следующую форму:

Необходимо измерить период сигнала, и вывести его на дисплей.

Для решения поставленной задачи был использован режим захвата таймера 1 микроконтроллера AtMega64. Режим захвата позволяет генерировать прерывание TIMERx_CAPT_vect при изменении логического уровня соответствующего вывода микроконтроллера. При первом прерывании по захвату, устанавливаем соответствующий флаг начала измерения, и обнуляем счетный регистр. При втором прерывании по захвату, сбрасываем флаг, и считаем период сигнала по формуле:

T = текущее значение счетчика + (количество переполнений таймера между прерываниями * максимальное значение счетчика)

При последующем прерывании, начинаем процесс измерения сначала.

В соответствии с описанным выше алгоритмом была написана следующая прошивка микроконтроллера AVR:

 

Читайте также  AVR для начинающих. Урок 12.SPI.Регистры.

Первым делом инициализируется LCD дисплей, при помощи библиотеки описанной !ЗДЕСЬ!. Затем, инициализируется таймер 1 микроконтроллера для работы в режиме захвата, и настраивается предделитель счетчика таймера. Весь алгоритм расчета периода расположен в прерываниях, а в главном цикле мы лишь выводим период сигнала в микросекундах.

Данная прошивка легко адаптируется к другим микроконтроллерам AVR.

Результаты моделирования в ПО Proteus:

Как видно на скриншоте, на LCD выведен период сигнала частотой 10Гц.

Спасибо за внимание!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *