- stub/06-dds-pio-zero-rp2040.py: новый вариант; PIO всегда выводит 8 бит (out pins, 8), младшие неиспользуемые линии GP8..GP(15-BITS) — выходы в 0 - stub/04-dds-pio-rp2040.py: подтянута шапка с отметкой о проверке на стенде - task.md, print/: пересобраны из РПД (таблица вариантов + брошюра студента) - README.md: список вариантов приведён в соответствие
ЭУМиРТС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
│ ├── 04-dds-pio-rp2040.ino ← вариант 4: PIO + DMA (Arduino)
│ ├── 05-dds-audiopwm-rp2040.py ← вариант 5: аудио-ШИМ
│ ├── 06-dds-pio-zero-rp2040.py ← вариант 6: PIO, лишние биты = 0
│ ├── 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 свободен |
04-dds-pio-rp2040.ino |
Arduino, earlephilhower | PIO + DMA; форма сигнала задаётся в коде |
05-dds-audiopwm-rp2040.py |
CircuitPython | audiopwmio: DMA играет буфер; только до ~3 кГц |
06-dds-pio-zero-rp2040.py |
CircuitPython | то же, что 04-...py, но неиспользуемые младшие биты порта выведены в 0 |
Для варианта на PIO нужна библиотека adafruit_pioasm в папке /lib
на плате.
Быстрый старт
- Прошить генератор. Файл переименовать в
code.py(для CircuitPython) или открыть в Arduino IDE (для.ino). - Открыть консоль, ввести
HELP— увидеть список команд. - Собрать ФНЧ на выходе генератора (схема в
HELP):
GP15 ──[R1 1к]──┬──[R2 1к]──┬──► к схеме
│ │
[C1 47н] [C2 47н]
│ │
GND GND
- Проверить сигнал:
W S(синус),F 1000, посмотреть осциллографом (период ≈ 1 мс). - Калибровать частоту, если нужно: ввести
CAL <измеренное_значение>. - Снять АЧХ скриптом
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 GND
│ │ │ │
GP15 GP14 GP13 GP12
(MSB) (LSB)
R = 10 кОм, 2R = 20 кОм (оба из ряда E24)
пример для 4 бит; при 8 битах колонок восемь — GP15…GP8
Каждый узел цепочки соединён через 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.
Порядок сдачи
- Собрать и откалибровать стенд (часть A).
- Снять характеристики трёх схем (часть B).
- Заполнить
stub/03-blank-otchyota.md. - Ответить на контрольные вопросы (в конце
task.md).
Баллы по заданиям — в task.md, раздел «Оформление и оценивание».
Зачёт при 6 и более баллах из 10.