Предделитель таймера
Предделитель — делитель частоты перед счётчиком таймера микроконтроллера. Он позволяет получать медленные события — миллисекунды и секунды — от тактовой частоты в десятки мегагерц, не переполняя счётчик.
Обновлено Редакция GAW
Предделитель (prescaler) — программируемый делитель частоты между тактовым сигналом и счётчиком таймера микроконтроллера. Счётчик увеличивается не на каждом такте, а на каждом N-м, где N — коэффициент предделителя. Это позволяет 8- или 16-битному счётчику отмерять длинные интервалы: при 16 МГц 16-битный счётчик без деления переполнится за 4,1 мс, а с предделителем 1024 — за 4,2 с.
Формулы
У ATmega328P в режиме CTC и Fast PWM с регистром периода:
где 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) тактов:
Например, при 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 кГц.
Влияет ли предделитель на разрешение ШИМ?
Да, косвенно. Частота ШИМ равна частоте тактирования, делённой на предделитель и на число шагов периода. Чем больше предделитель, тем больше шагов помещается в нужный период и тем мельче шаг коэффициента заполнения — но тем ниже наибольшая достижимая частота ШИМ.
Источники
- 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, формула частоты
- STMicroelectronics. RM0008 Reference manual STM32F101xx–STM32F107xx — 16-битные PSC и ARR таймеров, событие обновления каждые (PSC + 1) · (ARR + 1) тактов
Нашли ошибку?
Смотрите также
- Таймер AVR и STM32Предделитель, OCRnA, PSC и ARR под частоту, мёртвое время, энкодер
- Таймеры AVRTimer0/1/2, режимы WGM, предделители, формулы ШИМ, захват, примеры
- Таймеры STM32Тактирование, PSC/ARR, ШИМ, мёртвое время, захват, энкодер, OPM, синхронизация
- Коэффициент заполненияD = τ / T и скважность S = 1 / D