Скорость оцифровки, такти рование



Скорость работы ADC зависит от двух факторов — частоты тактирования и количества расходуемых на оцифровку тактов.

Тактируются модули ADC от шины APB2 через собственный предделительпред делитель, который может принимать значения 2, 4, 6, 8. Для того, чтобы включить тактирование модуля ADCx — нужно установить бит ADCx в регистре RCC_APB2ENR (функция RCC_APB2PeriphClockCmd библиотеки StdPeriph). Значения предделителяпред делителя задаются битами ADCPRE[1:0] регистра RCC_CFGR (функция RCC_ADCCLKConfig библиотеки StdPeriph). Частота тактирования модулей ADC не должна превышать 14 МГц. Такая частота получается, например, при частоте системной шины 56 МГц, делителе для APB2 = 1 и делителе для ADC = 4. При частоте системной шины 72 МГц максимально возможная частота ADC получается 12 МГц (с делителем на 6).

Количество расходуемых на оцифровку одного канала тактов складывается из количества тактов расходуемых на выборку (сэмплирование) и количества тактов, расходуемых на выполнение преобразования. Время преобразования фиксировано и составляет 12,5 тактов, а вот время выборки может быть запрограммировано отдельно для каждого канала на несколько фиксированных значений от 1,5 до 239,5 тактов (задаётся битами SMPx[2:0] регистров ADC_SMPRx). Если время выборки установлено в 1,5 такта, то общее время оцифровки канала получается равным 1,5+12,5 = 14 тактов, что при частоте ADC равной 14 МГц составляет по времени как раз минимально возможную 1 мкс.

Физические линии в вода, группы каналов

Физически в stm32 доступно до 18 каналов (линий ввода), которые могут быть подключены к модулям АЦП, — до 16 внешних (соединённых с выводами микроконтроллера) и два внутренних — для температуры и опорного напряжения. Для того, чтобы вывод микроконтроллера мог использоваться в качестве линии ввода для АЦП — нужно в регистрах настройки GPIO сконфигурировать его в режиме аналогового входа (функция GPIO_Init библиотеки StdPeriph, параметр GPIO_Mode). В таблице справа указано, какие выводы можно использовать в качестве входов для АЦП (данные для средней линейки микроконтроллеров stm32, к которым относится, например, популярный чип STM32F103C8T6).

Из 18 физически доступных линий ввода можно для каждого модуля ADC составить две группы каналов (два списка), определяющие с какими линиями ввода и в каком порядке этот модуль будет работать. В обе эти группы могут включаться одни и те же физические линии ввода, более того, один и тот же ввод может включаться в одну и ту же группу несколько раз. Каналы первой группы называются обычными или регулярными, а каналы второй группы — инжектированными. Обычных каналов может быть до 16 штук, а инжектированных — до 4-х.

Главное отличие между группами обычных и инжектированных каналов заключается в том, что для обычной группы существует только один регистр данных, в который помещается результат оцифровки каждого включенного в эту группу канала. Для инжектированной группы под каждый канал выделяется свой регистр данных. Таким образом, результаты оцифровки каналов обычной группы мы должны сразу забирать, пока не оцифровался следующий канал из этой же группы и не затёр предыдущие данные (благо это можно делать автоматически при помощи DMA). Что касается группы инжектированных каналов, то тут мы можем дождаться окончания оцифровки всех каналов и уже потом разбираться с полученными результатами.

Выбор названий групп видимо связан с тем, что если при выполнении опроса группы обычных каналов сгенерировать условие запуска опроса группы инжектированных каналов, то опрос группы обычных каналов прервётся, выполнится опрос группы инжектированных каналов и затем продолжится опрос группы обычных каналов. То есть опрос группы инжектированных каналов как бы встроится (инжектируется) внутрь опроса группы обычных каналов.

Список каналов обычной группы задаётся в регистрах ADC_SQRx (функция ADC_RegularChannelConfig библиотеки StdPeriph), а размер группы — битами L[3:0] регистра ADC_SQR1 (функция ADC_Init библиотеки StdPeriph, параметр ADC_NbrOfChannel).

Список каналов инжектированной группы задаётся в регистре ADC_JSQR (функция ADC_InjectedChannelConfig библиотеки StdPeriph). Там же битами JL[1:0] задаётся и размер группы инжектированных каналов (функция ADC_InjectedSequencerLengthConfig библиотеки StdPeriph).


Дата добавления: 2020-01-07; просмотров: 217; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!