Дельта-модульирование — это техника, используемая в системах цифровой связи для преобразования аналоговых сигналов в цифровые с минимальной сложностью. Кодируя только разницу между последовательными выборками, а не абсолютным значением сигнала, дельта-модульатор достигает низкого энергопотребления и простого оборудования при сохранении важной информации о сигнале. Создание дельта-модулатора с использованием Arduino и базовых электронных компонентов — отличный проект для энтузиастов электроники и студентов, изучающих обработку сигналов и аналого-цифровое преобразование. Этот учебник обеспечивает тщательное, пошаговое руководство по проектированию, сборке и тестированию такой системы.

Понимание модуляции дельты

Дельта-модультация (DM) представляет собой форму дифференциальной импульсно-кодовой модуляции, которая аппроксимирует аналоговый сигнал путем отслеживания его изменений, а не его абсолютной амплитуды. Система сравнивает текущий входной образец с предыдущей оценкой вывода. Если вход больше, модулятор выводит 1; если меньше, 0. Этот однобитный цифровой поток приводит в действие интегратор, который реконструирует предполагаемый сигнал, который подает обратно в компаратор. Процесс требует только компаратора, интегратора (часто построенного с помощью оп-ампера и конденсатора) и метода для генерации реконструированного сигнала - обычно цифровой-аналоговый преобразователь (DAC) или сигнал импульсно-широтной модуляции (PWM), отфильтрованный для получения аналогового напряжения.

Две важные метрики производительности доминируют в конструкции дельта-модуляции: перегрузка наклона и гранулированный шум. Перегрузка наклона возникает, когда входной сигнал изменяется быстрее, чем может следовать интегратор, в результате чего реконструированный сигнал отстает. Гранульный шум, также называемый шумом праздного канала, возникает, когда входной сигнал изменяется очень медленно или остается постоянным, производя чередующиеся 1 и 0 битов, которые создают небольшие треугольные колебания вокруг истинного значения. Оба эффекта можно минимизировать путем корректировки размера шага или с помощью адаптивной дельта-модуляции, где размер шага изменяется в соответствии с наклоном входного сигнала.

Компоненты и инструменты

Для создания функционального модулятора дельты требуется выбор общедоступных электронных компонентов и испытательного оборудования. Приведенный ниже перечень охватывает основные элементы; точные спецификации будут обсуждаться в разделе, посвященном проектированию схем.

  • Arduino Uno или совместимый микроконтроллер — обеспечивает цифровой ввод/вывод, вывод PWM и USB-сериал для отладки.
  • Операционный усилитель (op-amp) — используется в качестве интегратора.Обычные варианты включают LM358, TL072 или LM741.
  • Сравнитель или триггер Шмитта — Преобразует аналоговую разницу в чистый цифровой сигнал. Работает LM393 или встроенный компаратор Arduino (если он имеется).
  • Резисторы — Различные значения (например, 10 кОм, 100 кОм, 1 кОм) для смещения, обратной связи и масштабирования ввода.
  • Капитаны — Обычно от 0,1 мкФ до 10 мкФ для интегратора синхронизации и отсоединения питания.
  • Цифровой аналоговый преобразователь (DAC) или PWM с фильтром низких частот — для получения восстановленного аналогового напряжения из цифрового битового потока. Достаточно простого RC-фильтра на штифте Arduino PWM для многих приложений.
  • Хлебная доска и соединительные провода — для прототипирования схемы.
  • Осциллограф или логический анализатор — Для визуализации сигналов во время тестирования.В качестве альтернативы используйте серийный планировщик Arduino.
  • Генератор сигналов — для обеспечения тестовых входных сигналов, таких как синусоидальные волны или звуковые тона.

Дизайн окружности

Стадия компаратора

Сравнитель сравнивает входной сигнал с реконструированным выходом (обратная связь). Подключает аналоговый входной сигнал к неинвертируемому входу (+) компаратора. Инвертирующий вход (−) принимает выход интегратора, который представляет текущую оценку сигнала. Когда вход превышает оценку, выход компаратора идет высоко (логика 1); в противном случае он идет низко (логика 0). Если использовать операционный усилитель в качестве компаратора, убедитесь, что он сконфигурирован с усилением в открытом цикле или мягкой положительной обратной связью для ускорения переходов. Для более чистого переключения используйте выделенный компаратор IC, такой как LM339 или LM393, который включает в себя выходы с открытым коллектором, совместимые с уровнями логики Arduino.

Интегратор (фильтр реконструкции)

Интегратор преобразует цифровой управляющий сигнал (1 или 0) в аналоговое напряжение, которое отслеживает вход. Хорошо работает классический инвертирующий интегратор, построенный вокруг оп-ампа. Подключите резистор R от цифровой управляющей линии (например, выходной штифт Arduino или выход DAC) к инвертируемому входу оп-ампа. Поместите конденсатор C между выходом оп-ампа и его инвертирующим входом. Оп-амп неинвертирующий вход подключается к земле (или опорное напряжение, если требуется биполярный сигнал). Функция передачи - \(V {\text{out}} = -\frac{1}{RC} \int V {\text{in}} \, dt \). Резистор обратной связи R и конденсатор C определяют размер шага и скорость отслеживания. Типичные значения: R = 10 кОм, C = 0,1 мкФ до 1 мкФ. Для однополярных сигналов (0-5 В) опорное напряжение 2,5 В может быть применено к неинвертируемому входу

Цифровая конверсия в аналог: метод PWM

Вместо использования выделенного чипа DAC многие дельта-модуляторы на основе Arduino генерируют восстановленный сигнал с импульсно-широтной модуляцией (PWM), за которым следует аналоговый фильтр с низким пропуском. Функция Arduino производит квадратную волну примерно на 490 Гц (по умолчанию) или 980 Гц (на определенных штифтах). Рабочий цикл соответствует желаемому аналоговому напряжению (от 0 до 5 В). Фильтр с низким частотой второго порядка с частотой отсечки значительно ниже частоты PWM (например, 100 Гц для аудио) удаляет рябь переключения. Используйте пассивный RC или активный фильтр Sallen-Key. Для более высокой производительности используйте Timer1 Arduino для генерации гораздо более быстрой PWM (до 31 кГц или более), что облегчает требования к фильтрации и улучшает пропускную способность отслеживания.

Обратная связь Loop and Clocking

Дельта-модулятор работает синхронно: при каждом тиканье часов выход компаратора защелкивается прерывателем Arduino или таймером. Затем цифровой управляющий сигнал обновляет интегратор (через PWM или DAC). Частота тактов определяет частоту дискретизации. Для аудиосигнала в несколько килогерц типичны часы 10—100 кГц. Внутренние таймеры Arduino могут производить точные прерывания. Альтернативно, использовать таймер 555 для генерации внешних часов и D-флоп для защелки вывода компаратора. В этой статье Arduino обрабатывает все тайминг, упрощая аппаратное обеспечение.

В каждый момент выборки Arduino считывает выводной штифт компаратора. Если бит высокий, он увеличивает рабочий цикл PWM (или выход DAC) на фиксированной стадии; если низкий, он уменьшается. Размер шага (Δ) равен изменению напряжения интегратора на тактовый цикл. При диапазоне 5 В PWM и 8-битном разрешении каждый шаг составляет около 19,5 мВ. Для большей способности отслеживания используйте 10-битную PWM или внешний DAC с регулируемым размером шага.

Построить циркуляцию

Сборка на доске для хлеба

Начните с размещения на карточке операционного усилителя и компаратора IC. Подключите питание (VCC = 5 В от Arduino, GND). Добавьте разъединяющие конденсаторы (0,1 мкФ) близко к штифтам питания каждой IC.

  1. Интегратор: Проводите операционный усилитель в качестве инвертирующего интегратора. Подключите резистор 10 кОм от выходного штифта Arduino PWM (например, штифт 9) к инвертируемому входу. Поместите конденсатор 0,1 мкФ между выходным и инвертирующим входом. Подключите неинвертирующий вход к исходному сигналу 2,5 В (используйте делитель напряжения от 5 В: два резистора 10 кОм производят 2,5 В).
  2. Сравнитель: Подключите входной сигнал (от генератора сигналов) к неинвертирующей штифте LM393. Подключите выход интегратора к инвертирующей штифте. Выход LM393 (открытый коллектор) требует подтягивающего резистора (например, 10 кОм до 5 В). Подключите выход к цифровой штифту Arduino 2.
  3. Обратная связь: Выход интегратора также подключается к аналоговому монитору (Arduino A0) для отладки. Выход компаратора подает прерывательный штифт Arduino.
  4. PWM фильтр: Из штифта Arduino PWM (точно так же, как вход интегратора) вставьте фильтр низкого прохода: резистор 1 кОм последовательно с последующим конденсатором 10 мкФ на землю. Это фильтрованное напряжение PWM является реконструированным сигналом и может быть просмотрено на канале 2 осциллографа.

Сила и Сигнальные соображения

Сохраняйте аналоговые и цифровые наземные соединения отдельно, чтобы избежать впрыска цифрового шума в интегратор. Используйте короткие провода и поместите обходные конденсаторы рядом с каждой ИС. Если входной сигнал биполярный (например, ±2 В), смещайте входы компаратора так, чтобы сигнал ссылался на 2,5 В. Для чистого сигнала переменного тока добавьте смещение постоянного тока 2,5 В с использованием конденсатора с конденсатором с делителем напряжения.

Программирование Arduino

Эскиз Arduino реализует алгоритм дельта-модуляции в режиме реального времени. Ядро петли считывает бит компаратора, соответствующим образом обновляет рабочий цикл вывода PWM и повторяется с фиксированной скоростью выборки. Прерывание таймера обеспечивает согласованное время, избегая джиттера, который ухудшает производительность.

Алгоритм псевдокод

Initialize:
 set PWM pin 9 to output
 set comparator pin 2 as input
 set timer1 to generate interrupt at desired sample rate (e.g., 50 kHz)
 clk = 0

Interrupt Service Routine:
 read comparator pin → bit
 if bit == HIGH:
 duty_cycle = duty_cycle + step_size
 else:
 duty_cycle = duty_cycle - step_size
 clamp duty_cycle between 0 and 255
 analogWrite(9, duty_cycle)

 (Optional) debug: send bit via Serial to plotter

Пример кода Snippet

Ниже приведен минимальный эскиз Arduino с использованием Timer1 для точной выборки. Он работает примерно на 50 кГц, подходит для отслеживания умеренных звуковых сигналов.

// Delta Modulator using Arduino Uno
// Uses Timer1 to sample comparator at 50 kHz

const int compPin = 2; // comparator output
const int pwmPin = 9; // PWM output to integrator
const int stepSize = 10; // adjust for tracking speed

volatile int duty = 128; // initial midpoint

void setup() {
 pinMode(compPin, INPUT);
 pinMode(pwmPin, OUTPUT);

 // Setup Timer1 for 50 kHz interrupts
 TCCR1A = 0; // normal mode
 TCCR1B = 0;
 TCNT1 = 0;
 OCR1A = 319; // (16 MHz / (prescaler * desired frequency)) - 1
 // for 50 kHz: 16e6/(1*50e3)-1 = 319
 TCCR1B |= (1 << WGM12); // CTC mode
 TCCR1B |= (1 << CS10); // prescaler = 1
 TIMSK1 |= (1 << OCIE1A); // enable interrupt
}

ISR(TIMER1_COMPA_vect) {
 int bit = digitalRead(compPin); // read comparator
 if (bit == HIGH) {
 duty += stepSize;
 if (duty > 255) duty = 255;
 } else {
 duty -= stepSize;
 if (duty < 0) duty = 0;
 }
 analogWrite(pwmPin, duty);
}

void loop() {
 // nothing to do here – all work in ISR
}

Настройка и скорости выборки для оптимизации отслеживания. Более крупный шаг увеличивает скорость отслеживания, но также и гранулированный шум. Необходим компромисс. Для начальных испытаний начните с шага = 5 и скорости выборки 10 кГц, затем увеличьте оба.

Испытания и калибровка

Визуализация сигналов

Подключите зонд осциллографа к входному сигналу и к выходу интегратора (фильтрованному PWM). Примените синусовую волну 1 кГц 2 В пик-пик с смещением 2,5 В постоянного тока, чтобы сигнал оставался в диапазоне 0-5 В. Наблюдайте за отслеживанием: выход интегратора должен приближаться к синусовой волне с рисунком лестницы равных шагов. Выход компаратора появляется как логический сигнал; когда вход поднимается, компаратор в основном высок, вызывая положительные шаги. Когда вход падает, компаратор в основном низок, вызывая отрицательные шаги. Проверьте на перегрузку наклона: если вход изменяется слишком быстро, выход интегратора значительно отстает, производя треугольную форму волны, а не синус. Увеличьте скорость отбора проб или размер шага, чтобы уменьшить это.

Используйте Arduino Serial Plotter (Инструменты > Serial Plotter) для просмотра потока битов компаратора и реконструированного сигнала, если вы отправляете их через Serial из основного контура (не внутри ISR).

Калибровка компонентов

Константа времени интегратора устанавливает размер шага. Для заданного значения RC и периода выборки T изменение напряжения на шаге ΔV = (V pwm high — V ref) * T / (RC). Для метода PWM V pwm high составляет 5 В и обновление рабочего цикла изменяет напряжение конденсатора фильтра на пропорциональную величину. Эксперимент со значениями резистора: увеличение R уменьшает размер шага (более медленное отслеживание, но менее гранулированный шум); уменьшение R делает противоположное. Измеряйте фактический размер шага с помощью функции курсора осциллографа. Если использовать выделенный DAC, отрегулируйте его опорное напряжение или усиление.

Проверка шумоподавления. Если компаратор запускает рябь питания, добавьте гистерезис с резистором положительной обратной связи (например, 100 кОм от выхода компаратора к неинвертируемому входу). Это создает триггер Шмитта с небольшой мертвой зоной, что также помогает уменьшить болтовню.

Приложения и вариации

В то время как базовый дельта-модулятор служит в качестве образовательного инструмента, он также имеет практическое применение. Delta-модультация используется в недорогой цифровой аудиозаписи, сжатии голоса (например, модуляции Continuously Variable Slope Delta или CVSD) и в системах связи, где пропускная способность ограничена. Простое аппаратное обеспечение и однобитный выход делают его идеальным для передачи по шумным каналам.

Улучшения базовой схемы включают в себя:

  • Адаптивная дельта-модулирование (ADM): Логика управления регулирует размер шага на основе недавнего шаблона битов (например, если три последовательных шага 1, увеличение шага). Реализовано в программном обеспечении на Arduino путем мониторинга последовательности вывода компаратора.
  • Биполярная интеграция: Использование двухрельсового источника питания и биполярного интегратора для обработки сигналов переменного тока без смещения постоянного тока, расширение динамического диапазона.
  • Более высокие показатели выборки: Замените Arduino на Teensy или более быстрый микроконтроллер для полосы пропускания до десятков килогерц, полезный для аудио.
  • Внешний DAC: Используйте MCP4921 или DAC0800 для лучшего разрешения шага и более низкого шума, чем фильтрованная PWM.

Для более глубокой теории, обратитесь к авторитетным источникам, таким как страница модуляции дельты Википедии и Аналог устройств op-amp интегратора . Ардуино-специфические детали о генерации PWM можно найти в документации Arduino PWM .

Заключение

Построение модулятора дельты с помощью Arduino и базовых компонентов демистифицирует фундаментальную технику обработки сигналов. Построив компаратор, интегратор и петлю обратной связи, и написав точную схему отбора проб, вы получаете практическое представление о том, как оцифровываются аналоговые сигналы с помощью дифференциального кодирования. Завершенный модулятор не только демонстрирует ключевые концепции, такие как квантование, перегрузка наклона и гранулированный шум, но и служит платформой для экспериментов с адаптивными методами и более высокопроизводительными альтернативами. Настройка размера шага, скорости выборки и фильтрации для оптимизации для вашего целевого сигнала. При тщательной сборке и тестировании у вас будет простая, но эффективная система для изучения принципов дельта-модуляции на практике.