АЦП в AVR Микроконтроллерх ATmega

Аналого-цифровой преобразователь

Микроконтроллер общается с внешним миром посредством портов ввода/вывода. В общем случае он может «воспринимать» только цифровые сигналы -логический ноль или логическую единицу. Например, для микроконтроллера ATmega32 при напряжении питания 5 В лог. «0» – это напряжение от 0 до ≈1,5 В, а логическая единица – от ≈1,9 до 5 В. Довольно часто возникает потребность измерять напряжения, которые могут принимать любое значение в диапазоне от 0 до напряжения питания. Для этих целей в составе микроконтроллеров AVR есть аналого-цифровой преобразователь.

В ATmega32 мы можем подключить АЦП к любой ножке порта А (PORTA)

Для работы со встроенным АЦП используются следующие специальные регистры:
ADCSRA Регистр А управления и состояния
ADMUX Регистр управления мультиплексором
SFIOR Регистр специальных функций
ADCH Старший байт результата преобразования
ADCL Младший байт результата преобразования

ИОН для АЦП (UИОН) определяет диапазон преобразования АЦП. Если уровень однополярного сигнала свыше UИОН, то результатом преобразования будет 0x3FF. В качестве UИОН могут выступать AVCC, внутренний ИОН 2,56 В или внешний ИОН, подключенный к выводу AREF. AVCC подключается к АЦП через пассивный ключ. Внутреннее опорное напряжение 2,56 В генерируется внутренним эталонным источником UЭТ, буферизованного внутренним усилителем. В любом случае внешний вывод AREF связан непосредственно с АЦП и, поэтому, можно снизить влияние шумов на опорный источник за счет подключения конденсатора между выводом AREF и общим. Напряжение UИОН также может быть измерено на выводе AREF высокоомным вольтметром. Обратите внимание, что UИОН является высокоомным источником и, поэтому, внешне к нему может быть подключена только емкостная нагрузка.


АЦП генерирует 10-битный результат, который помещается в пару регистров данных АЦП ADCH и ADCL. По умолчанию результат преобразования размещается в младших 10-ти разрядах 16-битного слова (выравнивание справа), но может быть опционально размещен в старших 10-ти разрядах (выравнивание слева) путем установки бита ADLAR в регистре ADMUX. Как только выполнено чтение ADCL блокируется доступ к регистрам данных со стороны АЦП. Это означает, что если считан ADCL и преобразование завершается перед чтением регистра ADCH, то ни один из регистров не может измениться и результат преобразования теряется. После чтения ADCH доступ к регистрам ADCH и ADCL со стороны АЦП снова разрешается.

Канал аналогового ввода и каскад дифференциального усиления выбираются путем записи бит MUX в регистр ADMUX. В качестве однополярного аналогового входа АЦП может быть выбран один из входов ADA0…ADA7, а также GND и выход фиксированного источника опорного напряжения 1,22 В. В режиме дифференциального ввода предусмотрена возможность выбора инвертирующих и неинвертирующих входов к дифференциальному усилителю. Если выбран дифференциальный режим аналогового ввода, то дифференциальный усилитель будет усиливать разность напряжений между выбранной парой входов на заданный коэффициент усиления. Усиленное таким образом значение поступает на аналоговый вход АЦП. Если выбирается однополярный режим аналогового ввода, то каскад усиления пропускается.


Модуль АЦП содержит предделитель, работающий от тактовой частоты МК. Коэффициент деления варьируется ступенчато по 2N от 2 до 128. Коэффициент деления устанавливается с помощью бит ADPS в регистре ADCSRA. Предделитель начинает счет с момента включения АЦП установкой бита ADEN в регистре ADCSRA. Предделитель работает пока бит ADEN = 1 и сброшен, когда ADEN=0. Если требуется максимальная разрешающая способность (10разрядов), то частота на входе схемы последовательного приближения должна быть в диапазоне 50…200 кГц. Если достаточно разрешение менее 10 разрядов, но требуется более высокая частота преобразования, то частота на входе АЦП может быть установлена свыше 200 кГц. Нормальное преобразование требует 13 тактов синхронизации АЦП. Первое преобразование после включения АЦП (установка ADEN в ADCSRA) требует 25 тактов синхронизации АЦП за счет необходимости инициализации аналоговой схемы. По завершении преобразования результат помещается в регистры данных АЦП и устанавливается флаг ADIF. В режиме одиночного преобразования одновременно сбрасывается бит ADSC. Программно бит ADSC может быть снова установлен и новое преобразование будет инициировано первым нарастающим фронтом тактового сигнала АЦП. В режиме автоматического перезапуска новое преобразование начинается сразу по завершении предыдущего, при этом ADSC остается в состоянии лог. «1».

БИТ ADSC :
Одиночное преобразование запускается путем записи лог. «1» в бит запуска преобразования АЦП ADSC. Данный бит остается в высоком состоянии в процессе преобразования и сбрасывается по завершении преобразования. Если в процессе преобразования переключается канал аналогового ввода, то АЦП автоматически завершит текущее преобразование прежде, чем переключит канал. В режиме автоматического перезапуска АЦП непрерывно оцифровывает аналоговый сигнал и обновляет регистр данных АЦП. Данный режим задается путем записи лог. «1» в бит ADFR регистра ADCSRA. Первое преобразование инициируется путем записи лог. «1» в бит ADSC регистра ADCSRA. В данном режиме АЦП выполняет последовательные преобразования, независимо от того сбрасывается флаг прерывания АЦП ADIF или нет.

БИТ ADATE :
Если в данный бит записать лог. 1, то ADC перейдет в режим автоматического перезапуска. В этом режиме ADC автоматически запускает преобразование по положительному фронту выбранного запускающего сигнала. Выбор источника запуска происходит битами ADTS регистра SFIOR.

БИТ ADIF :
Данный флаг устанавливается после завершения преобразования ADC и обновления регистров выходных данных (ADCH:ADCL). Если установлены биты ADIE и I (регистр SREG), то происходит вызов обработчика прерывания по завершении преобразования. Флаг ADIF сбрасывается аппаратно при переходе на соответствующий вектор прерывания. Альтернативно флаг ADIF сбрасывается путем записи лог. 1 в него. Обратите внимание, что при выполнении команды “чтение-модификация-запись” с регистром ADCSRA ожидаемое прерывание может быть запрещено. Сказанное также действительно, если используются инструкции SBI и CBI.

БИТ ADIE :
Когда этот бит установлен в лог. 1, и установлен бит I в регистре SREG, разрешается прерывание по завершении преобразования ADC.

Если ADATE в регистре ADCSRA записан в лог. 1, значения бит ADTS определяют, какой будет использоваться источник для запуска преобразования. Если ADATE в регистре ADCSRA записан в лог. 0, значения бит ADTS никакого значения не имеют. Преобразование будет запускаться по положительному фронту (нарастание сигнала) выбранного сигнала. Внимание – событие переключения от очищенного источника запуска к источнику запуска, который установлен, будет генерировать положительный фронт сигнала запуска, и если бит ADEN в регистре ADCSRA установлен, то запустится преобразование. Переключение в режим постоянного преобразования (Free Running mode, ADTS[2:0]=0) не генерирует событие запуска, даже если установлен флаг прерывания ADC (ADC Interrupt Flag).

Добавить комментарий