1. Введение: назначение и роль ЦАП в встраиваемых системах
Цифро‑аналоговый преобразователь (ЦАП, DAC) — периферийный модуль микроконтроллера, преобразующий цифровое значение (обычно целое число) в аналоговый сигнал (напряжение или ток). Это «мост» между цифровой логикой МК и аналоговыми устройствами.
Ключевые задачи ЦАП:
- генерация аналоговых управляющих сигналов (например, для моторов, клапанов);
- синтез аудиосигналов (простейшие проигрыватели, тональные сигналы);
- формирование опорных напряжений для других аналоговых схем;
- калибровка и тестирование аналоговых цепей;
- реализация аналоговых выходов в промышленных контроллерах.
Почему ЦАП встраивают в МК?
- экономия места и стоимости (не нужен внешний чип);
- синхронизация с цифровыми процессами МК;
- низкое энергопотребление;
- простота программирования через регистры периферии.
2. Основные характеристики ЦАП
2.1. Разрешение (разрядность)
- Определение: число бит входного цифрового кода. Определяет количество уровней выходного сигнала.
- Формула:Nуровней=2n, где n — разрядность (бит).
- Примеры:
- 8 бит → 256 уровней;
- 10 бит → 1024 уровня;
- 12 бит → 4096 уровней.
- Влияние: выше разрядность → меньше шаг квантования → выше точность воспроизведения сигнала.
2.2. Опорное напряжение (VREF)
- Роль: задаёт диапазон выходного напряжения (от 0 до VREF или ±VREF для биполярных ЦАП).
- Источники:
- внутренний ИОН (1,2–3 В);
- внешний источник (через вывод VREF+);
- напряжение питания МК (VDD).
- Выбор: для максимальной точности — внешний прецизионный ИОН.
2.3. Время установления (tsettling)
- Определение: время от момента изменения входного кода до выхода сигнала в заданный допуск (например, ±1 МЗР).
- Типичные значения: от сотен наносекунд до микросекунд.
- Значение: ограничивает максимальную частоту обновления выходного сигнала.
2.4. Максимальная частота обновления
- Определение: сколько раз в секунду можно изменить выходное значение.
- Ограничения:
- время установления ЦАП;
- скорость интерфейса МК (если данные подаются извне);
- тактовая частота периферии.
- Пример: ЦАП с tsettling=1 μs теоретически поддерживает до 1 MSPS (но на практике меньше из‑за накладных расходов).
2.5. Линейность и ошибки
- DNL (Differential Non‑Linearity): отклонение шага между соседними уровнями от идеального.
- INL (Integral Non‑Linearity): накопленная ошибка относительно идеальной передаточной функции.
- Смещение (Offset Error): ненулевое выходное напряжение при нулевом входе.
- Ошибка усиления (Gain Error): наклон передаточной характеристики отличается от идеального.
3. Архитектуры ЦАП в МК
3.1. ЦАП на резисторной матрице R‑2R
- Принцип: взвешенное суммирование токов через резисторы.
- Плюсы: простота, хорошая линейность, низкая стоимость.
- Минусы: требует точных резисторов, чувствителен к паразитным ёмкостям.
- Применение: встроенные ЦАП МК среднего класса.
3.2. ЦАП с переключаемыми конденсаторами (Capacitive DAC)
- Принцип: заряд конденсаторов с разными весами, затем передача заряда на выход.
- Плюсы: компактность, низкое энергопотребление.
- Минусы: шум перезаряда, зависимость от стабильности ёмкости.
- Применение: низкопотребляющие МК (например, для IoT).
3.3. Сигма‑дельта ЦАП (ΔΣ DAC)
- Принцип: передискретизация и цифровая фильтрация, затем аналоговое интегрирование.
- Плюсы: высокое разрешение (16–24 бит), подавление шума.
- Минусы: низкая скорость (до десятков kSPS), сложность.
- Применение: аудиоприложения, прецизионные генераторы.
3.4. ШИМ‑ЦАП (PWM DAC)
- Принцип: ШИМ‑сигнал фильтруется RC‑цепочкой → среднее напряжение пропорционально коэффициенту заполнения.
- Плюсы: не требует аппаратного ЦАП, гибкость.
- Минусы: низкий КПД, высокий уровень шума, медленная реакция.
- Применение: когда нет встроенного ЦАП или нужны дополнительные выходы.
4. Режимы работы ЦАП
4.1. Однократная запись
- ЦАП устанавливает значение и удерживает его до следующей команды.
- Подходит для статических сигналов (опорные напряжения).
4.2. Непрерывный режим
- ЦАП автоматически обновляет выход по таймеру или внешнему триггеру.
- Используется для генерации аналоговых сигналов (синусоиды, треугольники).
4.3. Буферизованный режим
- Данные загружаются в регистр‑защёлку, затем одновременно применяются к выходу.
- Устраняет «ступеньки» при обновлении нескольких каналов.
4.4. Генерация сигналов по таблице
- МК загружает массив значений в буфер ЦАП, который воспроизводит их с заданной частотой.
- Применяется для синтеза звука, тестовых сигналов.
5. Типичные схемы включения
5.1. Прямой выход
- Выход ЦАП подключается к нагрузке (например, ОУ или АЦП для калибровки).
- Ограничение: ток нагрузки обычно ≤ 5 мА (уточнять в datasheet).
5.2. С операционным усилителем (ОУ)
- ОУ в неинвертирующем включении:
- повышает ток выхода;
- изолирует ЦАП от нагрузки;
- позволяет сдвигать уровень (для биполярных сигналов).
- Пример схемы:
ЦАП → [R1] → вход ОУ Выход ОУ → обратная связь через [R2] Коэффициент усиления: $1 + \frac{R2}{R1}$
5.3. Фильтрация ШИМ (для PWM DAC)
- RC‑фильтр нижних частот:
- fсрез=2πRC1;
- выбрать fсрез значительно ниже частоты ШИМ.
- Многозвенный фильтр (LC, активный) — для лучшего подавления пульсаций.
6. Программирование ЦАП: примеры для разных МК
6.1. STM32 (HAL)
DAC_HandleTypeDef hdac;
__HAL_RCC_DAC1_CLK_ENABLE();
hdac.Instance = DAC1;
if (HAL_DAC_Init(&hdac) != HAL_OK) { /* Ошибка */ }
// Конфигурация канала 1
DAC_ChannelConfTypeDef sConfig = {0};
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1);
// Установка значения (12 бит)
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048); // 50% от VREF
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
6.2. ESP32
#include "driver/dac.h"
// Инициализация
dac_output_enable(DAC_CHANNEL_1); // Канал 1 (GPIO25)
// Установка значения (8 бит)
dac_output_voltage(DAC_CHANNEL_1, 128); // 50% от VDD (3,3 В → 1,65 В)
6.3. AVR (на примере ATmega328P с ШИМ)
// Настройка ШИМ на Timer1 (канал A)
TCCR1A = (1 << COM1A1) | (1 << WGM11); // Неинвертирующий режим, Fast PWM
TCCR1B = (1 << CS10) | (1 << WGM13) | (1 << WGM12); // Предделитель 1, режим 15
ICR1 = 255;



