Встраиваемые системы

ADC, DAC и аналоговые интерфейсы

Умные часы Garmin измеряют пульс - фотоплетизмография через ADC. Умный термостат Nest считывает температуру через ADC. Tesla интерпретирует педаль газа через 12-bit ADC. Каждый раз когда смартфон записывает голос - 24-bit ADC оцифровывает микрофон. Без ADC/DAC embedded системы не имели бы связи с реальным миром.

  • **STM32 аудио**: STM32F7 Discovery имеет встроенный CS43L22 DAC/усилитель и SAI интерфейс. Используется для синтеза звука, аудиоплееров, голосовых интерфейсов.
  • **ESP32 + ADS1115**: комбинация для DIY метеостанций и промышленных датчиков. ADS1115 (16-bit, I2C ADC) добавляет точность там где встроенный ADC ESP32 нелинеен.
  • **Arduino Medical**: проекты мониторинга ЭКГ на Arduino используют INA128 инструментальный усилитель + ADC для измерения сигналов сердца (1-2 мВ) через signal conditioning.

ADC: разрядность и точность

Реальный мир аналоговый: температура, звук, давление - непрерывные сигналы. Микроконтроллер работает с числами. ADC (Analog-to-Digital Converter) преобразует напряжение [0...Vref] в целое число [0...2^n - 1], где n - разрядность.

Разрядность определяет разрешение: 1 LSB (Least Significant Bit) = Vref / 2^n. Для STM32 с 12-bit ADC и Vref=3.3V: 1 LSB = 3.3V / 4096 ≈ 0.8 мВ. Arduino Uno (10-bit): 5V / 1024 ≈ 4.9 мВ. ESP32 (12-bit): 3.3V / 4096 ≈ 0.8 мВ, но реальная нелинейность ESP32 ADC значительно хуже теоретической.

Practical accuracy ADC ниже теоретической из-за DNL/INL ошибок, шума, temperature drift. ESP32 ADC печально известен нелинейностью ~10-15% в диапазоне 0.1-0.3V и 3.0-3.3V. Для точных измерений на ESP32 используют внешний 16-bit ADC (ADS1115 по I2C) или калибруют через характеристику.

12-bit ADC, Vref=3.3V. Какое минимальное изменение напряжения он разрешает?

Теорема Найквиста и частота дискретизации

С какой частотой оцифровывать сигнал? Теорема Найквиста-Шеннона: частота дискретизации fs должна быть **как минимум вдвое выше** максимальной частоты сигнала fmax: `fs >= 2 * fmax`. Нарушение приводит к **aliasing** - появлению ложных частот.

  • **Звук**: слух человека 20-20 000 Hz. CD: fs=44 100 Hz. MP3: fs=44 100 или 48 000 Hz. Nyquist: 44100/2 = 22 050 Hz - выше слышимого диапазона.
  • **Вибрация машин**: интересные частоты до 10 кГц. Промышленные виброанализаторы: fs=25 600 Hz.
  • **ЭКГ**: ЧСС до 3 Hz, но важны гармоники до 100 Hz. Стандарт: fs=500-1000 Hz.
  • **Anti-aliasing filter**: аналоговый НЧ фильтр перед ADC, срезающий частоты выше fs/2. Без него aliasing неизбежен.

ADC оцифровывает звук с fs=8000 Hz без anti-aliasing фильтра. Сигнал содержит компоненту 5000 Hz. Что произойдёт?

DAC: цифра обратно в аналог

DAC (Digital-to-Analog Converter) - обратная операция: число [0...2^n - 1] в напряжение [0...Vref]. STM32F4 имеет встроенный 12-bit DAC на двух каналах. Выходное напряжение: `Vout = Vref * code / (2^n - 1)`.

Основные применения DAC в embedded: генерация аудио сигналов, управляющие напряжения для аналоговых схем, генерация тест-сигналов, плавное управление мощностью (вместо PWM для тихой работы). DAC + операционный усилитель = прецизионный источник тока или напряжения.

Фильтрация после DAC критична: ступенчатый цифровой сигнал содержит гармоники на частотах kfs ± fsignal. Для аудио нужен reconstruction фильтр (НЧ, срез на fs/2). ESP32-A2DP: встроенный I2S DAC + внешний MAX98357 усилитель позволяет стримить Bluetooth Audio с качеством CD.

STM32 12-bit DAC, Vref=3.3V. Код = 2048. Какое выходное напряжение?

Подготовка сигнала: делители, фильтры, усилители

ADC может принять сигнал в диапазоне 0...Vref (обычно 3.3V). Реальные сигналы бывают: -5V...+5V (датчик), 0...12V (автомобильный сигнал), несколько mV (термопара). Signal conditioning - приведение сигнала к диапазону ADC.

  • **Делитель напряжения**: для сигналов > Vref. R1+R2: Vout = Vin * R2/(R1+R2). Минус: входное сопротивление не бесконечное, нагружает источник.
  • **Операционный усилитель (неинвертирующий)**: Vout = Vin * (1 + Rf/R1). Для усиления мВ-сигналов (термопара, датчик давления) и буферизации.
  • **RC фильтр низких частот**: C между сигналом и GND, R последовательно. f_cutoff = 1 / (2π*R*C). Убирает ВЧ шум перед ADC.
  • **Уровень смещения (offset)**: ОУ со смещением для двуполярных сигналов: -5..+5V -> 0..3.3V через вычисление: Vout = (Vin + 5) * 3.3/10.
  • **Защита от ESD**: диоды clamp к VCC и GND перед ADC входом. Без защиты переходное напряжение от статики уничтожает АЦП.

Более высокая разрядность ADC всегда даёт лучшие измерения

Эффективная разрядность (ENOB) ограничена шумом входной цепи, питания и самого ADC. 16-bit ADC в шумной схеме даёт хуже, чем 12-bit ADC с хорошей разводкой платы

ENOB = (SINAD - 1.76) / 6.02. Для STM32 12-bit ADC типичный ENOB = 10-11 бит из-за внутреннего шума. Дифференциальная разводка, отдельный аналоговый источник питания, RC фильтр на Vref - дают больше, чем переход с 12-bit на 16-bit при плохой схемотехнике.

Термопара вырабатывает 0-50 мВ при 0-500°C. Как подключить к Arduino (10-bit ADC, 0-5V)?

Ключевые идеи

  • **ADC разрядность**: 1 LSB = Vref / 2^n. 12-bit при 3.3V = 0.8 мВ разрешение. Реальная точность (ENOB) хуже из-за шума.
  • **Теорема Найквиста**: fs >= 2 * fmax. Нарушение -> aliasing. Anti-aliasing фильтр перед ADC обязателен для точных измерений.
  • **DAC**: обратная операция, код -> напряжение. Reconstruction фильтр после DAC убирает ступенчатость сигнала.
  • **Signal conditioning**: делители, ОУ, RC фильтры для приведения реального сигнала к диапазону ADC. ESD защита обязательна.

Связанные темы

ADC/DAC связывают цифровой мир микроконтроллера с аналоговой реальностью:

  • Таймеры и прерывания — ADC может тактироваться от таймера для точной fs; DMA + Timer + ADC = непрерывная оцифровка без нагрузки на CPU
  • DMA и потоки данных — DMA переносит данные ADC в память без участия CPU - ключевой паттерн для высокочастотной оцифровки (аудио, вибрация)

Вопросы для размышления

  • ESP32 ADC нелинеен в крайних диапазонах. Как откалибровать его программно, имея точный источник опорного напряжения и возможность измерить несколько точек?
  • ЭКГ сигнал имеет амплитуду 1-2 мВ и полезные частоты до 100 Hz. Тело человека - источник 50/60 Hz помехи от сети. Как спроектировать signal conditioning для точного считывания ЭКГ?
  • DAC генерирует синусоиду 440 Hz. Без reconstruction фильтра в спектре присутствуют гармоники на fs ± 440 Hz. Почему это важно для аудиоприложений и как это устраняется?

Связанные уроки

  • dsp-01
ADC, DAC и аналоговые интерфейсы

0

1

Войти