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

Предделитель таймера

Предделитель — делитель частоты перед счётчиком таймера микроконтроллера. Он позволяет получать медленные события — миллисекунды и секунды — от тактовой частоты в десятки мегагерц, не переполняя счётчик.

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

Предделитель (prescaler) — программируемый делитель частоты между тактовым сигналом и счётчиком таймера микроконтроллера. Счётчик увеличивается не на каждом такте, а на каждом N-м, где N — коэффициент предделителя. Это позволяет 8- или 16-битному счётчику отмерять длинные интервалы: при 16 МГц 16-битный счётчик без деления переполнится за 4,1 мс, а с предделителем 1024 — за 4,2 с.

Формулы

У ATmega328P в режиме CTC и Fast PWM с регистром периода:

f=fclkN⋅(1+TOP)f = \frac{f_{clk}}{N \cdot (1 + TOP)}

где N — предделитель, TOP — значение OCRnA (или ICR1). У Timer0 и Timer1 предделители 1, 8, 64, 256 и 1024, у Timer2 добавлены 32 и 128. Подробнее о таймерах AVR и режимах — в статье «Таймеры AVR».

У STM32 предделитель PSC — 16-битный регистр с любым значением от 0 до 65 535, а событие обновления происходит каждые (PSC + 1) · (ARR + 1) тактов:

f=fTIM(PSC+1)⋅(ARR+1)f = \frac{f_{TIM}}{(PSC + 1) \cdot (ARR + 1)}

Например, при 72 МГц PSC = 71 и ARR = 999 дают ровно 1 кГц. Тактирование, режимы и связка таймеров разобраны в статье о таймерах STM32.

Подбор

Подобрать предделитель и регистр периода под нужную частоту, увидеть фактическую частоту, ошибку и код настройки поможет калькулятор таймера. Для ШИМ от предделителя зависит и разрешение: чем больше шагов в периоде, тем точнее можно задать коэффициент заполнения.

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

Как выбрать предделитель?

Подобрать наименьший предделитель, при котором нужный период ещё помещается в счётчик. Так шаг времени получается самым мелким, а частота — самой точной. Для 1 кГц от 16 МГц на 16-битном Timer1 ATmega328P подходит предделитель 1 и OCR1A = 15999, а 8-битному Timer0 нужен предделитель 64 и OCR0A = 249.

Почему в STM32 пишут PSC = 71, а не 72?

Таймер STM32 делит на PSC + 1: значение 0 означает деление на 1. Чтобы получить счёт с частотой 1 МГц от 72 МГц, в PSC записывают 71. Так же и период: при ARR = 999 событие обновления происходит каждые 1000 отсчётов — 1 кГц.

Влияет ли предделитель на разрешение ШИМ?

Да, косвенно. Частота ШИМ равна частоте тактирования, делённой на предделитель и на число шагов периода. Чем больше предделитель, тем больше шагов помещается в нужный период и тем мельче шаг коэффициента заполнения — но тем ниже наибольшая достижимая частота ШИМ.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — Timer/Counter0, 1 и 2: предделители 1, 8, 64, 256, 1024 (у Timer2 ещё 32 и 128), режим CTC, формула частоты
  2. STMicroelectronics. RM0008 Reference manual STM32F101xx–STM32F107xx — 16-битные PSC и ARR таймеров, событие обновления каждые (PSC + 1) · (ARR + 1) тактов

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