Таймеры

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

Обычно для переключения таймера используются тактовые импульсы процессора. Загрузив в таймер начальное значение, можно отсчитывать опре­деленные интервалы времени, фиксируя окончание интервала по моменту переполнения таймера.

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

Если требуется реализовать задержку в 10 mc (0.01с) в системе с тактовой частотой 10 МГц, то можно использовать схему, показанную на рис. 2.19, следующим образом. Сначала надо определить требуемый коэффициент де­ления. При тактовой частоте 10 МГц таймер должен переключиться до пере­полнения 10000 раз, что невозможно для 8-разрядного счетчика. Чтобы обес­печить заданную задержку, необходимо выбрать коэффициент деления для предварительного делителя, который обычно является степенью двойки (то есть 1, 2, 4, 8,...256). Если выбрать коэффициент деления 64, то таймер пере­ключится 156 раз при поступлении на вход делителя 64 х 156 = 9984 тактовых импульсов, что достаточно близко к требуемой величине. Более точное зна­чение задержки может быть достигнуто путем добавления команд NOP или других команд, используемых для заполнения определенных промежутков времени. Для отсчета заданного времени таймер можно очистить, а затем непрерывно сравнивать его содержимое со значением 156.

Рис. 2.19 - Структура таймера в микроконтроллере.

Более эффективный способ отсчета - загрузить в таймер число 100 = 256 - 156 и ждать, когда флаг прерывания по переполнению таймера установится в 1. Используя данный метод, можно реализовать мультизадачный режим вы­полнения программ. Переключение задач будет производиться, когда тай­мер отсчитает 10 мс.

Не рекомендуется использовать этот метод для создания часов реального времени. Так как при перезагрузке таймера значение коэффициента деления делителя неизвестно, а его содержимое сбрасывается в 0 при записи в ре­гистр таймера, то при отсчете времени могут возникать ошибки. Вместо этого лучше дать возможность таймеру считать непрерывно (тогда делитель никогда не сбрасывается), а при его переполнении увеличивать содержимое счетчика часов реального времени. Когда программе требуется узнать текущее время, она выбирает и преобразует содержимое этого счетчика, получая правильное значение времени. Такой метод используется в IBM PC, где переключение («тик») таймера происходит 18,2 раз в секунду.

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

Если микроконтроллер содержит два таймера, то можно легко реализо­вать простой тахометр - счетчик числа событий, происходящих за единицу времени (рис. 2.20). Программа реализации тахометра сначала сбрасывает в 0 содержимое счетчика TMR2, а затем устанавливает определенный интервал времени для срабатывания таймера TMR1. По истечении этого интервала TMRI срабатывает (устанавливается в 1 бит переполнения TMR1), вызывая счи­тывание текущего содержимого из TMR2.

Рис. 2.20 - Реализация тахометра.

Таймеры в микроконтроллерах часто используются для ввода-вывода сиг­налов с широтно-импульсной модуляцией PWM (Pulse Width Modulated). PWM сигнал часто используется для передачи значения аналогового сигнала в циф­ровую систему или из нее. Сигнал имеет повторяющуюся форму, где дли­тельность импульса пропорциональна значению передаваемой аналоговой величины (рис. 2.21).

PWM-сигналы часто используется для управления электродвигателями, задавая скорость вращения или положение вала в сервоприводе. На рис. 2.22 показана схема генерации PWM-сигнала на выходе микроконтроллера. Пока заданное значение «длительности импульса» больше, чем содержимое тай­мера, на выходе этой схемы будет поддерживаться высокий потенциал (вер­шина импульса). Когда содержимое таймера станет равно или больше, чем заданное значение «периода», то таймер сбрасывается в 0, и процесс повто­ряется. Такой метод получения PWM-сигнала требует минимального участия процессора - надо только задать необходимые значения периода и длитель­ности импульса. При этом значение длительности импульса может изменять­ся процессором в любое время без остановки процесса вывода.

Рис. 2.21 - Сигнал с широтно-импульсной модуляцией PWM.

Рис. 2.22 - Схема генератора PWM-сигнала

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

Измерение длительности импульса PWM-сигнала может быть произведе­но с помощью схемы, приведенной на рис. 2.23. В этой схеме на вход RESET таймера подается сигнал сброса до тех пор, пока входной сигнал имеет низ­кий уровень. При поступлении высокого уровня входного сигнала таймер за­пускается, и его содержимое поступает в регистр длительности импульса. По окончании импульса, когда на входе снова устанавливается низкий уровень, содержимое таймера сохраняется в регистре длительности импульса, а тай­мер сбрасывается в 0 до прихода следующего импульса. Для упрощения на схеме не показаны некоторые элементы задержки, которые гарантируют, что значение таймера будет записано в регистр длительности до его сброса.

Рис. 2.23 - Схема измерения длительности импульса.


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



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