Files
eumirts5-dds/README.md
T

173 lines
8.3 KiB
Markdown
Raw Normal View History

# ЭУМиРТС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.