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

Инжектированные каналы АЦП

Пусть АЦП STM32 непрерывно сканирует датчики, а в строго заданный момент периода ШИМ нужно измерить ток двигателя. Для этого у АЦП есть вторая, приоритетная группа каналов — инжектированная: она вклинивается в обычную последовательность и не ждёт её окончания.

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

Инжектированные каналы (injected channels) — вторая группа преобразований в АЦП STM32, которая по триггеру прерывает обычную (регулярную) группу, выполняется вне очереди, после чего регулярная группа продолжается с прерванного места. В инжектированной группе до четырёх преобразований, и у каждого свой регистр результата ADC_JDRx (RM0090, разд. 13.3.3, 13.3.9). Механизм удобен, когда одни сигналы опрашиваются фоном, а другие нужно измерить точно в заданный момент.

Две группы

РегулярнаяИнжектированная
Длинадо 16 преобразованийдо 4
Порядок каналовADC_SQR1…3ADC_JSQR
Результатобщий ADC_DR (обычно через DMA)свой ADC_JDR1…4 на каждое
Приоритетобычныйпрерывает регулярную
СмещениенетADC_JOFR1…4 вычитается из результата

Канал в группе может быть любым из каналов АЦП — 16 внешних и внутренних (у ADC1 STM32F4 это датчик температуры, VREFINT и VBAT на IN16–IN18, RM0090, разд. 13.1, 13.3.3) — и встречаться несколько раз; длина групп задаётся полями L в ADC_SQR1 и ADC_JSQR. Если поменять эти регистры во время преобразования, оно перезапустится.

Режимы запуска

  • По триггеру. Внешний триггер инжекции (например, от таймера через синхронизацию) или бит JSWSTART прерывает текущее регулярное преобразование, выполняет инжектированную группу, затем регулярная продолжается. Если регулярный триггер придёт во время инжекции, он будет выполнен после неё. RM0090 требует, чтобы интервал между триггерами был больше длины инжекции: при 30 тактах АЦП — не меньше 31.
  • Автоинжекция (JAUTO). Инжектированная группа автоматически выполняется после регулярной; вместе получается до 20 преобразований. Внешний триггер инжекции в этом режиме выключают.

Длина каждого преобразования складывается из времени выборки и 12 тактов АЦП последовательного приближения при 12 разрядах (RM0090, разд. 13.5); подобрать время выборки помогает калькулятор АЦП STM32. У STM32F1 группы устроены так же (RM0008, разд. 11.3.3). Регулярные и инжектированные каналы F1 и F4 на примерах сравнивает статья «АЦП STM32».

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

Чем инжектированные каналы отличаются от регулярных?

Регулярная группа — до 16 преобразований с общим регистром результата ADC_DR, который обычно забирает DMA. Инжектированная — до 4 преобразований, у каждого свой регистр результата ADC_JDRx, и по триггеру она прерывает текущее регулярное преобразование, а после неё регулярная группа продолжается с прерванного места (RM0090, разд. 13.3.3, 13.3.9).

Зачем инжектированные каналы при управлении двигателем?

Ток в обмотке часто надо измерить в определённой точке периода ШИМ, когда ключи в известном состоянии. Таймер выдаёт триггер инжекции, и измерение происходит именно тогда, не дожидаясь конца регулярного сканирования. Это наш вывод из механизма запуска; сам механизм описан в RM0090 (разд. 13.3.9).

Что такое JOFFSET?

Регистр смещения ADC_JOFRx для каждого инжектированного канала: записанное в него значение вычитается из результата, и в ADC_JDRx попадает уже разность (RM0090, разд. 13.13.6). Так можно убрать постоянную составляющую, например середину шкалы у двуполярного датчика тока.

Источники

  1. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — разд. 13.3.3 — 16 мультиплексированных каналов в двух группах: регулярная до 16 преобразований (ADC_SQRx, L[3:0]), инжектированная до 4 (ADC_JSQR, L[1:0]); изменение SQRx или JSQR во время преобразования перезапускает его; 13.3.8 — данные инжектированных каналов всегда в ADC_JDRx; 13.3.9 — запуск инжекции по внешнему триггеру или JSWSTART прерывает текущее регулярное преобразование, затем регулярная группа продолжается с прерванного места; регулярное событие во время инжекции выполняется после неё; интервал между триггерами больше длины инжекции (пример: 30 тактов → не меньше 31); JAUTO — инжектированная группа автоматически после регулярной, до 20 преобразований, внешний триггер инжекции при этом выключен; 13.13.6 — JOFFSETx вычитается из результата инжектированного канала; 13.5 — Tconv = время выборки + 12 тактов
  2. STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx, Rev 21 — разд. 11.3.3 — у АЦП STM32F1 те же группы: регулярная до 16 преобразований (ADC_SQRx), инжектированная до 4 (ADC_JSQR)

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