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

Вход аварийного отключения таймера (break)

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

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

Вход аварийного отключения (break input, вывод BKIN) — вход расширенных таймеров STM32 (TIM1 и TIM8 у STM32F4), который при аварийном сигнале аппаратно снимает разрешение выходов — бит MOE в регистре TIMx_BDTR — и переводит выходы ШИМ в заранее заданные безопасные уровни. Источником может быть вывод BKIN или сбой внешнего генератора, обнаруженный системой контроля тактирования (RM0090, разд. 17.3.12). Отключение асинхронное и срабатывает даже без тактового сигнала.

Настройка

БитРегистрНазначение
BKETIMx_BDTRвключает break (после сброса выключен)
BKPTIMx_BDTRполярность входа
MOETIMx_BDTRобщее разрешение выходов, сбрасывается при аварии
AOETIMx_BDTRавтоматически ставит MOE на следующем событии обновления
OSSI, OISx, OISxNTIMx_BDTR, TIMx_CR2состояние выходов после аварии
BIE / BDETIMx_DIERпрерывание / запрос DMA по флагу BIF

Изменение BKE и BKP вступает в силу через один такт шины APB, поэтому прочитать новое значение сразу после записи нельзя. Break можно вызвать и программно — битом BG в TIMx_EGR, это удобно для проверки защиты.

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

Типичный источник аварийного сигнала — выход «перегрузка» драйвера H-моста, датчик тока, тепловой датчик. RM0090 прямо предлагает подключать к break сигналы аварии от силовых драйверов и датчиков. Важная деталь для мостов: если таймер работает с комплементарными выходами, после аварии уровни выставляются через мёртвое время, и оба ключа плеча не будут открыты одновременно ни в какой момент.

Вход действует по уровню: пока авария не снята, MOE установить нельзя, а флаг BIF не сбрасывается. Если же включён AOE, выходы вернутся сами на следующем событии обновления; RM0090 упоминает это для регулирования, а для защиты советует держать MOE выключенным до записи программой. У STM32F1 у TIM1 и TIM8 та же функция с теми же битами (RM0008, разд. 14.3.12). Подробнее о таймерах — в статье «Таймеры STM32».

Не путать

С условием break в UART — длинным нулём на линии приёма; это термин break в UART.

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

Что произойдёт с выходами при срабатывании break?

Бит MOE сбрасывается асинхронно, и выходы переходят в состояние, заданное битом OSSI и уровнями OISx и OISxN в TIMx_CR2. Если используются комплементарные выходы и тактирование таймера есть, уровни OISx и OISxN выставляются через мёртвое время, так что оба ключа плеча одновременно не откроются (RM0090, разд. 17.3.12). Это работает даже при остановленном генераторе микроконтроллера.

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

Пока вход break активен, MOE установить нельзя ни программно, ни автоматически — вход действует по уровню. Когда авария снята, MOE ставят записью в TIMx_BDTR. Если включён бит AOE, MOE поставится сам на следующем событии обновления; RM0090 предлагает это для регулирования, а для защиты — оставлять AOE выключенным, чтобы выход включала программа.

Зачем нужны биты LOCK?

Чтобы сбой программы не изменил настройки защиты. Биты LOCK в TIMx_BDTR замораживают мёртвое время, полярности и состояния выходов, режимы OCxM, разрешение и полярность break на одном из трёх уровней, а записать их можно только один раз после сброса (RM0090, разд. 17.3.12).

Источники

  1. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — разд. 17.2 — break input у TIM1 и TIM8; 17.3.12 — источник: вывод BRK или сбой тактирования от CSS; после сброса break выключен, MOE = 0; BKE включает, BKP задаёт полярность, изменение действует через 1 такт APB; при срабатывании MOE сбрасывается асинхронно, работает и при остановленном генераторе; выходы — в уровни OISx/OISxN, с комплементарными выходами — через мёртвое время; флаг BIF, прерывание BIE, DMA BDE; AOE — MOE снова ставится на следующем событии обновления; вход действует по уровню, пока он активен, MOE не установить; программный break — бит BG в TIMx_EGR; биты LOCK (три уровня) записываются один раз после сброса
  2. STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx, Rev 21 — разд. 14.3.12 — та же функция break у TIM1 и TIM8 STM32F1; описание TIMx_BDTR — биты BKE, BKP, AOE, MOE

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