175 lines
8.6 KiB
Markdown
175 lines
8.6 KiB
Markdown
# ЭУМиРТС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:
|
||
|
||
```
|
||
ВЫХОД ◄──┬────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.
|