Как ШИМ превращается в аналоговое напряжение
ШИМ-ЦАП — самый дешёвый способ получить аналоговое напряжение из микроконтроллера, у которого нет встроенного ЦАП. Идея простая: ШИМ-сигнал с фиксированной частотой и меняющейся скважностью пропускают через RC-фильтр нижних частот. Фильтр усредняет прямоугольные импульсы, и на выходе остаётся постоянная составляющая, пропорциональная скважности D. При D = 0 % на выходе 0 В, при D = 100 % — полное питание, а между ними — линейная шкала. Так одна цифровая нога МК и два копеечных пассивных элемента заменяют полноценный преобразователь.
Vвых = Vпит · D fc = 1/(2π·R·C)
пульсации(pp) ≈ Vпит/(4·fшим·R·C) установление ≈ R·C·N·ln2
Выходное напряжение задаёт только скважность: Vвых = Vпит·D. Всё остальное — качество этого напряжения. Фильтр характеризуют частотой среза fc = 1/(2π·R·C): выше неё сигнал давится, ниже — проходит. Чтобы отфильтровать несущую ШИМ и оставить только среднее, частоту среза берут намного ниже частоты ШИМ — тогда импульсы усредняются, а полезный (медленный) сигнал проходит без искажений. Постоянная времени фильтра τ = R·C — та же величина, что и в калькуляторе RC постоянной времени.
Разрядность и шаг ЦАП (LSB)
Разрядность N говорит, на сколько ступеней делится шкала напряжения. Число уровней равно 2^N, а шаг одного уровня — младший значащий разряд: LSB = Vпит/2^N. Для 8 бит это 256 ступеней, для 10 бит — 1024, для 12 бит — 4096. Реальная разрядность ШИМ-ЦАП ограничена не столько таймером МК, сколько разрешением самого таймера: чтобы получить N бит на выходе, счётчик ШИМ должен считать до 2^N, а значит при том же тактовом генераторе частота ШИМ падает вдвое на каждый добавленный бит. Отсюда вечный компромисс: больше бит — ниже несущая — труднее фильтровать. LSB — это масштаб, к которому привязывают всё остальное: пульсации, шум и точность имеет смысл мерить именно в долях LSB, а не в абсолютных милливольтах.
Пульсации: сколько «дрожит» выход
Идеального постоянного напряжения на выходе не бывает — сквозь фильтр всегда просачивается остаток несущей. Это и есть пульсации: размах определяется формулой Vпит/(4·fшим·R·C) и максимален при скважности 50 %, когда импульс и пауза равны. Чем выше частота ШИМ и чем больше произведение R·C, тем сильнее подавляется пульсация. Практическое правило: пульсации должны быть меньше одного LSB, иначе младшие биты «тонут» в дрожании и разрядность становится фиктивной. Если калькулятор показывает больше 1 LSB, вариантов два — поднять частоту ШИМ или увеличить R·C. Обратите внимание: пульсации зависят от частоты ШИМ линейно, а от частоты среза фильтра — тоже линейно, поэтому удвоение любого из этих параметров вдвое уменьшает размах дрожания. Второй фильтр (два звена RC подряд или активный фильтр Sallen-Key) давит пульсации гораздо резче: на каждую декаду частоты второй порядок отнимает 40 дБ против 20 дБ у одиночного RC, но и время установления у двухзвенного фильтра растёт, а сам он может дать выброс, поэтому номиналы подбирают с запасом по устойчивости.
Время установления и компромисс
За гладкий выход платят скоростью. Время установления ≈ R·C·N·ln2 — это сколько нужно фильтру, чтобы после смены скважности выход дошёл до нового значения с точностью до одного LSB. Множитель N·ln2 берётся из того, что за каждую постоянную времени τ ошибка уменьшается в e раз, а чтобы уложиться в 1/2^N от диапазона, нужно примерно N·ln2 ≈ 0,69·N таких интервалов. Вывод неприятный: большое R·C душит пульсации, но во столько же раз замедляет отклик. Поэтому ШИМ-ЦАП хорош там, где сигнал меняется медленно (яркость, уставка температуры, опорное напряжение), и плох там, где нужна быстрая динамика — там ставят настоящий R-2R ЦАП или микросхему ЦАП. Ограничивать ток фильтра резистором тоже нельзя бесконечно: слишком большой R создаёт падение на нагрузке, поэтому выход почти всегда буферят повторителем на ОУ.
Типовые параметры фильтра
Ориентиры для fc намного ниже несущей ШИМ. Значения пульсаций и времени — для питания 3,3 В при R·C, дающем указанную частоту среза (округлённо, скважность 50 %).
| Задача | fшим | fc фильтра | Установление |
| Яркость LED, уставки | 1 кГц | 30 Гц | ≈ 30 мс |
| Опорное напряжение | 20 кГц | 50 Гц | ≈ 20 мс |
| Медленная аналоговая шкала | 100 кГц | 100 Гц | ≈ 10 мс |
| Аудио / динамика | 1 МГц+ | 1–5 кГц | < 1 мс |
Где применяют — и где не годится
ШИМ-ЦАП стоит почти в каждом любительском проекте: регулировка яркости светодиодов (там ещё важна гамма-коррекция), задание опорного напряжения для компаратора, генерация плавной уставки в терморегуляторе, простые синтезаторы огибающей. Управление сервоприводом — родственная тема, но там ШИМ используют напрямую как импульс, без фильтра. Не годится ШИМ-ЦАП для быстрых сигналов, прецизионных источников и всего, где важна монотонность на уровне долей милливольта: инерция фильтра и остаточная пульсация ставят потолок. Кроме того, на точность влияет размах логической единицы порта: выход привязан к напряжению питания МК, поэтому нестабильное или «просаженное» питание прямо переносится в ошибку выходного напряжения, и для ответственных узлов ногу МК питают от отдельного чистого источника или добавляют опорный стабилизатор. Для оценки напряжения на выходе и обратного перевода в код удобен калькулятор ADC ↔ напряжение, а величину реактивного сопротивления конденсатора на частоте среза даёт калькулятор реактивности.
Пример
На значениях по умолчанию (fшим = 10 МГц, Vпит = 3,3 В, R = 10 кОм, C = 1 мкФ, N = 8 бит) шаг ЦАП LSB = 3,3 / 256 ≈ 12,9 мВ. Частота среза fc = 1/(2π·10 000·10⁻⁶) ≈ 15,92 Гц — в 600 тысяч раз ниже несущей, поэтому фильтрация очень глубокая. Размах пульсаций = 3,3/(4·10⁷·10⁴·10⁻⁶) ≈ 8,25 мкВ, то есть < 0,001 LSB — практически незаметен. Плата за это — время установления R·C·N·ln2 = 0,01·8·0,693 ≈ 55,45 мс: выход выходит на новое значение почти за одну двадцатую секунды, что нормально для яркости или уставки, но недопустимо для звука.
См. также: RC-фильтр · ШИМ · ADC ↔ напряжение · R-2R ЦАП · RC постоянная времени · все калькуляторы
|