МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 6

 

  Главная      Книги - Разные     МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     4      5      6      7     ..

 

 

 

МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 6

 

 

 

 

81 

12

 

Блоки захвата 

В микроконтроллере реализованы шесть блоков захвата. Все блоки идентичны. 
Блоки захвата используются для: 
- вычисления скорости вращения вала ротора (с использованием датчиков Холла); 
- вычисления промежутков времени между срабатыванием позиционных датчиков; 
- вычисления периода и скважности импульсов. 
Возможности блока захвата: 
- 32-разрядный таймер, с разрешающей способностью 10 нс (на 100 МГц); 
- четыре 32-разрядных регистра захвата времени; 
-  выбор  полярности  фронта  для  обработки  каждого  из  четырех  последовательных 

событий; 

- источники прерываний по каждому из четырех событий; 
- однократный захват значений времени до четырех событий; 
-  режим  цикличной  работы  по  событиям,  с  переписыванием  значений  (кольцевой 

буфер); 

- режимы захвата абсолютного и относительного значений времени; 
-  альтернативный режим работы, если не задействована функция захвата времени  – 

одноканальный выход ШИМ. 

Функциональная схема блока захвата представлена на рисунке 12.1. 
 

 

 

Рисунок 12.1 – Блок захвата 

 
Реализована  возможность  организации  двух  вариантов  схемы  синхронизациии 

блоков  захвата  с  помощью  переключателя,  управляемого  полем  CAPSYNCSEL  регистра 
PWM_CTRL,  см.  рисунок  14.3.  Управление  синхронизацией  осуществляется  полями 
SWSYNC, SYNCO_SEL и SYNCI_EN регистра ECCTL1. 

Для  начала  работы  с  блоками  захвата  необходимо  установить  соответствующие 

биты в поле CAPRST регистра PER_RST1. 

 

 

 

82 

Каждый  блок  захвата  имеет  один  вывод  CAP_PWMх  (х  –  номер  блока  захвата 

от 0 до 5),  соединенный  с  выводом  микроконтроллера  (альтернативная  функция).  В 
зависимости  от  режима  работы  блока  захвата  вывод  является  входом  внешнего  события 
или выходом генерируемого сигнала ШИМ.  

Далее  по  тексту  названия  сигналов  и  регистров  соответствуют  указанным  на 

рисунке 12.1. 

 

12.1

 

Режим захвата времени 

Режим захвата времени выбран по умолчанию. Вывод CAP_PWMх функционирует 

как вход. 

 

Предварительный делитель 

В случае, если события на входе CAP_PWMх приходят слишком часто и требуется 

уменьшить  их  частоту,  используется  предварительный  делитель  событий  (импульсов), 
состоящий  из  собственно  делителя  и  мультиплексора.  В  предварительном  делителе 
используется  счетчик,  который  производит  выборку  одного  события  из  каждых  2  –  63 
входных. Значение делителя задается полем PRESCALE регистра ECCTL0. В случае, если 
задано  значение  00h,  то  делитель  выключен  и  входной  сигнал  поступает  на  детекторы 
фронта напрямую. 

Для  примера,  на  рисунке  12.2  показаны  несколько  вариантов  сигналов  на  выходе 

делителя, в зависимости от заданного значения N. 

 

 

 

Рисунок 12.2 – Формы сигналов на выходе делителя в зависимости от значения N 

 

Захват значения таймера 

С  выхода  делителя  сигнал  поступает  на  четыре  детектора  фронта,  каждый  из 

которых  управляется  соответствующим  битом  CAPnPOL.  Далее,  если  установлен  бит 
CAPLDEN и обнаружен заданный фронт сигнала, формируется соответствующее событие. 
Возможно  одновременное  формирование  до  четырех  событий  (EV0  –  EV3),  и  по 
переднему  фронту  каждого  события  происходит  захват  значения  таймера  TSCTR  в 
соответствующий регистр захвата (CAP0 – CAP3).  

Регистр  захвата  перезаписывается  новым  захваченным  значением  каждый  раз  при 

возникновении соответствующего события.  

  

Однократный захват 

Однократный  захват  выбирается  битом  CONT/ONESHT  регистра  ECCTL1  и 

включается записью единицы в бит  REARM с последующей установкой бита CAPLDEN 
(установится  аппаратно).  В  этом  режиме  происходит  запуск  двухразрядного  счетчика 
событий EV0 – EV3. Количество подсчитываемых событий от одного до четырех задается 
полем  STOP_WRAP.  Подсчитывается  каждое  из  сформированных  событий  и 
одновременно происходит захват значения таймера в соответствующие регистры захвата. 
Как только количество событий совпадет со значением STOP_WRAP события EV0 – EV3 
больше  не  формируются,  значение  таймера  захватывается  регистрами  CAP0  –  CAP3  и 

 

 

83 

далее регистры не перезаписываются.  

Для  повторного  запуска  следует  записать  единицу  в  бит  REARM  (это  обнулит 

счетчик  и  включит  режим),  после  чего  –  разрешить  формирование  событий  EV0  –  EV3 
установкой бита CAPLDEN. 

 

Циклический захват 

Циклический  захват  выбран  по  умолчанию.  После  установки  бита  CAPLDEN 

начинается  обработка  событий  EV0  –  EV3  и  захват  значения  таймера.  Количество 
подсчитываемых событий от одного до четырех задается полем STOP_WRAP.   

Регистр  захвата  перезаписывается  новым  захваченным  значением  каждый  раз  при 

возникновении соответствующего события.  

 

П р и м е ч е н и е  – В обоих режимах захвата значение поля STOP_WRAP не оказывает 

никакого влияния на счетчик и состояние бита CAPLDEN . 

 

Таймер 

Таймер  представляет  собой  32-разрядный  счетчик,  работающий  на  системной 

частоте.  Контроль  работы  таймера  осуществляет  блок  управления  таймером.  Счетчик 
таймера  включается  битом  TSCTRSTOP  и  инкрементируется,  начиная  со  значения 
00000000h до значения FFFFFFFFh, после чего сбрасывается.  

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

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

теневой  регистр  CTRPHS.  Загрузка  может  быть  активирована  как  программно  –  запись 

единицы в бит SWSYNC регистра ECCTL1, так и аппаратно – приход синхроимпульса по 

входу SYNCI. Разрешение синхронизации осуществляется установкой бита SYNCIEN. 

Блок  захвата  также  может  генерировать  сигнал  синхронизации  SYNCO.  Источник 

выбирается  полем  SYNCOSEL,  либо  используется  SYNCI  или  SWSYNC,  либо  событие 
CTR = PRD генерации ШИМ. 

Входы  и  выходы  синхронизации  блоков  захвата  подключены  по  цепочке,  см. 

рисунок 14.3. 

Таймер  может  быть  сброшен  (с  предварительным  захватом  его  значения)  при 

формировании 

событий 

EV0 – EV3. 

Указать 

событие 

можно 

установкой 

соответствующего бита CTRRSTn (n от 0 до 3) в регистре  EECTL0. Так, например, если 
установлен  бит  CTRRST2,  то  при  формировании  события  EV2  произойдет  захват 
значения таймера в регистр CAP2 и сброс таймера. 

   

Регистры CAP0 –

 

CAP3 

32-разрядные регистры, сохраняющие (захватывающие) значение счетчика таймера в 

момент появления положительного фронта сигнала события EVn (n от 0 до 3), доступны 
только для чтения. 

 

12.2

 

Режим работы «генератор ШИМ»  

Выбирается  установкой  бита  CAP/APWM  в  регистре  ECCTL1.  Вывод  CAP_PWMх 

функционирует  как  выход.  Блок  захвата  в  этом  случае  используется  как  одноканальный 
32-разрядный генератор ШИМ-сигнала.   

 

Таймер и регистры захвата 

Функционирует  как  32-разрядный  инкрементный  счетчик,  работающий  на 

системной частоте. После включения счетчик таймера считает от значения 00000000h до 
значения,  которое  задается  регистром  CAP0.  Как  только  значения  счетчика  и  регистра 
совпадают, счетчик сбрасывается. 

Регистр  CAP0  является  регистром  периода  таймера,  а  регистр  CAP1  –  регистром 

 

 

84 

сравнения.  Регистры  CAP2  и  CAP3  являются  регистрами  отложенной  загрузки  для 
регистров  CAP0  и  CAP1,  соответственно.  Все  регистры  доступны  как  для  записи,  так  и 
для чтения.  

Запись  в  регистр  CAP0  является  мгновенной  загрузкой,  которая  аппаратно 

дублируется записью в регистр CAP2. Аналогично для пары CAP1, CAP3.   

Запись  в  регистры  CAP2  и  CAP3  является  отложенной  загрузкой.  Как  только 

значение  счетчика  таймера  достигает  значения  периода  CAP0,  возникает  событие 
CTR = PRD,  по  которому  происходит  сброс  таймера  и  перегрузка  значений  из  CAP2  и 
CAP3 в регистры CAP0 и CAP1 (на рисунке 12.1 отмечено стрелками черного цвета).  

Регистры  CAP0  и  CAP1  должны  быть  обязательно  инициализированы  до  начала 

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

 

Генерация ШИМ 

Для  разрешения  вывода  ШИМ-сигнала  следует  установить  значение  01h  в  поле 

SYNCO_SEL регистра EECTL1. 

После  инициализации  регистров  CAP0  и  CAP1  запускается  счетчик  таймера. 

Текущее  значение  счетчика  CTR  посредством  двух  компараторов  сравнивается 
одновременно  со  значением  PRD  регистра  периода  CAP0  и  значением  CMP  регистра 
сравнения CAP1 (на рисунке 12.1 отмечено черным цветом).  

Как  только  возникает  событие  CTR = CMP,  сигнал  на  выходе  CAP_PWM

x

 

переводится в ноль. Далее сигнал удерживается в нуле до тех пор, пока счетчик таймера 
не  достигнет  значения  периода.  При  возникновении  события  CTR = PRD  сигнал 
переводится  в  единицу.  Одновременно  с  этим  происходит  сброс  таймера  и  перезагрузка 
регистров  CAP0  и  CAP1.  Управлять  полярностью  сигнала  можно  битом  APWMPOL.  На 
рисунке  12.3  представлен  пример  формирования  ШИМ-сигнала  с  активным  высоким 
уровнем сигнала (по умолчанию APWMPOL = 0). 

 

 

 

Рисунок 12.3 – Пример формирования ШИМ-сигнала 

 
На рисунке 12.3 период таймера задан как CAP0 = 000007000h. Начальное значение 

сравнения  CAP1  =  00000400h.  Пока  таймер  считает,  в  регистр  CAP2  загружается  новое 
значение 00000500h для отложенной загрузки. По достижении значения сравнения сигнал 
на выходе CAP_PWMх переводится в низкий уровень. По окончании периода происходит 
сброс  таймера  и  загрузка  значения  00000500h  (из  регистра  CAP2)  в  регистр  CAP1  и 
перевод сигнала на выходе CAP_PWMх в высокий уровень.  

Таким  образом,  можно  достаточно  гибко  управлять  как  длительностью  импульсов, 

изменяя период работы таймера, так и скважностью при постоянном периоде. 

 
 

 

 

85 

Прерывания 

Источники прерываний блока захвата: 
- события EV0 – EV3; 
- переполнение счетчика таймера (CTROVF); 
- события CTR = PRD; 
- события CTR = CMP. 
Каждое из семи прерываний имеет бит маски в регистре ECEINT, флаг прерывания в 

регистре ECFLG, бит сброса флага в регистре ECCLR и бит программного прерывания в 
регистре ECFRC. На рисунке 12.4 показан пример для прерывания по событию EV1.  

 

 

 

Рисунок 12.4 – Пример управления прерыванием EV1 

 
Все  прерывания  по  событиям  поступают  на  блок  управления  прерываниями  и 

обрабатываются,  как  сказано  выше.  При  возникновении  любого  из  этих  прерываний  в 
регистре  PEINT  устанвливается  флаг  PEINT  и  генерируется  прерывание  блока  захвата 
CAP_INTx, см. рисунок 12.5. 

 

 

 

Рисунок 12.5 – Общая схема управления прерываниями 

 

П р и м е ч а н и е   –  Программа  обслуживания  прерывания  должна  сбрасывать  флаг 

PEINT во избежание повторного обслуживания прерывания от блока захвата. Для сброса 
флага следует записать единицу в нулевой бит регистра PEINT. 

 

 

 

 

86 

13

 

Модули квадратурных декодеров 

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

позволяя вычислять скорость, направление вращения, а также текущее положение вала.  

 

 

 

Рисунок 13.1 – Схема квадратурного декодера с мультиплексором входных/ 

выходных сигналов  

 
В состав квадратурного декодера входят (см. рисунок 13.1): 
- настраиваемый обработчик сигналов входов; 
- квадратурный преобразователь; 
- счетчик позиции/блок управления; 
- модуль захвата времени; 
- таймер временных отсчетов; 
- сторожевой таймер. 
 
Перед  началом  работы  с  модулем  для  разрешения  тактового  сигнала  необходимо 

установить соответствующие биты в регистре APB_CLK_CTRL и регистре PER_RST1. 

 

13.1

 

Обработчик сигналов входов 

Квадратурный  декодер  использует  два  квадратурных  вывода  контроллера, 

работающих  на  вход.  Также,  имеются  специальный  индексный  вывод  и  вывод 
стробирования, которые могут работать на вход и выход. 

QEP_A/XCLK  и  QEP_B/XDIR  –  в  квадратурном  режиме  это  два  входа.  Сигналы на 

входах  сдвинуты  по  фазе  на  90  градусов  и  по  ним  можно  определить  скорость  и 
направление вращения ротора (см. рисунок 13.2). В режиме счета/направления сигналы на 
входах  используются  как  тактовый  и  сигнал  направления  вращения  ротора,  по  которым 
также можно вычислить скорость вращения. 

QEP_I – индексный вход. Сигнал на входе сигнализирует о полном обороте ротора. 

Позволяет сбрасывать счетчик позиции поворота ротора. 

QEP_S  –  пользовательский  вход  стробирования.  Сигнал  на  входе  может  сбросить 

или  защелкнуть  счетчик  позиции.  Применяется  при  использовании  концевых 
выключателей. 

Сигналы на входах могут быть проинвертированы. Инверсия включается установкой 

соответствующего бита в регистре QDECCTL. 

 

 

 

87 

Установкой  бита  SWAP  можно  включить  обратный  счет,  т. е.  программно  подать 

сигнал  с  вывода  QEP_A  на  вход  QВ  квадратурного  преобразователя,  а  сигнал  с  вывода 
QEP_B подать на вход QА (входы A и B меняются местами). 

 

 

 

Рисунок 13.2 – Диаграмма входных сигналов 

 

13.2

 

Квадратурный преобразователь 

На рисунке 13.3 показана схема квадратурного преобразователя. 

 

 

 

Рисунок 13.3 – Схема квадратурного преобразователя 

 

Режимы работы 

Квадратурный преобразователь поддерживает четыре режима работы: 
- режим квадратурного счета; 
- режим счета/направления; 
- режим счета вверх; 
- режим счета вниз. 
 

 

 

88 

Выбор режима зависит от значения поля QSRC регистра QDECCTL. 

Режим квадратурного счета 

Квадратурный преобразователь формирует сигнал направления вращения, тактовый 

сигнал и сигнал направления счета (вверх/вниз) для счетчика позиции.  

 

 

 

 

 

Рисунок 13.4 – Временная диаграмма и автомат состояний работы в квадратурном 

режиме счета 

 
Направление  вращения  ротора  определяется  по  порядку  смены  передних  и  задних 

фронтов  на  входах  QEP_A  и  QEP_B.  К  примеру,  если  за  передним  фронтом  сигнала  на 
входе  QEP_A  следует  передний  фронт  сигнала  на  входе  QEP_B  (см.  рисунок  13.4),  то 
направление  вращения  следует  считать  прямым,  а  счетчик  позиции  работает  на 
увеличение.  Если  же  за  передним  фронтом  сигнала  на  входе  QEP_B  следует  передний 
фронт сигнала на входе QEP_A, то направление вращения следует считать инверсным, а 
счетчик  позиции  работает  на  уменьшение.  Если  на  обоих  выводах  зафиксировано 
одновременно два фронта, то такое состояние считается ошибочным. 

Квадратурный  преобразователь  выдает  четыре  счетных  импульса  на  один  период 

входного сигнала, поскольку использует для счета передний и задний фронт сигналов. 

 

 

89 

Режим счета/направления 

В  этом  режиме  вывод  QEP_A  работает  как  вход  тактовых  импульсов,  а  вывод 

QEP_B  –  как  вход  задания  направления  счета.  Счетчик  позиции  в  этом  режиме  работает 
по каждому переднему фронту сигнала на входе QEP_A. 

 

Режим вверх 

Режим  используется  для  вычисления  частоты  следования  импульсов  на  вывод  

QEP_A.  Фронт  задается  битом  XCR  регистра  QDECCTL.  Счетчик  всегда  работает  на 
увеличение. 

 
Режим вниз 

Режим  используется  для  вычисления  частоты  следования  импульсов  на  выводе 

QEP_A. Фронт задается битом XCR. Счетчик всегда работает на уменьшение. 

 

13.3

 

 Счетчик позиции 

Работа  счетчика  позиции  контролируется  посредством  регистров  QEPCTL  и 

QPOSCTL,  которыми  задается  режим  счета,  сброса  и  хранения,  а  также  логика  для 
формирования внешнего сигнала синхронизации. 

 

Режимы сброса счетчика позиции 

Счетчик  позиции  может  накапливать  результат  в  течение  многих  оборотов  вала,  а 

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

- по сигналу индексации; 
- по переполнению; 
- только по первому сигналу индексации; 
- по таймеру временных отсчетов. 
 
Режим задается полем PCRM регистра QEPCTL. 
Счетчик сбрасывается в ноль при его переполнении или при превышении значения 

регистра  максимального  значения  QPOSMAX.  Флаг  прерывания,  возникающего  при 
переполнении счетчика, устанавливается в регистре QFLG. 

 

Режим сброса по сигналу индексации 

Режим сброса по сигналу индексации включен по умолчанию.  
При  получении  сигнала  с  вывода  индексации  QEP_I  при  счете  вверх,  счетчик 

обнулится  по  следующему  фронту  сигнала  тактирования  QCLK.  Если  же  сигнал 
индексации  был  получен  при  счете  вниз,  то  в  счетчик  будет  загружено  значение 
QPOSMAX (см. рисунок 13.5). 

При получении первого сигнала индексации, схема дожидается любого изменения на 

квадратурных  входах  и  запоминает  значение  этого  события  –  фронт,  активный  вывод 
(QEP_A  или  QEP_B),  а  также  направление  вращения.  Этот  момент  времени  называется 
маркером индексации. При появлении этого события устанавливается бит FIMF регистра 
QEPSTS,  а  направление  вращения  сохраняется  в  бите  FIDF.  В  дальнейшем,  маркер 
индексации можно использовать для сохранения значения счетчика.  

 

 

90 

 

 

Рисунок 13.5 – Временная диаграмма сброса по сигналу индексации 

 
По каждому сигналу индексации, включая маркер индексации, содержимое счетчика 

сохраняется  в  регистре  QPOSILAT,  а  направление  вращения  в  бите  QDLF  регистра 
QEPSTS.  Если  при  сохранении  значение  счетчика  QPOSCNT  не  равно  ни  нулю,  ни 
значению  QPOSMAX,  то  выставляется  флаг  ошибки  счетчика  позиции  (бит  PCEF  в 
регистре QEPSTS) и флаг прерывания (бит PCE в регистре QFLG). Флаг ошибки счетчика 
позиции обновляется с каждым индексом, а флаг прерывания может быть сброшен только 
программно. 

Поле настройки события индексации для сохранения счетчика позиции IEL (регистр 

QEPCTL) игнорируется. Также только в этом режиме могут устанавливаться флаг ошибки 
счетчика позиции PCEF и флаг соответствующего прерывания. 

 

Режим сброса по переполнению 
 

 

 

Рисунок 13.6 – Временная диаграмма сброса по сигналу переполнения 

 

 

91 

Максимальное  значение  счетчика  позиции  задается  регистром  QPOSMAX.  Если 

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

Получение  значений  маркера  индексации  происходит  аналогично  тому,  как  это 

происходит  в  режиме  сброса  по  сигналу  индексации.  Полученные  значения  могут 
использоваться  при  инициализации  по  маркеру  индексации,  если  в  поле  IEL  записано 
значение 11b в регистре QEPCTL. Временная диаграмма сброса показана на рисунке 13.6. 

 

Режим сброса по первому сигналу индексации 

Если было получено событие индексации при счете  вверх, то счетчик обнулится со 

следующим тактом синхросигнала. Если же событие индексации было зафиксирована при 
счете вниз, то со следующим тактом синхросигнала в счетчик будет загружено значение 
QPOSMAX. При последующем счете сброс может произойти только при достижении нуля 
или  значения  QPOSMAX  (т. е.  аналогично  режиму  сброса  по  переполнению),  а 
дальнейшие  возможные  события  получения  сигнала  на  выводе  индексации  влиять  на 
сброс не будут. 

Получение  значений  маркера  индексации  происходит  аналогично  тому,  как  это 

происходит  в  режиме  сброса  по  сигналу  индексации.  Полученные  значения  могут 
использоваться  при  инициализации  по  маркеру  индексации,  если  в  поле  IEL  записано 
значение 11b.  

 
Режим сброса по таймеру временных отсчетов 

В этом режиме счетчик сбрасывается в ноль или загружается значением QPOSMAX, 

в зависимости от текущего режима счета (задается полем QSRC регистра QDECCTL), по 
событию  срабатывания  таймера  временных  отсчетов.  В  остальном  режим  аналогичен 
режиму сброса по переполнению.  

Также  возможно  настроить  сохранение  значения  счетчика  QPOSCNT  в  регистр 

QPOSLAT перед сбросом, для этого необходимо включить модуль захвата, установив бит 
CEN в регистре QCAPCTL. Этот режим удобен для измерения частоты. 

 
Сохранение счетчика позиции 

Внешние  входы  индексации  и  стробирования  можно  запрограммировать  на 

формирование событий для сохранения значения счетчика позиции в регистры QPOSILAT 
и QPOSSLAT. 

 
Сохранение по событию индексации 

В некоторых задачах не требуется сбрасывать счетчик позиции по каждому сигналу 

индексации,  и  вместо  этого  может  потребоваться  увеличить  разрядность  счетчика  до 
32 бит  (режимы,  задаваемые  значениями  PCRM  равными  01b  и  10b).  В  этом  случае  бит 
QDLF  (направление  вращения)  в  регистре  QEPSTS  будет  перезаписываться  по  каждому 
сигналу  индексации,  а  счетчик  будет  сохранять  значение  по  следующим  событиям 
индексации: 

- по переднему фронту сигнала индексации (IEL = 01b); 
- по заднему фронту сигнала индексации (при IEL = 10b); 
- по маркеру индексации (при IEL = 11b). 
 
Сохранение значения счетчика по маркеру индексации будет производиться только в 

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

 

 

92 

квадратурному  сигналу  QA/QB,  а  также  для  более  точной  обработки  индексации,  чтобы 
исключить влияние ширины импульса на выводе индексации.  

При  сохранении  значения  счетчика  в  регистр  QPOSILAT  формируется  флаг  IEL 

прерывания  индексации  в  регистре  QFLG.  В  режиме  сброса  по  сигналу  индексации 
(PCRM = 00h) значение поля IEL в регистре QEPCTL игнорируется. 

 
Сохранение по событию стробирования 

Значение счетчика сохраняется в регистр QPOSSLAT по каждому переднему фронту 

сигнала  на  входе  QEP_S,  если  сброшен  бит  SEL  в  регистре  QEPCTL.  Если  же  бит  SEL 
установлен, то сохранение в QPOSSLAT происходит по переднему фронту сигнала строба 
на входе QEP_S при прямом направлении вращения и по заднему фронту для обратного 
вращения.  При  каждом  сохранении  счетчика  в  QPOSSLAT  устанавливается  флаг 
прерывания SEL. 

 

Инициализация счетчика позиции 

Счетчик событий может быть проинициализирован программно или по событиям: 
- событие индексации; 
- событие стробирования. 
 
Входной  сигнал  индексации  (QEPI)  может  использоваться  для  инициализации 

счетчика  по  переднему  и  заднему  фронту.  Если  поле  IEI  =  10b,  то  счетчик  загружается 
значением  QPOSINIT  по  переднему  фронту  сигнала  индексации.  Аналогично,  если 
IEI

 

=

 

11b,  то  счетчик  загружается  значением  QPOSINIT  по  заднему  фронту  сигнала 

индексации. 

Если  поле  SEI  =  10b,  то  счетчик  загружается  значением  QPOSINIT  по  переднему 

фронту сигнала стробирования на входе QEP_S. Если SEI = 11b, то счетчик загружается 
значением QPOSINIT по переднему фронту сигнала стробирования, если идет счет вверх, 
и по заднему – если вниз. 

Программно  счетчик  инициализируется  при  записи  единицы  в  бит  SWI  регистра 

QEPCTL.  Бит  не  сбрасывается  автоматически,  но  повторная  запись  единицы  также 
приведет к инициализации счетчика. 

 
Компаратор счетчика позиции 

 

 

 

Рисунок 13.7 – Функциональная схема компаратора счетчика позиции 

 

Компаратор  (см.  рисунок  13.7)  сравнивает  значение  счетчика  позиции  с  регистром 

QPOSCMP  и  при  совпадении  значений  формирует  прерывание,  а  также  внешний 
синхросигнал,  который  может  быть  направлен  на  один  из  выводов:  индексный  вывод 

 

 

93 

QEP_I или вывод стробирования QEP_S. Бит SPSEL в регистре QDECCTL определяет, на 
какой  именно  вывод  будет  направлен  сигнал  синхронизации,  а  бит  SOEN  в  регистре 
QDECCTL разрешает этому выводу работать как выход. 

Регистр  QPOSCMP  может  использовать  режим  отложенной  загрузки,  когда 

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

Отложенная загрузка происходит по следующим событиям: 
- по совпадению результатов сравнения; 
- по обнулению счетчика QPOSCNT. 
 
Флаг  успешного  сравнения  PCM  устанавливается,  когда  выполняется  условие 

QPOSCNT = QPOSCMP,  при  этом  также  формируется  синхроимпульс  требуемой 
длительности  для  извещения  внешнего  устройства  (сигнал  PCSOUT).  Настраиваемая 
длительность синхроимпульса контролируется специальной схемой задержки. 

Флаг  PCR  готовности  компаратора  к  отложенной  загрузке  значения  сравнения 

выставляется,  когда  выполняется  условие  для  отложенной  записи,  заданное  битом 
PCLOAD  в  регистре  QPOSCTL.  При  этом  состояние  флага  включения  режима 
отложенной  загрузки  PCSHDW  (регистр  QPOSCTL)  не  оказывает  влияния  на  установку 
флага PCR и генерацию соответствующего прерывания. 

 

13.4

 

Таймер временных отсчетов 

Таймер, используемый для оповещения программного обеспечения о необходимости 

начать  измерение  скорости,  представляет  собой  32-разрядный  таймер,  работающий  на 
частоте  системного  тактового  сигнала.  Включается  установкой  бита  UTE  в  регистре 
QEPCTL.  Когда  значение  таймера  достигает  порога  (QUTMR  =  QUPRD),  формируется 
прерывание и выставляется флаг UTO. Данный блок таймера может быть использован для 
вычисления  скорости  на  высоких  скоростях  (см.  рисунок  13.8),  а  также  для  сохранения 
счетчика  позиции,  регистра  таймера  и  регистра  периода  в  регистрах  QPOSLAT, 
QCTMRLAT и QCPRDLAT, соответственно. Режим сохранения определяется состоянием 
бита QCLM в регистре QEPCTL. 

 

 

 

Рисунок 13.8 – Функциональная схема таймера временных отсчетов 

 

13.5

 

Модуль захвата времени 

Функциональная  схема  модуля  захвата  времени  представлена  на  рисунке  13.9. 

Таймер  использует  тактовый  сигнал  и  сигнал  квадратурных  событий  с  коэффициентами 
деления, программируемыми полями CCPS и UPPS в регистре QCAPCTL. Коэффициенты 
деления  можно  менять  в  процессе  работы,  но  в  этом  случае  может  произойти  событие 
захвата,  содержащее  неверные  данные,  которые  следует  игнорировать.  Во  избежание 
подобной  ситуации  перед  изменением  значений  коэффициентов  деления  следует 
выключить  модуль  захвата  (сбросить  бит  CEN)  и  снять  все  маски  прерываний.  После 

 

 

94 

изменения  коэффициентов  проинициализировать  таймер  QCTMR  (записать  нулевое 
значение), сбросить все статусы, вновь разрешить прерывания и включить модуль захвата. 

 

 

 

Рисунок 13.9 – Функциональная схема модуля захвата времени 

 

Если бит SELEVNT в регистре QCAPCTL сброшен, то по деленному квадратурному 

событию  значение  таймера  QCTMR  загружается  в  регистр  периода  QCPRD,  после  чего 
таймер  сбрасывается  и  устанавливается  флаг  UPEVNT  в  регистре  QEPSTS,  означающий 
обновление регистра QCPRD. Флаг сбрасывается программно записью единицы. 

При  установленном  бите  SELEVNT  обновление  регистра  периода  происходит  по 

сигналу от выхода компаратора PCSOUT.  

Значение таймера можно использовать при измерениях скорости, если: 
- его значение не превысило FFFFFFFFh; 
- направление вращения за время измерения не изменилось. 
 
Если  между  двумя  событиями  UPEVNT  (т. е.  во  время  измерения)  таймер  QCTMR 

переполнился,  устанавливается  флаг  ошибки  COEF  в  регистре  QEPSTS.  Если  между 
двумя  событиями  положения  вала  изменилось  направление  вращения,  устанавливается 
флаг ошибки CDEF. 

Значения  таймера  (QCTMR)  и  регистра  периода  (QCPRD)  могут  быть 

сконфигурированы для захвата в регистры QCTMRLAT и QCPRDLAT по событиям: 

- прочитан регистр QPOSCNT; 
- сработал сторожевой таймер. 
 
Если  бит  QCLM  сброшен,  то  при  каждом  чтении  регистра  счетчика  позиции 

QPOSCNT  регистры  QCTMR  и  QCPRD  загружаются  в  QCTMRLAT  и  QCPRDLAT, 
соответственно. 

Если  бит  QCLM  установлен,  то  при  каждом  срабатывании  таймера  временных 

отсчетов счетчик позиции, регистр таймера и регистр периода захватываются в регистры 
QPOSLAT, QCTMRLAT и QCPRDLAT, соответственно. 

Измерения  на  малых  скоростях  вращения  (низкая  частота  квадратурного  сигнала) 

производятся  следующим  образом  –  таймер  QCTMR,  тактирующийся  от  системного 
тактового  сигнала  с  делителем  CCPS,  по  событию  UPEVNT,  сохраняет  свое  значение 
времени  в  регистре  QCPRD,  одновременно  сбрасывается,  и  выставляет  флаг  UPEVNT  в 
регистре  QEPSTS,  чтобы  сообщить  программе  об  окончании  измерения.  Событие 
UPEVNT 

возникает 

каждые 

несколько 

тактов 

QCLK, 

в 

соответствии 

с 

запрограммированным  коэффициентом  деления  UPPS  в  регистре  QCAPCTL.  Таким 

 

 

95 

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

Измерения  на  высоких  скоростях  (см.  рисунок  13.10)  могут  производиться  иначе. 

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

 

 

 

Рисунок 13.10 – Работа на высоких скоростях 

 

Также,  существует  и  смешанный  способ  измерения  скорости  –  по  заданному 

значению  счетчика  позиции,  с  помощью  компаратора  счетчика  позиции,  можно 
сформировать  событие  UPEVNT  (необходимо  установить  бит  SELEVNT  в  регистре 
QCAPCTL), которое, так же как и при измерениях на малых скоростях, позволит получить 
значение  таймера  QCTMR.  Для  использования  этого  способа  измерения  скорости 
необходимо разрешить прерывание по событию PCSOUT компаратора и устанавливать в 
этом  прерывании  каждый  раз  порог  сравнения  компаратора  QPOSCMP  на  заданное 
количество  меток  вперед  по  сравнению  с  текущей  позицией  счетчика  QPOSCNT  (в 
зависимости  от  направления  вращения).  Тогда,  устанавливая  QPOSCMP  дальше  от 
QPOSCNT  с  увеличением  скорости  вращения,  можно  поддерживать  оптимальное 
захватываемое  время,  обеспечивающее  максимальную  точность  измерения  времени  для 
всех  диапазонов  вращения.  Этот  способ  измерения  наиболее  сложен,  но  и  наиболее 
универсален.    

 

13.6

 

Сторожевой таймер 

Блок  квадратурного  декодера  содержит  32-битный  сторожевой  таймер,  который 

тактируется  системным  тактовым  сигналом,  деленным  на  64,  и  сбрасывается  любым 
квадратурным  событием  (перепад  на  выводе  QEP_A/QEP_B).  Если  ни  одного 
квадратурного  события  не  было  зафиксировано  до  события  QWDTMR  =  QWDPRD, 
сторожевой  таймер  формирует  флаг  прерывания  WTO  в  регистре  QFLG.  Регистр 

 

 

96 

QWDPRD содержит значение срабатывания сторожевого таймера. Функциональная схема 
сторожевого таймера представлена на рисунке 13.11. 

 

 

Рисунок 13.11 – Функциональная схема сторожевого таймера 

 

13.7

 

Система прерываний 

Блок  квадратурного  декодера  содержит  11  источников  прерываний  (см.  рисунок 

13.12).  Система  прерываний  состоит  из  регистра  маски  прерываний  QEINT,  регистра 
флагов прерываний QFLG, а также формирования внешнего прерывания INT по наличию 
активных  флагов.  Прерывание  INT  также  может  быть  маскировано  в  контроллере 
прерывания NVIC. Сброс флагов прерываний осуществляется через регистр QCLR. Сброс 
флага  активности  прерывания  INT  осуществляется  записью  в  регистр  QINTCLR.  Также, 
прерывание  можно  сформировать  программной  записью  в  регистр  QFRC,  но  для  этого 
необходимо предварительно включить счетчик позиции, установив бит  QPEN в регистре 
QEPCTL. 

 

 

Рисунок 13.12 – Схема системы прерываний 

 
На рисунке 13.13 показана схема формирования прерывания внутри блока обработки 

событий  для  события  UTO    (срабатывание  таймера  временных  отсчетов).  Схемы 
формирования прерываний для остальных событий идентичны. 

 

 

 

Рисунок 13.13 – Схема формирования прерывания UTOINT 

 

 

 

 

 

 

 

 

содержание      ..     4      5      6      7     ..