ADC (Analog-to-digital converter)- аналого-цифровой преобразователь микроконтроллеров STM32F10x


Введение


12-разрядный ADC представляет собой аналого-цифровой преобразователь последовательного приближения. Он имеет до 18 мультиплексированных каналов, что позволяет измерять сигналы от шестнадцати внешних и двух внутренних источников. Аналого-цифровое преобразование различных каналов может выполняться в одиночном, непрерывном,сканирующем или прерывистом режиме. Результат работы АЦП сохраняется в 16-разрядном регистре данных, выровненном по левому или по правому краю.

Функция аналогового сторожевого таймера (analog watchdog) позволяет приложению определять, выходит ли входное напряжение за пределы заданных пользователем пороговых значений (минимальное и максимальное входное напряжение).

Тактовая частота на входе АЦП генерируется из тактовой частоты PCLK2 (шина APB2 с максимальной частотой 72 МГц), делённой на значение предделителя, и не должна превышать 14 МГц.


Основные характеристики

 -  Разрядность преобразования (дискретизация) 12 бит.

 -  Генерация прерываний по событиям: окончания преобразования (End of Conversion), окончания преобразования в инжектированном канале(End of Injected conversion), по срабатыванию аналогового сторожевого таймера (Analog watchdog).

 -  Режимы однократного и циклического преобразования.

 -  Режим автоматического последовательного сканирования нескольких каналов.

 -  Самокалибровка

 -  Полученный 12-битный результат может быть выровнен по правому или левому краю 16-битного регистра.

 -  Программируемое время выборки для разных каналов.

 -  Внешнее триггерное управление для регулярного и инжекционного преобразования.

 -  Прерывистый режим работы (Discontinuous mode).

 -  Режим сдвоенного преобразования (для устройств с 2-мя АЦП).

 -  Минимальное время преобразования в районе 1 мкс.

 -  Генерация запроса DMA при регулярном (обычном) преобразовании.


Краткое описание работы АЦП


Включение-выключение АЦП

Для включения АЦП необходимо разрешить его тактирование установкой соответствующего бита в регистре RCC_APB2ENR, и подать питание, установив бит ADON в регистре ADC_CR2.

Когда бит ADON устанавливается в первый раз, АЦП выводится из режима отключения питания. Преобразование начинается, когда бит ADON устанавливается программным обеспечением во второй раз через время tSTAB после включения АЦП.

Cбросив бит ADON преобразование останавливается и АЦП переводится в режим отключения питания с очень низким энергопотреблением (единицы мкА).


Включение-выключение АЦП

Тактовая частота АЦП (ADCCLK) синхронизирована с частотой шины APB2 (PCLK2) и формируется с помощью предварительного делителя


Выбор каналов АЦП

16 мультиплексированных каналов АЦП можно разделить на две группы преобразования: регулярную и инжекционную. Группа состоит из последовательности преобразований, которые могут выполняться на любом канале и в любом порядке.

Регулярная группа может содержать до 16 каналов. Каналы и последовательность преобразования для регулярной группы должны быть установлены в регистрах ADC_SQRx. Общее количество преобразований в регулярной группе должно быть записано в L битах[3:0] в регистре ADC_SQR1.

Инжекционная группа может содержать до 4 каналов. Каналы и последовательность преобразования для инжекционной группы должны быть установлены в регистрах ADC_JSQR. Общее количество преобразований в инжекционной группе должно быть записано в L битах[3:0] в регистре ADC_SQR1.

Если регистры ADC_SQRx или ADC_JSQR изменяются во время работы АЦП, текущее преобразование сбрасывается и АЦП начинает новое преобразование для новой выбранной группы.


Встроенный датчик температуры АЦП

В АЦП есть два внутренних канала, которые используются для служебных целей.

Датчик температуры подключен к каналу ADCx_IN16, а внутреннее опорное напряжение VREFINT подключено к каналу ADCx_IN17. Эти два внутренних канала могут быть выбраны и преобразованы как обычные внешние регулярные или инжекционные каналы. Датчик температуры и функция внутреннего опорного напряжения VREFINT доступны только на главном АЦП - ADC1.


Режим одиночного преобразования ( single conversion)

Режим одиночного преобразования выбирается битом CONT=0 в регистре ADC_CR2. Режим запускается установкой бита ADON (только для регулярного канала) в регистре ADC_CR2 или внешним триггером (для регулярного или инжекционного канала). АЦП выполняет одно преобразование и останавливается.

После завершения преобразования для регулярного канала: преобразованные данные сохраняются в регистре ADC_DR с заранее настроенным выравниванием; устанавливается флаг EOC (End Of Conversion) в регистре статуса ADC_SR; генерируется прерывание, если установлен бит EOCIE в регистре ADC_CR1.

После завершения преобразования для инжекционного канала: преобразованные данные сохраняются в регистре ADC_DRJ1 с заранее настроенным выравниванием; устанавливается флаг JEOC (End Of Conversion Injected) в регистре статуса ADC_SR; генерируется прерывание, если установлен бит JEOCIE в регистре ADC_CR1.

Работа АЦП прекращается.


Режим циклического (непрерывного) преобразования (continuous conversion)

Режим циклического преобразования выбирается битом CONT=1 в регистре ADC_CR2. Режим запускается установкой бита ADON в регистре ADC_CR2. АЦП запускает новое преобразование как только завершает предыдущее.

После каждого завершённого преобразования для регулярного канала:

 -  преобразованные данные сохраняются в регистре ADC_DR с заранее настроенным выравниванием;

 -  устанавливается флаг EOC (End Of Conversion) в регистре статуса ADC_SR;

 -  генерируется прерывание, если установлен бит EOCIE в регистре ADC_CR1.

После каждого завершённого преобразования для инжекционного канала:

 -  преобразованные данные сохраняются в регистре ADC_DRJ1 с заранее настроенным выравниванием;

 -  устанавливается флаг JEOC (End Of Conversion Injected) в регистре статуса ADC_SR;

 -  генерируется прерывание, если установлен бит JEOCIE в регистре ADC_CR1.


Аналоговый сторожевой таймер (AWD, Analog watchdog)

Аналоговый сторожевой таймер срабатывает, если преобразованное аналоговое напряжение ниже низкого или выше высокого установленного порогового значения. При этом устанавливается бит AWD в регистре статуса ADC_SR. При установленном бите AWDIE=1 в регистре ADC_CR1 генерируется прерывание.

Пороговые значения аналогового сторожевого таймера запрограммированы в 12-ти младших разрядах 16-разрядных регистров ADC_HTR и ADC_LTR. Пороговое значение не зависит от выравнивания, выбранного битом выравнивания ALIGN в регистре ADC_CR2. Сравнение выполняется перед выравниванием.

Аналоговый сторожевой таймер можно включить на одном или нескольких каналах, настроив регистр ADC_CR1, как показано в таблице:


Режим сканирования (Scan mode)

Этот режим используется для сканирования группы аналоговых каналов.

Режим сканирования можно выбрать, установив бит SCAN в регистре ADC_CR1. Как только этот бит установлен, АЦП сканирует все каналы, выбранные в регистрах ADC_SQRx (для регулярных каналов) или в регистре ADC_JSQR (для инжекционных каналов).

Для каждого канала группы выполняется однократное преобразование. После каждого завершения преобразования автоматически преобразуется следующий канал группы. Если установлен бит CONT, преобразование не останавливается на последнем выбранном групповом канале, а продолжается снова с первого выбранного группового канала.

При использовании режима сканирования необходимо установить бит DMA в регистре ADC_CR2 и использовать контроллер прямого доступа к памяти для передачи преобразованных данных регулярных групповых каналов в SRAM после каждого обновления регистра ADC_DR. Преобразованные данные инжекционного канала всегда сохраняются в регистрах ADC_JDRx.


Управление инжекционными каналами