1. Введение: роль таймеров в микроконтроллерных системах
Таймеры‑счётчики — ключевые периферийные модули микроконтроллеров (МК), обеспечивающие:
- измерение временных интервалов;
- генерацию точных временных задержек;
- формирование периодических сигналов (в т. ч. ШИМ);
- подсчёт внешних событий;
- синхронизацию задач в реальном времени;
- управление двигателями, светодиодами, коммуникационными интерфейсами.
Основные характеристики:
- разрядность (8-, 16-, 32‑битные);
- источник тактования (внутренний осциллятор, внешний сигнал);
- число независимых каналов;
- поддерживаемые режимы работы.
2. Базовая архитектура таймера‑счётчика
2.1. Ключевые регистры
- Счётный регистр (TCNT) — хранит текущее значение.
- Регистр сравнения (OCRA/OCRB) — задаёт порог для событий.
- Регистр периода (ARR, ICR) — определяет максимальную величину счёта.
- Регистр управления (TCCR) — конфигурирует режим, предделитель, полярность.
- Регистр флагов (TIFR) — отражает события (переполнение, сравнение).
- Регистр маски прерываний (TIMSK) — разрешает/запрещает прерывания.
2.2. Основные блоки
- предделитель частоты (prescaler);
- компараторы;
- логическая схема управления выводами (OCx);
- блок генерации прерываний.
3. Режимы работы таймеров
3.1. Нормальный режим (Normal Mode)
- Принцип: счёт от 0 до максимума (0xFF для 8 бит, 0xFFFF для 16 бит), затем переполнение.
- События:
- установка флага переполнения (TOV);
- генерация прерывания (если разрешено).
- Применение:
- измерение длинных интервалов;
- базовые временные задержки;
- подсчёт событий (если вход — внешний сигнал).
- Ограничения: нет автоматического перезапуска с заданным периодом.
3.2. Режим «Сброс при сравнении» (CTC, Clear Timer on Compare)
- Принцип:
- счётчик увеличивается до значения в регистре OCRA;
- при совпадении:
- счётчик сбрасывается в 0;
- устанавливается флаг OCF (Output Compare Flag);
- может сгенерироваться прерывание.
- Период импульса:T=FCLK(OCRA+1)⋅Предделитель
- Применение:
- генерация периодических прерываний с точным периодом;
- тактирование протоколов связи;
- простые генераторы частоты.
3.3. Быстрый ШИМ (Fast PWM)
- Принцип:
- счётчик считает от 0 до ARR (или фиксированного максимума), затем сбрасывается.
- при совпадении с OCRA/OCRB меняется состояние выходного сигнала.
- Особенности:
- высокая частота ШИМ (до половины тактовой);
- асимметричная форма сигнала;
- быстрая реакция на изменение коэффициента заполнения.
- Режимы записи OCR:
- немедленное обновление;
- по переполнению (для избежания гонок).
- Применение:
- управление яркостью светодиодов;
- аналоговое управление через фильтр НЧ;
- сервоприводы (если частота подходит).
3.4. Фазо- и частотно-корректируемый ШИМ (Phase and Frequency Correct PWM)
- Принцип:
- двунаправленный счёт (0 → ARR → 0);
- сравнение происходит на подъёме и спаде;
- период ШИМ:
- Преимущества:
- симметричная форма сигнала;
- минимальная фазовая ошибка при изменении коэффициента заполнения.
- Недостатки:
- максимальная частота в 2 раза ниже, чем в Fast PWM.
- Применение:
- высокоточное управление двигателями;
- аудиогенераторы;
- системы с требованиями к симметрии сигнала.
3.5. Режим захвата ввода (Input Capture)
- Принцип:
- внешний сигнал (на выводе ICP) фиксирует текущее значение счётчика в регистр ICR.
- сохраняется время наступления события.
- События:
- захват по фронту/спаду (настраивается);
- прерывание по захвату.
- Применение:
- измерение длительности импульсов;
- определение частоты сигнала;
- декодирование ИК‑пультов;
- синхронизация с внешними событиями.
3.6. Режим счёта внешних событий (External Event Counting)
- Принцип:
- таймер считает импульсы на внешнем входе (T0, T1 и т. п.);
- предделитель может быть отключён или настроен.
- Применение:
- подсчёт оборотов вала (энкодер);
- учёт продукции на конвейере;
- измерение частоты низкоскоростных сигналов.
3.7. Режимы с двойным буфером (Dual‑Buffer)
- Принцип:
- регистры OCRA/OCRB имеют буферные копии;
- обновление выходного значения происходит:
- по переполнению;
- по событию сравнения.
- Цель:
- избегание «рваных» импульсов при динамической настройке ШИМ;
- синхронизация изменений с циклом счёта.
- Применение:
- динамическое изменение коэффициента заполнения без артефактов;
- мультиплексированные ШИМ‑выходы.
4. Источники тактования
4.1. Внутренний тактовый сигнал
- от системного генератора МК (через предделитель);
- стабильность зависит от кварцевого резонатора или RC‑генератора.
4.2. Внешний тактовый сигнал
- подаётся на вход таймера (например, T1);
- позволяет синхронизироваться с внешним оборудованием;
- используется для измерения частоты.
4.3. Асинхронный режим
- таймер работает от отдельного низкочастотного генератора (например, 32 768 Гц);
- применяется для часов реального времени (RTC).
5. Предделитель (Prescaler)
5.1. Назначение
- деление входной частоты для:
- увеличения периода счёта;
- снижения частоты прерываний;
- экономии энергии.
5.2. Коэффициенты деления
- типичные значения: 1, 8, 64, 256, 1024;
- настраиваются битами в регистре TCCR.
5.3. Особенности
- в некоторых МК предделитель общий для нескольких таймеров;
- возможна остановка предделителя для точного измерения коротких интервалов.
6. Генерация прерываний и событий
6.1. Основные источники прерываний
- переполнение счётчика (TOV);
- совпадение с OCRA/OCRB (OCF);
- захват ввода (ICF);
- ошибка счёта (если поддерживается).
6.2. Использование
- обслуживание периодических задач;
- обработка внешних событий без опроса;
- переключение состояний в реальном времени.
7. Практические примеры применения
7.1. Измерение частоты сигнала
- режим Input Capture:
- фиксировать время между фронтами;
- вычислять частоту как F=1/Δt.
7.2. Генерация ШИМ для управления мотором
- режим Fast PWM или Phase Correct PWM:
- OCRA задаёт коэффициент заполнения;
- ARR — период ШИМ.
7.3. Точное время задержки
- режим CTC:
- установить OCRA для нужного периода;
- в прерывании увеличивать счётчик миллисекунд.
7.4. Подсчёт импульсов с датчика
- режим External Event Counting:
- каждый импульс увеличивает TCNT;
- по переполнению — прерывание для обработки.
7.5. Часы реального времени
- таймер в асинхронном режиме от 32 768 Гц;
- прерывание по переполнению каждые 1 сек.
8. Оптимизация и типичные ошибки
8.1. Оптимизация производительности
- использовать предделитель для снижения нагрузки на CPU;
- применять двойной буфер при динамическом ШИМ;
- минимизировать обработку в ISR таймера.



