Что представляет из себя процессор событий
Большинство задач управления, которые реализуются с помощью МК, требуют исполнения их в реальном времени. Под этим понимается способность системы получить информацию о состоянии управляемого объекта, выполнить необходимые расчетные процедуры и выдать управляющие воздействия в течение интервала времени, достаточного для желаемого изменения состояния объекта.
Возлагать функции формирования управления в реальном масштабе времени только на центральный процессор неэффективно, так как это занимает ресурсы, необходимые для расчетных процедур. Поэтому в большинстве современных МК используется аппаратная поддержка работы в реальном времени с использованием таймеров/счетчиков.
Модули таймеров/счетчиков служат для приема информации о времени наступления тех или иных событий от внешних датчиков событий, а также для формирования управляющих воздействий во времени.
Рис. 4.5. Структура модуля таймера/счетчика.
В памяти МК 16-разрядный счетчик отображается двумя регистрами: TH — старший байт счетчика, TL — младший байт. Регистры доступны для чтения и для записи. Направление счета — только прямое, то есть при поступлении входных импульсов содержимое счетчика инкрементируется. В зависимости от настройки счетчик может использовать один из источников входных сигналов:
импульсную последовательность с выхода управляемого делителя частоты fBUS;
сигналы внешних событий, поступающие на вход TOCKI контроллера.
В первом случае говорят, что счетчик работает в режиме таймера, во втором — в режиме счетчика событий. При переполнении счетчика устанавливается в "единицу" триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от таймера разрешены. Пуск и останов таймера могут осуществляться только под управлением программы. Программным способом можно также установить старший и младший биты счетчика в произвольное состояние или прочитать текущий код счетчика.
Рассмотренный "классический" модуль таймера/счетчика широко применяется в различных моделях относительно простых МК. Он может использоваться для измерения временных интервалов и формирования последовательности импульсов. Основными недостатками "классического" таймера/счетчика являются:
потери времени на выполнение команд пуска и останова таймера, приводящие к появлению ошибки при измерении временных интервалов и ограничивающие минимальную длительность измеряемых интервалов времени единицами мс;
сложности при формировании временных интервалов (меток времени), отличных от периода полного коэффициента счета, равного (Kдел/fBUS) · 2 16 ;
невозможность одновременного обслуживания (измерения или формирования импульсного сигнала) сразу нескольких каналов.
Первые из двух перечисленных недостатков были устранены в усовершенствованном модуле таймера/счетчика, используемом в МК семейства MCS-51 (Intel). Дополнительная логика счетного входа позволяет тактовым импульсам поступать на вход счетчика, если уровень сигнала на одной из линий ввода равен "1". Такое решение повышает точность измерения временных интервалов, так как пуск и останов таймера производится аппаратно. Также в усовершенствованном таймере реализован режим перезагрузки счетчика произвольным кодом в момент переполнения. Это позволяет формировать временные последовательности с периодом, отличным от периода полного коэффициента счета.
Однако эти усовершенствования не устраняют главного недостатка модуля "классического" таймера — одноканального режима работы. Совершенствование подсистемы реального времени МК ведется по следующим направлениям:
увеличение числа модулей таймеров/счетчиков. Этот путь характерен для фирм, выпускающих МК со структурой MCS-51, а также для МК компаний Mitsubishi и Hitachi;
модификация структуры модуля таймера/счетчика, при которой увеличение числа каналов достигается не за счет увеличения числа счетчиков, а за счет введения дополнительных аппаратных средств входного захвата (input capture — IC) и выходного сравнения (output compare — OC). Такой подход используется, в частности, в МК компании Motorola.
Принцип действия канала входного захвата таймера/счетчика иллюстрирует рис. 4.6.
Рис. 4.6. Структурная схема канала входного захвата таймера.
Схема детектора события "наблюдает" за уровнем напряжения на одном из входов МК. Чаще всего это одна из линий порта ввода/вывода. При изменении уровня логического сигнала с "0" на "1" и наоборот вырабатывается строб записи, и текущее состояние счетчика таймера записывается в 16-разрядный регистр входного захвата. Описанное действие в микропроцессорной технике называют событием захвата. Предусмотрена возможность выбора типа сигнала на входе, и это воспринимается как событие:
положительный (передний) фронт сигнала;
отрицательный (задний) фронт сигнала;
любое изменение логического уровня сигнала.
Выбор типа события захвата устанавливается в процессе инициализации таймера и может неоднократно изменяться в ходе выполнения программы. Каждое событие захвата приводит к установке в "1" триггера входного захвата и появлению на его выходе флага (признака) входного захвата ICF. Состояние триггера входного захвата может быть считано программно, а если прерывания по событию захвата разрешены — формируется запрос на прерывание INT IC.
Использование режима входного захвата позволяет исключить ошибки измерения входного интервала времени, связанные со временем перехода к подпрограмме обработки прерывания, так как копирование текущего состояния счетчика осуществляется аппаратными, а не программными средствами. Однако время перехода на подпрограмму обработки прерывания накладывает ограничение на длительность измеряемого интервала времени, так как предполагается, что второе событие захвата произойдет позже, чем код первого события будет считан МК.
Структура аппаратных средств канала выходного сравнения представлена на рис. 4.7.
Цифровой компаратор непрерывно сравнивает текущий код счетчика таймера с кодом, который записан в 16-разрядном регистре выходного сравнения. В момент равенства кодов на одном из выходов МК (Pxj на рис. 4.7) устанавливается заданный уровень логического сигнала. Обычно предусмотрено три типа изменения сигнала на выходе Pxj в момент события выходного сравнения:
установка высокого логического уровня;
установка низкого логического уровня;
инвертирование сигнала на выходе.
При наступлении события сравнения устанавливаются в "1" триггер выходного сравнения и соответствующий ему признак выходного сравнения OCF. Аналогично режиму входного захвата состояние триггера выходного сравнения может быть считано программно, а если прерывания по событию сравнения разрешены — формируется запрос на прерывание INT OC.
Режим выходного сравнения предназначен, прежде всего, для формирования временных интервалов заданной длительности. Длительность сформированного временного интервала определяется только разностью кодов, последовательно загружаемых в регистр выходного сравнения, и не зависит от программного обеспечения МК. Время, необходимое для записи нового значения кода в регистр канала сравнения, ограничивает минимальную длительность формируемого временного интервала.
Рис. 4.7. Структурная схема канала выходного сравнения таймера.
Модули усовершенствованного таймера используются в составе МК в различных модификациях. При этом число каналов входного захвата и выходного сравнения в модуле может быть различным. Так, в МК семейства HC05 фирмы Motorola типовыми решениями являются модули 1IC+1OC или 2IC+2OC, а модуль таймера в составе МК только один. В ряде модулей каналы могут быть произвольно настроены на функцию входного захвата или выходного сравнения посредством инициализации.
Счетчик модуля усовершенствованного таймера может не иметь функции программного останова. В этом случае состояние счетчика нельзя синхронизировать с каким-либо моментом работы МК, и такой счетчик характеризуется как свободно считающий (free counter).
Аппаратные средства усовершенствованного таймера позволяют решить многие задачи управления в реальном времени. Однако по мере роста сложности алгоритмов управления отчетливо проявляются ограничения модулей усовершенствованного таймера, а именно:
недостаточное число каналов захвата и сравнения, принадлежащих одному счетчику временной базы. Это не позволяет сформировать синхронизированные между собой многоканальные импульсные последовательности;
однозначно определенная конфигурация канала (или захват или сравнение) часто не удовлетворяет потребностям решаемой задачи;
формирование сигналов по методу широтно-импульсной модуляции (ШИМ) требует программной поддержки, что снижает максимально достижимую частоту выходного сигнала.
Поэтому следующим этапом развития модулей подсистемы реального времени МК стали модули процессоров событий. Впервые модули процессоров событий были использованы компанией Intel в МК семейства 8xC51Fx. Этот модуль получил название программируемого счетного массива (Programmable Counter Array — PCA).
РСА обеспечивает более широкие возможности работы в реальном масштабе времени и в меньшей степени расходует ресурсы центрального процессора, чем стандартный и усовершенствованный таймеры/счетчики. К преимуществам РСА также можно отнести более простое программирование и более высокую точность. К примеру, РСА может обеспечить лучшее временное разрешение, чем таймеры 0, 1 и 2 МК семейства MCS-51, так как счетчик РСА способен работать с тактовой частотой, втрое большей, чем у этих таймеров. РСА также может решать многие задачи, выполнение которых с использованием таймеров требует дополнительных аппаратных затрат (например, определение фазового сдвига между импульсами или генерация ШИМ-сигнала). РСА состоит из 16-битного таймера-счетчика и пяти 16-битных модулей сравнения-защелки, как показано на рис. 4.8.
выход делителя на 12 тактового генератора МК;
выход делителя на 4 тактового генератора МК;
сигнал переполнения таймера 0;
внешний входной сигнал на выводе ЕСI (P1.2).
Рис. 4.8. Структура процессора событий МК семейства Intel 8xC51Fx.
Любой из модулей сравнения-защелки может быть запрограммирован для работы в следующих режимах:
защелкивания по фронту и/или спаду импульса на входе CEXi;
Модуль 4 может быть также запрограммирован как сторожевой таймер (Watchdog Timer – WDT).
Режим защелкивания по импульсу на входе МК эквивалентен режиму входного захвата (IC) усовершенствованного таймера. Режимы программируемого таймера и высокоскоростного выхода близки по своим функциональным возможностям к режиму выходного сравнения (OC).
Режим ШИМ очень прост с точки зрения программного обслуживания. Если изменения скважности не предполагается, то достаточно один раз занести соответствующий код в регистр данных модуля, проинициализировать режим ШИМ, и импульсная последовательность будет воспроизводиться с заданными параметрами без вмешательства программы.
Назначение и особенности работы сторожевого таймера будут рассмотрены далее отдельно.
При работе модуля сравнения-защелки в режиме защелки, программируемого таймера или высокоскоростного выхода модуль может сформировать сигнал прерывания. Сигналы от всех пяти модулей сравнения-защелки и сигнал переполнения таймера РСА разделяют один вектор прерывания. Иными словами, если прерывания разрешены, то и сигнал переполнения таймера PCA и сигнал от любого из модулей вызывают одну и ту же подпрограмму прерываний, которая должна сама идентифицировать источник, вызвавший ее.
Для работы с внешними устройствами таймер-счетчик РСА и модули сравнения-защелки используют выводы P1 порта МК. Если какой-либо вывод порта не используется при работе РСА, или РСА не задействован, порт может применяться стандартным образом.
Реализованный в 8xC51FX PCA оказался настолько удачным, что архитектура данных МК стала промышленным стандартом де-факто, а сам PCA многократно воспроизводился в различных модификациях микроконтроллеров разных фирм.
Тенденция развития подсистемы реального времени современных МК находит свое отражение в увеличении числа каналов процессоров событий и расширении их функциональных возможностей.
Общие сведения.
Для эффективного управления устройствами в реальном времени микропроцессорные системы должны обеспечить выполнение таких функций как:
● формирование импульсов (меток реального времени) через заданные интервалы времени;
● подсчет количества импульсов внешнего сигнала на заданном временном интервале;
● контроль состояния линий ввода и измерение длительности входного сигнала с заданным логическим уровнем;
● формирование импульсного выходного сигнала с программируемыми частотой и коэффициентом заполнения (скважностью);
● формирование сигнала заданного логического уровня с программируемой задержкой относительно времени изменения уровня входного сигнала. Один из возможных способов реализации функций управления в реальном времени состоит в использовании надлежащих команд с привлечением центрального процессора для их выполнения, т. е. осуществлять реализацию функций управления только программными средствами. Например, для формирования меток реального времени можно использовать подпрограмму, включающую команды загрузки регистра, инкрементации, логическую операцию с флагом переполнения регистра и др. Существенный недостаток этого способа — отвлечение центрального процессора от выполнения основной программы на второстепенную работу. Поэтому выполнение функций, связанных с управлением устройствами в реальном времени, возлагается на специальные аппаратные средства, которые называются таймером. В современных микроконтроллерах таймер выполняется в виде отдельного модуля.
Схема простейшего модуля таймера изображена на рис. 4.8.1. В его
● суммирующий счетчик таймера, доступный для чтения и записи. При использовании 16–разрядного счетчика он отображается на карте памяти двумя регистрами для старшего и младшего байтов;
● делитель частоты с переменным управляемым коэффициентом деления (К = 2, 4, 8, …). Делитель предназначен для увеличения длительности временного интервала, формируемого таймером, путем инкрементирования содержимого счетчика после поступления определенного числа тактовых импульсов;
● триггер переполнения, который устанавливается в единичное состояние по истечении счетной последовательности импульсов. Выходной сигнал триггера можно использовать в качестве метки реального времени или запроса на прерывание.
Путем выбора источника тактирования счётчик может быть настроен:
● на последовательность импульсов, поступающих с выхода управляемого делителя частоты. В этом случае модуль таймера работает как таймер (режим таймера);
● на внешние импульсы тактирования, поступающие на один из входов микроконтроллера. В этом случае модуль таймера работает как счетчик событий (режим счетчика событий).
Обычно пуск и останов счетчика выполняются только под управлением программы посредством установки/сброса соответствующего бита. После переполнения работа счетчика продолжается. 16–разрядный счетчик генерирует следующую периодическую последовательность кодов: …
, … Программным способом производится загрузка (установкой старшего и младшего байтов счетчика в требуемое состояние) и чтение текущего кода счетчика. Эти операции можно выполнять в процессе счета, если длительность операций записи и чтения меньше длительности периода следования импульсов тактирования счетчика.
Способы измерения временного интервала. Классический способ.
Рассмотрим особенности использования модуля таймера для измерения временного интервала Тх (рис. 4.8.2). Для этого необходимо:
● прервать выполнение текущей программы в момент времени
● повторно прервать выполнение текущей программы в момент времени
Процесс измерения временного интервала представлен временными диаграммами на рис. 4.8.2, где
— моменты времени, инициирующие начало и завершение счета;
— время задержки начала и окончания работы счетчика, обусловленное вызовом, выполнением и завершением подпрограмм, обслуживающих прерывания. Ошибка счета равна |
Рассмотренный способ может быть использован для измерения сигналов сравнительно большой длительности (единицы миллисекунд и более). Его главный недостаток — невозможность одновременного обслуживания нескольких каналов. Для устранения указанного недостатка используется два пути:
● простое увеличение числа модулей таймеров (микроконтроллеры компаний
● модификация структуры модуля таймера путем введения дополнительных аппаратных средств с использованием способов входного захвата и выходного сравнения (микроконтроллеры фирм
). Эти средства принято называть каналом входного захвата (
С) и выходного сравнения (
— ОС).
Способ входного захвата.
Для пояснения способа воспользуемся схемой канала входного захвата, изображенной рис. 4.8.3. Помимо счетчика таймера, делителя частоты и триггера переполнения в схему канала дополнительно введены:
● регистр входного захвата, в который записывается текущее состояние счетчика таймера по событию изменения логического уровня входного сигнала;
● детектор событий, предназначенный для фиксации изменения логического уровня сигнала на входе канала (обычно входом является один из выводов порта) и выдачи строба по факту этого события для записи текущего состояния счетчика таймера в регистр входного захвата. Три вида изменения логического уровня входного сигнала воспринимаются детектором как событие захвата: с 0 на 1 (фронт), с 1 на 0 (срез) и любое изменение логического уровня сигнала. Вид события захвата устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы;
● триггер входного захвата, используемый для фиксации каждого события захвата путем установки в единичное состояние сигнала на своем выходе.
Рассмотрим сущность способа на примере измерения длительности Тх входного сигнала прямоугольной формы (рис. 4.8.4). В этом случае должен быть установлен вид события — «любое изменение логического уровня сигнала». Счетчик таймера постоянно изменяет свое состояние. Детектор событий следит за уровнем напряжения на входе канала.
В момент времени
, происходит изменение логического уровня входного сигнала с 0 на 1. На выходе детектора событий вырабатывается строб записи, по которому:
● текущее состояние счетчика таймера записывается в виде кода К1 в регистр входного захвата;
● триггер входного захвата устанавливается в единичное состояние;
● формируется запрос на прерывание, который информирует микроконтроллер о начале измерения интервала;
● с задержкой времени
микроконтроллер считывает код К1 из регистра входного захвата, сбрасывает триггер входного захвата и инициализирует детектор события на формирование строба по срезу входного сигнала.
В момент времени
, когда происходит изменение логического уровня сигнала на входе детектора с 1 на 0, на выходе детектора событий также вырабатывается строб записи, по которому:
● текущее состояние счетчика таймера записывается в виде кода К2 в регистр входного захвата;
входного захвата устанавливается в единичное состояние;
● формируется запрос на прерывание, который информирует микроконтроллер об окончании измерения интервала;
● с задержкой времени
_0 микроконтроллер считывает код К2 из регистра входного захвата и сбрасывает триггер входного захвата.
Приведенные временные диаграммы отражают процесс измерения временного интервала при отсутствии переполнения счетчика (рис. 4.8.4, а) и при переполнении счетчика (рис. 4.8.4, б) и относятся к случаю, когда длительность измеряемого интервала Тх меньше длительности полного цикла тактирования счетчика таймера NТ, где N — количество импульсов за цикл тактирования; Т — период импульсов тактирования.
Длительность измеряемого временного интервала определяется следующими соотношениями:
где (К2 – К1)10, N – (К1 – К2)10 — число импульсов тактирования, поступивших на
вход счетчика таймера за время измерения.
Время перехода к подпрограммам прерывания
, не влияет на точность измерения, так как задержка при записи текущего состояния счетчика, реализуемой аппаратными средствами, одна и та же.
Использование запросов на прерывание по событию переполнения счетчика для контроля переполнений, возникающих между фронтом и срезом импульса на входе канала, позволяет измерять длительности импульсов при Тх >> N
.
Способ выходного сравнения.
Для организации канала выходного сравнения простейший модуль таймера дополняется следующими функциональными узлами (рис. 4.8.5):
● регистром выходного сравнения, в который заносятся двоичные коды К1, и К2, определяющие требуемую длительность формируемого выходного импульса;
● схемой сравнения (цифровым компаратором), предназначенной для фиксации события сравнения — равенства непрерывно изменяющегося во времени кода счетчика таймера с кодом, хранящимся в регистре выходного сравнения;
● триггером выходного сравнения, используемым для установки в единичное состояние сигнала на своем выходе при каждом срабатывании схемы сравнения;
● формирователем уровня, предназначенным для установки логического уровня сигнала на выходе канала (обычно выходом является один из выводов порта) по факту события выходного сравнения. Возможны три вида установки: установка уровня логического 0, уровня логической 1 или перевод выхода в инверсное состояние. Вид события выходного сравнения устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы.
Рассмотрим процесс формирования выходного прямоугольного импульса, длительность которого определяется разностью кодов К2 – К1 (рис. 4.8.6, а). Цифровой компаратор непрерывно сравнивает изменяющийся во времени код счетчика таймера с предварительно установленным кодом К1 регистра. В момент
равенства кодов на выводе «Выход» микроконтроллера и выходе триггера выходного сравнения устанавливается уровень логической 1. Одновременно генерируется запрос на прерывание микроконтроллера, и в подпрограмме прерывания происходит загрузка нового кода сравнения К2. В момент
наступает второе событие сравнения, и на выводе «Выход» устанавливается уровень логического 0. Таким образом, длительность сформированного временного интервала
определяется разностью кодов и не зависит от особенностей программного обеспечения микроконтроллера.
Временные диаграммы рис. 4.8.6, б иллюстрируют возможность использования способа выходного сравнения для К1>К2.
Отметим характерные особенности модулей таймеров, построенных с использованием рассмотренных способов:
● счетчик модуля таймера часто не имеет:
• функции программного останова,
т. е. он работает в режиме постоянного счета. В этом режиме состояние счетчика нельзя синхронизировать с каким–либо моментом работы микропроцессорной системы;
• опции тактирования внешним сигналом,
т. е. он не может работать в режиме счетчика событий;
● число каналов входного захвата (
С) и выходного сравнения (ОС) модулей таймера микроконтроллеров может быть различным. Например, в семействе НС05 микроконтроллеров
типовыми решением является использование одного модуля таймера с каналами
а в семействе НС11 —
содержат до трех модулей таймеров со структурой 1
● в некоторых модулях таймера каналы могут быть произвольно настроены, на функцию входного захвата (
С) или выходного сравнения (ОС) посредством инициализации.
Модули процессоров событий.
Следующим этапом в развитии подсистемы реального времени микроконтроллеров стали модули процессоров событий. Впервые такой модуль был предложен фирмой
.
Модуль процессора событий содержит (рис. 4.8.7):
(счетчик и регистр периода), тактируемый импульсной последовательностью с выхода программируемого делителя частоты f
или внешнего генератора. Счетчик имеет опции пуска/останова и сброса в 0. В некоторых модулях счетчик доступен для чтения «на лету» — автоматического копирования содержимого счетчика в специальные буферные регистры. В наиболее совершенных счетных модулях возможно изменение коэффициента счета счетчика, реализуемого с помощью дополнительного программно доступного регистра периода и многоразрядного цифрового компаратора. При совпадении текущего кода счетчика с кодом регистра периода счетчик автоматически сбрасываются в 0;
импульса прямо пропорциональна коду в регистре данных канала. Отметим, что режим ШИМ в различных моделях процессоров событий имеет существенные отличия.
Использование модулей процессора событий позволяет обрабатывать сигналы разного временного масштаба, формировать сигналы ШИМ и синхронизированные между собой многоканальные импульсные последовательности.
Сторожевой таймер представляет собой аппаратное средство, защищающее микроконтроллер от сбоев при выполнении программы. Причиной сбоя могут быть, например, электрические помехи, вызывающие обращение микроконтроллера по неправильному адресу. Сторожевой таймер производит сброс микроконтроллера, если его содержимое не обновляется в течение определенного промежутка времени (обычно от десятков миллисекунд до нескольких секунд). Если изменение содержимого программного счетчика не соответствует заданной программе, то команда модификации сторожевого таймера не будет выполнена, и он производит сброс микроконтроллера, устанавливая его в исходное состояние.
Общие сведения.
Для эффективного управления устройствами в реальном времени микропроцессорные системы должны обеспечить выполнение таких функций как:
● формирование импульсов (меток реального времени) через заданные интервалы времени;
● подсчет количества импульсов внешнего сигнала на заданном временном интервале;
● контроль состояния линий ввода и измерение длительности входного сигнала с заданным логическим уровнем;
● формирование импульсного выходного сигнала с программируемыми частотой и коэффициентом заполнения (скважностью);
● формирование сигнала заданного логического уровня с программируемой задержкой относительно времени изменения уровня входного сигнала. Один из возможных способов реализации функций управления в реальном времени состоит в использовании надлежащих команд с привлечением центрального процессора для их выполнения, т. е. осуществлять реализацию функций управления только программными средствами. Например, для формирования меток реального времени можно использовать подпрограмму, включающую команды загрузки регистра, инкрементации, логическую операцию с флагом переполнения регистра и др. Существенный недостаток этого способа — отвлечение центрального процессора от выполнения основной программы на второстепенную работу. Поэтому выполнение функций, связанных с управлением устройствами в реальном времени, возлагается на специальные аппаратные средства, которые называются таймером. В современных микроконтроллерах таймер выполняется в виде отдельного модуля.
Схема простейшего модуля таймера изображена на рис. 4.8.1. В его
● суммирующий счетчик таймера, доступный для чтения и записи. При использовании 16–разрядного счетчика он отображается на карте памяти двумя регистрами для старшего и младшего байтов;
● делитель частоты с переменным управляемым коэффициентом деления (К = 2, 4, 8, …). Делитель предназначен для увеличения длительности временного интервала, формируемого таймером, путем инкрементирования содержимого счетчика после поступления определенного числа тактовых импульсов;
● триггер переполнения, который устанавливается в единичное состояние по истечении счетной последовательности импульсов. Выходной сигнал триггера можно использовать в качестве метки реального времени или запроса на прерывание.
Путем выбора источника тактирования счётчик может быть настроен:
● на последовательность импульсов, поступающих с выхода управляемого делителя частоты. В этом случае модуль таймера работает как таймер (режим таймера);
● на внешние импульсы тактирования, поступающие на один из входов микроконтроллера. В этом случае модуль таймера работает как счетчик событий (режим счетчика событий).
Обычно пуск и останов счетчика выполняются только под управлением программы посредством установки/сброса соответствующего бита. После переполнения работа счетчика продолжается. 16–разрядный счетчик генерирует следующую периодическую последовательность кодов: …
, … Программным способом производится загрузка (установкой старшего и младшего байтов счетчика в требуемое состояние) и чтение текущего кода счетчика. Эти операции можно выполнять в процессе счета, если длительность операций записи и чтения меньше длительности периода следования импульсов тактирования счетчика.
Способы измерения временного интервала. Классический способ.
Рассмотрим особенности использования модуля таймера для измерения временного интервала Тх (рис. 4.8.2). Для этого необходимо:
● прервать выполнение текущей программы в момент времени
● повторно прервать выполнение текущей программы в момент времени
Процесс измерения временного интервала представлен временными диаграммами на рис. 4.8.2, где
— моменты времени, инициирующие начало и завершение счета;
— время задержки начала и окончания работы счетчика, обусловленное вызовом, выполнением и завершением подпрограмм, обслуживающих прерывания. Ошибка счета равна |
Рассмотренный способ может быть использован для измерения сигналов сравнительно большой длительности (единицы миллисекунд и более). Его главный недостаток — невозможность одновременного обслуживания нескольких каналов. Для устранения указанного недостатка используется два пути:
● простое увеличение числа модулей таймеров (микроконтроллеры компаний
● модификация структуры модуля таймера путем введения дополнительных аппаратных средств с использованием способов входного захвата и выходного сравнения (микроконтроллеры фирм
). Эти средства принято называть каналом входного захвата (
С) и выходного сравнения (
— ОС).
Способ входного захвата.
Для пояснения способа воспользуемся схемой канала входного захвата, изображенной рис. 4.8.3. Помимо счетчика таймера, делителя частоты и триггера переполнения в схему канала дополнительно введены:
● регистр входного захвата, в который записывается текущее состояние счетчика таймера по событию изменения логического уровня входного сигнала;
● детектор событий, предназначенный для фиксации изменения логического уровня сигнала на входе канала (обычно входом является один из выводов порта) и выдачи строба по факту этого события для записи текущего состояния счетчика таймера в регистр входного захвата. Три вида изменения логического уровня входного сигнала воспринимаются детектором как событие захвата: с 0 на 1 (фронт), с 1 на 0 (срез) и любое изменение логического уровня сигнала. Вид события захвата устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы;
● триггер входного захвата, используемый для фиксации каждого события захвата путем установки в единичное состояние сигнала на своем выходе.
Рассмотрим сущность способа на примере измерения длительности Тх входного сигнала прямоугольной формы (рис. 4.8.4). В этом случае должен быть установлен вид события — «любое изменение логического уровня сигнала». Счетчик таймера постоянно изменяет свое состояние. Детектор событий следит за уровнем напряжения на входе канала.
В момент времени
, происходит изменение логического уровня входного сигнала с 0 на 1. На выходе детектора событий вырабатывается строб записи, по которому:
● текущее состояние счетчика таймера записывается в виде кода К1 в регистр входного захвата;
● триггер входного захвата устанавливается в единичное состояние;
● формируется запрос на прерывание, который информирует микроконтроллер о начале измерения интервала;
● с задержкой времени
микроконтроллер считывает код К1 из регистра входного захвата, сбрасывает триггер входного захвата и инициализирует детектор события на формирование строба по срезу входного сигнала.
В момент времени
, когда происходит изменение логического уровня сигнала на входе детектора с 1 на 0, на выходе детектора событий также вырабатывается строб записи, по которому:
● текущее состояние счетчика таймера записывается в виде кода К2 в регистр входного захвата;
входного захвата устанавливается в единичное состояние;
● формируется запрос на прерывание, который информирует микроконтроллер об окончании измерения интервала;
● с задержкой времени
_0 микроконтроллер считывает код К2 из регистра входного захвата и сбрасывает триггер входного захвата.
Приведенные временные диаграммы отражают процесс измерения временного интервала при отсутствии переполнения счетчика (рис. 4.8.4, а) и при переполнении счетчика (рис. 4.8.4, б) и относятся к случаю, когда длительность измеряемого интервала Тх меньше длительности полного цикла тактирования счетчика таймера NТ, где N — количество импульсов за цикл тактирования; Т — период импульсов тактирования.
Длительность измеряемого временного интервала определяется следующими соотношениями:
где (К2 – К1)10, N – (К1 – К2)10 — число импульсов тактирования, поступивших на
вход счетчика таймера за время измерения.
Время перехода к подпрограммам прерывания
, не влияет на точность измерения, так как задержка при записи текущего состояния счетчика, реализуемой аппаратными средствами, одна и та же.
Использование запросов на прерывание по событию переполнения счетчика для контроля переполнений, возникающих между фронтом и срезом импульса на входе канала, позволяет измерять длительности импульсов при Тх >> N
.
Способ выходного сравнения.
Для организации канала выходного сравнения простейший модуль таймера дополняется следующими функциональными узлами (рис. 4.8.5):
● регистром выходного сравнения, в который заносятся двоичные коды К1, и К2, определяющие требуемую длительность формируемого выходного импульса;
● схемой сравнения (цифровым компаратором), предназначенной для фиксации события сравнения — равенства непрерывно изменяющегося во времени кода счетчика таймера с кодом, хранящимся в регистре выходного сравнения;
● триггером выходного сравнения, используемым для установки в единичное состояние сигнала на своем выходе при каждом срабатывании схемы сравнения;
● формирователем уровня, предназначенным для установки логического уровня сигнала на выходе канала (обычно выходом является один из выводов порта) по факту события выходного сравнения. Возможны три вида установки: установка уровня логического 0, уровня логической 1 или перевод выхода в инверсное состояние. Вид события выходного сравнения устанавливается в процессе инициализации модуля таймера и может многократно изменяться по ходу выполнения программы.
Рассмотрим процесс формирования выходного прямоугольного импульса, длительность которого определяется разностью кодов К2 – К1 (рис. 4.8.6, а). Цифровой компаратор непрерывно сравнивает изменяющийся во времени код счетчика таймера с предварительно установленным кодом К1 регистра. В момент
равенства кодов на выводе «Выход» микроконтроллера и выходе триггера выходного сравнения устанавливается уровень логической 1. Одновременно генерируется запрос на прерывание микроконтроллера, и в подпрограмме прерывания происходит загрузка нового кода сравнения К2. В момент
наступает второе событие сравнения, и на выводе «Выход» устанавливается уровень логического 0. Таким образом, длительность сформированного временного интервала
определяется разностью кодов и не зависит от особенностей программного обеспечения микроконтроллера.
Временные диаграммы рис. 4.8.6, б иллюстрируют возможность использования способа выходного сравнения для К1>К2.
Отметим характерные особенности модулей таймеров, построенных с использованием рассмотренных способов:
● счетчик модуля таймера часто не имеет:
• функции программного останова,
т. е. он работает в режиме постоянного счета. В этом режиме состояние счетчика нельзя синхронизировать с каким–либо моментом работы микропроцессорной системы;
• опции тактирования внешним сигналом,
т. е. он не может работать в режиме счетчика событий;
● число каналов входного захвата (
С) и выходного сравнения (ОС) модулей таймера микроконтроллеров может быть различным. Например, в семействе НС05 микроконтроллеров
типовыми решением является использование одного модуля таймера с каналами
а в семействе НС11 —
содержат до трех модулей таймеров со структурой 1
● в некоторых модулях таймера каналы могут быть произвольно настроены, на функцию входного захвата (
С) или выходного сравнения (ОС) посредством инициализации.
Модули процессоров событий.
Следующим этапом в развитии подсистемы реального времени микроконтроллеров стали модули процессоров событий. Впервые такой модуль был предложен фирмой
.
Модуль процессора событий содержит (рис. 4.8.7):
(счетчик и регистр периода), тактируемый импульсной последовательностью с выхода программируемого делителя частоты f
или внешнего генератора. Счетчик имеет опции пуска/останова и сброса в 0. В некоторых модулях счетчик доступен для чтения «на лету» — автоматического копирования содержимого счетчика в специальные буферные регистры. В наиболее совершенных счетных модулях возможно изменение коэффициента счета счетчика, реализуемого с помощью дополнительного программно доступного регистра периода и многоразрядного цифрового компаратора. При совпадении текущего кода счетчика с кодом регистра периода счетчик автоматически сбрасываются в 0;
импульса прямо пропорциональна коду в регистре данных канала. Отметим, что режим ШИМ в различных моделях процессоров событий имеет существенные отличия.
Использование модулей процессора событий позволяет обрабатывать сигналы разного временного масштаба, формировать сигналы ШИМ и синхронизированные между собой многоканальные импульсные последовательности.
Сторожевой таймер представляет собой аппаратное средство, защищающее микроконтроллер от сбоев при выполнении программы. Причиной сбоя могут быть, например, электрические помехи, вызывающие обращение микроконтроллера по неправильному адресу. Сторожевой таймер производит сброс микроконтроллера, если его содержимое не обновляется в течение определенного промежутка времени (обычно от десятков миллисекунд до нескольких секунд). Если изменение содержимого программного счетчика не соответствует заданной программе, то команда модификации сторожевого таймера не будет выполнена, и он производит сброс микроконтроллера, устанавливая его в исходное состояние.
Большинство задач управления, которые реализуются с помощью МК, требуют исполнения их в реальном времени. Под этим понимается способность системы получить информацию о состоянии управляемого объекта, выполнить необходимые расчетные процедуры и выдать управляющие воздействия в течение интервала времени, достаточного для желаемого изменения состояния объекта.
Возлагать функции формирования управления в реальном масштабе времени только на центральный процессор неэффективно, так как это занимает ресурсы, необходимые для расчетных процедур. Поэтому в большинстве современных МК используется аппаратная поддержка работы в реальном времени с использованием таймера (таймеров).
Модули таймеров служат для приема информации о времени наступления тех или иных событий от внешних датчиков событий, а также для формирования управляющих воздействий во времени.
Рис. 28. Структура модуля таймера/счетчика.
В памяти МК 16-разрядный счетчик отображается двумя регистрами: TH — старший байт счетчика, TL — младший байт. Регистры доступны для чтения и для записи. Направление счета — только прямое, то есть при поступлении входных импульсов содержимое счетчика инкрементируется. В зависимости от настройки счетчик может использовать один из источников входных сигналов:
импульсную последовательность с выхода управляемого делителя частоты fBUS;
сигналы внешних событий, поступающие на вход TOCKI контроллера.
В первом случае говорят, что счетчик работает в режиме таймера, во втором — в режиме счетчика событий. При переполнении счетчика устанавливается в "единицу" триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от таймера разрешены. Пуск и останов таймера могут осуществляться только под управлением программы. Программным способом можно также установить старший и младший биты счетчика в произвольное состояние или прочитать текущий код счетчика.
Модули усовершенствованного таймера используются в составе МК в различных модификациях. При этом число каналов входного захвата и выходного сравнения в модуле может быть различным. Так, в МК семейства HC05 фирмы Motorola типовыми решениями являются модули 1IC+1OC или 2IC+2OC, а модуль таймера в составе МК только один. В ряде модулей каналы могут быть произвольно настроены на функцию входного захвата или выходного сравнения посредством инициализации. Счетчик модуля усовершенствованного таймера может не иметь функции программного останова. В этом случае состояние счетчика нельзя синхронизировать с каким-либо моментом работы МК, и такой счетчик характеризуется как свободно считающий (free counter).
Аппаратные средства усовершенствованного таймера позволяют решить многие задачи управления в реальном времени. Однако по мере роста сложности алгоритмов управления отчетливо проявляются ограничения модулей усовершенствованного таймера, а именно:
недостаточное число каналов захвата и сравнения, принадлежащих одному счетчику временной базы. Это не позволяет сформировать синхронизированные между собой многоканальные импульсные последовательности;
однозначно определенная конфигурация канала (или захват или сравнение) часто не удовлетворяет потребностям решаемой задачи;
формирование сигналов по методу широтно-импульсной модуляции (ШИМ) требует программной поддержки, что снижает максимально достижимую частоту выходного сигнала.
Поэтому следующим этапом развития модулей подсистемы реального времени МК стали модули процессоров событий. Впервые модули процессоров событий были использованы компанией Intel в МК семейства 8xC51Fx. Этот модуль получил название программируемого счетного массива (Programmable Counter Array — PCA).
РСА обеспечивает более широкие возможности работы в реальном масштабе времени и в меньшей степени расходует ресурсы центрального процессора, чем стандартный и усовершенствованный таймеры/счетчики. К преимуществам РСА также можно отнести более простое программирование и более высокую точность. К примеру, РСА может обеспечить лучшее временное разрешение, чем таймеры 0, 1 и 2 МК семейства MCS-51, так как счетчик РСА способен работать с тактовой частотой, втрое большей, чем у этих таймеров. РСА также может решать многие задачи, выполнение которых с использованием таймеров требует дополнительных аппаратных затрат (например, определение фазового сдвига между импульсами или генерация ШИМ-сигнала). РСА состоит из 16-битного таймера-счетчика и пяти 16-битных модулей сравнения-защелки, как показано на рис 4.8.
Большинство задач управления, которые реализуются с помощью МК, требуют исполнения их в реальном времени. Под этим понимается способность системы получить информацию о состоянии управляемого объекта, выполнить необходимые расчетные процедуры и выдать управляющие воздействия в течение интервала времени, достаточного для желаемого изменения состояния объекта.
Возлагать функции формирования управления в реальном масштабе времени только на центральный процессор неэффективно, так как это занимает ресурсы, необходимые для расчетных процедур. Поэтому в большинстве современных МК используется аппаратная поддержка работы в реальном времени с использованием таймера ( таймеров ).
Модули таймеров служат для приема информации о времени наступления тех или иных событий от внешних датчиков событий, а также для формирования управляющих воздействий во времени.
Рис. 4.5. Структура модуля таймера/счетчика.
В памяти МК 16-разрядный счетчик отображается двумя регистрами: TH — старший байт счетчика, TL — младший байт. Регистры доступны для чтения и для записи. Направление счета — только прямое, то есть при поступлении входных импульсов содержимое счетчика инкрементируется. В зависимости от настройки счетчик может использовать один из источников входных сигналов:
импульсную последовательность с выхода управляемого делителя частоты fBUS ;
сигналы внешних событий, поступающие на вход TOCKI контроллера.
В первом случае говорят, что счетчик работает в режиме таймера, во втором — в режиме счетчика событий. При переполнении счетчика устанавливается в "единицу" триггер переполнения TF, который генерирует запрос на прерывание, если прерывания от таймера разрешены. Пуск и останов таймера могут осуществляться только под управлением программы. Программным способом можно также установить старший и младший биты счетчика в произвольное состояние или прочитать текущий код счетчика.
Рассмотренный "классический" модуль таймера / счетчика широко применяется в различных моделях относительно простых МК. Он может использоваться для измерения временных интервалов и формирования последовательности импульсов. Основными недостатками "классического" таймера / счетчика являются:
потери времени на выполнение команд пуска и останова таймера, приводящие к появлению ошибки при измерении временных интервалов и ограничивающие минимальную длительность измеряемых интервалов времени единицами мс;
сложности при формировании временных интервалов (меток времени), отличных от периода полного коэффициента счета, равного (Kдел/fBUS) · 2 16 ;
невозможность одновременного обслуживания (измерения или формирования импульсного сигнала) сразу нескольких каналов.
Первые из двух перечисленных недостатков были устранены в усовершенствованном модуле таймера / счетчика, используемом в МК семейства MCS-51 (Intel). Дополнительная логика счетного входа позволяет тактовым импульсам поступать на вход счетчика, если уровень сигнала на одной из линий ввода равен "1". Такое решение повышает точность измерения временных интервалов, так как пуск и останов таймера производится аппаратно. Также в усовершенствованном таймере реализован режим перезагрузки счетчикапроизвольным кодом в момент переполнения. Это позволяет формировать временные последовательности с периодом, отличным от периода полного коэффициента счета.
Однако эти усовершенствования не устраняют главного недостатка модуля "классического" таймера — одноканального режима работы. Совершенствование подсистемы реального времени МК ведется по следующим направлениям:
увеличение числа модулей таймеров / счетчиков. Этот путь характерен для фирм, выпускающих МК со структурой MCS-51, а также для МК компаний Mitsubishi и Hitachi;
модификация структуры модуля таймера / счетчика, при которой увеличение числа каналов достигается не за счет увеличения числа счетчиков, а за счет введения дополнительных аппаратных средств входного захвата (input capture — IC ) и выходного сравнения (output compare — OC ). Такой подход используется, в частности, в МК компании Motorola.
Принцип действия канала входного захвата таймера / счетчика иллюстрирует рис. 4.6.
Рис. 4.6. Структурная схема канала входного захвата таймера.
Схема детектора события "наблюдает" за уровнем напряжения на одном из входов МК. Чаще всего это одна из линий порта ввода/вывода. При изменении уровня логического сигнала с "0" на "1" и наоборот вырабатывается строб записи, и текущее состояние счетчика таймера записывается в 16-разрядный регистр входного захвата. Описанное действие в микропроцессорной технике называют событием захвата. Предусмотрена возможность выбора типа сигнала на входе, и это воспринимается как событие:
положительный (передний) фронт сигнала;
отрицательный (задний) фронт сигнала;
любое изменение логического уровня сигнала.
Выбор типа события захвата устанавливается в процессе инициализации таймера и может неоднократно изменяться в ходе выполнения программы. Каждое событие захвата приводит к установке в "1" триггера входного захвата и появлению на его выходе флага (признака) входного захвата ICF. Состояние триггера входного захвата может быть считано программно, а если прерывания по событию захвата разрешены — формируется запрос на прерывание INT IC.
Использование режима входного захвата позволяет исключить ошибки измерения входного интервала времени, связанные со временем перехода к подпрограмме обработкипрерывания, так как копирование текущего состояния счетчика осуществляется аппаратными, а не программными средствами. Однако время перехода на подпрограмму обработки прерывания накладывает ограничение на длительность измеряемого интервала времени, так как предполагается, что второе событие захвата произойдет позже, чем код первого события будет считан МК.
Структура аппаратных средств канала выходного сравнения представлена на рис. 4.7.
Цифровой компаратор непрерывно сравнивает текущий код счетчика таймера с кодом, который записан в 16-разрядном регистре выходного сравнения. В момент равенства кодов на одном из выходов МК ( Pxj на рис. 4.7) устанавливается заданный уровень логического сигнала. Обычно предусмотрено три типа изменения сигнала на выходе Pxj в момент события выходного сравнения:
установка высокого логического уровня;
установка низкого логического уровня;
инвертирование сигнала на выходе.
При наступлении события сравнения устанавливаются в "1" триггер выходного сравнения и соответствующий ему признак выходного сравнения OCF. Аналогично режиму входного захвата состояние триггера выходного сравнения может быть считано программно, а если прерывания по событию сравнения разрешены — формируется запрос напрерывание INT OC.
Режим выходного сравнения предназначен, прежде всего, для формирования временных интервалов заданной длительности. Длительность сформированного временного интервала определяется только разностью кодов, последовательно загружаемых в регистр выходного сравнения, и не зависит от программного обеспечения МК. Время, необходимое для записи нового значения кода в регистр канала сравнения, ограничивает минимальную длительность формируемого временного интервала.
Рис. 4.7. Структурная схема канала выходного сравнения таймера.
Модули усовершенствованного таймера используются в составе МК в различных модификациях. При этом число каналов входного захвата и выходного сравнения в модуле может быть различным. Так, в МК семейства HC05 фирмы Motorola типовыми решениями являются модули 1IC+1OC или 2IC+2OC, а модуль таймера в составе МК только один. В ряде модулей каналы могут быть произвольно настроены на функцию входного захвата или выходного сравнения посредством инициализации. Счетчик модуля усовершенствованного таймера может не иметь функции программного останова. В этом случае состояние счетчика нельзя синхронизировать с каким-либо моментом работы МК, и такой счетчик характеризуется как свободно считающий (free counter).
Аппаратные средства усовершенствованного таймера позволяют решить многие задачи управления в реальном времени. Однако по мере роста сложности алгоритмов управления отчетливо проявляются ограничения модулей усовершенствованного таймера, а именно:
недостаточное число каналов захвата и сравнения, принадлежащих одному счетчику временной базы. Это не позволяет сформировать синхронизированные между собой многоканальные импульсные последовательности;
однозначно определенная конфигурация канала (или захват или сравнение) часто не удовлетворяет потребностям решаемой задачи;
формирование сигналов по методу широтно-импульсной модуляции (ШИМ) требует программной поддержки, что снижает максимально достижимую частоту выходного сигнала.
Поэтому следующим этапом развития модулей подсистемы реального времени МК стали модули процессоров событий. Впервые модули процессоров событий были использованы компанией Intel в МК семейства 8xC51Fx. Этот модуль получил название программируемого счетного массива (Programmable Counter Array — PCA).
РСА обеспечивает более широкие возможности работы в реальном масштабе времени и в меньшей степени расходует ресурсы центрального процессора, чем стандартный и усовершенствованный таймеры / счетчики. К преимуществам РСА также можно отнести более простое программирование и более высокую точность. К примеру, РСА может обеспечить лучшее временное разрешение, чем таймеры 0, 1 и 2 МК семейства MCS-51, так как счетчик РСА способен работать с тактовой частотой, втрое большей, чем у этих таймеров. РСА также может решать многие задачи, выполнение которых с использованием таймеров требует дополнительных аппаратных затрат (например, определение фазового сдвига между импульсами или генерация ШИМ-сигнала). РСА состоит из 16-битного таймера - счетчика и пяти 16-битных модулей сравнения-защелки, как показано нарис. 4.8.
выход делителя на 12 тактового генератора МК;
выход делителя на 4 тактового генератора МК;
сигнал переполнения таймера 0;
внешний входной сигнал на выводе ЕСI (P1.2).
Рис. 4.8. Структура процессора событий МК семейства Intel 8xC51Fx.
Любой из модулей сравнения-защелки может быть запрограммирован для работы в следующих режимах:
защелкивания по фронту и/или спаду импульса на входе CEXi;
программируемого таймера ;
Модуль 4 может быть также запрограммирован как сторожевой таймер (Watchdog Timer – WDT).
Режим защелкивания по импульсу на входе МК эквивалентен режиму входного захвата ( IC ) усовершенствованного таймера. Режимы программируемого таймера и высокоскоростного выхода близки по своим функциональным возможностям к режиму выходного сравнения ( OC ).
Режим ШИМ очень прост с точки зрения программного обслуживания. Если изменения скважности не предполагается, то достаточно один раз занести соответствующий код в регистр данных модуля, проинициализировать режим ШИМ, и импульсная последовательность будет воспроизводиться с заданными параметрами без вмешательства программы.
Назначение и особенности работы сторожевого таймера будут рассмотрены далее отдельно.
При работе модуля сравнения-защелки в режиме защелки, программируемого таймера или высокоскоростного выхода модуль может сформировать сигнал прерывания. Сигналы от всех пяти модулей сравнения-защелки и сигнал переполнения таймера РСА разделяют один вектор прерывания. Иными словами, если прерывания разрешены, то и сигнал переполнения таймера PCA и сигнал от любого из модулей вызывают одну и ту же подпрограмму прерываний, которая должна сама идентифицировать источник, вызвавший ее.
Для работы с внешними устройствами таймер - счетчик РСА и модули сравнения-защелки используют выводы P1 порта МК. Если какой-либо вывод порта не используется при работе РСА, или РСА не задействован, порт может применяться стандартным образом.
Реализованный в 8xC51FX PCA оказался настолько удачным, что архитектура данных МК стала промышленным стандартом де-факто, а сам PCA многократно воспроизводился в различных модификациях микроконтроллеров разных фирм.
Тенденция развития подсистемы реального времени современных МК находит свое отражение в увеличении числа каналов процессоров событий и расширении их функциональных возможностей.
Читайте также: