Главная / Без рубрики / Аналого‑цифровые преобразователи (АЦП) в микроконтроллерах: разрешение, скорость, каналы

Аналого‑цифровые преобразователи (АЦП) в микроконтроллерах: разрешение, скорость, каналы

1. Введение: зачем нужен АЦП в МК

Аналого‑цифровой преобразователь (АЦП, ADC) — ключевой модуль микроконтроллера для взаимодействия с аналоговым миром. Он переводит непрерывный входной сигнал (напряжение) в дискретное цифровое значение, с которым может работать процессор.

Типичные применения:

  • измерение температуры (термопары, терморезисторы);
  • считывание показаний датчиков давления, освещённости, влажности;
  • анализ аудиосигналов;
  • мониторинг напряжения питания;
  • обработка сигналов с потенциометров и джойстиков.

2. Основные характеристики АЦП

2.1. Разрешение (разрядность)

Определение: количество бит в выходном цифровом коде. Определяет точность преобразования.

Формула:

Vшаг​=2NVREF​​,

где:

  • Vшаг​ — шаг квантования (минимальное различаемое изменение напряжения);
  • VREF​ — опорное напряжение (обычно 3,3 В или 5 В);
  • N — разрядность АЦП (бит).

Примеры:

  • 8 бит: 28=256 уровней, шаг ≈ 12,9 мВ при VREF​=3,3 В;
  • 10 бит: 210=1024 уровня, шаг ≈ 3,2 мВ;
  • 12 бит: 212=4096 уровней, шаг ≈ 0,8 мВ.

Влияние на точность:

  • выше разрядность → меньше ошибка квантования;
  • но: шум и дрейф МК могут нивелировать преимущества высокого разрешения.

2.2. Скорость преобразования (частота дискретизации)

Определение: максимальное число измерений в секунду (выборок/с, SPS — Samples Per Second).

Ограничивающие факторы:

  • время заряда входного конденсатора АЦП;
  • тактовая частота модуля АЦП;
  • длительность цикла преобразования (зависит от разрядности).

Типичные значения для МК:

  • 8‑бит, 100 kSPS (ATmega328P);
  • 12‑бит, 1 MSPS (STM32F1);
  • 16‑бит, 100 kSPS (высокоточные МК с сигма‑дельта АЦП).

Критерий Найквиста: частота дискретизации должна быть не менее чем в 2 раза выше максимальной частоты полезного сигнала.

2.3. Каналы АЦП

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

Типы каналов:

  • Однополярные — измеряют напряжение от 0 до VREF​;
  • Дифференциальные — измеряют разность напряжений между двумя входами (повышает помехозащищённость).

Мультиплексирование:

  • МК обычно имеют один АЦП и несколько каналов, коммутируемых мультиплексором;
  • переключение каналов добавляет задержку.

Примеры конфигураций:

  • ATmega328P: 8 каналов, 10 бит;
  • STM32F4: 16 каналов, 12 бит, с буферизацией;
  • ESP32: 18 каналов, 12 бит (с возможностью усреднения).

3. Архитектура АЦП в МК

3.1. Последовательного приближения (SAR, Successive Approximation Register)

  • Принцип: двоичный поиск значения за N шагов (по числу бит);
  • Плюсы: баланс скорости и разрешения (до 16 бит, 1–5 MSPS);
  • Минусы: чувствительность к шуму на входе;
  • Применение: большинство современных МК (STM32, PIC32).

3.2. Сигма‑дельта (ΔΣ)

  • Принцип: передискретизация и цифровая фильтрация;
  • Плюсы: высокое разрешение (16–24 бит), подавление шума;
  • Минусы: низкая скорость (до 10 kSPS);
  • Применение: прецизионные измерения (весы, датчики газа).

3.3. Флэш‑АЦП (прямого преобразования)

  • Принцип: параллельное сравнение с эталонами;
  • Плюсы: очень высокая скорость (десятки MSPS);
  • Минусы: высокая стоимость, низкое разрешение (8–10 бит);
  • Применение: осциллографы на МК (редко).

4. Опорное напряжение (VREF​)

Роль: определяет диапазон входных напряжений и точность.

Источники:

  • внутренний ИОН (обычно 1,2–3 В);
  • внешний источник (через вывод VREF+​);
  • напряжение питания МК (VDD​).

Выбор:

  • для максимальной точности — внешний прецизионный ИОН;
  • для простоты — внутренний ИОН или VDD​.

5. Режимы работы АЦП

5.1. Однократное преобразование

  • АЦП запускается по команде, делает одно измерение;
  • подходит для редких измерений (раз в секунду).

5.2. Непрерывный режим

  • АЦП автоматически запускает следующее преобразование после завершения текущего;
  • используется для обработки сигналов в реальном времени.

5.3. Сканирование каналов

  • последовательное измерение нескольких каналов по расписанию;
  • экономит время процессора.

5.4. Преобразование по триггеру

  • запуск от таймера, внешнего сигнала или периферии;
  • важно для синхронной выборки (например, трёхфазных систем).

6. Факторы, влияющие на точность

6.1. Шум и помехи

  • Источники: цифровые цепи, питание, внешние наводки;
  • Меры борьбы:
    • раздельная аналоговая и цифровая земля (AGND, DGND);
    • фильтры на входах (RC‑цепочки);
    • экранирование.

6.2. Температурный дрейф

  • изменение характеристик АЦП при нагреве;
  • решение: калибровка при старте или периодическая коррекция.

6.3. Ошибка смещения (Offset Error)

  • ненулевое выходное значение при нулевом входе;
  • компенсируется программно (измерение «нуля»).

6.4. Ошибка усиления (Gain Error)

  • отклонение шкалы преобразования;
  • калибровка по эталонному напряжению.

7. Программирование АЦП: примеры

7.1. AVR (ATmega328P)

// Инициализация
ADMUX = (1 << REFS0);           // Опорное — VCC
ADCSRA = (1 << ADEN) |           // Включить АЦП
         (1 << ADSC) |          // Начать преобразование
         (1 << ADPS2) |      // Предделитель 128 → ~125 kSPS
         (1 << ADPS1) |
         (1 << ADPS0);

// Чтение канала 0
ADMUX &= 0xF8;                    // Выбрать канал 0
ADCSRA |= (1 << ADSC);           // Запустить преобразование
while (ADCSRA & (1 << ADSC));  // Ждать завершения
uint16_t result = ADC;           // Получить результат (10 бит)

7.2. STM32 (HAL)

ADC_HandleTypeDef hadc1;
ADC_ChannelConfTypeDef sConfig;

__HAL_RCC_ADC1_CLK_ENABLE();

hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ContinuousConvMode = ENABLE;
if (HAL_ADC_Init(&hadc1) != HAL_OK) { /* Ошибка */ }

sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_CYCLES_15;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t value = HAL_ADC_GetValue(&hadc1);

7.3. ESP32

#include "driver/adc.h"


adc1_config

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *