Учебник по созданию модулятора дельты с использованием Arduino и базовых электронных компонентов
Table of Contents
Дельта-модульирование — это техника, используемая в системах цифровой связи для преобразования аналоговых сигналов в цифровые с минимальной сложностью. Кодируя только разницу между последовательными выборками, а не абсолютным значением сигнала, дельта-модульатор достигает низкого энергопотребления и простого оборудования при сохранении важной информации о сигнале. Создание дельта-модулатора с использованием 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.
- Интегратор: Проводите операционный усилитель в качестве инвертирующего интегратора. Подключите резистор 10 кОм от выходного штифта Arduino PWM (например, штифт 9) к инвертируемому входу. Поместите конденсатор 0,1 мкФ между выходным и инвертирующим входом. Подключите неинвертирующий вход к исходному сигналу 2,5 В (используйте делитель напряжения от 5 В: два резистора 10 кОм производят 2,5 В).
- Сравнитель: Подключите входной сигнал (от генератора сигналов) к неинвертирующей штифте LM393. Подключите выход интегратора к инвертирующей штифте. Выход LM393 (открытый коллектор) требует подтягивающего резистора (например, 10 кОм до 5 В). Подключите выход к цифровой штифту Arduino 2.
- Обратная связь: Выход интегратора также подключается к аналоговому монитору (Arduino A0) для отладки. Выход компаратора подает прерывательный штифт Arduino.
- 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 и базовых компонентов демистифицирует фундаментальную технику обработки сигналов. Построив компаратор, интегратор и петлю обратной связи, и написав точную схему отбора проб, вы получаете практическое представление о том, как оцифровываются аналоговые сигналы с помощью дифференциального кодирования. Завершенный модулятор не только демонстрирует ключевые концепции, такие как квантование, перегрузка наклона и гранулированный шум, но и служит платформой для экспериментов с адаптивными методами и более высокопроизводительными альтернативами. Настройка размера шага, скорости выборки и фильтрации для оптимизации для вашего целевого сигнала. При тщательной сборке и тестировании у вас будет простая, но эффективная система для изучения принципов дельта-модуляции на практике.