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

Двойной режим АЦП 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.

Источники

  1. 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 мкс
  2. 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 тактов между преобразованиями); при прерванной последовательности секвенсор сбрасывают переводом в независимый режим

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