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

Счётчик повторений (repetition counter)

Обычный таймер STM32 генерирует событие обновления на каждом переполнении. У таймеров с расширенным управлением TIM1 и TIM8 между переполнением и событием стоит ещё один счётчик: он пропускает заданное число периодов, и прерывание приходит, например, раз в десять периодов ШИМ.

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

Счётчик повторений (repetition counter) — дополнительный вычитающий счётчик у таймеров STM32 с расширенным управлением, TIM1 и TIM8. Событие обновления у них возникает не на каждом переполнении основного счётчика, а только когда счётчик повторений дошёл до нуля. Значит, регистры ARR, PSC и CCRx обновляются из предзагрузки, а прерывание по обновлению приходит раз в N + 1 переполнений, где N — значение регистра TIMx_RCR (RM0008, разд. 14.3.3).

Как считает

Счётчик повторений уменьшается (RM0008, разд. 14.3.3):

  • на каждом переполнении при счёте вверх;
  • на каждом опустошении при счёте вниз;
  • и на переполнении, и на опустошении в центрированном режиме.

Поэтому в ШИМ с выравниванием по фронту REP + 1 — число периодов между событиями, а в центрированном режиме — число полупериодов (RM0008, разд. 14.4.13). У STM32F1 поле REP восьмибитное. В центрированном режиме ST отмечает и плюс: при RCR = 0 событие приходит дважды за период, и скважность можно обновлять на каждом полупериоде.

Счётчик перезагружается из RCR автоматически, а новое значение RCR начинает действовать только со следующего события повторения. Программное обновление битом UG срабатывает сразу, независимо от счётчика, и перезагружает его.

Зачем он нужен

  • Реже прерывания. В управлении моторами ШИМ идёт на десятках килогерц, а регулятору тока или скорости достаточно обновлять скважность раз в несколько периодов. Счётчик повторений снимает с процессора лишние прерывания — пример расчёта (наш): ШИМ 20 кГц и RCR = 3 дают прерывание 5 кГц.
  • Ровное число импульсов. Вместе с режимом одного импульса таймер выдаёт RCR + 1 периодов и останавливается — так формируют пачки импульсов, например для шагового двигателя.
  • Синхронное обновление. Все теневые регистры меняются одновременно на событии обновления, поэтому период и скважность не «рвутся» посередине.

Устройство таймеров STM32, режимы счёта и расчёт делителей — в статье «Таймеры STM32» и в калькуляторе таймера.

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

Есть ли счётчик повторений у TIM2–TIM5?

У STM32F1 и STM32F4 — нет: регистр RCR описан только у таймеров с расширенным управлением TIM1 и TIM8 (RM0008, разд. 14; RM0090, разд. 17). У таймеров общего назначения событие обновления приходит на каждом переполнении, и пропускать периоды приходится программно, считая прерывания.

Почему в центрированном ШИМ RCR = 1 даёт событие каждый период?

Потому что в центрированном режиме счётчик повторений уменьшается и на переполнении, и на опустошении, то есть дважды за период ШИМ. Значение REP + 1 там означает число полупериодов (RM0008, разд. 14.4.13). RCR = 1 — два полупериода, один полный период; RCR = 0 — событие на каждом полупериоде.

Как получить ровно N импульсов ШИМ?

Записать в RCR значение N − 1 и включить режим одного импульса: таймер выдаст N периодов и остановится на событии обновления. Это наш вывод из описания режима одного импульса и счётчика повторений в RM0008; у STM32F1 RCR восьмибитный, поэтому так получается до 256 импульсов за один запуск при выравнивании по фронту и до 128 в центрированном режиме, где RCR считает полупериоды.

Источники

  1. STMicroelectronics. RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21) — разд. 14.3.3: событие обновления UEV генерируется, только когда счётчик повторений дошёл до нуля; данные из предзагружаемых регистров (ARR, PSC, CCRx в режиме сравнения) переносятся в теневые каждые N + 1 переполнений или опустошений, где N — значение TIMx_RCR; счётчик уменьшается на каждом переполнении при счёте вверх, на каждом опустошении при счёте вниз и на обоих в центрированном режиме — это ограничивает число повторений 128 периодами ШИМ, зато позволяет обновлять скважность дважды за период; счётчик с автоперезагрузкой; при программном UG или от ведомого режима событие возникает сразу, счётчик перезагружается; в центрированном режиме при нечётном RCR событие приходится на переполнение или опустошение в зависимости от того, когда записан RCR; разд. 14.4.13: TIMx_RCR, смещение 0x30, REP[7:0]; запись вступает в силу только со следующего события повторения; в режиме ШИМ REP + 1 — число периодов при выравнивании по фронту и число полупериодов в центрированном режиме
  2. STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21) — разд. 17.4.13: регистр TIM1 and TIM8 repetition counter register (TIMx_RCR) у таймеров с расширенным управлением STM32F4; разд. 17.3.2–17.3.3: при использовании счётчика повторений событие обновления генерируется после заданного числа переполнений (Repetition counter)

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