Перейти к содержанию

Канал захвата/сравнения таймера

Сам счётчик таймера только считает. Всё полезное — ШИМ, измерение периода, импульс с задержкой — делают его каналы: у каждого свой регистр CCRx, который в одном режиме запоминает значение счётчика, а в другом сравнивается с ним.

Обновлено Редакция GAW

Канал захвата/сравнения (capture/compare channel) — часть таймера микроконтроллера, построенная вокруг регистра CCRx. В режиме захвата канал запоминает в CCRx значение счётчика в момент фронта на входе; в режиме сравнения таймер непрерывно сравнивает счётчик с CCRx и при совпадении меняет выход, ставит флаг и может вызвать прерывание или запрос DMA. На этом построены ШИМ, захват входа и output compare.

Устройство канала

По RM0090 (разд. 17.3.5) у канала таймера STM32 три части:

  • регистр CCRx — пара из регистра предзагрузки, куда пишет и откуда читает программа, и теневого регистра, который реально сравнивается со счётчиком или принимает захваченное значение;
  • входная ступень — цифровой фильтр, выбор фронта и предделитель захвата ICxPS; её же сигнал может служить триггером для ведомого режима;
  • выходная ступень — компаратор и формирователь опорного сигнала OCxREF, к которому в конце цепи применяется полярность.

Направление задаёт поле CCxS в TIMx_CCMRx: 00 — выход, 01 и 10 — вход от своего или соседнего вывода (TI1 или TI2), 11 — от внутреннего триггера TRC.

Режимы выхода

OCxMРежим
000frozen — сравнение на выход не влияет, остаётся флаг
001 / 010при совпадении — активный / неактивный уровень
011toggle — переключение при совпадении
100 / 101принудительно неактивный / активный
110 / 111PWM mode 1 / PWM mode 2

Бит OCxPE включает предзагрузку: новое значение CCRx применится только по событию обновления, а не сразу (RM0090, разд. 17.4.7). Для ШИМ предзагрузку обычно включают, чтобы смена заполнения не порвала текущий период.

Сколько каналов

У STM32F4 таймеры TIM1, TIM8 и TIM2…TIM5 имеют до четырёх каналов, TIM9 и TIM12 — до двух, TIM10, TIM11, TIM13, TIM14 — по одному (RM0090, разд. 17.2, 18.2, 19.2). У расширенных TIM1 и TIM8 каналы 1–3 дополнительно имеют комплементарные выходы CHxN с мёртвым временем. У AVR похожая схема разделена: у Timer1 ATmega328P отдельный блок захвата с регистром ICR1 и два блока сравнения OCR1A и OCR1B (DS40002061B, разд. 16.6–16.7). Как всё это собрать в работающую схему, показано в статье «Таймеры STM32».

Частые вопросы

Почему регистр CCR1 перестал записываться?

Канал переведён на вход. Как только поле CC1S в TIMx_CCMR1 отличается от 00, канал работает на захват, и TIMx_CCR1 становится доступен только для чтения — в него пишет сам таймер (RM0090, разд. 17.3.6). Направление канала меняют, только пока канал выключен (CC1E = 0).

Сколько каналов у таймера STM32?

У STM32F4 по RM0090: у TIM1, TIM8 и TIM2…TIM5 — до четырёх, у TIM9 и TIM12 — до двух, у TIM10, TIM11, TIM13 и TIM14 — один. У базовых таймеров TIM6 и TIM7 каналов нет. Какие из каналов выведены на ножки, зависит от корпуса и таблицы альтернативных функций в даташите.

Чем PWM mode 1 отличается от PWM mode 2?

Только полярностью опорного сигнала. В режиме 1 (OCxM = 110) при счёте вверх выход активен, пока CNT < CCRx, в режиме 2 (OCxM = 111) — наоборот, неактивен, пока CNT < CCRx (RM0090, разд. 17.4.7). Ту же инверсию можно получить битом полярности CCxP.

Источники

  1. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — разд. 17.2 — у TIM1 и TIM8 до 4 каналов (захват, сравнение, ШИМ, одиночный импульс) и комплементарные выходы; 18.2 — у TIM2…TIM5 до 4 каналов, TIM2 и TIM5 32-битные; 19.2.1 — у TIM9/TIM12 до 2 каналов; 19.2.2 — у TIM10/11/13/14 один канал; 20.2 — базовые TIM6 и TIM7: счётчик, предделитель и триггер для ЦАП, без каналов; 17.3.5 — канал: регистр захвата/сравнения с теневым регистром, входная ступень (фильтр, выбор фронта, предделитель ICxPS) и выходная (компаратор, OCxREF); запись и чтение идут в регистр предзагрузки; 17.4.7 — CCxS: 00 выход, 01 вход TI1, 10 вход TI2, 11 TRC; OCxM 000…111; OCxPE — предзагрузка CCRx до события обновления
  2. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet, DS40002061B — разд. 16.6 и 16.7 — у Timer1 отдельный блок захвата (ICR1) и два блока сравнения (OCR1A, OCR1B), для сравнения с устройством канала STM32

Нашли ошибку?