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:
вход -> 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:
oneshot - CLI/диагностика/медленные замеры
continuous - поток сэмплов
ADC2 + Wi-Fi - осторожно, критичные каналы лучше ADC1STM32:
Polling - одиночные debug замеры
Interrupt - редкие события / analog watchdog
DMA - scan нескольких каналов, min/max/avgOversampling снижает случайный шум, но не исправляет Vref, offset, gain error или слишком короткий sampling time. Для AC после оптопары среднее скрывает пульсации, поэтому храни min/max/avg/last:
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. Типичные ошибки
- Верить одному ADC-сэмплу.
- Высокоомный делитель + короткий sampling time.
- ADC2 ESP32 при Wi-Fi как критичный канал.
- Oversampling вместо калибровки.
- Задерживать phase_event ADC-сканом.
- Перепутать порядок каналов в DMA scan.
- Не защитить ADC-пин от внешнего мира.
5. Практическое задание
Создай ADC_DIAGNOSTICS_POLICY.md:
# 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.
Задание
После увеличения числа усредняемых samples шум уменьшился, но показания высокоомного делителя всё ещё систематически занижены. Что проверять и почему ещё больше averaging не решает причину?
Критерии самопроверки: Разделите random noise и systematic error; назовите sampling time/source impedance и calibration.
Показать ответ автора
Проверьте source impedance и sampling time: sample capacitor мог не успевать зарядиться. Затем scaling, Vref/calibration и ошибки схемы. Усреднение подавляет часть случайного шума, но не устраняет систематическую ошибку settling или calibration.