Ацп в групповом режиме

Работаем с STM32 и многоканальным АЦП используя DMA

Когда мы хотим сделать одно преобразование одного канала АЦП — мы ждем результата АЦП в цикле, который не является эффективным способом использования ресурсов процессора. Лучше запустить преобразование и дождаться полного прерывания преобразования. Таким образом, процессор может выполнять другие задачи, а не ждать завершения преобразования АЦП. На этот раз мы рассмотрим другой пример, в котором мы настроим более одного канала и прочитаем значения АЦП, используя процедуру обслуживания прерываний.

Как работает многоканальное преобразование АЦП?

Если нам нужно преобразовать несколько каналов непрерывно, нам нужно настроить регистры последовательности (ADC_SQRx). Существует три регистра последовательности: ADC_SQR1, ADC_SQR2 и ADC_SQR3, где мы можем установить максимум 16 каналов в любом порядке. Последовательность преобразования начинается с настроек SQ1 [4: 0] в регистре ADC_SQR3. Биты [4: 0] содержат номер канала АЦП.

Все 16 последовательных каналов могут быть установлены одинаково через все регистры SQR. Затем в регистре ADC_SQR1 есть четыре бита, помеченные как L [3: 0], где вы можете установить число повторений чтения последовательности.

Еще одна вещь, о которой нам нужно позаботиться — установить время выборки для каждого канала. Как мы знаем, каждый канал в последовательности может быть установлен на разное время преобразования. Время выборки для каждого канала может быть установлено в двух регистрах: ADC_SMPR1 и ADC_AMPR2. Есть три бита для каждого канала в последовательности.

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

Настройка многоканального преобразования АЦП с записью DMA

Давайте напишем пример, где мы будем читать первые 8 каналов АЦП четыре раза, используя режим сканирования. Затем мы вычисляем среднее значение каждого канала и затем выводим результаты на экран терминала с помощью UART.

Мы запишем значения АЦП в память, используя канал DMA. Как только все данные будут сохранены в памяти, будет сгенерировано полное прерывание передачи DMA для запуска усреднения и вывода. В техническом описании STM32F100x мы находим, что выводам АЦП назначены альтернативные функции следующим образом:

  • ADC1_IN0 – PA0
  • ADC1_IN1 – PA1
  • ADC1_IN2 – PA2
  • ADC1_IN3 – PA3
  • ADC1_IN4 – PA4
  • ADC1_IN5 – PA5
  • ADC1_IN6 – PA6
  • ADC1_IN7 – PA7
  • ADC1_IN8 – PB0
  • ADC1_IN9 – PB1
  • ADC1_IN10 – PC0
  • ADC1_IN11 – PC1
  • ADC1_IN12 – PC2
  • ADC1_IN13 – PC3
  • ADC1_IN14 – PC4
  • ADC1_IN15 – PC5

Для первых восьми каналов нам необходимо установить контакты A0 — A7 в качестве аналоговых входов. Затем мы можем настроить режим преобразования АЦП. Кроме того, нам нужно настроить режим преобразования сканирования, чтобы иметь возможность проходить по всем каналам, выбранным в регистрах ADC1_SQRx. В периферийной библиотеке это выглядит так:

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

Затем мы указываем количество каналов для преобразования в режиме сканирования:

Следующая вещь — указать, какие каналы и в каком порядке нам нужно конвертировать. Для этого мы настраиваем каждый канал индивидуально с помощью команд:

Я выбрал все восемь каналов подряд от 0 до 7. Но вы можете изменить числа, как вам нравится. Остальное — настроить DMA, где он копирует значения АЦП в память при каждом событии EOC. После того, как DMA копирует заранее определенное количество значений, оно генерирует прерывание. Тогда мы можем манипулировать данными так, как нам нравится. Как и в нашем примере, мы усредняем несколько экземпляров.

Это результат на экране терминала.

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

Рабочий код на C многоканального АЦП

Вот полный основной исходный код, если вы хотите проанализировать или использовать фрагменты для своих целей:

Не пропустите обновления! Подписывайтесь на нашу страницу в Instagram.
Так же у нас есть Telegram канал.

AVR Урок 22. Изучаем АЦП. часть 1

Урок 22

Изучаем АЦП

Сегодня мы начнем изучать очень интересную технологию, а для микроконтроллера – периферию – это аналго-цифровой преобразователь или как его называют АЦП. В английской аббревиатуре, гораздо чаще встречающейся в технической документации – ADC (Analog-to-Digital Converter). Это такая штука, которая преобразует величину электрического сигнала в цифровой код. Затем данный код мы уже используем для обработки или для отображения тем или иным образом данной электрической величины. Это очень распространённая периферия или технология. АЦП активно используется в звукозаписи, измерительной технике, видеозаписи и во многих других случаях. Поэтому нас обойти данную вещь стороной никак не получится, тем более АЦП поддерживается аппаратно в контроллерах AVR.

В контроллере Atmega8 АЦП имеет следующие характеристики

  • Разрешение 10 бит,
  • Время преобразования одного показания от 13 до 250 микросекунд в зависимости от битности измерения, а также от тактовой частоты генератора, тактирующего контроллер,
  • Поддержка запуска по прерываниям,

Есть ещё масса различных характеристик, с которыми мы, возможно, познакомимся в дальнейшем.

Как вообще работает цифровое преобразование?

Берётся опорное напряжение и сравнивается с измеряемым. Соответственно, опорное напряжение всегда должно быть больше измеряемого. Если это не так, то нужно будет применять делители напряжения.

Изобразим схематично процесс измерения

Отрезок – это диапазон измерений. Он находится между нулём и опорным напряжением. А стрелка – это измеряемое напряжение.

Данный отрезок делится пополам, и АЦП оценивает, в какой половине находится приложенное напряжение

Если оно находится в стороне нуля, то в самый старший бит результата записывается 0, а если в стороне максимального напряжения, то единица. У нас будет единица. Затем та половина отрезка, на которой находится измеряемое напряжение делится ещё пополам, и АЦП опять измеряет, в какой половинке уже данного отрезка у нас находится измеряемое напряжение

Оценка идёт по тому же принципу – в какой стороне отрезок. В нашем случае будет 0. И этот ноль записывается в следующий более младший бит

Затем та четвертинка опять делится пополам и АЦП опять оценивает,где находится отрезок

И АЦП так и продолжает такой процесс до тех пор, пока не кончатся ячейки для битов. То есть если мы используем 10-битный режим, то. соответственно, и будет 10 подобных измерений и заполнятся 10 бит величины. Чем больше бит, тем точнее результат, но уже потребуется на это больше времени и более серьёзный и точный АЦП. Имея данный результат, нам несложно будет посчитать величину измеренного напряжения. Мы знаем. что если у нас АЦП 10-битный, то данный результат у нас лежит в промежутке от 0 до 1024, получаемтся всего у нас 1023 отрезка. И мы затем наш результат делим на 1023 и умножаем на величину опорного напряжения.

Посмотрим блок-схему АЦП в контроллере Atmega8

Мы видим, что у нас есть мультиплексор, имеющий 8 каналов, вход для опрного напряжения AREF. Также существует 8-разрядная шина данных, значения с которых записываются в определённый регистр. Есть регистр данных, регистр управления и состояния, а также регистр управления мультиплексором.

Мы будем использовать самый первый вход ADC0 и в качестве источника измеряемого напряжения будем использовать центральную ножку переменного резистора, подлключенного к контактам питания

Работать будем сначала в протеусе. Также мы видим, что у нас подключен дисплей самым обычным образом.

Также мы всё подключим и на живом контроллере

Существует несколько вариантов опорных напряжений, которые мы можем использовать.в нашем АЦП. Мы будем использовать внутреннее опорное напряжение на 2,56 вольт, оно проще, не нужно ничего подключать. Возможно, при таком варианте не очень сильная точность, но перед нами не стоит задача создать точный измерительный прибор. У нас есть задача – изучить возможность использования АЦП в контроллере AVR.

А вот и таблица вариантов опорных напряжений для АЦП

Перечислим данные варианты сверху вних по таблице. 1 вариант – это внутреннее опорное напряжение, равное напряжению питания, 2 вариант – опорное напряжение подаётся на вход AREF извне, 3 вариант – внутреннее 2,56 вольт с использованием внешнего конденсатора, которы у нас уже припаян к отладочной плате к определённым ножкам контроллера.

Также в АЦП есть делитель частоты на величину от 2 до 128. Делитель этот для того, чтобы мы добивались частоты работы АЦП не больше 200 кГц, иначе точность измерений будет очень малой и мы просто растеряем самые младшие биты. Если у нас возникнет требование имено к скорости измерений и нам уже точность будет на так важна, то мы сможем использовать и более высокие частоты измерений.

Теперь немного поближе познакомимся с регистрами АЦП.

Регистр ADCSRA – управляющий и статусный регистр

ADEN – данный бит включает АЦП.

ADSC – при установке в 1 заставляет АЦП начинать преобразование.

ADFR – используется в режиме с использованием прерываний. При установке в 1 включает круговой режим, при котором измерения автоматически следуют одно за другим.

Читайте также  Ветрогенератор с вертикальным ротором

ADIF – бит, также используемый только в режиме прерываний. Это флаг прерываний, который устанавливается в определённых условиях.

ADIE – бит, включающий режим прерываний.

ADPS2-ADPS0 – биты, от комбинации которых зависит величина делителя

Регистр ADMUX – это регистр для управления каналами мультиплексора АЦП

Но, помимо непосредственно битов управления каналами у данного регистра есть ещё некоторые управляющие биты

REFS1-REFS0 – биты, включающие определённый режим использования опорного напряжения. Таблица была размещена на данной странице выше.

ADLAR – это бит организации расположения измеренных 10 битов в двух байтах регистровой пары данных. Поближе мы с этим расположением познакомимся чуть позже.

MUX3-MUX0 – биты, включающие определённый канал мультиплексора

Отсюда видно, что мы можем пользоваться несколькими каналами сразу только по очереди, попеременно включая различные комбинации данных битов. Также внизу есть две комбинации для калибровки нашего АЦП.

Ну и, наконец, регистровая пара ADCH и ADCL, состоящая из старшего и младшего байта в которую и заносится измеряемый результат. А как именно он туда укладывается, этот результат, зависит от состояния бита ADLAR, рассмотренного выше в регистре ADMUX

То есть, если бит ADLAR не выставлен, то младшие 8 бит результата находятся в младшем байте регистровой пары, а 2 старших бита – в младших битах старшего байта. Если же бит ADLAR у нас выставлен, то 8 самых старших бит результата находятся в сатршем байте, а 2 младших в 2 старших битах младшего байта регистровой пары. Второй вариант нам интересен при исользовании 8-битного режима. В данном случае мы читаем только старший байт.

Проект был создан полностью из проекта урока по изучению 4-битного режима подключения LCD Test09 и был назван MyADCLCD.

Также для выноса кода для реализации периферии АЦП были созданы стандартным образом два файла adc.h и adc.c. Соответственно файл adc.h был подключен и в файле main.h и в adc.c.

В файл MyADCLCD.c код был также полностью скопирован из главного файла проекта Test09, всё лишнее было удалено. Код в данном файле после данной операции принял следующий вид

Пример и особенности работы с АЦП

В данной статье рассмотрен простой пример работы с блоком аналого-цифрового преобразователя на МК 1986ВЕ91Т в составе отладочной платы. Блок АЦП идентичен по своей структуре в следующих МК: 1986ВЕ1Т, 1986ВЕ3Т, 1986ВЕ4У, серия 1986ВЕ9х, 1901ВЦ1Т. Однако в каждом процессоре есть свои особенности. МК серии 1986ВЕ9х и 1901ВЦ1Т содержат два независимых АЦП до 16 каналов каждый, в то время как в МК 1986ВЕ1Т, 1986ВЕ3Т и 1986ВЕ4У по одному АЦП до 8 каналов. Пример проекта, рассмотренного в статье, доступен для скачивания в конце статьи.

Введение

Блок аналого-цифрового преобразователя представляет собой устройство, на вход которого подается аналоговый сигнал, а на выходе выдается цифровой код, пропорциональный поданному напряжению. АЦП является основой многих измерительных приборов, например, цифровых мультиметров, электронных весов, приборов для измерения температуры, давления и многих других…

АЦП может быть как отдельной микросхемой, например, как 5101НВ015, так и быть в составе микроконтроллера. МК1986ВЕ9х, 1986ВЕ1Т, 1986ВЕ3Т, 1986ВЕ4У содержат в себе интегрированный блок АЦП. Основные характеристики АЦП — это разрядность и время преобразования. Разрядность 12 бит, следовательно, АЦП может различать 2 12 = 4096 различных уровней подаваемого на вход напряжения. А время преобразования, в свою очередь, зависит от частоты, подаваемой на АЦП. По спецификации для осуществления преобразования требуется не менее 28 тактов синхронизации CLK, в качестве которой мы можем использовать как частоту процессора CPU_CLK, так и частоту ADC_CLK, формируемую в блоке «Сигналов тактовой частоты».

АЦП имеет следующие основные режимы работы:

-режим одиночного преобразования по одному каналу (с возможностью опроса бита окончания преобразования или с прерыванием по окончанию преобразования);

-режим многократного преобразования (по одному каналу/с автоматическим переключением нескольких каналов и возможностью использования прямого доступа к памяти).

Преобразование с контролем границ

Микроконтроллеры серии 1986ВЕ9х и 1901ВЦ1Т имеют в своём арсенале 2 независимых АЦП – ADC1, ADC2, которые входят в состав блока АЦП. Общая схема приведена на рисунке 1.

Основной идеей данного примера является использование контроля уровня входного сигнала. В начале примера зададим следующие переменные:

которые являются границами и за которыми МК будет следить. Изменять на входе напряжение будем с помощью подстроечного резистора, который согласно описанию платы, подключен к 7 каналу АЦП. Для этого необходимо установить перемычку на разъём XP6 в положение “TRIM” (рисунок 2).

Таким образом, в случае нарушения данных границ, то есть выхода за границы интервала от 0x800 до 0x900, МК возведёт флаг Flg REG AWOIFEN в регистре ADCx_STATUS.

Настройка АЦП

Как было отмечено ранее, в микроконтроллерах серии 1986ВЕ9x и 1901ВЦ1Т есть два независимых АЦП. Поэтому в спецификации есть два регистра настроек ADC1_CFG и ADC2_CFG.

Настройка АЦП в 1986ВЕ9x происходит с использованием двух структур: ADC_StructInit и ADCx_StructInit. Это обусловлено тем, что первая структура ADC_StructInit содержит «общие настройки», которые применимы для самого контроллера блока ADC. А уже структура ADCx_StructInit содержит в себе настройку конкретного АЦП1 или АЦП2. Рассмотрим каждую структуру по отдельности.

Первую структуру ADC_StructInit оставим без изменений:

#if defined( USE_MDR1986VE9x ) || defined (USE_MDR1901VC1T)

ADC_InitStruct->ADC_SynchronousMode = ADC_SyncMode_Independent;
/* параметр отвечает за синхронный/независимый запуск двух АЦП (только для 1986ВЕ9х и 1901ВЦ1Т)*/

ADC_InitStruct->ADC_StartDelay = 0;
/* позволяет задать задержку между запусками АЦП1 и АЦП2 */

ADC_InitStruct->ADC_TempSensor = ADC_TEMP_SENSOR_Disable;
/* запрет работы температурного датчика и источника опорного напряжения (бит TS_EN) */

ADC_InitStruct->ADC_TempSensorAmplifier = ADC_TEMP_SENSOR_AMPLIFIER_Disable;
/* запрет работы выходного усилителя (бит TS_BUF) */

ADC_InitStruct->ADC_TempSensorConversion = ADC_TEMP_SENSOR_CONVERSION_Disable;
/* запрет выбора датчика температуры (бит SEL_TS) */

ADC_InitStruct->ADC_IntVRefConversion = ADC_VREF_CONVERSION_Disable;
/*запрет выбора источника опорного напряжения для оцифровки (бит SEL_VREF для 1986ВЕ9x значение 1.23 В)*/

ADC_InitStruct->ADC_IntVRefTrimming = 0;
/*задавая значения от 0 до 7, можно в небольших пределах подстроить */

#if defined ( USE_MDR1986VE3 ) || defined ( USE_MDR1986VE1T )

ADC_InitStruct->ADC_IntVRefAmplifier = ADC_INT_VREF_AMPLIFIER_Disable;
/*запрет выбора источника опорного напряжения для оцифровки (бит SEL_VREF_BUF в регистре ADC1_TRIM данный регистр реализован только в 1986ВЕ1Т и 1986ВЕ3Т со второй ревизии)*/

Здесь стоит отметить следующий момент: параметр ADC_IntVRefConversion разрешает и запрещает выбор источника опорного напряжения бит SEL_VREF регистра ADC1_CFG. Затем с помощью параметра ADC_IntVRefTrimming можно выполнить подстройку значений от 0 до 7 — биты 24..21 TR того же регистра ADC1_CFG.

В микроконтроллерах 1986ВЕ1Т и 1986ВЕ3Т разрешение выбора данного датчика, а также подстройка значений, выполняется в отдельном регистре ADC1_TRIM.

Рассмотрим конфигурацию АЦП1.

sADCx.ADC_ClockSource = ADC_CLOCK_SOURCE_CPU;
/* выбор источника тактирования, частота ядра */

sADCx.ADC_SamplingMode = ADC_SAMPLING_MODE_CICLIC_CONV;
/* режим многократного преобразования */

sADCx.ADC_ChannelSwitching = ADC_CH_SWITCHING_Disable;
/* автоматическое переключение каналов */

sADCx.ADC_ChannelNumber = ADC_CH_ADC7;
/* выбор номера канала */

sADCx.ADC_Channels = 0;
/* количество используемых каналов, если включен перебор */

ADC_CH_SWITCHING_Enable sADCx.ADC_LevelControl = ADC_LEVEL_CONTROL_Enable;
/* контроль уровня входного сигнала */

sADCx.ADC_LowLevel = L_Level;
/* нижний уровень контроля */

sADCx.ADC_HighLevel = H_Level; // верхний уровень

sADCx.ADC_VRefSource = ADC_VREF_SOURCE_INTERNAL;
/* выбор внутреннего источника опорного напряжения */

sADCx.ADC_IntVRefSource = ADC_INT_VREF_SOURCE_INEXACT;
/* вид источника для датчика опорного напряжения */

sADCx.ADC_Prescaler = ADC_CLK_div_32768; //выбор делителя тактовой частоты

sADCx.ADC_DelayGo = 0xF;
/* значение задержки перед началом следующего преобразования */

Прерывания по завершению преобразования

После инициализации АЦП с помощью функции ADC1_ITConfig разрешим прерывания по завершению преобразования. Затем функцией ADC1_Cmd (ENABLE) разрешаем работу АЦП. Как только АЦП выполнит преобразование, произойдет переход в функцию обработчика прерываний, в котором сначала будет выполнена проверка установки флага выхода за границы. Если значение на входе АЦП не попадает в обозначенные границы, загорается диод VD5. После этого считывается значение регистра ADC1_RESULT и накладывается маска, поскольку биты данного регистра содержат также номер канала. Сравнивается результат. Если верхнее значение границы было превышено, то вместе с VD5 горит диод VD6, а если нижнее, то VD5 горит вместе с VD7. При попадании значения на входе АЦП в нужный интервал все диоды погаснут. В конце обработчика выполняется очистка флагов.

За основу данного проекта взят пример из официального Pack и добавлена индикация диодом при пересечении нижней границы. Функция обработчика прерывания:

void ADC_IRQHandler(void)
<
if(ADC1_GetFlagStatus(ADCx_IT_OUT_OF_RANGE) == SET)
<
/* Turns LED1 On */
PORT_SetBits(MDR_PORTD, PORT_Pin_10);
>
else
<
/* Turns LED1 Off */
PORT_ResetBits(MDR_PORTD, PORT_Pin_10);
>
tmp = MDR_ADC->ADC1_RESULT & 0x0FFF;
if(tmp > H_Level)
<
/* Turns LED2 On */
PORT_SetBits(MDR_PORTD, PORT_Pin_11);
>
else
<
/* Turns LED2 Off */
PORT_ResetBits(MDR_PORTD, PORT_Pin_11);
>
if (tmp ADC1_STATUS = (ADCx_IT_END_OF_CONVERSION | ADCx_IT_OUT_OF_RANGE)

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

Последовательное преобразование нескольких каналов

В данном режиме работы есть определенное условие, которое надо обязательно соблюдать. Необходимо обеспечить выставление бит каналов, в регистре ADC1_CHSEL, участвующих в преобразовании до конфигурирования самого блока АЦП, то есть до записи в регистр ADCx_CFG.

#define Amount_Conv 10

uint32_t status[Amount_Conv], data[Amount_Conv], counter = 0;
volatile uint32_t a=0;

Читайте также  Конструкция и характеристики динамических громкоговорителей (динамиков)

int main (void)
<
MDR_RST_CLK->PER_CLOCK=0xFFFFFFFF;
MDR_PORTD->ANALOG=0xFFFF;
MDR_PORTD->PWR=0xFFFFFFFF;
MDR_PORTD->OE=0xFFFF;

MDR_ADC->ADC1_CHSEL=(1 ADC1_CFG |= (1 ADC1_CFG |= 0x1;

25.16. Описание регистра канала АЦП

25.16.1. CTRL — регистр управления канала АЦП

Запись единицы в данный бит приводит к запуску преобразования в канале. Бит сбрасывается аппаратно после запуска преобразования. Запись в данный бит единицы, когда он уже имеет единичное значение, не оказывает ни какого эффекта. Запись или чтение этого бита эквивалентно записи бит CH[3:0]START из регистра CTRLA.

  • Биты 6:5 — Res: резервные биты

Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в данный регистр, всегда записывайте нули в резервные биты.

  • Биты 4:3 — GAIN[2:0]: коэффициент усиления АЦП

Данные биты предназначены для задания коэффициента усиления усилительного каскада на входе АЦП. Варианты доступных настроек показаны в таблице 25.6. Настройка коэффициента усиления действительна только для некоторых настроек мультиплексора (см.»MUXCTRL — регистры управления мультиплексора канала АЦП»).

Таблица 25.8. Настройка коэффициента усиления

GAIN[2:0] Групповая конфигурация Коэффициент усиления
000 1X 1x
001 2X 2x
010 4X 4x
011 8X 8x
100 16X 16x
101 32X 32x
110 64X 64x
111 (резерв)
  • Биты 1:0 — INPUTMODE[1:0]: режим входа канала АЦП

Данные биты предназначены для задания режима канала. Эта настройка не зависит от настройки CONVMODE (знаковый/беззнаковый режим), однако режим дифференциального входа поддерживается только в знаковом режиме работы АЦП. В режиме несимметричного входа, инвертирующий вход АЦП подключается к фиксированному уровню напряжения, как в знаковом, так и в беззнаковом режимах работы АЦП.

Таблица 25.9. Режимы входа канала АЦП в беззнаковом режиме (CONVMODE=0)

INPUTMODE[1:0] Групповая конфигурация Описание
00 INTERNAL Внутренний положительный входной сигнал
01 SINGLEENDED Внешний положительный (несимметричный) входной сигнал
10 (резерв)
11 (резерв)

Таблица 25.10. Режимы входа канала АЦП в знаковом режиме (CONVMODE=1)

INPUTMODE[1:0] Групповая конфигурация Описание
00 INTERNAL Внутренний положительный входной сигнал
01 SINGLEENDED Внешний положительный (несимметричный) входной сигнал
10 DIFF Дифференциальный входной сигнал
11 DIFFWGAIN Дифференциальный входной сигнал с усилением

25.16.2. MUXCTRL — регистры управления мультиплексором канала АЦП

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

Данный бит не используется и зарезервирован для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нуль в резервный бит.

  • Биты 6:3 — MUXPOS[3:0]: настройка мультиплексоры на неинвертирующем входе АЦП

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

Таблица 25.11. Настройка мультиплексора на неинвертирующем входе АЦП при измерении внутренних сигналов (INPUTMODE[1:0] = 00)

MUXPOS[2:0] Групповая конфигурация Аналоговый вход
000 TEMP Напряжение датчика температуры
001 BANDGAP Напряжение бэндгап-элемента
010 SCALEDVCC Поделенное на 10 напряжение VCC
011 DAC Выход ЦАП
100 (резерв)
101 (резерв)
110 (резерв)
111 (резерв)

Таблица 25.12. Настройка мультиплексора на неинвертирующем входе АЦП при измерении внешних несимметричных (INPUTMODE[1:0] = 01), дифференциальных (INPUTMODE[1:0] = 10) или дифференциальных с усилением (INPUTPMODE[1:0] = 1) сигналов

MUXPOS[2:0] Групповая конфигурация Аналоговый вход
000 PIN0 Вывод ADC0
001 PIN1 Вывод ADC1
010 PIN2 Вывод ADC2
011 PIN3 Вывод ADC3
100 PIN4 Вывод ADC4
101 PIN5 Вывод ADC5
110 PIN6 Вывод ADC6
111 PIN7 Вывод ADC7

В МК с одним АЦП на неинвертирующий вход может быть подан сигнал с другого аналогового порта. Для этого необходимо установить бит MUXPOS3.

  • Биты 2 — Res: резервный бит

Данный бит не используется и зарезервирован для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нуль в резервный бит.

  • Биты 1:0 — MUXNEG[1:0]: настройка мультиплексора на инвертирующем входе АЦП

От данных бит зависит настройка мультиплексора, подключенного к инвертирующему входу АЦП, когда тот выполняет дифференциальные измерения. Когда выполняется измерение внутренних или внешних несимметричных сигналов, данные биты не используются. В таблицах 25.13 и 25.14 показаны возможные настройки входов.

Таблица 25.13. Настройка мультиплексора на инвертирующем входе АЦП (INPUTMODE[1:0] = 10, дифференциальный режим без усиления)

MUXNEX[1:0] Групповая конфигурация Аналоговый вход
00 PIN0 Вывод ADC0
01 PIN1 Вывод ADC1
10 PIN2 Вывод ADC2
11 PIN3 Вывод ADC3

Таблица 25.13. Настройка мультиплексора на инвертирующем входе АЦП (INPUTMODE[1:0] = 11, дифференциальный режим с усилением)

MUXNEX[1:0] Групповая конфигурация Аналоговый вход
00 PIN4 Вывод ADC4
01 PIN5 Вывод ADC5
10 PIN6 Вывод ADC6
11 PIN7 Вывод ADC7

25.16.3. INTCTRL — регистры управления прерыванием канала АЦП

Данные биты не используются и зарезервированы для использования в будущем. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули, в резервные биты.

  • Биты 3:2 — INTMODE: режим прерывания АЦП

Данные биты позволяют выбрать режим прерывания для канала в соответствии с таблицей 25.15.

Таблица 25.15. Режим прерывания АЦП

INTMODE[1:0] Групповая конфигурация Режим прерывания
00 COMPLETE по завершению преобразования
01 BELOW по условию сравнения: результат меньше порогового значения
10 (резерв)
11 ABOVE по условию сравнения: результат больше порогового значения
  • Биты 1:0 — INTLVL[1:0]: разрешение прерывания АЦП и выбор его приоритета

С помощью данных бит можно разрешить прерывание в канале АЦП и выбрать его уровень (см. раздел 12 «Прерывания и программируемый многоуровневый контроллер прерываний»). После разрешения прерывания, оно будет инициироваться при установке флага IF в регистре INTFLAGS.

25.16.4. INTFLAG — регистр флагов прерываний канала АЦП

Данные биты являются резервными и всегда считываются с нулевым значением. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.

  • Бит 0 — IF: флаг прерывания канала АЦП

Флаг прерывания становится равным единице, когда АЦП завершает преобразование. Если канал настроен на работу в режиме сравнения, флаг также будет устанавливаться при выполнении условия сравнения. Флаг IF автоматически сбрасывается при переходе на вектор прерывания канала АЦП. Альтернативно, данный бит можно сбросить записью в него единицы.

25.16.5. RESH — старший регистр результата канала АЦП n

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

В регистровой паре RESL и RESH хранится 16-битное значение ADCRESULT. Чтение и запись 16-битных значений требует особого внимания (см. 3.11 «Доступ к 16-битным регистрам».)

25.16.5.1. 12-битный режим с левым выравниванием

  • Биты 7:0 — RES[11:4]: старший байт результата канала АЦП

Здесь хранятся 8 старших бит 12-битного результата АЦП.

25.16.5.2. 12-битный режим с правым выравниванием

  • Биты 7:4 — Res: резервные биты

Данные биты в точности повторяют состояние бита знака CHRES11, когда АЦП работает в дифференциальном режиме, и равны нулю, когда АЦП работает в знаковом режиме.

  • Биты 3:0 — RES[11:8]: старший байт результата канала АЦП

Здесь хранятся 4 старших бита 12-битного результата АЦП.

25.16.5.3. 8-битный режим

  • Биты 7:0 — Res: резервные биты

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

25.16.6. RESL — младший регистр результата канала АЦП n

25.16.6.1. 12-/8-битный режим

  • Биты 7:0 — RES[7:0]: младший байт результата канала АЦП

В данных битах хранятся 8 младших бит результата АЦП.

25.16.6.2. 12-битный режим с левым выравниванием

  • Биты 7:4 — RES[3:0]: младший байт результата канала АЦП

В данных битах хранятся 4 младших бита 12-битного результата АЦП.

  • Биты 3:0 — Res: резервные биты

Данные биты являются резервными и всегда считываются с нулевым значением. Для совместимости с более новыми МК, выполняя запись в этот регистр, всегда записывайте нули в резервные биты.

Регистр

Основными элементами устройства являются компаратор (К), цифро-аналоговый преобразователь (ЦАП) и схема логического управления. Принцип преобразования основан на последовательном сравнении уровня входного сигнала с уровнями сигналов соответствующих различным комбинациям выходного кода и формировании результирующего кода по результатам сравнений. Очередность сравниваемых кодов удовлетворяет правилу половинного деления. В начале преобразования входной код ЦАП устанавливается в состояние, в котором все разряды кроме старшего равны 0, а старший равен 1. При этой комбинации на выходе ЦАП формируется напряжение, равное половине диапазона входного напряжения. Это напряжение сравнивается со входным напряжением на компараторе. Если входной сигнал больше сигнала, поступающего с ЦАП, то старший разряд выходного кода устанавливается в 1, в противном случае он сбрасывается в 0. На следующем такте частично сформированный таким образом код снова поступает на вход ЦАП, в нем устанавливается в единицу следующий разряд и сравнение повторяется. Процесс продолжается до сравнения младшего бита. Т.о. для формирования N -разрядного выходного кода необходимо N одинаковых элементарных тактов сравнения. Это означает, что при прочих равных условиях быстродействие такого АЦП уменьшается с ростом его разрядности. Внутренние элементы АЦП последовательных приближений (ЦАП и компаратор) должны обладать точностными показателями лучше величины половины младшего разряда АЦП.

Читайте также  Подключение семисегментного индикатора по трём проводам (74hc595)

Структурная схема параллельного ( Flash ) АЦП представлена на рис.3.4.

В этом случае входное напряжение подается для сравнения на одноименные входы сразу N -1 компараторов. На противоположные входы компараторов подаются сигналы с высокоточного делителя напряжения, который подключен к источнику опорного напряжения. При этом напряжения с выходов делителя равномерно распределены вдоль всего диапазона изменения входного сигнала. Шифратор с приоритетом формирует цифровой выходной сигнал, соответствующий самому старшему компаратору с активизированным выходным сигналом. Т.о. для обеспечения N -разрядного преобразования необходимо 2 N резисторов делителя и 2 N -1 компаратор. Это один из самых быстрых способов преобразования. Однако, при большой разрядности он требует больших аппаратных затрат. Точность всех резисторов делителя и компараторов снова должна быть лучше половины величины младшего разряда.

Структурная схема АЦП двойного интегрирования представлена на рис.3.5.

Счетчик

Выходной

Основными элементами системы являются аналоговый коммутатор, состоящий из ключей SW 1, SW 2, SW 3, интегратор И, компаратор К и счетчик С. Процесс преобразования состоит из трех фаз (рис.3.6).

На первой фазе замкнут ключ SW 1, а остальные ключи разомкнуты. Через замкнутый ключ SW 1 входное напряжение подается на интегратор, который в течение фиксированного интервала времени интегрирует входной сигнал. По истечение этого интервала времени уровень выходного сигнала интегратора пропорционален значению входного сигнала. На втором этапе преобразования ключ SW 1 размыкается, а ключ SW 2 замыкается, и на вход интегратора подается сигнал с источника опорного напряжения. Конденсатор интегратора разряжается от напряжения, накопленного в первом интервале преобразования с постоянной скоростью, пропорциональной опорному напряжению. Этот этап длится до тех пор, пока выходное напряжение интегратора не упадет до нуля, о чем свидетельствует выходной сигнал компаратора, сравнивающего сигнал интегратора с нулем. Длительность второго этапа пропорциональна входному напряжению преобразователя. В течение всего второго этапа на счетчик помтупают высокочастотные импульсы с калиброванной частотой. Т.о. по истечению второго этапа цифровые показания счетчика пропорциональны входному напряжению. С помощью данного метода можно добиться очень хорошей точности не предъявляя высоких требований к точности и стабильности компонентов. В часности, стабильность емкости интегратора может быть не высокой, поскольку циклы заряда и разряда происходят со скоростью, обратно пропорциональной емкости. Болле того, ошибки дрейфа и смещения компарптора компенсируются благодаря тому, что каждый этап преобразования начинается и заканчивается на одном и том же напряжении. Для повышения точности используется третий этап преобразования, когда на вход интегратора через ключ SW 3 подается нулевой сигнал. Поскольку на этом этапе используется тот же интегратор и компаратор, то вычитание выходного значения ошибки при нуле из результата последующего измерения позволяет компенсировать ошибки, связанные с измерениями вблизи нуля. Жесткие требования не предъявляются даже к частоте тактовых импульсов, поступающих на счетчик, т.к. фиксированный интервал времени на первом этапе преобразования формируется из тех же самых импульсов. Жесткие требования предъявляются только к току разряда, т.е. к источнику опорного напряжения. Недостатком такого способа преобразования является невысокое быстродействие.

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

Уровню квантования, лежащему в окрестностях нуля входного сигнала соответствуют напряжения межкодовых переходов –0.5 ULSB и 0.5 ULSB (первый имеет место только в случае биполярного входного сигнала). Однако, в реальных устройствах, напряжения данных межкодовых переходов могут отличаться от этих идеальных значений. Отклонение реальных уровней этих напряжений межкодовых переходов от их идеальных значений называется ошибкой биполярного смещения нуля ( Bipolar Zero Error ) и ошибкой униполярного смещения нуля ( Zero Offset Error ) соответственно. При биполярных диапазонах преобразования обычно используют ошибку смещения нуля, а при униполярных – ошибку униполярного смещения. Эта ошибка приводит к параллельному смещению реальной характеристики преобразования относительно идеальной характеристики вдорль оси абсцисс (рис.3.7).

Аналого-цифровые преобразователи (АЦП): назначение, устройство, применение.

Что такое АЦП?

Аналого-цифровые преобразователи (АЦП) — это устройства, предназначенные для преобразования аналоговых сигналов в цифровые. Для такого преобразования необходимо осуществить квантование аналогового сигнала, т. е. мгновенные значения аналогового сигнала ограничить определенными уровнями, называемыми уровнями квантования.

Характеристика идеального квантования имеет вид, приведенный на рис. 3.92.

К основным характеристикам АЦП относят число разрядов, время преобразования, нелинейность и др. Число разрядов — количество разрядов кода, связанного с аналоговой величиной, которое может вырабатывать АЦП.

Характерными методами преобразования являются следующие: параллельного преобразования аналоговой величины и последовательного преобразования.

АЦП с параллельным преобразованием входного аналогового сигнала

По параллельному методу входное напряжение одновременно сравниваются с n опорными напряжениями и определяют, между какими двумя опорными напряжениями оно лежит. При этом результат получают быстро, но схема оказывается достаточно сложной.

Принцип действия АЦП (рис. 3.93)

При Uвх = 0, поскольку для всех ОУ разность напряжений (U+ − U) 0,5U, но меньше 3/2U, лишь для нижнего ОУ (U+ − U) > 0 и лишь на его выходе появляется напряжение +Епит, что приводит к появлению на выходах КП следующих сигналов: Z = 1, Z2 = Zl = 0. Если Uвх > 3/2U, но меньше 5/2U, то на выходе двух нижних ОУ появляется напряжение +Епит, что приводит к появлению на выходах КП кода 010 и т. д.

Посмотрите интересное видео о работе АЦП:

АЦП с последовательным преобразованием входного сигнала

Это АЦП последовательного счета, который называют АЦП со следящей связью (рис. 3.94). В АЦП рассматриваемого типа используется ЦАП и реверсивный счетчик, сигнал с которого обеспечивает изменение напряжения на выходе ЦАП. Настройка схемы такова, что обеспечивается примерное равенство напряжений на входе Uвх и на выходе ЦАП −U. Если входное напряжение Uвх больше напряжения U на выходе ЦАП, то счетчик переводится в режим прямого счета и код на его выходе увеличивается, обеспечивая увеличение напряжения на выходе ЦАП. В момент равенства Uвх и U счет прекращается и с выхода реверсивного счетчика снимается код, соответствующий входному напряжению.

Метод последовательного преобразования реализуется и в АЦП время — импульсного преобразования (АЦП с генератором линейно изменяющегося напряжения (ГЛИН)).

Принцип действия рассматриваемого АЦП рис. 3.95) основан на подсчете числа импульсов в отрезке времени, в течение которого линейно изменяющееся напряжение (ЛИН), увеличиваясь от нулевого значения, достигает уровня входного напряжения Uвх. Использованы следующие обозначения: СС — схема сравнения, ГИ — генератор импульсов, Кл — электронный ключ, Сч — счетчик импульсов.

Погрешность измерения определяется шагом квантования времени. Ключ Кл подключает к счетчику генератор импульсов от момента начала измерения до момента равенства Uвх и Uглин. Через UСч обозначено напряжение на входе счетчика.

Код на выходе счетчика пропорционален входному напряжению. Одним из недостатков этой схемы является невысокое быстродействие.

АЦП с двойным интегрированием

Такой АЦП реализует метод последовательного преобразования входного сигнала (рис. 3.96). Использованы следующие обозначения: СУ — система управления, ГИ — генератор импульсов, Сч — счетчик импульсов.

Принцип действия АЦП состоит в определении отношения двух отрезков времени, в течение одного из которых выполняется интегрирование входного напряжения Uвх интегратором на основе ОУ (напряжение Uи на выходе интегратора изменяется от нуля до максимальной по модулю величины), а в течение следующего — интегрирование опорного напряжения Uоп (Uи меняется от максимальной по модулю величины до нуля) (рис. 3.97).
Пусть время t1 интегрирования входного сигнала постоянно, тогда чем больше второй отрезок времени t2 (отрезок времени, в течение которого интегрируется опорное напряжение), тем больше входное напряжение. Ключ КЗ предназначен для установки интегратора в исходное нулевое состояние.

В первый из указанных отрезков времени ключ К1 замкнут, ключ К2 разомкнут, а во второй, отрезок времени их состояние является обратным по отношению к указанному. Одновременно с замыканием ключа К2 импульсы с генератора импульсов ГИ начинают поступать через схему управления СУ на счетчик Сч.

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

Напряжение на выходе интегратора по истечении отрезка времени t1 определяется выражением

Используя аналогичное выражение для отрезка времени t2, получим

Код на выходе счетчика определяет величину входного напряжения.

Одним из основных преимуществ АЦП рассматриваемого типа является высокая помехозащищенность. Случайные выбросы входного напряжения, имеющие место в течение короткого времени, практически не оказывают влияния на погрешность преобразования. Недостаток АЦП — малое быстродействие.

Наиболее распространенными являются АЦП серий микросхем 572, 1107, 1138 и др. (табл. 3.3) Из таблицы видно, что наилучшим быстродействием обладает АЦП параллельного преобразования, а наихудшим — АЦП последовательного преобразования.

Предлагаем посмотреть ещё одно достойное видео о работе и устройстве АЦП: