Одноимпульсный режим таймера (one-pulse mode)
Иногда нужен ровно один импульс: открыть симистор через 3 мс после перехода сети через ноль или выдать строб длиной 10 мкс по сигналу датчика. Таймер STM32 умеет это аппаратно — без прерываний и без дрожания от задержки обработчика.
Обновлено Редакция GAW
Одноимпульсный режим (one-pulse mode, OPM) — режим таймера, в котором счётчик запускается по внешнему сигналу, формирует на выходе один импульс заданной длительности после заданной задержки и сам останавливается. Задержку и длительность задают регистры канала, а момент запуска — фронт на входе, поэтому дрожание определяется тактом таймера, а не временем реакции программы. У STM32 режим включает бит OPM в TIMx_CR1: счётчик останавливается на следующем событии обновления (RM0090, разд. 17.3.15).
Пример из RM0090
Нужно выдать положительный импульс длиной tPULSE на выходе OC1 через tDELAY после нарастающего фронта на входе TI2:
- Канал 2 на вход TI2 (CC2S = 01), вход TI2FP2 — нарастающий фронт (CC2P = 0), он же триггер ведомого контроллера (TS = 110).
- Ведомый режим триггера SMS = 110: фронт запускает счётчик.
- CCR1 задаёт задержку, ARR − CCR1 — длительность, канал в PWM mode 2 (OC1M = 111).
- OPM = 1 — один импульс; при OPM = 0 импульсы будут повторяться каждый период.
Длительности в секундах — это значения в тактах, делённые на частоту счётчика после предделителя. Сам выход строится так же, как в режиме output compare или ШИМ: OPM лишь останавливает счёт после одного периода.
Где применяют
- Фазовое управление. Импульс на симистор с задержкой от перехода через ноль: детектор нуля даёт фронт, задержка задаёт угол открытия.
- Строб по событию. Импульс фиксированной длины для АЦП, лазерного диода или ультразвукового датчика по сигналу другой схемы.
- Цепочки таймеров. Запуск одного таймера другим через синхронизацию таймеров.
Тот же режим есть у таймеров STM32F1 (RM0008, разд. 14.3.15). Общая картина режимов — в статье «Таймеры STM32».
Частые вопросы
Как задать задержку и длительность импульса?
В примере RM0090 задержку t_DELAY задаёт значение CCR1, а длительность t_PULSE — разность ARR и CCR1 в тактах счётчика; канал работает в PWM mode 2, поэтому выход становится активным при совпадении с CCR1 и неактивным, когда счётчик доходит до ARR (разд. 17.3.15). Например (наш расчёт), при счёте 1 МГц, CCR1 = 3000 и ARR = 3010 получится импульс 10 мкс через 3 мс после фронта.
Почему импульс не появляется?
RM0090 называет условие: импульс формируется правильно, только если значение сравнения отличается от начального значения счётчика. Кроме того, для запуска по внешнему сигналу нужен ведомый режим триггера (SMS = 110) с правильно выбранным входом TS, а бит OPM должен стоять в TIMx_CR1 — иначе таймер будет повторять импульсы.
Можно ли получить импульс почти без задержки?
Минимальную задержку ограничивает время, за которое фронт триггера запускает счётчик и срабатывает сравнение. Бит OCxFE ускоряет это: фронт сразу действует как совпадение, и по RM0090 задержка от фронта до выхода сокращается с 5 до 3 тактов. Работает только в режимах PWM 1 и 2.
Источники
- STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — разд. 17.3.15 — OPM: счётчик запускается по сигналу и формирует импульс заданной длины после заданной задержки; бит OPM в TIMx_CR1 останавливает счётчик на следующем событии обновления; импульс корректен, только если значение сравнения отличается от начального значения счётчика; пример: TI2FP2 по нарастающему фронту (TS = 110, SMS = 110 — режим триггера), t_DELAY задаёт CCR1, t_PULSE — разность ARR и CCR1, PWM mode 2 (OC1M = 111); OCxFE сокращает минимальную задержку; 17.4.7 — с OCxFE задержка от фронта триггера до выхода 3 такта вместо 5
- STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx, Rev 21 — разд. 14.3.15 — тот же одноимпульсный режим у таймеров STM32F1
Нашли ошибку?
Смотрите также
- Таймеры STM32Тактирование, PSC/ARR, ШИМ, мёртвое время, захват, энкодер, OPM, синхронизация
- Output compare (сравнение)Действие на выводе и флаг при совпадении счётчика с регистром
- Синхронизация таймеров (TRGO)Один таймер запускает, стробирует или тактирует другой
- Событие обновления (UEV)Момент, когда таймер применяет новые ARR, PSC и CCRx
- Переход через нольВключение в начале полупериода: меньше помех, но без фазового управления