Главная / Без рубрики / Цифро‑аналоговые преобразователи (ЦАП) в микроконтроллерах

Цифро‑аналоговые преобразователи (ЦАП) в микроконтроллерах

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;

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *