Двойной режим АЦП STM32 (dual ADC mode)
У STM32F103 два АЦП, у STM32F407 — три. Их можно запускать одним триггером: либо одновременно на разных каналах, чтобы мерить ток и напряжение в один момент, либо со сдвигом на одном канале, чтобы получить вдвое или втрое больше выборок в секунду.
Обновлено Редакция GAW
Двойной режим АЦП (dual ADC mode) — совместная работа двух АЦП STM32 от одного триггера, в которой ведущий ADC1 запускает ведомый ADC2 одновременно с собой или со сдвигом. У STM32F1 режим выбирает поле DUALMOD[3:0] (биты 19:16 регистра ADC1_CR1, значения 0000–1001), у STM32F4 есть ещё тройной режим с ADC3, и режим задают биты MULTI[4:0] в общем регистре ADC_CCR (RM0008, разд. 11.9 и 11.12.2; RM0090, разд. 13.9). Внешний триггер настраивают только у ведущего.
Режимы
| Режим | Что делает | Зачем |
|---|---|---|
| Одновременный регулярный | оба АЦП сразу преобразуют регулярные группы | ток и напряжение в один момент — расчёт мощности |
| Одновременный инжектированный | то же для инжектированных каналов | синхронные измерения по событию таймера |
| Чередующийся | оба АЦП по очереди меряют один канал | удвоение частоты выборки |
| Поочерёдный запуск | триггер запускает то один, то другой АЦП | разнесённые по времени измерения |
| Независимый | АЦП работают сами по себе | обычный режим |
По RM0008, разд. 11.9. У STM32F1 чередование бывает быстрым (ADC1 стартует через 7 тактов АЦП после ADC2) и медленным (сдвиг 14 тактов); у STM32F4 сдвиг задают биты DELAY, но он не может быть меньше времени выборки плюс 2 такта — одновременно делать выборку может только один АЦП (RM0090, разд. 13.9.3).
Правила
- В одновременных режимах нельзя мерить один канал двумя АЦП, а время выборки у пары каналов должно быть одинаковым (RM0008, разд. 11.9.1–11.9.2).
- В чередующемся режиме время выборки должно быть меньше сдвига: меньше 7 тактов в быстром режиме STM32F1 и меньше 14 в медленном.
- Результат ведомого читается через регистр ведущего: у STM32F1 32-битный ADC1_DR содержит ADC2 в старшем и ADC1 в младшем полуслове, и для этого должен быть включён бит DMA. Поэтому DMA настраивают на передачу 32-битных слов.
Пример: у STM32F103 преобразование занимает 14 тактов АЦП при 1,5 такта выборки, то есть 1 мкс при 14 МГц (RM0008, разд. 11.6). Наш расчёт: в быстром чередующемся режиме с непрерывным преобразованием два АЦП дают выборку каждые 7 тактов — 2 млн выборок в секунду на одном канале. Настройка АЦП, сканирования каналов и времени выборки — в статье «АЦП STM32» и в калькуляторе АЦП STM32.
Частые вопросы
Можно ли одновременно мерить один и тот же канал двумя АЦП?
В одновременных режимах — нет: RM0008 прямо запрещает преобразовывать один и тот же канал на двух АЦП, потому что их выборки перекрывались бы. Один канал двумя АЦП обрабатывают только в чередующемся режиме, где выборки разнесены во времени, и время выборки должно быть короче сдвига.
Насколько чередующийся режим повышает частоту выборки?
В идеале вдвое при двух АЦП и втрое при трёх: каждый АЦП работает со своей скоростью, а их выборки идут со сдвигом. У STM32F1 в быстром режиме ADC1 стартует через 7 тактов после ADC2 (RM0008, разд. 11.9.3). Наш вывод: на практике мешает разница смещения и усиления двух АЦП — на спектре появляется паразитная составляющая на половине частоты выборки.
Как забрать результаты двух АЦП через DMA?
В одновременном регулярном режиме STM32F1 после каждого преобразования формирует 32-битный запрос DMA: в ADC1_DR в младшем полуслове результат ADC1, в старшем — ADC2 (RM0008, разд. 11.9.2). Поэтому канал DMA настраивают на передачу слов, а не полуслов. У STM32F4 те же данные лежат в общем регистре ADC_CDR.
Источники
- STMicroelectronics. RM0008 Reference manual STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21) — разд. 11.9: в устройствах с двумя АЦП и более ведущий ADC1 запускает ведомый ADC2 поочерёдно или одновременно, режим задают биты DUALMOD в ADC1_CR1; разд. 11.12.2: поле DUALMOD[3:0] — биты 19:16 ADC1_CR1, значения 0000 (независимый режим) … 1001 (только поочерёдный запуск), в ADC2 и ADC3 биты зарезервированы; внешний триггер настраивают только у ведущего, у ведомого — программный запуск; шесть режимов: одновременный инжектированный, одновременный регулярный, быстрый и медленный чередующийся, поочерёдный запуск, независимый, плюс три комбинации; чтобы читать результат ведомого в регистре ведущего, бит DMA должен быть установлен; 11.9.1–11.9.2: не преобразовывать один и тот же канал на двух АЦП, время выборки задавать одинаковым; 32-битный ADC1_DR — ADC2 в старшем полуслове, ADC1 в младшем; 11.9.3: быстрое чередование — ADC2 стартует сразу, ADC1 через 7 тактов АЦП, время выборки меньше 7 тактов; 11.9.4: медленное — сдвиг 14 тактов, новый старт ADC2 через 28 тактов, выборка меньше 14 тактов; разд. 11.6: Tconv = время выборки + 12,5 такта, при ADCCLK = 14 МГц и 1,5 такта — 14 тактов = 1 мкс
- STMicroelectronics. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437, STM32F429/439 (Rev 21) — разд. 13.9: двойной (два АЦП) и тройной (три АЦП) режимы, ведущий ADC1 запускает ADC2 и ADC3, режим задают биты MULTI[4:0] в ADC_CCR; четыре режима: одновременный инжектированный, одновременный регулярный, чередующийся, поочерёдный запуск, плюс две комбинации; результат в общем регистре ADC_CDR, флаги в ADC_CSR; 13.9.3: в чередующемся режиме минимальный сдвиг задают биты DELAY в ADC_CCR, одновременно выборку может делать только один АЦП, поэтому сдвиг не меньше времени выборки + 2 тактов (пример: DELAY = 5, выборка 15 тактов — 17 тактов между преобразованиями); при прерванной последовательности секвенсор сбрасывают переводом в независимый режим
Нашли ошибку?
Смотрите также
- АЦП STM32Группы каналов, режимы, триггеры, DMA, калибровка, датчик температуры, точность
- АЦП STM32: время и выборкаВремя преобразования, частота выборок, RAIN и самая короткая выборка
- Инжектированные каналы АЦППриоритетная группа до 4 каналов, прерывающая обычное сканирование
- Режим сканирования АЦПРежим АЦП STM32, в котором он сам обходит заданный список каналов
- DMAПрямой доступ к памяти без участия ядра