Аналоговый сторож АЦП (analog watchdog)
Если АЦП непрерывно оцифровывает напряжение батареи или ток через DMA, проверять каждое значение программой расточительно. У АЦП STM32 есть встроенный компаратор окна — аналоговый сторож: он вызывает прерывание, только когда сигнал вышел за заданные пороги.
Обновлено Редакция GAW
Аналоговый сторож (analog watchdog, AWD) — блок АЦП STM32, который сравнивает каждый результат преобразования с двумя порогами и ставит флаг AWD, если значение оказалось ниже нижнего порога или выше верхнего. Пороги — младшие 12 бит регистров ADC_LTR и ADC_HTR; прерывание по флагу включает бит AWDIE в ADC_CR1 (RM0090, разд. 13.3.7). По сути это оконный компаратор, встроенный в цифровую часть АЦП: программа узнаёт только о выходе сигнала из окна.
Какие каналы охраняются
| AWDSGL | AWDEN | JAWDEN | Под охраной |
|---|---|---|---|
| x | 0 | 0 | ничего |
| 0 | 0 | 1 | все инжектированные |
| 0 | 1 | 0 | все регулярные |
| 0 | 1 | 1 | все регулярные и инжектированные |
| 1 | 0 | 1 | один инжектированный |
| 1 | 1 | 0 | один регулярный |
| 1 | 1 | 1 | один регулярный или инжектированный |
Данные — по 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).
Чем аналоговый сторож отличается от сторожевого таймера?
Общее у них только слово в названии. Сторожевой таймер сбрасывает микроконтроллер, если программа перестала его обслуживать; аналоговый сторож ничего не сбрасывает, а лишь сравнивает результат АЦП с окном порогов и ставит флаг с прерыванием.
Источники
- 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
- STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx, Rev 21 — разд. 11.3.7 — тот же аналоговый сторож у АЦП STM32F1: пороги в ADC_HTR и ADC_LTR, выбор каналов битами AWDEN, JAWDEN, AWDSGL
Нашли ошибку?
Смотрите также
- АЦП STM32Группы каналов, режимы, триггеры, DMA, калибровка, датчик температуры, точность
- Оконный компараторДва компаратора: сигнал внутри или вне коридора
- Инжектированные каналы АЦППриоритетная группа до 4 каналов, прерывающая обычное сканирование
- АЦП STM32: время и выборкаВремя преобразования, частота выборок, RAIN и самая короткая выборка
- DMAПрямой доступ к памяти без участия ядра