# ЭУМиРТС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](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 ``` 4. **Проверить сигнал:** `W S` (синус), `F 1000`, посмотреть осциллографом (период ≈ 1 мс). 5. **Калибровать частоту**, если нужно: ввести `CAL <измеренное_значение>`. 6. **Снять АЧХ** скриптом `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: ``` GP15 ──[R]──┬──[R]──┬──[R]──┬─ ... ─┬──[R]──┬──► выход │ │ │ │ │ [2R] [2R] [2R] [2R] [2R] │ │ │ │ │ GND GND GND GND GND R = 10 кОм, 2R = 20 кОм (оба из ряда E24) 8 бит: 7 резисторов R + 9 резисторов 2R ``` Каждый узел делит напряжение ровно вдвое, поэтому вклад пина падает вдвое от старшего к младшему: | Пин | Вес | Доля шкалы | |---|---|---| | 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.