Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F4xx не очень ясно АЦП
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
msn
Прошу помочь разобраться.
Начинаю разбираться с STM32F407VG (до этого долго работал с Silabs 8051 и AVR).
Задача следующая (8-ми канальный самописец):
- есть 8 каналов, одновременно может быть включено 1 или 2 или … все 8
- необходимо считывать данные непрерывно с каждого включенного канала с частотой от 1 КГц до Max возможной (например 7.2 МГц)
- данные писать в ОЗУ и по мере возможностей передавать в ПК по Ethernet

Не могу понять что означает в datasheet “Additional functions”: ADC123_INn и ADC12_INn.
Например PA0 ADC123_IN0 это означает что вывод PA0 можно использовать как канал 0 для АЦП1, АЦП2 и АЦП3 или только для одного из АЦП. Или если используется независимый режим то ADC123_IN0 можно использовать только для одного АЦП, а если используется мульти режим то ADC123_IN0 можно использовать для всех АЦП?

В datasheet написано: However, an ADC cannot start a conversion if the complementary ADC is still sampling its input (only one ADC can sample the input signal at a given time), т.е. только УВХ одного АЦП одновременно может быть подключено к PA0?

Как я понял PA0 просто конфигурируется как аналоговый вход без подтяжек, после чего его номер прописываеться в ADC_SQR. PA0 как то привязывается к определенному АЦП?
Если прописать PA0 сразу в ADC1_SQR, ADC2_SQR и ADC3_SQR и запустить все 3 АЦП в независимом режиме, но что бы их моменты УВХ были разнесены по времени, так правильно?

Каналы ADC12_INn не могу использоваться для АПЦ3?

И еще не совсем ясно что такое external trigger?
Есть биты “Configuring the trigger polarity”
Trigger detection disabled - это означает что АЦП можно запустить только программно SWSTART?
Detection rising / falling edges - это только для trigger запуска от EXTI или еще как-то от таймеров по обоим фронтам?

Спасибо!

P.S.
Как-то странно STM аналоговый каналы сделала, если включаешь Ethernet или USB HS половины аналоговых каналов нет.
MBR
Я работал с F1/F2, но суть общая, скорее всего, похожа.

Для вашей задачи вам достаточно использовать только ADC1.

Пины жестко привязаны к каналам ацп - PA0 = channel 1 и т.д. Сам PA0 использовать не рекомендую - в ерратах на какие-то процессоры он проходил, как зашумленный. Исправили ли баг - фиг знает.

Дальше есть 2 решения задачи - быстрое и правильное.

Правильное решение.

Настраиваете DMA, настраиваете последовательность из 8 каналов, настраиваете время сэмплирования каждого канала, запускаете. Данные автоматически складываются в память.

Быстрое решение.

Настраиваете только один канал и сэмплирование этого канала. По прерыванию завершения семплирования (в совсем быстром случае можно опрашивать поллингом) складываете данные из регистра в память. И так по всем 8 каналам.

А еще скачайте примеры от stm - там все реализовано.
msn
Спасибо за совет.

Цитата(MBR @ Jun 9 2012, 08:48) *
Для вашей задачи вам достаточно использовать только ADC1.

Но тогда максимальная частота дискретизации 2.4 МГц.

Цитата(MBR @ Jun 9 2012, 08:48) *
Пины жестко привязаны к каналам ацп - PA0 = channel 1 и т.д.

Тут не совсем ясно.
У каждого АЦП есть свой аналоговый мультиплексор.
Получается что на Mux1 и Mux2 заведены одни 16 каналов, а на Mux3 - 8 каналов которые есть на Mux1/2 и 8 каналов с порта PF?
Код
PF3  ADC3_IN9
PF4  ADC3_IN14
PF5  ADC3_IN15
PF6  ADC3_IN4
PF7  ADC3_IN5
PF8  ADC3_IN6
PF9  ADC3_IN7
PF10 ADC3_IN8
PC0  ADC123_IN10
PC1  ADC123_IN11
PC2  ADC123_IN12
PC3  ADC123_IN13
PA0  ADC123_IN0
PA1  ADC123_IN1
PA2  ADC123_IN2
PA3  ADC123_IN3
PA4  ADC12_IN4
PA5  ADC12_IN5
PA6  ADC12_IN6
PA7  ADC12_IN7
PB0  ADC12_IN8
PB1  ADC12_IN9
PC4  ADC12_IN14
PC5  ADC12_IN15



Цитата(MBR @ Jun 9 2012, 08:48) *
Сам PA0 использовать не рекомендую - в ерратах на какие-то процессоры он проходил, как зашумленный. Исправили ли баг - фиг знает.

На F4xx вроде ни чего такого не написано.

Цитата(MBR @ Jun 9 2012, 08:48) *
Настраиваете DMA, настраиваете последовательность из 8 каналов, настраиваете время сэмплирования каждого канала, запускаете. Данные автоматически складываются в память.

Спасибо, как делать в общем я знаю.
Не понятные некоторые нюансы, о которых спрашивал выше.

Цитата(MBR @ Jun 9 2012, 08:48) *
А еще скачайте примеры от stm - там все реализовано.

Примеры скачал и смотрел, не на все вопросы нашел ответы.
MK2
Цитата(msn @ Jun 9 2012, 02:22) *
Каналы ADC12_INn не могу использоваться для АПЦ3?

нет не можете
Цитата(msn @ Jun 9 2012, 02:22) *
И еще не совсем ясно что такое ?
Есть биты “Configuring the trigger polarity”
Trigger detection disabled - это означает что АЦП можно запустить только программно SWSTART?
Detection rising / falling edges - это только для trigger запуска от EXTI или еще как-то от таймеров по обоим фронтам?

external trigger внешний запуск от фронта на ножке
так же еще ацп может запускать преобразование от таймеров
msn
Цитата(MK2 @ Jun 9 2012, 15:08) *
external trigger внешний запуск от фронта на ножке
так же еще ацп может запускать преобразование от таймеров

Спасибо.
Для того что бы например запускать АЦП от T1 нужно установить:
ADC_CR2->EXTEN = 00b (Trigger detection disabled)
ADC_CR2->EXTSEL = 0000b (Timer 1 CC1 event)
Так?
MK2
по мимо АЦП надо еще соответственно настроить и таймер
в будний день приведу исходник
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.