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
+212 -155
View File
@@ -1,188 +1,240 @@
# Лабораторная работа
# Лабораторная работа: DDS-стенд и исследование фильтров
## Интегратор и дифференциатор на ОУ: передаточная функция, АЧХ/ФЧХ и разброс по допускам
## Электронные устройства мехатронных и робототехнических систем
**Дисциплина:** Электронные устройства мехатронных и робототехнических
систем (Б1.В.06, очная форма)
**Семестр:** 5 · **Объём:** 4 часа · **Тема:** `lab5-peredatochnaya-funkciya-na-ou`
**Форма:** черновик — в учебный план пока не привязана
систем, Б1.В.06
**Специальность:** 15.03.06 «Мехатроника и робототехника»
**Семестр:** 5 · **Объём:** 4 часа
**Стенд:** RP2040 (Raspberry Pi Pico) + макетная плата
> AI-сгенерировано (2026-10-26), требует проверки преподавателем.
> Черновик. Требует проверки преподавателем перед выдачей студентам.
---
## 1. Легенда
## 1. Зачем эта работа
В мехатронном модуле сигнал датчика проходит через аналоговую обработку:
фильтрацию, интегрирование, выделение скорости (дифференцирование).
В мехатронном модуле сигнал датчика проходит аналоговую обработку:
фильтрацию помех, интегрирование, выделение скорости (дифференцирование).
Каждое такое звено описывается передаточной функцией, и от его параметров
(K, τ) зависит поведение всей системы управления.
**Задача работы:** убедиться, что аналоговое звено на операционном
усилителе действительно реализует расчётную передаточную функцию — сначала
в симуляторе, затем на макетной плате. И понять, как **допуски**
резисторов и конденсаторов влияют на параметры звена в серии.
Чтобы **проверить звено на железе**, нужен генератор с известной частотой
и амплитудой. Готового лабораторного генератора со свипом под рукой не
оказалось — поэтому в первой части работы вы **сами делаете стенд**:
DDS-генератор на RP2040 и скрипт автоматического снятия АЧХ.
Работа состоит из двух частей:
Во второй части вы этим стендом **исследуете фильтры** — интегратор,
дифференциатор и RC-фильтр — и сравниваете эксперимент с расчётом.
- **Симуляция** (LTSpice): АЧХ/ФЧХ и **новый анализ — Monte Carlo** по допускам;
- **Железо** (макет + генератор): переходные процессы и **автоматическое
снятие АЧХ** генератором-свипом на RP2040.
### Две части работы
| Часть | Что делаем | Результат |
|---|---|---|
| **A. Стенд** | собираем и настраиваем DDS-генератор | работающий прибор: частота, амплитуда, свип |
| **B. Исследование** | снимаем характеристики фильтров | АЧХ/ФЧХ, сравнение с расчётом |
Часть A без части B бессмысленна: прибор делается, чтобы им измерять.
Часть B без части A невозможна: нечем снимать АЧХ.
---
## 2. Теория кратко
**Интегратор на ОУ** (R1 на входе, C1 в ООС):
### 2.1. Что должен делать генератор (часть A)
**DDS** (Direct Digital Synthesis) — синтез сигнала из заранее
посчитанного массива значений. Идея:
1. считаем один период нужной формы — например синуса — в массив
из `m` точек;
2. подаём массив в PIO по кругу через DMA;
3. PIO выводит точки в порт с частотой `f_пио`;
4. частота выходного сигнала: `f_вых = f_пио / (CPC · m)`,
где `CPC` — число тактов PIO на один сэмпл.
Чем больше `m`, тем точнее форма и выше разрешение уровня, но тем ниже
максимальная частота.
### 2.2. Точность уровня: битность ≠ разрешение
- **Битность** `B` — сколько бит выводится в порт сразу (мгновенный код).
- **Эффективная разрядность** — сколько уровней различает **среднее**
после фильтра: `(2^B − 1)·m + 1`.
При `B = 4` и `m = 256` порт даёт 4 бита, но среднее различает
3841 уровень (~11.9 бит). Так работает дельта-сигма: соседние коды
чередуются во времени, а ФНЧ усредняет.
### 2.3. Интегратор на ОУ
**Идеальный** (R1 на входе, C1 в ООС):
```
W(s) = −1 / (R1·C1·s)
```
**Реальный интегратор** (резистор утечки R2 параллельно C1) — это
На постоянном токе усиление бесконечно, поэтому **реальный** интегратор
всегда содержит резистор утечки R2 параллельно C1 — это превращает его в
**апериодическое звено первого порядка**:
```
W(s) = −R2 / (R1 · (1 + R2·C1·s)) = −K / (τ·s + 1)
K = R2/R1, τ = R2·C1, f_c = 1/(2π·τ)
```
где K = R2/R1, τ = R2·C1, f_c = 1/(2π·τ).
### 2.4. Дифференциатор на ОУ
**Дифференциатор** (C1 на входе, R1 в ООС):
C1 на входе, R1 в ООС:
```
W(s) = −R1·C1·s
```
**Модель для работы:** K = −10, τ = 10 мс, f_c ≈ 16 Гц
(R1 = 10 кОм, R2 = 100 кОм, C1 = 0,1 мкФ).
На высоких частотах усиление растёт, поэтому на практике вход
ограничивают резистором последовательно с C1.
### 2.5. RC-фильтр нижних частот
Пассивный ФНЧ первого порядка:
```
K(f) = 1 / √(1 + (f/f_c)²), f_c = 1/(2π·R·C)
наклон за f_c: −20 дБ/дек
```
---
## 3. Задания
## 3. Часть A. Сборка и настройка стенда
### Задание 1 (1 ч). Симуляция: АЧХ и ФЧХ
### Задание A1 (0,5 ч). Прошивка генератора и первый запуск
В LTSpice собрать интегратор с резистором утечки: R1 = 10 кОм,
R2 = 100 кОм, C1 = 0,1 мкФ (R2 || C1 в ООС).
В папке `stub/` три варианта генератора — **выберите один**:
1. Задать анализ `.ac dec 20 1 100k`.
2. Снять АЧХ в децибелах и ФЧХ.
3. По графику определить:
- усиление на плоском участке (должно быть ≈ 20 дБ, т. е. K = 10);
- частоту сопряжения f_c (где спад −3 дБ);
- наклон спада (ожидается −20 дБ/дек).
4. Сравнить с расчётом по формулам из п. 2.
| Файл | Платформа | Как формируется синус |
|---|---|---|
| `01-...ip2040.ino` | Arduino C++ | программный DDS + ШИМ |
| `01-...-circuitpython.py` | CircuitPython | программный DDS + ШИМ |
| `04-dds-pio-rp2040.py` | CircuitPython | **аппаратный PIO + DMA** |
### Задание 2 (1 ч). Симуляция: Monte Carlo по допускам ⭐
**Рекомендуется вариант на PIO** — он даёт точную частоту и не грузит CPU.
**Новый анализ.** Реальные резисторы и конденсаторы имеют допуск ±5 %
(ряд E24 — не лучше). Оценим разброс параметров звена.
1. Залейте файл на Pico (CircuitPython: переименовать в `code.py`).
2. Откройте консоль, введите `HELP` — увидите список команд.
3. Введите `I` — генератор покажет текущие настройки, включая
**фактическую** частоту и потолок `f_max`.
4. Соберите внешний ФНЧ на выходе (схема — в `HELP`):
1. Задать разброс: `.step param tol list -5 -2.5 0 2.5 5` и применить
его к номиналам (например `{100k*(1+tol/100)}` для R2, аналогично R1 и C1).
Либо, для полноценного статистического анализа, использовать
`.step param run 1 100 1` с генератором случайных отклонений.
2. Прогнать **не менее 100 прогонов**.
3. Для каждого прогона зафиксировать K (усиление на плоском участке) и f_c.
4. Построить гистограммы распределения K и f_c.
5. Посчитать **долю экземпляров**, укладывающихся в полосу ±10 % от
номинального значения K и f_c.
6. Сделать вывод: **какой компонент** вносит наибольший вклад в разброс
и почему.
```
GP15 ──[R1 1к]──┬──[R2 1к]──┬──► выход
│ │
[C1 47н] [C2 47н]
│ │
GND GND
```
### Задание 3 (1 ч). Железо: переходные процессы
**Проверка:** подать `W S` (синус), `F 1000`, посмотреть осциллографом.
Период должен быть ≈ 1 мс.
Собрать на макетной плате:
### Задание A2 (0,5 ч). Калибровка частоты
**3.1. Интегратор** (R1 = 10 кОм, C1 = 0,1 мкФ):
Частота зависит от `CPC` — числа тактов PIO на сэмпл. Оно может отличаться
на разных прошивках.
- подать прямоугольник 1 кГц (от RP2040-генератора или лабораторного);
- наблюдать пилообразный сигнал на выходе;
- замерить размах пилы и сравнить с
U_m = U_вх · T / (2 · R1 · C1);
- убедиться, что при росте частоты размах падает обратно пропорционально.
1. Поставьте `F 1000`, измерьте период осциллографом.
2. Если факт отличается от запроса — введите `CAL <измеренное_значение>`,
например `CAL 500` при запросе 1000. Генератор подстроит `CPC` сам.
3. Повторите замер — теперь должно совпасть.
4. **Запишите** подобранное `CPC` (видно командой `I`) — оно нужно для
расчёта погрешности в отчёте.
**3.2. Дифференциатор** (C1 = 0,1 мкФ на входе, R1 = 10 кОм в ООС):
> Если частота вообще не достижима, генератор скажет
> `! ЗАПРОС ВЫШЕ ПОТОЛКА: факт ... Гц`. Это значит `m` слишком велико:
> уменьшите `N` или `O`.
- подать пилу 1 кГц;
- наблюдать импульсы в моменты перепада;
- сравнить амплитуду с U_m = R1·C1 · dU_вх/dt.
### Задание A3 (0,5 ч). Автоматическое снятие АЧХ
**3.3. Роль резистора утечки:** собрать интегратор с R2 = 100 кОм
параллельно C1 и без него; объяснить, что меняется на постоянном токе.
1. Соберите на макетной плате простой RC-фильтр (см. часть B, задание B3).
2. Подключите: выход генератора → вход фильтра; выход фильтра →
вход измерения (ADC0, GP26). **Если сигнал больше 3,3 В — через делитель.**
3. Запустите хост-скрипт:
### Задание 4 (1 ч). Железо: автоматическое снятие АЧХ
```
python 02-izmerenie-achh.py --port /dev/ttyACM0 \
--f0 10 --f1 100000 --n 25 --dwell 150 --uin 500 --out achh.csv --plot
```
Использовать подготовленный генератор-свип:
4. Получите CSV с точками «частота → амплитуда». Это ваш измерительный
прибор на вторую часть работы.
- **`stub/01-dds-generator-rp2040.ino`** — прошить в RP2040 (Raspberry Pi
Pico) в Arduino IDE (работает в обоих ядрах: earlephilhower и официальном
mbed). Прямоугольник (ШИМ) и синус (DDS) + логарифмический свип
+ измерение амплитуды на ADC0.
- **`stub/01-dds-generator-rp2040-circuitpython.py`** — альтернатива без
Arduino: положить файл на Pico с прошивкой CircuitPython (переименовать
в code.py). Протокол команд тот же.
- **`stub/02-izmerenie-achh.py`** — хост-скрипт: запускает свип по Serial,
собирает точки, строит АЧХ.
**Результат части A:** работающий стенд, калиброванная частота, скрипт,
дающий АЧХ в CSV.
Порядок:
---
1. Прошить генератор, проверить команды `F`, `W S`, `M`, `A` в мониторе
порта.
2. **Собрать внешний ФНЧ** на выходе генератора (без него будет меандр,
а не синус):
## 4. Часть B. Исследование фильтров
```
GP15 ──[R1 1к]──┬──[R2 1к]──┬──────► вход схемы
│ │
[C1 47н] [C2 47н]
│ │
GND GND
```
Все три задания выполняются **одним и тем же стендом**, меняется только
исследуемая схема. Для каждой схемы:
Это пассивный ФНЧ 2-го порядка, f_c ≈ 3,4 кГц; он подавляет несущую
ШИМ 62,5 кГц примерно на 50 дБ. **Зарисовать фильтр в отчёт.**
1. рассчитать параметры (K, τ или f_c) по формулам из п. 2;
2. собрать схему на макетной плате;
3. снять АЧХ стендом (частичный диапазон вокруг f_c, 8–12 точек);
4. наложить экспериментальные точки на расчётную кривую;
5. оценить расхождение и объяснить его.
3. Выход фильтра → вход схемы; выход схемы → вход измерения (ADC0).
**Если сигнал превышает 3,3 В — только через делитель.**
4. Запустить:
```
python 02-izmerenie-achh.py --port /dev/ttyACM0 \
--f0 10 --f1 100000 --n 25 --dwell 150 --uin 500 --out achh.csv --plot
```
5. Импортировать CSV, нанести точки на модельную кривую из задания 1.
6. Объяснить расхождения.
### Задание B1 (1 ч). Интегратор на ОУ
> **Смещение:** при скважности 50 % среднее на выходе ШИМ = `Uпит/2`
> = 1,65 В, поэтому синус смещён относительно земли. Если это мешает
> измерению — поставьте разделительный `C = 1 мкФ` + `R = 47 кОм`
> на землю, либо уменьшите амплитуду командой `M`.
**Схема:** R1 = 10 кОм на вход, R2 = 100 кОм ‖ C1 = 0,1 мкФ в ООС.
> Свип-генератор — студенческая заготовка (черновик). Если на стенде
> есть серийный функциональный генератор с режимом свипа/логарифмической
> развёртки — можно использовать его, принцип тот же.
- Рассчитать: `K = R2/R1`, `τ = R2·C1`, `f_c = 1/(2π·τ)`.
- Снять АЧХ в диапазоне **1 Гц … 10·f_c**.
- Определить по графику плоский участок, частоту сопряжения, наклон.
- **Проверить форму во времени:** подать прямоугольник, увидеть пилу.
Размах пилы `U_m = U_вх·T/(2·R1·C1)`.
### Задание 5 (СРС / отчёт). Сведение результатов
**Контрольный вопрос:** почему `f_c` определяется `R2·C1`, а не `R1·C1`?
Свести в одну таблицу «**расчёт / симуляция / железо**» параметры
K, τ, f_c. Построить совмещённый график АЧХ (три кривые).
### Задание B2 (1 ч). Дифференциатор на ОУ
**Схема:** C1 = 0,1 мкФ на вход, R1 = 10 кОм в ООС.
- Рассчитать `W(s) = −R1·C1·s`, ожидаемый наклон **+20 дБ/дек**.
- Снять АЧХ в диапазоне, где схема ещё устойчива.
- **Проверить во времени:** подать пилу — увидеть импульсы в моменты
перепада. Амплитуда `U_m = R1·C1·dU_вх/dt`.
- Объяснить, почему реальный дифференциатор требует ограничения входа.
**Контрольный вопрос:** чем отличается идеальный дифференциатор от
реального и почему вход ограничивают резистором?
### Задание B3 (0,5 ч). Пассивный RC-фильтр
**Схема:** R = 1 кОм, C = 0,1 мкФ (или по вашему варианту).
- Рассчитать `f_c = 1/(2π·R·C)`, ожидаемый наклон −20 дБ/дек.
- Снять АЧХ стендом в диапазоне **0,1·f_c … 100·f_c** (10–12 точек).
- Наложить на расчётную кривую `K(f) = 1/√(1+(f/f_c)²)`.
- Сравнить расхождение с допусками компонентов (±5 %).
**Контрольный вопрос:** почему реальная АЧХ за `f_c` уходит круче
−20 дБ/дек? (подсказка: паразитные параметры, вход ADC)
### Задание B4 (0,5 ч). Сравнение и отчёт
Свести результаты трёх схем в таблицу:
| Схема | f_c расчёт | f_c опыт | Расхождение | Наклон расчёт | Наклон опыт |
|---|---|---|---|---|---|
| Интегратор | | | | −20 дБ/дек | |
| Дифференциатор | | | | +20 дБ/дек | |
| RC-фильтр | | | | −20 дБ/дек | |
Сделать выводы:
- причины расхождения расчёта и симуляции;
- причины расхождения симуляции и железа;
- что даёт анализ Monte Carlo для реального проектирования.
---
## 4. Варианты
| № | R1, кОм | R2, кОм | C1, мкФ | K | τ, мс | f_c, Гц |
|---|---------|---------|---------|---|-------|---------|
| 1 | 10 | 100 | 0,1 | 10 | 10 | 15,9 |
| 2 | 10 | 47 | 0,1 | 4,7 | 4,7 | 33,9 |
| 3 | 4,7 | 100 | 0,1 | 21 | 10 | 15,9 |
| 4 | 10 | 100 | 0,047 | 10 | 4,7 | 33,9 |
| 5 | 1 | 47 | 1,0 | 47 | 47 | 3,4 |
| 6 | 22 | 220 | 0,022 | 10 | 4,84 | 32,9 |
*Примечание. Номиналы приведены к ряду E24. Вариант 2 и 4 дают одинаковую
f_c при разном K — удобно для сравнения вклада параметров.*
- какой разброс дали допуски компонентов;
- где опыт расходится с расчётом сильнее всего и почему;
- какую роль сыграла калибровка генератора (задание A2).
---
@@ -190,51 +242,56 @@ f_c при разном K — удобно для сравнения вклад
Отчёт содержит:
1. Схему интегратора и дифференциатора (KiCad или от руки).
2. АЧХ и ФЧХ из LTSpice.
3. Гистограммы Monte Carlo (K и f_c) + доля годных.
4. Осциллограммы переходных процессов (пила, импульсы).
5. CSV-точки автоматического свипа + совмещённый график АЧХ.
6. Итоговую таблицу «расчёт / симуляция / железо».
7. Выводы.
1. Схемы: ФНЧ стенда, интегратор, дифференциатор, RC-фильтр.
2. Настройки генератора из `I` (включая `CPC` после калибровки).
3. Осциллограммы: синус с генератора, пила интегратора, импульсы
дифференциатора.
4. Три графика АЧХ с наложенными расчётными кривыми.
5. Итоговую таблицу из задания B4.
6. Выводы по расхождениям.
| Задание | Баллы |
|---------|-------|
| 1. Симуляция АЧХ/ФЧХ | 2,0 |
| 2. Monte Carlo | 2,5 |
| 3. Железо: переходные процессы | 2,0 |
| 4. Железо: автоснятие АЧХ | 2,0 |
| 5. Отчёт: сведение | 1,5 |
|---|---|
| A1. Прошивка и первый запуск | 1,0 |
| A2. Калибровка частоты | 1,0 |
| A3. Автоснятие АЧХ | 2,0 |
| B1. Интегратор | 2,0 |
| B2. Дифференциатор | 2,0 |
| B3. RC-фильтр | 1,0 |
| B4. Сводка и выводы | 1,0 |
| **Итого** | **10** |
Зачёт — при **6 и более** баллах. Расхождение с эталоном ±10 %
(допуски компонентов).
Зачёт — при **6 и более** баллах.
---
## 6. Контрольные вопросы
1. Чему равна передаточная функция идеального интегратора и почему без
резистора утечки она нереализуема на практике?
2. Как по АЧХ отличить идеальный интегратор от апериодического звена
первого порядка?
3. Почему частота сопряжения определяется R2·C1, а не R1·C1?
4. Как связаны наклон АЧХ в дБ/дек и порядок звена?
5. Какой компонент даёт наибольший вклад в разброс f_c при допуске ±5 %
и почему?
6. Как на форме переходного процесса сказывается конечная полоса
пропускания операционного усилителя?
**По стенду (часть A):**
1. Чему равна частота выходного сигнала DDS и какие величины её задают?
2. Что такое `CPC` и почему его приходится калибровать?
3. Чем битность порта отличается от эффективной разрядности?
4. Почему для синуса нужен внешний ФНЧ после ШИМ?
**По фильтрам (часть B):**
5. Чему равна передаточная функция идеального интегратора и почему без
резистора утечки её нельзя реализовать?
6. Как по АЧХ отличить идеальный интегратор от апериодического звена?
7. Почему наклон АЧХ звена первого порядка равен −20 дБ/дек?
8. Как допуски R и C влияют на `f_c` и что даёт анализ Monte Carlo?
---
## 7. Литература
1. Хоровиц П., Хилл У. Искусство схемотехники. 3-е изд. М.: Бином, 2014.
Гл. 4.
Гл. 4 (ОУ в линейном режиме).
2. Титце У., Шенк К. Полупроводниковая схемотехника. 12-е изд. М.: ДМК
Пресс, 2008. Т. 1, гл. 11.
Пресс, 2008. Т. 1, гл. 11 (частотные характеристики).
3. Бесекерский В.А., Попов Е.П. Теория систем автоматического
регулирования. М.: Наука, 2010. Гл. 2.
регулирования. М.: Наука, 2010. Гл. 2 (типовые звенья).
4. LTSpice XVII User Guide. Analog Devices.
5. LM358 / TL081 datasheet. Texas Instruments.
6. RP2040 Datasheet. Raspberry Pi Ltd.
5. RP2040 Datasheet. Raspberry Pi Ltd (PIO, DMA, ADC).
6. LM358 / TL081 datasheet. Texas Instruments.