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

Аналоговый сторож АЦП (analog watchdog)

Если АЦП непрерывно оцифровывает напряжение батареи или ток через DMA, проверять каждое значение программой расточительно. У АЦП STM32 есть встроенный компаратор окна — аналоговый сторож: он вызывает прерывание, только когда сигнал вышел за заданные пороги.

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

Аналоговый сторож (analog watchdog, AWD) — блок АЦП STM32, который сравнивает каждый результат преобразования с двумя порогами и ставит флаг AWD, если значение оказалось ниже нижнего порога или выше верхнего. Пороги — младшие 12 бит регистров ADC_LTR и ADC_HTR; прерывание по флагу включает бит AWDIE в ADC_CR1 (RM0090, разд. 13.3.7). По сути это оконный компаратор, встроенный в цифровую часть АЦП: программа узнаёт только о выходе сигнала из окна.

Какие каналы охраняются

AWDSGLAWDENJAWDENПод охраной
x00ничего
001все инжектированные
010все регулярные
011все регулярные и инжектированные
101один инжектированный
110один регулярный
111один регулярный или инжектированный

Данные — по RM0090, табл. 67; номер одиночного канала задают биты AWDCH[4:0]. О второй группе каналов — в статье об инжектированных каналах.

Как применяют

Типичная схема — АЦП в непрерывном режиме, результаты уходят в память через DMA, а сторож следит за порогами и будит программу только при аварии: напряжение батареи упало ниже нормы, ток превысил предел, температура вышла за допуск. Пороги задаются в отсчётах АЦП: для порога 2,5 В при опорном 3,3 В и 12 разрядах это 2,5 / 3,3 · 4095 ≈ 3102 (наш расчёт). Сравнение идёт до выравнивания результата, поэтому формат ALIGN на пороги не влияет.

После сброса верхний порог ADC_HTR равен 0x0FFF, а нижний — нулю, то есть окно открыто полностью. Сторож есть и у АЦП STM32F1 с теми же регистрами (RM0008, разд. 11.3.7). Подробнее об АЦП — в статье «АЦП STM32».

Не путать

Со сторожевым таймером: совпадает только слово «сторож», назначение разное.

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

Можно ли следить сторожем сразу за несколькими каналами?

Да, но пороги общие. Биты AWDSGL, AWDEN и JAWDEN в ADC_CR1 выбирают охрану одного канала (номер в AWDCH) или всех регулярных, всех инжектированных или всех вместе (RM0090, табл. 67). Если каналам нужны разные пороги, сторож ставят на один канал, а остальные проверяют программой.

Влияет ли выравнивание результата на пороги?

Нет. RM0090 оговаривает, что напряжение сравнивается с порогами до выравнивания ALIGN, поэтому пороги всегда записывают как 12-битные значения в младшие биты ADC_HTR и ADC_LTR (разд. 13.3.7).

Чем аналоговый сторож отличается от сторожевого таймера?

Общее у них только слово в названии. Сторожевой таймер сбрасывает микроконтроллер, если программа перестала его обслуживать; аналоговый сторож ничего не сбрасывает, а лишь сравнивает результат АЦП с окном порогов и ставит флаг с прерыванием.

Источники

  1. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — разд. 13.3.7 — флаг AWD ставится, если преобразованное напряжение ниже нижнего или выше верхнего порога; пороги — младшие 12 бит ADC_HTR и ADC_LTR; прерывание — бит AWDIE в ADC_CR1; пороги не зависят от выравнивания ALIGN, сравнение идёт до выравнивания; табл. 67 — выбор каналов битами AWDSGL, AWDEN, JAWDEN, канал — AWDCH[4:0]; 13.13.7–13.13.8 — сброс ADC_HTR = 0x0FFF
  2. STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx, Rev 21 — разд. 11.3.7 — тот же аналоговый сторож у АЦП STM32F1: пороги в ADC_HTR и ADC_LTR, выбор каналов битами AWDEN, JAWDEN, AWDSGL

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