1. Тема дня

ADC: sampling time, source impedance, calibration, oversampling, DMA scan, min/max/avg и диагностика. Главная мысль: ADC измеряет результат схемы выборки, а не идеальное напряжение.

2. Зачем это нужно в проектах

ADC полезен для уровней после оптопар, серой зоны GPIO, питания 24/12/5/3.3 В, тока через шунт, деградации входа, RC-фильтра и HIL с аналоговыми уровнями. Fast path остаётся GPIO/comparator; ADC - slow diagnostics.

3. Теория

SAR ADC:

text
вход -> sample capacitor -> сравнение с Vref -> цифровой код

Влияют: Vref, source impedance, sampling time, шум, layout, RC, температура, calibration, clock. 12 бит = 0..4095 кодов. При 3.3 В LSB около 0.805 мВ, но это не точность 0.805 мВ. Есть accuracy, noise, linearity, offset/gain error. Высокоомный делитель + короткий sampling time даёт ошибку: sample capacitor не успевает зарядиться. Решения: увеличить sampling time, уменьшить сопротивления, добавить buffer op-amp, добавить capacitor для медленных сигналов. ESP32:

text
oneshot - CLI/диагностика/медленные замеры
continuous - поток сэмплов
ADC2 + Wi-Fi - осторожно, критичные каналы лучше ADC1

STM32:

text
Polling - одиночные debug замеры
Interrupt - редкие события / analog watchdog
DMA - scan нескольких каналов, min/max/avg

Oversampling снижает случайный шум, но не исправляет Vref, offset, gain error или слишком короткий sampling time. Для AC после оптопары среднее скрывает пульсации, поэтому храни min/max/avg/last:

c
typedef struct {
    uint16_t last_raw;
    uint16_t min_raw;
    uint16_t max_raw;
    uint32_t avg_raw;
    uint32_t sample_count;
    uint32_t error_count;
    int64_t last_sample_us;
} adc_channel_stats_t;

4. Типичные ошибки

  1. Верить одному ADC-сэмплу.
  2. Высокоомный делитель + короткий sampling time.
  3. ADC2 ESP32 при Wi-Fi как критичный канал.
  4. Oversampling вместо калибровки.
  5. Задерживать phase_event ADC-сканом.
  6. Перепутать порядок каналов в DMA scan.
  7. Не защитить ADC-пин от внешнего мира.

5. Практическое задание

Создай ADC_DIAGNOSTICS_POLICY.md:

markdown
# ADC diagnostics policy
Role:
ADC is used for slow diagnostics, not for fast phase timestamp.
Fast path:
opto/comparator/Schmitt -> GPIO -> phase_detector
Slow path:
analog node -> ADC -> min/max/avg -> CLI/telemetry
Rules:
1. No phase event waits for ADC.
2. ADC channels must have documented scaling.
3. Every ADC channel has min/max/avg/last stats.
4. Calibrate when voltage matters.
5. Source impedance and sampling time are checked together.
6. ESP32 critical channels prefer ADC1 with Wi-Fi.
7. STM32 ADC scan order must match channel table.

6. Что почитать или попробовать дальше

ESP-IDF ADC oneshot/continuous/calibration, STM32 HAL ADC, ST AN2834 по ошибкам ADC.

12-bit ADC при номинальном диапазоне 3.3 V имеет LSB около 0.805 mV. Что это означает?

Задание

После увеличения числа усредняемых samples шум уменьшился, но показания высокоомного делителя всё ещё систематически занижены. Что проверять и почему ещё больше averaging не решает причину?

Критерии самопроверки: Разделите random noise и systematic error; назовите sampling time/source impedance и calibration.

Показать ответ автора

Проверьте source impedance и sampling time: sample capacitor мог не успевать зарядиться. Затем scaling, Vref/calibration и ошибки схемы. Усреднение подавляет часть случайного шума, но не устраняет систематическую ошибку settling или calibration.