АЦП в ESP32
В предыдущей статье я слегка затронул тему использования АЦП в ESP микроконтроллерах. При тестировании использовался Devkit:
В ESP32 используется два 12-bit SAR (Successive Approximation Register) ЦАП-а, поддерживающих суммарно 18 каналов аналоговых измерений.
ЦАП драйвера поддерживает ADC1 (8 каналов — GPIOs 32 — 39), и ADC2 (10 каналов — GPIOs 0, 2, 4, 12 — 15 и 25 — 27). Однако ADC2 имеет определенные ограничения по использованию:
Конфигурирование АЦП и чтение данных
Перед началом использования АЦП ESP 32 микроконтроллера необходимо выполнить конфигурирование:
API обеспечивает удобный способ конфигурирования ADC1 для чтения в режиме ULP, когда данные могут приходить с АЦП, I2C и датчика температуры, даже когда процессор находится в режиме глубокого сна (deep sleep mode). Чтобы задействовать этот режим нужно вызвать функцию adc1_ulp_enable() и установить точность и ослабление уровня сигнала, как говорилось ранее.
В ESP32 есть ещё одна специфическая функция adc2_vref_to_gpio() Она используется для перенаправления внуреннего опорного напряжения (internal reference voltage) на выбранный GPIO вход. Функция удобна при калибровке АЦП и будет обсуждаться далее в разделе Минимизация уровня шума.
Пример конфигурирования и чтения данных с АЦП ESP32
Для конфигурирования используется код:
Чтобы прочитать данные с определенного канала АЦП ADC1:
При чтении данных с помощью функции из библиотеки ESP32 и штатной Arduino analogRead возвращается немного отличающиеся результаты:
Почему так проиходит я не знаю, привел информацию на всякий случай.
Чтобы прочитать данные с канала 7 ADC2 (GPIO 27):
При работе Wi-Fi чтение данных может привести к появлению ошибки из-за коллизий с Wi-Fi. Пример использования ADC2 драйвера для чтения выхода ЦАП: peripherals/adc2
Для чтения внутренного датчика Холла используется следующий код:
Снижение уровня шума
АЦП ESP32 довольно чувствительный к шуму. Это приводит к разбросу в показаниях АЦП. Чтобы свести к минимуму шум, на вход АЦП можно подключить конденсатор 0,1 мкФ.
Для защиты АЦП от перегрузок по току или неправильной полярности при подключении при использовании с датчиками 4..20 мА можно использовать специализированный чип MAX14626ETTT.
На графике видно, что добавление емкости существенно уменьшает разброс значений на входе АЦП.
Помимо аппаратных способов можно использовать программные. Например, усреднение дает неплохой вариант. Пример кода для усреднения данных считываемых с датчика тока 4..20 мА:
Другие варианты фильтров для сглаживания показаний на входе АЦП в конце статьи.
Калибровка АЦП
В esp_adc_cal/include/esp_adc_cal.h API есть функции для корректировки разброса в измерениях напряжения из-за различия опорных (reference voltages (Vref) напряжений в чипах ESP32. Опорное напряжение АЦП должно составлять 1100mV. Реальные значения «гуляют» от 1000mV до 1200mV от чипа к чипу ESP32s.
Из-за изменения опорного напряжения количество отсчетов при считывании функцией adc1_get_raw() будет разным от чипа к чипу.
При калибровке производится серия замеров для получения функции
y = coeff_a * x + coeff_b при выбранном параметре ослабления. По этой кривой можно определить каким образом входное напряжение на АЦП будет преобразовано в отсчеты на выходе. Параметры полученные при калибровке могут быть сохранены в eFuse или использоватся каждый раз при вызове функций преобразования.
Результат выполнения скетча:
Не смотря на то, что тест показывает использование eFuse Vref (reference voltage stored in eFuse), значение ADC Vref = 1100 mV — т.е. дефолтное, что маловероятно, если бы на заводе делали замер опорного напряжения. Проверка ADC Vref с помощью утилиты espefuse.py под Windows дает тот-же результат.

И на другом ESP32 чипе:
При перенаправлении выхода генератора опорного напряжения на GPIO 26:
и замере его высокоточным мультметром напряжение получается очень близким к 1.1 V. На одном чипе 1134 mV, на втором — 1105 mV. Скорее всего заводское оборудование более точное, так что опорное напряжение действительно близко отображаемым 1100 mV.
Диапазоны измерений АЦП ESP32
Если посмотреть техническую документацию на ESP32, то в ней указано, что при напряжении VDD_A = 3.3V:
По факту, если при ADC_ATTEN_DB_11 замерять напряжение, то уже при величине порядка 2.6 V на 12-ти битах АЦП начинает выдавать предельные 4095.
Из-за характеристики АЦП наиболее точные результаты измерений получаются в более узком диапазоне, чем заявлено в документации. На начальном и конечном участке более или менее линейная характеристика АЦП изгибается и становится более пологой, поэтому измерения очень неточные. В документации указаны рекомендуемые диапазоны измерений:
В документации есть примечание, что при ослаблении в 11dB максимальное напряжение ограничено VDD_A, а не указанным ранее 3.9 V.
Раскладываем по полочкам параметры АЦП
Привет, Хабр! Многие разработчики систем довольно часто сталкиваются с обработкой аналоговых сигналов. Не все манипуляции с сигналами можно осуществить в аналоговой форме, поэтому требуется переводить аналог в цифровой мир для дальнейшей постобработки. Возникает вопрос: на какие параметры стоит обратить внимание при выборе микроконтроллера или дискретного АЦП? Что все эти параметры означают? В этой статье постараемся детально рассмотреть основные характеристики АЦП и разобраться на что стоит обратить внимание при выборе преобразователя.
Введение
Рис. 1: Идеальная характеристика АЦП
Статические параметры
Рис. 4: Дифференциальная нелинейность
Рис. 5: Интегральная нелинейность
Динамические параметры
Наглядно данное выражение продемонстрированно на рисунке 7.
Рис. 7: Отношение сигнал/шум
Для оценки SNR АЦП при разработке системы можно воспользоваться следующей формулой:
Первые 2 слагаемых учитывают уровень сигнала и ошибку квантования (нужно понимать, что формула верна для сигнала размаха полной шкалы). Третье слагаемое учитывает эффект передискретизации (выигрыш по обработке или processing gain): если полоса обрабатываемого сигнала (BW Свойство переноса спектра при дискретизации
Рис 12: дискретизация непрерывного сигнала
По фильтрующему свойству дельта-функции:
После дискретизации :
где
С помощью формулы Релея вычислим спектр:
Из этого выражения следует что спектр сигнала будет повторяться во всех зонах Найквиста.
Итак, если есть хороший антиэлайзинговый фильтр, то соблюдая критерий Найквиста, можно оцифровывать сигнал с частотой дискретизации намного ниже полосы АЦП. Но использовать субдискретизацию нужно осторожно. Следует учитывать, что динамические параметры АЦП деградируют (иногда очень сильно) с ростом частоты входного сигнала, поэтому оцифровать сигнал из 6-й зоны так же «чисто», как из 1-й не получится.
Несмотря на это субдискритезация активно используется. Например, для обработки узкополосных сигналов, когда не хочется тратиться на дорогой широкополосный быстродействующий АЦП, который вдобавок имеет высокое потребление. Другой пример – выборка ПЧ (IF-sampling) в РЧ системах. Там благодаря undersampling можно исключить из радиоприемного тракта лишнее аналоговое звено — смеситель (который переносит сигнал на более низкую несущую или на 0).
Сравним архитектуры
На данный момент в мире существует множество различных архитектур АЦП. У каждой из них есть свои преимущества и недостатки. Не существует архитектуры, которая бы достигала максимальных значений всех, описанных выше параметров. Проанализируем какие максимальные параметры скорости и разрешения смогли достичь компании, выпускающие АЦП. Также оценим достоинства и недостатки каждой архитектуры (более подробно о различных архитектурах можно прочитать в статье на хабр).
| Тип архитектуры | Преимущества | Недостатки | Максимальное разрешение | Максимальная частота дискретизации |
| flash | Быстрый преобразователь. Преобразование осуществляется в один такт. | Высокое энергопотребление. Ограниченное разрешение. Требует большой площади кристалла ( | 14 бит 128 КВыб/с AD679 | 3 бит 26 ГВыб/с HMCAD5831 |
| folding-interpolated | Быстрый преобразователь. Преобразование осуществляется в один такт. Требует меньшее число компараторов благодаря предварительной «свёртке» всего диапазона обработки в некоторый более узкий диапазон. Занимает меньше площади. | Ошибки, связанные с нелинейностью блока свёртки. Задержка на установление уровней в блоке свёртки, которая уменьшает максимальную fs. Среднее разрешение. | 12 бит 6.4 ГВыб/с ADC12DL3200 | 12 бит 6.4 ГВыб/с ADC12DL3200 |
| SAR | Высокая точность. Низкое энергопотребление. Легка в использовании. | Ограниченная скорость. | 32 бит 1 МВыб/с LTC2500 | 10 бит 40 МВыб/с XRD64L43 |
| pipeline | Быстрый преобразователь. Самая высокая точность среди быстрых АЦП. Не занимает большую площадь. Имеет меньшее потребления, среди аналогичных быстрых преобразователей. | Конвейерная задержка. | 24 бит 192 КВыб/с AK5386 | 12 бит 10.25 ГВыб/с AD9213 |
| dual-slope | Средняя точность преобразования. Простота конструкции. Низкое потребление. Устойчивость к изменениям факторов внешней среды. | Обрабатывает низкочастотные Сигналы (низкая fs). Посредственное разрешение. | 12+знаковый бит 10 Выб/с TC7109 | 5+знак бит 200 КВыб/с HI3-7159 |
| ∑-Δ | Самая высокая точность пре- Образования благодаря эффекту «Noise shaping» (специфическая фильтрация шума квантования) и передискретизации. | Не может работать с широкополосным сигналом. | 32 бита 769 КВыб/с AK5554 | 12 бит 200МВыб/с ADRV9009 |
Информацию для таблицы брал на сайте arrow, поэтому если что-то упустил поправляйте в комментариях.
Аналого-цифровое преобразование для начинающих
В этой статье рассмотрены основные вопросы, касающиеся принципа действия АЦП различных типов. При этом некоторые важные теоретические выкладки, касающиеся математического описания аналого-цифрового преобразования остались за рамками статьи, но приведены ссылки, по которым заинтересованный читатель сможет найти более глубокое рассмотрение теоретических аспектов работы АЦП. Таким образом, статья касается в большей степени понимания общих принципов функционирования АЦП, чем теоретического анализа их работы.

В качестве отправной точки дадим определение аналого-цифровому преобразованию. Аналого-цифровое преобразование – это процесс преобразования входной физической величины в ее числовое представление. Аналого-цифровой преобразователь – устройство, выполняющее такое преобразование. Формально, входной величиной АЦП может быть любая физическая величина – напряжение, ток, сопротивление, емкость, частота следования импульсов, угол поворота вала и т.п. Однако, для определенности, в дальнейшем под АЦП мы будем понимать исключительно преобразователи напряжение-код.
Понятие аналого-цифрового преобразования тесно связано с понятием измерения. Под измерением понимается процесс сравнения измеряемой величины с некоторым эталоном, при аналого-цифровом преобразовании происходит сравнение входной величины с некоторой опорной величиной (как правило, с опорным напряжением). Таким образом, аналого-цифровое преобразование может рассматриваться как измерение значения входного сигнала, и к нему применимы все понятия метрологии, такие, как погрешности измерения.
Основные характеристики АЦП
АЦП имеет множество характеристик, из которых основными можно назвать частоту преобразования и разрядность. Частота преобразования обычно выражается в отсчетах в секунду (samples per second, SPS), разрядность – в битах. Современные АЦП могут иметь разрядность до 24 бит и скорость преобразования до единиц GSPS (конечно, не одновременно). Чем выше скорость и разрядность, тем труднее получить требуемые характеристики, тем дороже и сложнее преобразователь. Скорость преобразования и разрядность связаны друг с другом определенным образом, и мы можем повысить эффективную разрядность преобразования, пожертвовав скоростью.
Существует множество типов АЦП, однако в рамках данной статьи мы ограничимся рассмотрением только следующих типов:
Наибольшим быстродействием и самой низкой разрядностью обладают АЦП прямого (параллельного) преобразования. Например, АЦП параллельного преобразования TLC5540 фирмы Texas Instruments обладает быстродействием 40MSPS при разрядности всего 8 бит. АЦП данного типа могут иметь скорость преобразования до 1 GSPS. Здесь можно отметить, что еще большим быстродействием обладают конвейерные АЦП (pipelined ADC), однако они являются комбинацией нескольких АЦП с меньшим быстродействием и их рассмотрение выходит за рамки данной статьи.
Среднюю нишу в ряду разрядность-скорость занимают АЦП последовательного приближения. Типичными значениями является разрядность 12-18 бит при частоте преобразования 100KSPS-1MSPS.
Наибольшей точности достигают сигма-дельта АЦП, имеющие разрядность до 24 бит включительно и скорость от единиц SPS до единиц KSPS.
Еще одним типом АЦП, который находил применение в недавнем прошлом, является интегрирующий АЦП. Интегрирующие АЦП в настоящее время практически полностью вытеснены другими типами АЦП, но могут встретиться в старых измерительных приборах.
АЦП прямого преобразования
АЦП прямого преобразования получили широкое распространение в 1960-1970 годах, и стали производиться в виде интегральных схем в 1980-х. Они часто используются в составе «конвейерных» АЦП (в данной статье не рассматриваются), и имеют разрядность 6-8 бит при скорости до 1 GSPS.
Архитектура АЦП прямого преобразования изображена на рис. 1
Рис. 1. Структурная схема АЦП прямого преобразования
Принцип действия АЦП предельно прост: входной сигнал поступает одновременно на все «плюсовые» входы компараторов, а на «минусовые» подается ряд напряжений, получаемых из опорного путем деления резисторами R. Для схемы на рис. 1 этот ряд будет таким: (1/16, 3/16, 5/16, 7/16, 9/16, 11/16, 13/16) Uref, где Uref – опорное напряжение АЦП.
Пусть на вход АЦП подается напряжение, равное 1/2 Uref. Тогда сработают первые 4 компаратора (если считать снизу), и на их выходах появятся логические единицы. Приоритетный шифратор (priority encoder) сформирует из «столбца» единиц двоичный код, который фиксируется выходным регистром.
Теперь становятся понятны достоинства и недостатки такого преобразователя. Все компараторы работают параллельно, время задержки схемы равно времени задержки в одном компараторе плюс время задержки в шифраторе. Компаратор и шифратор можно сделать очень быстрыми, в итоге вся схема имеет очень высокое быстродействие.
Но для получения N разрядов нужно 2^N компараторов (и сложность шифратора тоже растет как 2^N). Схема на рис. 1. содержит 8 компараторов и имеет 3 разряда, для получения 8 разрядов нужно уже 256 компараторов, для 10 разрядов – 1024 компаратора, для 24-битного АЦП их понадобилось бы свыше 16 млн. Однако таких высот техника еще не достигла.
АЦП последовательного приближения
АЦП последовательного приближения реализует алгоритм «взвешивания», восходящий еще к Фибоначчи. В своей книге «Liber Abaci» (1202 г.) Фибоначчи рассмотрел «задачу о выборе наилучшей системы гирь», то есть о нахождении такого ряда весов гирь, который бы требовал для нахождения веса предмета минимального количества взвешиваний на рычажных весах. Решением этой задачи является «двоичный» набор гирь. Подробнее о задаче Фибоначчи можно прочитать, например, здесь: http://www.goldenmuseum.com/2015AMT_rus.html.
Аналого-цифровой преобразователь последовательного приближения (SAR, Successive Approximation Register) измеряет величину входного сигнала, осуществляя ряд последовательных «взвешиваний», то есть сравнений величины входного напряжения с рядом величин, генерируемых следующим образом:
1. на первом шаге на выходе встроенного цифро-аналогового преобразователя устанавливается величина, равная 1/2Uref (здесь и далее мы предполагаем, что сигнал находится в интервале (0 – Uref).
2. если сигнал больше этой величины, то он сравнивается с напряжением, лежащим посередине оставшегося интервала, т.е., в данном случае, 3/4Uref. Если сигнал меньше установленного уровня, то следующее сравнение будет производиться с меньшей половиной оставшегося интервала (т.е. с уровнем 1/4Uref).
3. Шаг 2 повторяется N раз. Таким образом, N сравнений («взвешиваний») порождает N бит результата.
Рис. 2. Структурная схема АЦП последовательного приближения.
Таким образом, АЦП последовательного приближения состоит из следующих узлов:
1. Компаратор. Он сравнивает входную величину и текущее значение «весового» напряжения (на рис. 2. обозначен треугольником).
2. Цифро-аналоговый преобразователь (Digital to Analog Converter, DAC). Он генерирует «весовое» значение напряжения на основе поступающего на вход цифрового кода.
3. Регистр последовательного приближения (Successive Approximation Register, SAR). Он осуществляет алгоритм последовательного приближения, генерируя текущее значение кода, подающегося на вход ЦАП. По его названию названа вся данная архитектура АЦП.
4. Схема выборки-хранения (Sample/Hold, S/H). Для работы данного АЦП принципиально важно, чтобы входное напряжение сохраняло неизменную величину в течение всего цикла преобразования. Однако «реальные» сигналы имеют свойство изменяться во времени. Схема выборки-хранения «запоминает» текущее значение аналогового сигнала, и сохраняет его неизменным на протяжении всего цикла работы устройства.
Достоинством устройства является относительно высокая скорость преобразования: время преобразования N-битного АЦП составляет N тактов. Точность преобразования ограничена точностью внутреннего ЦАП и может составлять 16-18 бит (сейчас стали появляться и 24-битные SAR ADC, например, AD7766 и AD7767).
И, наконец, самый интересный тип АЦП – сигма-дельта АЦП, иногда называемый в литературе АЦП с балансировкой заряда. Структурная схема сигма-дельта АЦП приведена на рис. 3.
Рис.3. Структурная схема сигма-дельта АЦП.
Принцип действия данного АЦП несколько более сложен, чем у других типов АЦП. Его суть в том, что входное напряжение сравнивается со значением напряжения, накопленным интегратором. На вход интегратора подаются импульсы положительной или отрицательной полярности, в зависимости от результата сравнения. Таким образом, данный АЦП представляет собой простую следящую систему: напряжение на выходе интегратора «отслеживает» входное напряжение (рис. 4). Результатом работы данной схемы является поток нулей и единиц на выходе компаратора, который затем пропускается через цифровой ФНЧ, в результате получается N-битный результат. ФНЧ на рис. 3. Объединен с «дециматором», устройством, снижающим частоту следования отсчетов путем их «прореживания».
Рис. 4. Сигма-дельта АЦП как следящая система
Ради строгости изложения, нужно сказать, что на рис. 3 изображена структурная схема сигма-дельта АЦП первого порядка. Сигма-дельта АЦП второго порядка имеет два интегратора и две петли обратной связи, но здесь рассматриваться не будет. Интересующиеся данной темой могут обратиться к [3].
На рис. 5 показаны сигналы в АЦП при нулевом уровне на входе (сверху) и при уровне Vref/2 (снизу).
Рис. 5. Сигналы в АЦП при разных уровнях сигнала на входе.
Более наглядно работу сигма-дельта АЦП демонстрирует небольшая программа, находящаяся тут: http://designtools.analog.com/dt/sdtutorial/sdtutorial.html.
Теперь, не углубляясь в сложный математический анализ, попробуем понять, почему сигма-дельта АЦП обладают очень низким уровнем собственных шумов.
Рассмотрим структурную схему сигма-дельта модулятора, изображенную на рис. 3, и представим ее в таком виде (рис. 6):
Рис. 6. Структурная схема сигма-дельта модулятора
Здесь компаратор представлен как сумматор, который суммирует непрерывный полезный сигнал и шум квантования.
Пусть интегратор имеет передаточную функцию 1/s. Тогда, представив полезный сигнал как X(s), выход сигма-дельта модулятора как Y(s), а шум квантования как E(s), получаем передаточную функцию АЦП:
То есть, фактически сигма-дельта модулятор является фильтром низких частот (1/(s+1)) для полезного сигнала, и фильтром высоких частот (s/(s+1)) для шума, причем оба фильтра имеют одинаковую частоту среза. Шум, сосредоточенный в высокочастотной области спектра, легко удаляется цифровым ФНЧ, который стоит после модулятора.
Рис. 7. Явление «вытеснения» шума в высокочастотную часть спектра
Однако следует понимать, что это чрезвычайно упрощенное объяснение явления вытеснения шума (noise shaping) в сигма-дельта АЦП.
Итак, основным достоинством сигма-дельта АЦП является высокая точность, обусловленная крайне низким уровнем собственного шума. Однако для достижения высокой точности нужно, чтобы частота среза цифрового фильтра была как можно ниже, во много раз меньше частоты работы сигма-дельта модулятора. Поэтому сигма-дельта АЦП имеют низкую скорость преобразования.
Они могут использоваться в аудиотехнике, однако основное применение находят в промышленной автоматике для преобразования сигналов датчиков, в измерительных приборах, и в других приложениях, где требуется высокая точность. но не требуется высокой скорости.
Самым старым упоминанием АЦП в истории является, вероятно, патент Paul M. Rainey, «Facsimile Telegraph System,» U.S. Patent 1,608,527, Filed July 20, 1921, Issued November 30, 1926. Изображенное в патенте устройство фактически является 5-битным АЦП прямого преобразования.
Рис. 8. Первый патент на АЦП
Рис. 9. АЦП прямого преобразования (1975 г.)
Устройство, изображенное на рисунке, представляет собой АЦП прямого преобразования MOD-4100 производства Computer Labs, 1975 года выпуска, собранный на основе дискретных компараторов. Компараторов 16 штук (они расположены полукругом, для того, чтобы уравнять задержку распространения сигнала до каждого компаратора), следовательно, АЦП имеет разрядность всего 4 бита. Скорость преобразования 100 MSPS, потребляемая мощность 14 ватт.
На следующем рисунке изображена продвинутая версия АЦП прямого преобразования.
Рис. 10. АЦП прямого преобразования (1970 г.)
Устройство VHS-630 1970 года выпуска, произведенное фирмой Computer Labs, содержало 64 компаратора, имело разрядность 6 бит, скорость 30MSPS и потребляло 100 ватт (версия 1975 года VHS-675 имела скорость 75 MSPS и потребление 130 ватт).







