Перейти к содержанию

Как работает АЦП микроконтроллера?

Обновлено Редакция GAW

АЦП микроконтроллера — это компаратор, конденсатор выборки и регистр, который подбирает код. Он не «измеряет» напряжение напрямую: он запоминает его на конденсаторе и затем, бит за битом, сравнивает с долями опорного напряжения, пока не найдёт ближайший код. Поэтому такой преобразователь называют АЦП последовательного приближения — SAR. Разберём на ATmega328P, микроконтроллере Arduino Uno, а затем сравним с ESP32.

Шаг 1: выборка

Через мультиплексор выбранный вход подключается к конденсатору выборки-хранения. По даташиту ATmega328P выборка происходит через 1,5 такта АЦП после старта, и конденсатор должен успеть зарядиться: Microchip рекомендует источник сигнала с сопротивлением около 10 кОм и ниже, иначе время выборки растёт непредсказуемо. Делитель на 100 кОм даст заниженный результат — не потому, что АЦП плохой, а потому, что конденсатор не успел зарядиться. Как это считать — в словаре: время выборки.

Шаг 2: подбор кода

Дальше вход отключается, и логика подбирает код: сначала проверяет, больше ли напряжение половины опорного, потом четверти и так далее — по одному такту на бит. У ATmega328P обычное преобразование занимает 13 тактов АЦП, первое после включения — 25. Тактовая частота АЦП задаётся предделителем от 2 до 128 и для полного разрешения должна лежать в 50–200 кГц. В Arduino при 16 МГц стоит предделитель 128: 125 кГц, одно измерение — 13 тактов, 104 мкс (наш расчёт); калькулятор АЦП AVR посчитает другие варианты.

Шаг 3: опорное напряжение

Код — это доля опорного напряжения, а не вольты:

N=VIN⋅1024VREFN = \frac{V_{IN} \cdot 1024}{V_{REF}}

У ATmega328P опорным может быть AVCC, внутренний источник 1,1 В или внешнее напряжение на AREF. Если опорное — питание от USB, то «плавает» и результат; что с этим делать, разобрано в ответе «С какой точностью Arduino измеряет напряжение».

Точность и разрядность: ATmega328P против ESP32

ATmega328PESP32
Разрядность10 бит12 бит
Каналов8 (6 в корпусе DIP)до 18
Скоростьдо 15 kSPS при полном разрешении200 ksps (RTC), 2 Msps (DIG)
ОпорноеAVCC, 1,1 В, AREFвнутреннее, диапазон задаёт ослабление входа (atten 0–3)
НелинейностьINL 0,5 LSB, DNL 0,25 LSBINL ±12 LSB, DNL ±7 LSB
Абсолютная точность2 LSB при 200 кГц±6 % между чипами; после калибровки ±23…±60 мВ

Разрядность не равна точности. У ESP32 кодов в четыре раза больше, но по даташиту нелинейность достигает ±12 LSB, а без калибровки два чипа расходятся на ±6 %. Поэтому для ESP32 важнее не биты, а калибровка по eFuse и выбор ослабления под диапазон сигнала — об этом статья АЦП ESP32 и калькулятор.

Похожие вопросы

Почему АЦП AVR нельзя тактировать быстрее 200 кГц?

Можно, но с потерей точности: по даташиту для полного 10-битного разрешения тактовая частота АЦП должна лежать в 50–200 кГц. Таблица характеристик это подтверждает — абсолютная точность 2 LSB при 200 кГц и 4,5 LSB при 1 МГц. Если хватает 8 бит, предделитель уменьшают ради скорости.

Чем на практике 10 бит отличаются от 12 бит?

Числом ступеней: 1024 против 4096. При опорном 5 В шаг 10-битного АЦП ATmega328P — около 4,9 мВ (наш расчёт). Но разрядность не равна точности: у ESP32 12 бит, а интегральная нелинейность по даташиту достигает ±12 LSB, и без калибровки показания двух чипов расходятся на ±6 %.

Что покажет АЦП, если подать напряжение выше опорного?

Максимальный код: 0x3FF у ATmega328P — по даташиту он соответствует опорному напряжению минус один LSB, и всё, что выше, срезается. Вход при этом не должен выходить за 0–VCC. У ESP32 при максимальном ослаблении (atten = 3) выше примерно 2450 мВ (код 3000) точность падает, а на выводы нельзя подавать больше 3,6 В.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B, 2020) — разд. 24.1–24.2 — 10-битный АЦП последовательного приближения, 8 входов через мультиплексор, выборка-хранение, время преобразования 13–260 мкс, до 15 kSPS при полном разрешении, опорное 1,1 В, AVCC или AREF, диапазон входа 0–VCC; разд. 24.4 — тактовая частота АЦП 50–200 кГц для полного разрешения, предделитель 2–128, обычное преобразование 13 тактов, первое после включения 25, выборка через 1,5 такта; табл. 24-1; разд. 24.6.1 — источник сигнала около 10 кОм и ниже; разд. 24.6.3 — смещение, усиление, INL, DNL, ошибка квантования ±0,5 LSB; разд. 24.7 — ADC = VIN · 1024 / VREF; табл. 29-15 — абсолютная точность 2 LSB при 200 кГц и 4,5 LSB при 1 МГц, INL 0,5 LSB, DNL 0,25 LSB
  2. Espressif. ESP32 Series Datasheet v5.3 — разд. 4.9.1 — два 12-битных SAR АЦП, до 18 каналов; табл. 4-3 — DNL ±7 LSB, INL ±12 LSB при внешнем конденсаторе 100 нФ и выключенном радио, частота выборки 200 ksps (RTC) и 2 Msps (DIG); разброс ±6 % между чипами; табл. 4-4 — после калибровки по eFuse Vref полная ошибка ±23 мВ (100–950 мВ), ±30 мВ (100–1250 мВ), ±40 мВ (150–1750 мВ), ±60 мВ (150–2450 мВ); выше 3000 кодов при atten = 3 точность хуже
Страница помогла?

Нашли ошибку? ·