ЭУМиРТС5-ДДС

Репозиторий студента для одной лабораторной работы.

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

Название репозитория расшифровывается так:

Часть Значение
eumirts ЭУМиРТС — электронные устройства мехатронных и робототехнических систем
5 пятый семестр
dds Direct Digital Synthesis — генератор на RP2040, который вы собираете

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


О чём работа

Работа состоит из двух частей:

A. Стенд. Вы собираете DDS-генератор на RP2040 (Raspberry Pi Pico) и скрипт автоматического снятия АЧХ. Готового лабораторного генератора со свипом не оказалось, поэтому измерительный прибор делается своими руками.

B. Исследование. Этим стендом вы снимаете характеристики трёх схем — интегратора на ОУ, дифференциатора на ОУ и пассивного RC-фильтра — и сравниваете эксперимент с расчётом по передаточным функциям.

Полное задание — в task.md.


Что в репозитории

eumirts5-dds/
├── README.md                            ← этот файл
├── task.md                              ← задание (части A и B)
├── stub/                                ← заготовки: генераторы и скрипт
│   ├── 01-dds-generator-rp2040.ino              ← вариант 1: Arduino C++
│   ├── 01-dds-generator-rp2040-circuitpython.py ← вариант 2: CircuitPython
│   ├── 04-dds-pio-rp2040.py                     ← вариант 3: PIO + DMA
│   ├── 02-izmerenie-achh.py                     ← автоснятие АЧХ (на ПК)
│   └── 03-blank-otchyota.md                     ← бланк отчёта
└── print/                               ← брошюра задания (DOCX)

Какой вариант генератора выбрать

Файл Кому Особенности
01-...ip2040.ino есть Arduino IDE программный DDS, работает на обоих ядрах
01-...-circuitpython.py есть CircuitPython то же, но медленнее (интерпретатор)
04-dds-pio-rp2040.py рекомендуется аппаратный PIO + DMA, точная частота, CPU свободен

Для варианта на PIO нужна библиотека adafruit_pioasm в папке /lib на плате.


Быстрый старт

  1. Прошить генератор. Файл переименовать в code.py (для CircuitPython) или открыть в Arduino IDE (для .ino).
  2. Открыть консоль, ввести HELP — увидеть список команд.
  3. Собрать ФНЧ на выходе генератора (схема в HELP):
GP15 ──[R1 1к]──┬──[R2 1к]──┬──► к схеме
                │           │
              [C1 47н]    [C2 47н]
                │           │
               GND         GND
  1. Проверить сигнал: W S (синус), F 1000, посмотреть осциллографом (период ≈ 1 мс).
  2. Калибровать частоту, если нужно: ввести CAL <измеренное_значение>.
  3. Снять АЧХ скриптом 02-izmerenie-achh.py (запускается на ПК).

Основные команды генератора

Команда Что делает
HELP или ? подробная справка со всеми командами и схемой
I текущие настройки: частота, факт, потолок, CPC
W S / W Q режим синуса / прямоугольника
F <Гц> частота
M <0..127> амплитуда синуса
D <0..255> скважность прямоугольника
A измерить размах на ADC0 (GP26)
SWEEP f0 f1 n мс логарифмический свип
B <1..8> число бит порта
N <16..4096> длина периода в сэмплах
O <1..64> точек на сэмпл
CLC <1..8> / CAL <Гц> калибровка CPC вручную / автоматически
FN <имя> / FP <выражение> форма сигнала из набора / своя формула

Пины стенда

Пин Назначение
GP8..GP15 выход генератора (данные выровнены по старшему биту, MSB → GP15)
GP15 ШИМ в режиме прямоугольника (W Q)
GP16 синхроимпульс для осциллографа
GP26 (A0) вход измерения ADC

Внимание: на вход ADC подавать не более 3,3 В. Сигнал больше — только через делитель.


ЦАП на лестнице R-2R

При B > 1 генератор выводит код параллельно по нескольким пинам — это цифро-аналоговый преобразователь, который ты собираешь снаружи. Простейший вариант — лестница R-2R:

   ВЫХОД ◄──┬────R────┬────R────┬── ... ──┬────R────┐
            │         │         │         │         │
           2R        2R        2R        2R        2R
            │         │         │         │         │
           GP15      GP14      GP13      GP8       GND
           (MSB)                          (LSB)   (терминация)

   R = 10 кОм, 2R = 20 кОм   (оба из ряда E24)
   8 бит: 7 резисторов R + 9 резисторов 2R (8 к битам + 1 на землю)

Каждый узел цепочки соединён через 2R со своим битом; на землю идёт только один 2R — у младшего конца (это терминация лестницы, не бит). Выход берётся со стороны GP15 — иначе старшинство битов перевернётся.

Пин Вес Доля шкалы
GP15 (MSB) 128 50 %
GP14 64 25 %
GP13 32 12,5 %
GP12 16 6,25 %
GP11 8 3,125 %
GP10 4 1,56 %
GP9 2 0,78 %
GP8 (LSB) 1 0,39 %

Выход: U = U_пит · код / 256 (при питании 3,3 В шаг ≈ 13 мВ).

Про точность. Обычные резисторы 5 % дают надёжно 3–4 бита, 1 % — 5–6 бит, для всех восьми нужны 0,1 %. Сколько получилось у тебя — измеряешь в задании B4.

Собранную лестницу подключай к АЦП через буфер-повторитель на ОУ: выходное сопротивление лестницы ≈ R = 10 кОм, без буфера шкала просядет.

Подробности — в task.md, §2.6 и задание B4.

Порядок сдачи

  1. Собрать и откалибровать стенд (часть A).
  2. Снять характеристики трёх схем (часть B).
  3. Заполнить stub/03-blank-otchyota.md.
  4. Ответить на контрольные вопросы (в конце task.md).

Баллы по заданиям — в task.md, раздел «Оформление и оценивание». Зачёт при 6 и более баллах из 10.

S
Description
Лабораторная 5: интегратор/дифференциатор на ОУ, АЧХ/ФЧХ + Monte Carlo + DDS-генератор на RP2040 (Б1.В.06, 2026)
Readme
688 KiB
Languages
Python 79.4%
C++ 20.6%