Files
eumirts5-dds/task.md
T

15 KiB
Raw Blame History

Лабораторная работа: DDS-стенд и исследование фильтров

Электронные устройства мехатронных и робототехнических систем

Дисциплина: Электронные устройства мехатронных и робототехнических систем, Б1.В.06 Специальность: 15.03.06 «Мехатроника и робототехника» Семестр: 5 · Объём: 4 часа Стенд: RP2040 (Raspberry Pi Pico) + макетная плата

Черновик. Требует проверки преподавателем перед выдачей студентам.


1. Зачем эта работа

В мехатронном модуле сигнал датчика проходит аналоговую обработку: фильтрацию помех, интегрирование, выделение скорости (дифференцирование). Каждое такое звено описывается передаточной функцией, и от его параметров (K, τ) зависит поведение всей системы управления.

Чтобы проверить звено на железе, нужен генератор с известной частотой и амплитудой. Готового лабораторного генератора со свипом под рукой не оказалось — поэтому в первой части работы вы сами делаете стенд: DDS-генератор на RP2040 и скрипт автоматического снятия АЧХ.

Во второй части вы этим стендом исследуете фильтры — интегратор, дифференциатор и RC-фильтр — и сравниваете эксперимент с расчётом.

Две части работы

Часть Что делаем Результат
A. Стенд собираем и настраиваем DDS-генератор работающий прибор: частота, амплитуда, свип
B. Исследование снимаем характеристики фильтров АЧХ/ФЧХ, сравнение с расчётом

Часть A без части B бессмысленна: прибор делается, чтобы им измерять. Часть B без части A невозможна: нечем снимать АЧХ.


2. Теория кратко

2.1. Что должен делать генератор (часть A)

DDS (Direct Digital Synthesis) — синтез сигнала из заранее посчитанного массива значений. Идея:

  1. считаем один период нужной формы — например синуса — в массив из m точек;
  2. подаём массив в PIO по кругу через DMA;
  3. PIO выводит точки в порт с частотой f_пио;
  4. частота выходного сигнала: f_вых = f_пио / (CPC · m), где CPC — число тактов PIO на один сэмпл.

Чем больше m, тем точнее форма и выше разрешение уровня, но тем ниже максимальная частота.

2.2. Точность уровня: битность ≠ разрешение

  • Битность B — сколько бит выводится в порт сразу (мгновенный код).
  • Эффективная разрядность — сколько уровней различает среднее после фильтра: (2^B − 1)·m + 1.

При B = 4 и m = 256 порт даёт 4 бита, но среднее различает 3841 уровень (~11.9 бит). Так работает дельта-сигма: соседние коды чередуются во времени, а ФНЧ усредняет.

2.3. Интегратор на ОУ

Идеальный (R1 на входе, C1 в ООС):

W(s) = −1 / (R1·C1·s)

На постоянном токе усиление бесконечно, поэтому реальный интегратор всегда содержит резистор утечки R2 параллельно C1 — это превращает его в апериодическое звено первого порядка:

W(s) = −R2 / (R1 · (1 + R2·C1·s)) = −K / (τ·s + 1)
K = R2/R1,   τ = R2·C1,   f_c = 1/(2π·τ)

2.4. Дифференциатор на ОУ

C1 на входе, R1 в ООС:

W(s) = −R1·C1·s

На высоких частотах усиление растёт, поэтому на практике вход ограничивают резистором последовательно с C1.

2.5. RC-фильтр нижних частот

Пассивный ФНЧ первого порядка:

K(f) = 1 / √(1 + (f/f_c)²),   f_c = 1/(2π·R·C)
наклон за f_c: −20 дБ/дек

3. Часть A. Сборка и настройка стенда

Задание A1 (0,5 ч). Прошивка генератора и первый запуск

В папке stub/ три варианта генератора — выберите один:

Файл Платформа Как формируется синус
01-...ip2040.ino Arduino C++ программный DDS + ШИМ
01-...-circuitpython.py CircuitPython программный DDS + ШИМ
04-dds-pio-rp2040.py CircuitPython аппаратный PIO + DMA

Рекомендуется вариант на PIO — он даёт точную частоту и не грузит CPU.

  1. Залейте файл на Pico (CircuitPython: переименовать в code.py).
  2. Откройте консоль, введите HELP — увидите список команд.
  3. Введите I — генератор покажет текущие настройки, включая фактическую частоту и потолок f_max.
  4. Соберите внешний ФНЧ на выходе (схема — в HELP):
GP15 ──[R1 1к]──┬──[R2 1к]──┬──► выход
                │           │
              [C1 47н]    [C2 47н]
                │           │
               GND         GND

Проверка: подать W S (синус), F 1000, посмотреть осциллографом. Период должен быть ≈ 1 мс.

Задание A2 (0,5 ч). Калибровка частоты

Частота зависит от CPC — числа тактов PIO на сэмпл. Оно может отличаться на разных прошивках.

  1. Поставьте F 1000, измерьте период осциллографом.
  2. Если факт отличается от запроса — введите CAL <измеренное_значение>, например CAL 500 при запросе 1000. Генератор подстроит CPC сам.
  3. Повторите замер — теперь должно совпасть.
  4. Запишите подобранное CPC (видно командой I) — оно нужно для расчёта погрешности в отчёте.

Если частота вообще не достижима, генератор скажет ! ЗАПРОС ВЫШЕ ПОТОЛКА: факт ... Гц. Это значит m слишком велико: уменьшите N или O.

Задание A3 (0,5 ч). Автоматическое снятие АЧХ

  1. Соберите на макетной плате простой RC-фильтр (см. часть B, задание B3).
  2. Подключите: выход генератора → вход фильтра; выход фильтра → вход измерения (ADC0, GP26). Если сигнал больше 3,3 В — через делитель.
  3. Запустите хост-скрипт:
python 02-izmerenie-achh.py --port /dev/ttyACM0 \
    --f0 10 --f1 100000 --n 25 --dwell 150 --uin 500 --out achh.csv --plot
  1. Получите CSV с точками «частота → амплитуда». Это ваш измерительный прибор на вторую часть работы.

Результат части A: работающий стенд, калиброванная частота, скрипт, дающий АЧХ в CSV.


4. Часть B. Исследование фильтров

Все три задания выполняются одним и тем же стендом, меняется только исследуемая схема. Для каждой схемы:

  1. рассчитать параметры (K, τ или f_c) по формулам из п. 2;
  2. собрать схему на макетной плате;
  3. снять АЧХ стендом (частичный диапазон вокруг f_c, 8–12 точек);
  4. наложить экспериментальные точки на расчётную кривую;
  5. оценить расхождение и объяснить его.

Задание B1 (1 ч). Интегратор на ОУ

Схема: R1 = 10 кОм на вход, R2 = 100 кОм ‖ C1 = 0,1 мкФ в ООС.

  • Рассчитать: K = R2/R1, τ = R2·C1, f_c = 1/(2π·τ).
  • Снять АЧХ в диапазоне 1 Гц … 10·f_c.
  • Определить по графику плоский участок, частоту сопряжения, наклон.
  • Проверить форму во времени: подать прямоугольник, увидеть пилу. Размах пилы U_m = U_вх·T/(2·R1·C1).

Контрольный вопрос: почему f_c определяется R2·C1, а не R1·C1?

Задание B2 (1 ч). Дифференциатор на ОУ

Схема: C1 = 0,1 мкФ на вход, R1 = 10 кОм в ООС.

  • Рассчитать W(s) = −R1·C1·s, ожидаемый наклон +20 дБ/дек.
  • Снять АЧХ в диапазоне, где схема ещё устойчива.
  • Проверить во времени: подать пилу — увидеть импульсы в моменты перепада. Амплитуда U_m = R1·C1·dU_вх/dt.
  • Объяснить, почему реальный дифференциатор требует ограничения входа.

Контрольный вопрос: чем отличается идеальный дифференциатор от реального и почему вход ограничивают резистором?

Задание B3 (0,5 ч). Пассивный RC-фильтр

Схема: R = 1 кОм, C = 0,1 мкФ (или по вашему варианту).

  • Рассчитать f_c = 1/(2π·R·C), ожидаемый наклон −20 дБ/дек.
  • Снять АЧХ стендом в диапазоне 0,1·f_c … 100·f_c (10–12 точек).
  • Наложить на расчётную кривую K(f) = 1/√(1+(f/f_c)²).
  • Сравнить расхождение с допусками компонентов (±5 %).

Контрольный вопрос: почему реальная АЧХ за f_c уходит круче −20 дБ/дек? (подсказка: паразитные параметры, вход ADC)

Задание B4 (0,5 ч). Сравнение и отчёт

Свести результаты трёх схем в таблицу:

Схема f_c расчёт f_c опыт Расхождение Наклон расчёт Наклон опыт
Интегратор −20 дБ/дек
Дифференциатор +20 дБ/дек
RC-фильтр −20 дБ/дек

Сделать выводы:

  • какой разброс дали допуски компонентов;
  • где опыт расходится с расчётом сильнее всего и почему;
  • какую роль сыграла калибровка генератора (задание A2).

5. Оформление и оценивание

Отчёт содержит:

  1. Схемы: ФНЧ стенда, интегратор, дифференциатор, RC-фильтр.
  2. Настройки генератора из I (включая CPC после калибровки).
  3. Осциллограммы: синус с генератора, пила интегратора, импульсы дифференциатора.
  4. Три графика АЧХ с наложенными расчётными кривыми.
  5. Итоговую таблицу из задания B4.
  6. Выводы по расхождениям.
Задание Баллы
A1. Прошивка и первый запуск 1,0
A2. Калибровка частоты 1,0
A3. Автоснятие АЧХ 2,0
B1. Интегратор 2,0
B2. Дифференциатор 2,0
B3. RC-фильтр 1,0
B4. Сводка и выводы 1,0
Итого 10

Зачёт — при 6 и более баллах.


6. Контрольные вопросы

По стенду (часть A):

  1. Чему равна частота выходного сигнала DDS и какие величины её задают?
  2. Что такое CPC и почему его приходится калибровать?
  3. Чем битность порта отличается от эффективной разрядности?
  4. Почему для синуса нужен внешний ФНЧ после ШИМ?

По фильтрам (часть B):

  1. Чему равна передаточная функция идеального интегратора и почему без резистора утечки её нельзя реализовать?
  2. Как по АЧХ отличить идеальный интегратор от апериодического звена?
  3. Почему наклон АЧХ звена первого порядка равен −20 дБ/дек?
  4. Как допуски R и C влияют на f_c и что даёт анализ Monte Carlo?

7. Литература

  1. Хоровиц П., Хилл У. Искусство схемотехники. 3-е изд. М.: Бином, 2014. Гл. 4 (ОУ в линейном режиме).
  2. Титце У., Шенк К. Полупроводниковая схемотехника. 12-е изд. М.: ДМК Пресс, 2008. Т. 1, гл. 11 (частотные характеристики).
  3. Бесекерский В.А., Попов Е.П. Теория систем автоматического регулирования. М.: Наука, 2010. Гл. 2 (типовые звенья).
  4. LTSpice XVII User Guide. Analog Devices.
  5. RP2040 Datasheet. Raspberry Pi Ltd (PIO, DMA, ADC).
  6. LM358 / TL081 datasheet. Texas Instruments.