diff --git a/README.md b/README.md index c1ba3c5..1f781c8 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,48 @@ GP15 ──[R1 1к]──┬──[R2 1к]──┬──► к схеме --- +## ЦАП на лестнице 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). diff --git a/print/methodical-lab5-peredatochnaya-funkciya-na-ou-student.docx b/print/methodical-lab5-peredatochnaya-funkciya-na-ou-student.docx index 4726d68..41e7478 100644 Binary files a/print/methodical-lab5-peredatochnaya-funkciya-na-ou-student.docx and b/print/methodical-lab5-peredatochnaya-funkciya-na-ou-student.docx differ diff --git a/task.md b/task.md index be8a651..86d3186 100644 --- a/task.md +++ b/task.md @@ -103,6 +103,80 @@ K(f) = 1 / √(1 + (f/f_c)²), f_c = 1/(2π·R·C) наклон за f_c: −20 дБ/дек ``` +### 2.6. Многобитный вывод — это и есть ЦАП (лестница R-2R) + +Пока `B = 1`, генератор выдаёт один бит: либо 0, либо 1. Дробную точность +даёт дельта-сигма (усреднение во времени). Но при `B > 1` вывод идёт +**параллельно по нескольким пинам**, и это уже настоящий цифро-аналоговый +преобразователь — только его надо собрать снаружи. + +Простейший вариант — **лестница R-2R**: + +``` + R R R R + GP15(MSB) ──┴──┬──2R──┴──┬──2R──┴── ... ──┬──► выход + │ │ │ + 2R 2R 2R + │ │ │ + GND GND GND + (GP15 — старший бит, дальше по убыванию до GP8) +``` + +Почему работает: каждый узел лестницы делит напряжение **ровно вдвое**, +поэтому вклад пина в выход падает вдвое от старшего к младшему: + +| Пин | Вес в единицах младшего бита | Доля шкалы | +|---|---|---| +| GP15 (MSB) | 128 | 50 % | +| GP14 | 64 | 25 % | +| GP13 | 32 | 12,5 % | +| GP12 | 16 | 6,25 % | +| GP11 | 8 | 3,125 % | +| GP10 | 4 | 1,5625 % | +| GP9 | 2 | 0,781 % | +| GP8 (LSB) | 1 | 0,391 % | + +То есть код `1000 0000` (единица только на GP15) даёт половину шкалы, +`0100 0000` — четверть, и так далее. Отсюда `U_вых = U_пит · код / 256`. + +**Что важно для макета:** + +- **Номиналы.** Нужны резисторы R и 2R, причём в 2 раза точно. Удобно + взять **R = 10 кОм, 2R = 20 кОм** (оба есть в ряду E24). Понадобится + 7 резисторов R и 9 резисторов 2R для восьми бит. +- **Точность.** Чтобы не терять биты, допуск резисторов должен быть + меньше половины младшего бита: + +| Биты | Шаг шкалы | Нужен допуск лучше | +|---|---|---| +| 3 | 12,5 % | 6 % | +| 4 | 6,25 % | 3 % | +| 5 | 3,1 % | 1,5 % | +| 6 | 1,56 % | 0,8 % | +| 8 | 0,39 % | 0,2 % | + + Обычные резисторы 5 % дают надёжно **3–4 бита**, 1 % — **5–6 бит**. + Для восьми бит нужны 0,1 % или калибровка каждого уровня. Это хороший + повод обсудить со студентами, почему настоящие ЦАП стоят дорого. + +- **Выходное сопротивление** лестницы ≈ R. При R = 10 кОм это высокая + нагрузка для входа АЦП и заметная погрешность при подключении + нагрузки. Ставят **буфер на ОУ** (повторитель) между лестницей и АЦП. + Он же убирает влияние сопротивления нагрузки на шкалу. + +- **Быстродействие.** Паразитная ёмкость макета (~10–20 пФ) вместе с + R = 10 кОм даёт срез в сотни кГц. Для генератора до ~30 кГц этого + хватает; на высоких частотах берут R = 1 кОм. + +- **Разрядность пинов.** Если `B < 8`, старшие биты всё равно на GP15 — + то есть при `B = 4` работают GP15…GP12, и они занимают **старшие** + входы лестницы. Выход при этом использует всю шкалу (выравнивание + по старшему биту, см. §2.2). + +> **Ожидаемый результат.** При питании 3,3 В и 8 битах шаг ≈ 13 мВ. +> Студент может ввести код прямо в отчёт и сравнить с расчётным +> напряжением — это и есть «заглянуть внутрь ЦАП». + --- ## 3. Часть A. Сборка и настройка стенда @@ -224,9 +298,61 @@ python 02-izmerenie-achh.py --port /dev/ttyACM0 \ **Контрольный вопрос:** почему реальная АЧХ за `f_c` уходит круче −20 дБ/дек? (подсказка: паразитные параметры, вход ADC) -### Задание B4 (0,5 ч). Сравнение и отчёт +### Задание B4 (1 ч). Собрать ЦАП на лестнице R-2R -Свести результаты трёх схем в таблицу: +Это самая «железная» часть: вы собираете настоящий цифро-аналоговый +преобразователь и убеждаетесь, что многобитный вывод — это он и есть. + +**Схема** (8 бит, MSB на GP15; при `B=4` работают GP15…GP12): + +``` + GP15 ──[R]──┬──[R]──┬──[R]──┬─ ... ─┬──[R]──┬──► выход (в АЦП) + │ │ │ │ │ + [2R] [2R] [2R] [2R] [2R] + │ │ │ │ │ + GND GND GND GND GND + + R = 10 кОм, 2R = 20 кОм (оба из ряда E24) +``` + +**Порядок:** + +1. Собрать лестницу на макетной плате. При 8 битах нужно + **7 резисторов R и 9 резисторов 2R**. +2. Поставить **буфер-повторитель на ОУ** между выходом лестницы и АЦП + (иначе выходное сопротивление ≈ R исказит измерения). +3. Проверить таблицу кодов. Подать на генератор прямоугольник с малой + скважностью или использовать режим `D`, чтобы задавать отдельные коды, + и измерить выход мультиметром: + +| Код | Ожидаемое U_вых (при 3,3 В) | Измерено | +|---|---|---| +| `0000 0001` (GP8) | 13 мВ | | +| `0000 0010` (GP9) | 26 мВ | | +| `0000 0100` (GP10) | 52 мВ | | +| `1000 0000` (GP15) | 1,65 В | | +| `1111 1111` | 3,28 В | | + +4. **Оценить реальную разрядность.** Сравнить шаг с разбросом: если + соседние коды неразличимы, бит потерян. Записать, сколько бит реально + работает на ваших резисторах. + +5. **Проверить форму сигнала.** Вернуть `B 8`, `W S`, подать синус и + посмотреть выход лестницы осциллографом: сигнал будет ступенчатым — + видно квантование по уровням. Это и есть работа ЦАП. + +**Контрольные вопросы:** + +- Почему в лестнице R-2R нужны ровно два номинала, а не восемь разных + сопротивлений (по одному на каждый бит)? +- Что произойдёт с точностью, если один из резисторов 2R окажется + 20,5 кОм вместо 20 кОм? +- Почему выходное сопротивление лестницы равно R и как это влияет на + измерения через АЦП? + +### Задание B5 (0,5 ч). Сравнение и отчёт + +Свести результаты четырёх схем в таблицу: | Схема | f_c расчёт | f_c опыт | Расхождение | Наклон расчёт | Наклон опыт | |---|---|---|---|---|---| @@ -234,11 +360,14 @@ python 02-izmerenie-achh.py --port /dev/ttyACM0 \ | Дифференциатор | | | | +20 дБ/дек | | | RC-фильтр | | | | −20 дБ/дек | | +Отдельно — таблица кодов ЦАП (задание B4) и вывод о реальной разрядности. + Сделать выводы: - какой разброс дали допуски компонентов; - где опыт расходится с расчётом сильнее всего и почему; -- какую роль сыграла калибровка генератора (задание A2). +- какую роль сыграла калибровка генератора (задание A2); +- сколько бит реально дал самодельный ЦАП и почему не все восемь. --- @@ -246,13 +375,15 @@ python 02-izmerenie-achh.py --port /dev/ttyACM0 \ Отчёт содержит: -1. Схемы: ФНЧ стенда, интегратор, дифференциатор, RC-фильтр. +1. Схемы: ФНЧ стенда, интегратор, дифференциатор, RC-фильтр, + **лестница R-2R**. 2. Настройки генератора из `I` (включая `CPC` после калибровки). 3. Осциллограммы: синус с генератора, пила интегратора, импульсы - дифференциатора. + дифференциатора, **ступенчатый синус с выхода ЦАП**. 4. Три графика АЧХ с наложенными расчётными кривыми. -5. Итоговую таблицу из задания B4. -6. Выводы по расхождениям. +5. **Таблицу кодов ЦАП** (задание B4) с расчётом и измерением. +6. Итоговую таблицу из задания B5. +7. Выводы по расхождениям и о реальной разрядности ЦАП. | Задание | Баллы | |---|---| @@ -262,10 +393,17 @@ python 02-izmerenie-achh.py --port /dev/ttyACM0 \ | B1. Интегратор | 2,0 | | B2. Дифференциатор | 2,0 | | B3. RC-фильтр | 1,0 | -| B4. Сводка и выводы | 1,0 | -| **Итого** | **10** | +| B4. ЦАП на R-2R | 2,0 | +| B5. Сводка и выводы | 1,0 | +| **Итого** | **12** | -Зачёт — при **6 и более** баллах. +Зачёт — при **7 и более** баллах (из 12). + +> Почему заданий стало больше. Сборка ЦАП — это отдельная практическая +> работа, которая выросла из «многобитного вывода»: студент своими руками +> делает преобразователь, без которого работа генератора остаётся +> непонятной. Если времени мало — задание B4 можно вынести в СРС +> (собрать дома и принести измерения). --- @@ -284,7 +422,14 @@ python 02-izmerenie-achh.py --port /dev/ttyACM0 \ резистора утечки её нельзя реализовать? 6. Как по АЧХ отличить идеальный интегратор от апериодического звена? 7. Почему наклон АЧХ звена первого порядка равен −20 дБ/дек? -8. Как допуски R и C влияют на `f_c` и что даёт анализ Monte Carlo? +8. Как допуски R и C влияют на `f_c`? + +**По ЦАП (задание B4):** + +9. Почему в лестнице R-2R достаточно двух номиналов резисторов? +10. Как связан код на пинах с выходным напряжением ЦАП? +11. Почему самодельный ЦАП на резисторах 5 % не даёт все 8 бит? +12. Зачем между лестницей и АЦП ставят буфер на ОУ? ---