ai: репозиторий переименован в eumirts5-dds; задание разделено на часть A (сборка DDS-стенда) и B (исследование интегратора, дифференциатора, RC-фильтра); stub синхронизирован с РПД (добавлен PIO-генератор); README с расшифровкой названия и картой пинов

This commit is contained in:
mss
2026-10-27 20:23:07 +04:00
parent 5087d1b348
commit 2c81de5d76
6 changed files with 1685 additions and 250 deletions
+102 -88
View File
@@ -1,116 +1,130 @@
# Лабораторная: интегратор и дифференциатор на ОУ (АЧХ/ФЧХ + Monte Carlo + автосвип)
# ЭУМиРТС5-ДДС
Комплект к теме `topics/lab5-peredatochnaya-funkciya-na-ou.md`
(«Электронные устройства мехатронных и робототехнических систем»,
Б1.В.06, 5 семестр, 4 ч).
Репозиторий студента для одной лабораторной работы.
> AI-сгенерировано (2026-10-26), требует проверки преподавателем
> перед использованием на стенде.
**Дисциплина:** Электронные устройства мехатронных и робототехнических
систем (ЭУМиРТС), Б1.В.06
**Специальность:** 15.03.06 «Мехатроника и робототехника»
**Семестр:** 5 · **Объём:** 4 часа
## Контракт
Название репозитория расшифровывается так:
Оформлено по контракту `labs/`:
| Часть | Значение |
|---|---|
| `eumirts` | ЭУМиРТС — электронные устройства мехатронных и робототехнических систем |
| `5` | пятый семестр |
| `dds` | Direct Digital Synthesis — генератор на RP2040, который вы собираете |
> Черновик. Требует проверки преподавателем перед выдачей студентам.
---
## О чём работа
Работа состоит из двух частей:
**A. Стенд.** Вы собираете DDS-генератор на RP2040 (Raspberry Pi Pico) и
скрипт автоматического снятия АЧХ. Готового лабораторного генератора со
свипом не оказалось, поэтому измерительный прибор делается своими руками.
**B. Исследование.** Этим стендом вы снимаете характеристики трёх схем —
интегратора на ОУ, дифференциатора на ОУ и пассивного RC-фильтра — и
сравниваете эксперимент с расчётом по передаточным функциям.
Полное задание — в **[task.md](task.md)**.
---
## Что в репозитории
```
labs/lab5-peredatochnaya-funkciya-na-ou/
├── meta.yaml ← контракт
├── task.md ← задание студенту
├── method.md ← методичка преподавателю
├── README.md ← этот файл
├── print/ ← брошюры DOCX (rpd methodical)
└── stub/
├── 01-dds-generator-rp2040.ino ← генератор-свип (Arduino RP2040;
│ оба ядра: earlephilhower и mbed)
├── 01-dds-generator-rp2040-circuitpython.py
│ ← то же на CircuitPython (code.py)
├── 02-izmerenie-achh.py ← автоснятие АЧХ по Serial
└── 03-blank-otchyota.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)
```
## Новое относительно `topics/lab5-peredatochnaya-funkciya-na-ou.md`
### Какой вариант генератора выбрать
1. **Monte Carlo по допускам** (`.step param`) — новый для курса анализ
в симуляторе: разброс K и f_c при ±5 % на компонентах, доля годных.
2. **Генератор-свип на RP2040** — автономный генератор для натурной
части: прямоугольник (ШИМ) и синус (DDS), логарифмический свип,
синхроимпульс для осциллографа, измерение амплитуды на ADC0.
3. **Хост-скрипт автоснятия АЧХ** — управление генератором по Serial,
сбор точек, экспорт CSV, построение графика.
4. **Явное разделение практики и лаборатории:** симуляция — на практическом
занятии (2 ч), железо — на лабораторном (4 ч), отчёт — СРС.
| Файл | Кому | Особенности |
|---|---|---|
| `01-...ip2040.ino` | есть Arduino IDE | программный DDS, работает на обоих ядрах |
| `01-...-circuitpython.py` | есть CircuitPython | то же, но медленнее (интерпретатор) |
| `04-dds-pio-rp2040.py` | **рекомендуется** | аппаратный PIO + DMA, точная частота, CPU свободен |
## Предупреждения по стенду
Для варианта на PIO нужна библиотека `adafruit_pioasm` в папке `/lib`
на плате.
- **ADC0 RP2040: 0…3,3 В.** Сигнал с выхода исследуемой цепи ≥ 3,3 В
подавать **только через делитель** или пиковый детектор.
- **Питание ОУ:** LM358 работает при однополярном +5…+12 В, TL081 —
при ±12 В. Уточнить по фактическому стенду.
- **Синус DDS:** качество зависит от внешнего ФНЧ после ШИМ (см. схему
ниже). Без фильтра на выходе будет меандр переменной скважности,
а не синус.
---
## Схема DDS-генератора (внешняя обвязка)
## Быстрый старт
ШИМ сам по себе даёт **меандр переменной скважности**, а не синус.
Синус получается выделением огибающей фильтром. Поэтому на выходе
GP15 нужен внешний **ФНЧ**:
1. **Прошить генератор.** Файл переименовать в `code.py` (для CircuitPython)
или открыть в Arduino IDE (для `.ino`).
2. **Открыть консоль**, ввести `HELP` — увидеть список команд.
3. **Собрать ФНЧ** на выходе генератора (схема в `HELP`):
```
GP15 (ШИМ 62,5 кГц) ──[R1 1к]──┬──[R2 1к]──┬──────► OUT (вход DUT)
│ │
[C1 47н] [C2 47н]
│ │
GND GND
GP15 ──[R1 1к]──┬──[R2 1к]──┬──► к схеме
│ │
[C1 47н] [C2 47н]
│ │
GND GND
```
Пассивный ФНЧ 2-го порядка, **f_c ≈ 3,4 кГц**:
4. **Проверить сигнал:** `W S` (синус), `F 1000`, посмотреть осциллографом
(период ≈ 1 мс).
5. **Калибровать частоту**, если нужно: ввести `CAL <измеренное_значение>`.
6. **Снять АЧХ** скриптом `02-izmerenie-achh.py` (запускается на ПК).
- подавление несущей: `(62,5 / 3,4)² ≈ 338 ≈ 50 дБ` → пульсации ≈ 10 мВ;
- рабочий диапазон генератора: **≈ 1 Гц … 1 кГц** (для звена
с f_c = 16…34 Гц — с запасом).
---
### Две оговорки
## Основные команды генератора
1. **Согласование сопротивлений.** Выход фильтра ≈ 1 кОм, вход
интегратора — R1 = 10 кОм → делитель 10/11, просадка ≈ 9 %.
Если нужна точность — поставить буфер-повторитель на ОУ
(**Sallen–Key**: тот же 2-й порядок + низкое выходное).
| Команда | Что делает |
|---|---|
| `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 <выражение>` | форма сигнала из набора / своя формула |
2. **Постоянная составляющая.** При скважности 50 % среднее = `Uпит/2`
= 1,65 В, синус смещён. Где смещение недопустимо — разделительный
`C = 1 мкФ` последовательно + `R = 47 кОм` на землю (ФВЧ ≈ 3,4 Гц),
либо уменьшить амплитуду командой `M`.
---
### Варианты фильтра под другую несущую
## Пины стенда
| SAMPLE_HZ | R | C | f_c |
|---|---|---|---|
| 62,5 кГц | 1 кОм | 47 нФ | 3,4 кГц |
| 62,5 кГц | 2,2 кОм | 22 нФ | 3,3 кГц |
| 31,25 кГц | 2,2 кОм | 47 нФ | 1,5 кГц |
| Пин | Назначение |
|---|---|
| GP8..GP15 | выход генератора (данные выровнены по старшему биту, MSB → GP15) |
| GP15 | ШИМ в режиме прямоугольника (`W Q`) |
| GP16 | синхроимпульс для осциллографа |
| GP26 (A0) | вход измерения ADC |
## Как использовать
**Внимание:** на вход ADC подавать не более **3,3 В**. Сигнал больше —
только через делитель.
1. `task.md` + `stub/03-blank-otchyota.md` — студенту.
2. `stub/01-dds-generator-rp2040.ino` — прошить в RP2040 заранее
(или дать студенту в задании 4); альтернатива — `...-circuitpython.py`
на Pico с прошивкой CircuitPython (как `code.py`).
3. `stub/02-izmerenie-achh.py` — запускается на ПК студента (нужен pyserial).
4. `method.md` — только преподавателю.
5. Брошюры: `uv run rpd methodical lab5-peredatochnaya-funkciya-na-ou`.
---
## Связи
## Порядок сдачи
- **Практика** `pr5-raschet-analogovyh-ustrojstv` — расчётная часть
(K, R1, R2, фильтры) выполняется там.
- **Лекция** `le5-metody-modelirovaniya` — типы анализа; Monte Carlo
и `.step` — прямое применение.
- **Лекция** `le5-proektirovanie-analogovyh-ustrojstv` — топология ОУ.
- **ТАУ** (`b1-o-23`) — передаточные функции и типовые звенья идут
параллельно в 5 семестре; эта работа даёт им физическую реализацию.
1. Собрать и откалибровать стенд (часть A).
2. Снять характеристики трёх схем (часть B).
3. Заполнить `stub/03-blank-otchyota.md`.
4. Ответить на контрольные вопросы (в конце `task.md`).
## Статус
Черновик (draft). Тема `lab5-peredatochnaya-funkciya-na-ou` существует
в `topics/`; комплект в `labs/` — подготовлен для интеграции после
проверки преподавателем и согласования сквозной работы по мехатронике.
Баллы по заданиям — в `task.md`, раздел «Оформление и оценивание».
Зачёт при **6 и более** баллах из 10.