Files
eumirts5-dds/README.md
T

175 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ЭУМиРТС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 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.
## Порядок сдачи
1. Собрать и откалибровать стенд (часть A).
2. Снять характеристики трёх схем (часть B).
3. Заполнить `stub/03-blank-otchyota.md`.
4. Ответить на контрольные вопросы (в конце `task.md`).
Баллы по заданиям — в `task.md`, раздел «Оформление и оценивание».
Зачёт при **6 и более** баллах из 10.