36н. Осциллограф и генератор в работе: практикум на DHO900 и DG900 Pro
Разделы 36г–36м разобрали приборы по отдельности: осциллограф — ручка за ручкой, генератор — изнутри. Здесь они работают вместе, на столе рядом с платой. Двенадцать задач, у каждой одинаковый порядок: зачем, что с чем соединить, что выставить на генераторе, что на осциллографе, что должно получиться в числах и на чём обычно ошибаются. Числа «что должно получиться» посчитаны заранее моделью, поэтому расхождение на столе — повод искать ошибку в схеме или в прошивке, а не в приборе.
Приборы — те, что у автора: осциллограф RIGOL DHO900 и двухканальный генератор RIGOL DG902 Pro из серии DG900 Pro. Названия пунктов меню даны по-английски, как на экранах. Генератор серии DG900 Pro — это генератор DDS с памятью точек (как он устроен — 36к): выходы CH1 и CH2 на передней панели, на задней — по разъёму [AUX IN/OUT] на каждый канал (выход синхронизации Sync, вход внешнего запуска или модуляции), вход и выход опорной частоты 10 МГц, USB и LAN. Свой частотомер с отдельным входом Counter на передней панели тоже есть.
Опоры. Генератор: DG900 Pro User Guide (Books/Manual_RIGOL_DG900_Pro.pdf,
дальше — «руководство DG»), DG900 Pro Quick Guide
(Books/DG900 Pro Series Quick Guide.pdf, «краткое DG») и русское
краткое руководство (Books/rigol_dg900_pro_manual1.pdf, «русское DG»);
даташита и руководства по программированию DG900 Pro у нас нет.
Осциллограф: DHO900 Datasheet (Books/dho900-datasheet.pdf, «даташит»),
DHO900 User Guide (Books/DHO900_UserGuide_EN.pdf, «руководство DHO»),
DHO800/DHO900 Programming Guide (Books/DHO800900_ProgrammingGuide_EN.pdf,
«программирование»). Все страницы — по PDF-файлам. Числа задач — прогон
_verify/prac36n/ в контейнере stm-lab:1: model36n.py (Python 3.11,
numpy 1.24), фронт через кабель — ngspice-39 (ring36n.cir), листинг
36н.13 — против подставных приборов (stub36n.py).
Как это называется в документации
Оригинал Перевод Imped: HighZ, Load на какую нагрузку генератор пересчитывает число на экране Ampl/HighL, Offset/LowL размах и смещение или верхний и нижний уровни Sweep: Linear, Log, Step; Mark качание частоты; метка — частота, на которой Sync падает Burst: NCycle, Gated; Cycles, Idle Level пачка из N периодов или по воротам; число периодов, уровень между пачками Sync, Trig Out, [AUX IN/OUT] выход синхронизации, выход запуска, разъём на задней панели Align Phase, Coupling, Track выровнять фазы каналов, связать параметры, повторять канал Mod: AM, FM, SUM; Depth, Freq Dev модуляция; глубина, девиация частоты; SUM — сложение с другим сигналом Delay(r-r), Phase(r-r) задержка и фаза между фронтами двух каналов (DHO900) feed-through termination проходная нагрузка 50 Ом на разъём осциллографа
36н.1 Стенд: что общего у всех задач
Выход генератора — не источник питания. Его 50 Ом — это сопротивление, которое стоит внутри последовательно с выходом (руководство DG с. 23, 97), а не защита. Выход не замыкают, на него не подают чужое напряжение и не питают от него схему: для питания — лабораторный источник (36а.8). Защищён ли выход от замыкания и от напряжения снаружи, в документах не сказано — считайте, что нет.
Сколько он может выдать. При нагрузке HighZ — до 20 Vpp на частотах до 50 МГц, постоянное напряжение (Arb → DC) — от −10 до +10 В (руководство DG с. 38, 52; русское DG с. 18). То есть ЭДС до ±10 В: втрое выше питания вывода STM32. Поэтому вход платы в задачах ниже защищён резистором по 62.3: минимум (10 − 4,0) В / 5 мА = 1,2 кОм, ставим 1,5 кОм — с 50 Ом генератора ток через встроенный диод не больше 3,87 мА. Вывод, толерантный к 5 В, так не защищается — см. 62.3.
Включился — проверь, что на выходе. У DG900 Pro по умолчанию Load Last = Last: после включения он восстанавливает то, что стояло при выключении (руководство DG с. 108). Вчерашние 20 Vpp сегодня окажутся на плате вместе с первым нажатием кнопки выхода. Правило стола: сначала выход генератора — на осциллограф без платы, потом на плату.
Земли. Генератор питается от адаптера USB PD 15 В, 3 А, а на задней панели у него есть отдельная клемма заземления корпуса (руководство DG с. 25; краткое DG с. 12, 14). Соединён ли экран выходных BNC с защитной землёй через адаптер, в документах не сказано. У DHO900 земля щупов — это земля розетки (36а.5, 36з.1). Перед работой прозвоните экран BNC генератора и землю осциллографа; если связи нет, соедините их проводом у платы, а не через плату.
Кабели. BNC–BNC 50 Ом — от генератора; щуп 1:10 — к выводам платы (36а.2). У DHO900 входа 50 Ом нет — только 1 МОм ±1 % и 15 пФ ±3 пФ (даташит с. 10; 36г.6), поэтому, где нужна согласованная нагрузка, на вход ставят проходную нагрузку 50 Ом. И запуск: внешнего входа запуска у DHO900 нет, источник — CH1–CH4 или D0–D15 (даташит с. 13; 36д.6), так что сигнал Sync генератора занимает один канал.
Порядок задачи. Цель → подключение → генератор → осциллограф → что должно получиться → типичная ошибка. Меню генератора: форма сигнала — Wave Type, режим — Output Mode (Cont, Mod, Sweep, Burst), параметры канала (Sync, Imped, Invert) — вкладка Channel (руководство DG с. 26, 93–97).
36н.2 Задача 1: почему на экране вдвое больше
Цель. Понять, что число на экране генератора — пересчёт, а не измерение, и выставить нагрузку так, чтобы оно совпадало с тем, что видит осциллограф. Физика — в 36к.3, здесь — меню и высокая частота.
Подключение. CH1 генератора кабелем BNC прямо на CH1 осциллографа; второй опыт — с проходной нагрузкой 50 Ом на входе осциллографа.
Генератор. Sine, Freq 1 kHz, Ampl 1 Vpp, Offset 0. Вкладка Channel → Imped: сначала Load (50 Ом), потом HighZ. Внутри выхода всегда 50 Ом последовательно, а настройка Imped меняет только пересчёт: при переходе с 50 Ом на HighZ число 5 Vpp на экране становится 10 Vpp, а сигнал на разъёме остаётся прежним (руководство DG с. 97). Load можно задать числом от 1 Ом до 10 кОм — тогда экран покажет напряжение на такой нагрузке: при ЭДС 1 В и Load 1 kΩ — 0,9524 В. dBm доступны только с Load: при HighZ мощность не определена (руководство DG с. 39–40).
Осциллограф. CH1, DC, 200 mV/div; Measure → Vpp; запуск Edge по CH1.
Что должно получиться (модель — делитель 50 Ом и нагрузка с 15 пФ; при выходе ровно 50 Ом длина кабеля на размах не влияет):
| частота | Load 50 Ом, «1 Vpp», вход 1 МОм | то же, с нагрузкой 50 Ом |
|---|---|---|
| 1 кГц | 1,9999 В | 1,0000 В |
| 10 МГц | 1,9977 В | 0,9997 В |
| 70 МГц | 1,8992 В | 0,9867 В |
На 70 МГц — верхней частоте синуса DG902 Pro (руководство DG с. 38) — 15 пФ входа осциллографа уже 151,6 Ом, и «удвоение» неполное. К этому добавляется спад полосы самого осциллографа (36а.3). С HighZ на генераторе и входом 1 МОм экран генератора и осциллограф совпадают. Заводская настройка DG900 Pro — HighZ (руководство DG с. 116), а не 50 Ом, как у многих генераторов: со своего прибора на плату с высокоомным входом удвоения не будет.
Типичная ошибка. Поставить проходную нагрузку 50 Ом, а на генераторе оставить HighZ: осциллограф покажет вдвое меньше выставленного. Правило: Imped на генераторе равен тому, что реально стоит на конце кабеля.
36н.3 Задача 2: АЧХ RC-цепи качанием частоты
Цель. Снять АЧХ фильтра без диаграммы Боде: генератор качает частоту, осциллограф рисует огибающую выхода, метка генератора показывает, где какая частота. Диаграмма Боде DHO900 есть только у DHO914S и DHO924S (36к.6, 36е.24); этот способ работает на любом.
Подключение. RC: 4,7 кОм последовательно, 10 нФ на землю — срез 3386,3 Гц. Выход генератора CH1 — на вход цепи и на CH1 осциллографа (тройник BNC), выход цепи — щупом 1:10 на CH2. Задний [CH1 AUX IN/OUT] генератора — на CH3 осциллографа: это Sync.
Генератор. Sine, Ampl 1 Vpp, Imped HighZ. Output Mode → Sweep: Sweep Type Log, Start 100 Hz, Stop 100 kHz, Sweep Time 10 s, Source Internal. Вкладка Channel: Sync On, Mark On, Mark Freq 3386.3 Hz. В качании Sync поднимается в начале развёртки и падает на частоте метки (руководство DG с. 74, 94–95). Логарифмическое качание — равные доли времени на каждую декаду; закон F = P^T дан в руководстве DG (с. 70).
Осциллограф. 1 s/div — 10 с на экран. Roll (Horizontal → Roll) — OFF: тогда при 200 ms/div и медленнее прибор пишет медленную развёртку с запуском (руководство DHO с. 74), а в Roll запуска нет вовсе. Запуск — Edge, CH3, подъём, Normal. Режим сбора — Peak: на 1 s/div точка памяти далеко реже периода сигнала, и без пикового детектора огибающая развалится в алиасинг (36г.15, 36г.16). Курсоры Manual (36е.2): один — на спаде CH3, второй — на уровне 0,707 от начального размаха CH2.
Что должно получиться. Декада занимает 3,333 с. Спад Sync — через 5,099 с после начала развёртки, и в этот момент размах CH2 — 0,707 от начального (−3,01 дБ). На 100 Гц потеря −0,004 дБ, на 100 кГц — −29,41 дБ, то есть 3,38 % размаха. Постоянная времени цепи — 47 мкс: на декаду в 3,3 с фильтр успевает с запасом (как это ломается при быстром качании — 36к.7).
Типичная ошибка. Sweep Type Linear: вся полоса до среза, от 100 до 3386 Гц, проходит за 3,29 % времени — неполную треть деления на экране. Для АЧХ — только Log. Вторая ошибка — смотреть в Normal: при медленной развёртке огибающая рвётся и «звенит» ложными биениями.
36н.4 Задача 3: проверка АЦП синусом
Цель. Подать на вывод АЦП известный синус и сверить, что прошивка видит: размах в кодах, середину, частоту. И увидеть своими глазами наложение частот, когда частота сигнала выше половины частоты выборки.
Подключение. Генератор CH1 → резистор 1,5 кОм (36н.1) → PA0 (вход АЦП) платы F103; щуп CH1 осциллографа — на PA0. Прошивка запускает АЦП таймером 10 000 раз в секунду (14.5, 14.6) и на каждое преобразование переключает вывод-метку (36а.7) — его на CH2.
Генератор. Sine, Freq 1 kHz, Imped HighZ, Ampl 3 Vpp, Offset 1.65 V — или, что то же, HighL 3.15 V и LowL 0.15 V (High Level = Offset + Ampl/2, руководство DG с. 39). Сигнал от 0,15 до 3,15 В: внутри 0…3,3 В с запасом с обеих сторон.
Осциллограф. CH1, DC, 500 mV/div, смещение так, чтобы 0 В был на нижней линии сетки; CH2 — 2 V/div; запуск Edge по CH1; Measure → Vmax, Vmin, Frequency.
Что должно получиться. Коды 12-битного АЦП при 3,3 В опоры: минимум 186, максимум 3909, середина около 2048. Частота в спектре записанных отсчётов — по модели (1000 отсчётов, 10 кГц выборки):
| частота генератора | частота в отсчётах |
|---|---|
| 1000 Гц | 1000 Гц |
| 9000 Гц | 1000 Гц |
| 11000 Гц | 1000 Гц |
| 5100 Гц | 4900 Гц |
| 10010 Гц | 11 Гц |
9 и 11 кГц прошивка не отличит от 1 кГц: это алиасинг (36г.15), только теперь в своём АЦП. На экране же видно, что на самом деле: CH1 — 9 кГц, а метки CH2 ложатся на синус в такт медленной волне. На 10010 Гц коды меняются раз в десятые доли секунды — «синус с частотой 10 Гц», которого нет. Лечится не прошивкой, а фильтром перед АЦП (50а.4).
Типичная ошибка. Offset 0: при 3 Vpp отрицательная полуволна уходит до −1,5 В, ток идёт через нижний диод вывода и портит отсчёты других каналов АЦП (62.2). Вторая — Imped Load при высокоомном выводе: всё вдвое, до 6 В (36к.3).
36н.5 Задача 4: задержка реакции прошивки и редкий хвост
Цель. Измерить, через сколько после фронта на входе EXTI прошивка отвечает фронтом на выходе, и поймать редкие длинные задержки. Как мерить Delay и статистику — 36е.12 и 36е.14; здесь — почему частоту генератора нельзя ставить круглой.
Подключение. Генератор CH1 → 1,5 кОм → PA1 (EXTI1) и CH1 осциллографа; вывод, который обработчик EXTI переключает первой строкой, — на CH2. Как настроить EXTI — 7.5, 7.6.
Генератор. Pulse, Freq 1013 Hz, Width 10 us, HighL 3.3 V, LowL 0 V, Imped HighZ; фронты Leading/Trailing — 3 ns по умолчанию (руководство DG с. 46).
Осциллограф. CH1 и CH2 по 2 V/div; запуск Edge, CH1, подъём, Normal; 200 ns/div, точка запуска у левого края. Measure → Delay(r-r) между CH1 и CH2 со статистикой (руководство DHO с. 153); Display → Persistence Time → Infinite (руководство DHO с. 247; 36г.18).
Что должно получиться. Основное облако — обычная задержка входа в прерывание (36е.12) и узкая полоса дрожания. Хвост — когда фронт пришёл во время другого прерывания. Модель: SysTick раз в 1 мс занимает процессор на 2 мкс (условно), прерывание EXTI ждёт его окончания. Доля таких фронтов — 0,2 %. Теперь — частота генератора:
| частота генератора | что видно за 10 с |
|---|---|
| 1013 Гц | в среднем 20,4 задетых фронта (расчёт 20,3), не меньше 20 |
| 1000 Гц, кварцы расходятся на 20 ppm (условно) | в 79,2 % попыток — ни одного |
При «круглых» 1000 Гц фронт стоит почти в одной фазе с SysTick и сдвигается по нему на 20 нс за период: окно 2 мкс он проходит пачкой из 100 фронтов подряд раз в 50 с. Десять секунд наблюдения в четырёх случаях из пяти не покажут хвост вовсе. Некратная частота (1013 Гц) пробегает все фазы за доли секунды.
Типичная ошибка. Частота генератора, кратная частоте задач прошивки (1 кГц и SysTick 1 мс, 100 Гц и цикл 10 мс): «худший случай» прячется. Вторая — Persistence Time Min: редкий хвост мелькнёт на одном кадре из пятисот.
36н.6 Задача 5: захват таймера — частота и заполнение
Цель. Генератор задаёт частоту и заполнение, прошивка меряет их захватом таймера (13.6), осциллограф подтверждает. Проверяется и сама прошивка, и понимание того, где кончается точность каждого.
Подключение. Генератор CH1 → 1,5 кОм → PA6 (TIM3_CH1) платы F103 и CH1 осциллографа.
Генератор. Pulse, Freq 1234.5 Hz, Duty 25 %, HighL 3.3 V, LowL 0 V, Imped HighZ. У Pulse ширина и заполнение связаны: меняется одно — меняется другое; ширина — от 9 нс, шаг заполнения 0,01 % (руководство DG с. 46).
Осциллограф. CH1, 1 V/div, 200 us/div; Measure → Frequency, +Duty со статистикой; или частотомер Counter (36е.16).
Что должно получиться. Период — 810,04 тика по 1 мкс (PSC = 71): прошивка читает 810 в 95,5 % периодов и 811 в 4,5 % — то есть 1234,57 или 1233,05 Гц. Ширина 202,51 мкс читается как 202 или 203 — заполнение 24,94 или 25,06 %. На такте 72 МГц (PSC = 0) период — 58323,21 тика, точнее в 72 раза. Развёртка DHO900 — ±25 ppm (даташит с. 11), на 1234,5 Гц это ±0,031 Гц: осциллограф здесь — эталон. Точность частоты самого DG900 Pro в наших документах не названа — без даташита верить шкале генератора нельзя.
Типичная ошибка. Переполнение счётчика: 16 бит при тике 1 мкс захватывают период только выше 15,26 Гц, при тике 1/72 МГц — выше 1098,6 Гц; 1 кГц на PSC = 0 даёт мусор. И кварц платы: если он ушёл на +30 ppm (условно), на PSC = 0 это 1,75 тика на период — прошивка «ошибётся» ровно на столько, и виноват не генератор.
36н.7 Задача 6: пачка импульсов и счёт в прошивке
Цель. Генератор выдаёт ровно N периодов, прошивка их считает, осциллограф запускается по Sync и показывает пачку целиком. Так ловят потерянные и лишние фронты (36к.7).
Подключение. Генератор CH1 → 1,5 кОм → вход счёта платы и CH1 осциллографа. [CH1 AUX IN/OUT] на задней панели генератора → CH3 осциллографа.
Генератор. Square, Freq 100 kHz, HighL 3.3 V, LowL 0 V, Imped HighZ. Output Mode → Burst: NCycle, Cycles 1000, Source Internal, Burst Period 100 ms, Idle Level — Bottom. Вкладка Channel → Sync On. Sync в пачке поднимается в начале и падает после N периодов (руководство DG с. 95). Число периодов — от 1 до 1 M; если период пачки мал для N, генератор сам его увеличит (руководство DG с. 77, 79).
Осциллограф. CH1 2 V/div, CH3 2 V/div; запуск Edge, CH3, подъём, Normal; 2 ms/div — 20 мс на экран, Memory Depth 1M — 50 Мвыб/с, 500 выборок на период. Measure → Rising Edge Count на CH1 и +Width на CH3 (даташит с. 16).
Что должно получиться. +Width Sync — 10 мс, заполнение Sync — 10 %; Rising Edge Count — 1000. Наименьший период пачки по формуле руководства (⌈N·T / 6,4 нс⌉ · 6,4 нс + 4 мкс) — 10,004 мс. Прошивка: счёт по прерыванию EXTI против счёта таймером от внешнего входа. Модель: обработчик с входом и выходом — 1,5 мкс (условно), один запрос может ждать:
| частота в пачке | насчитало прерывание |
|---|---|
| 100 кГц | 1000 |
| 500 кГц | 1000 |
| 1 МГц | 668 |
| 2 МГц | 335 |
Выше частоты, которую успевает обработчик, лишние фронты теряются молча. Таймер, тактируемый входом (13.3), считает их аппаратно.
Типичная ошибка. Включить внешний запуск пачки или Trig Out и ждать Sync: тогда разъём [AUX IN/OUT] занят, Sync нет (руководство DG с. 95–96). Вторая — искать на осциллографе вход EXT: у DHO900 его нет, Sync идёт на канал.
36н.8 Задача 7: ШИМ-ЦАП — генератор вместо датчика
Цель. Прошивка читает АЦП и выдаёт ШИМ с заполнением, пропорциональным коду; RC-фильтр делает из ШИМ напряжение. Генератор изображает медленный датчик, осциллограф показывает две вещи: что выход повторяет вход и сколько остаётся пульсаций после фильтра.
Подключение. Генератор CH1 → 1,5 кОм → PA0 (АЦП) и CH1 осциллографа.
ШИМ — TIM2 с ARR = 999 на 72 МГц, частота 72 кГц (13.5); фильтр
10 кОм и 100 нФ, срез 159,15 Гц; выход фильтра — щупом на CH2, сам вывод
ШИМ — на CH3 для запуска.
Генератор. Ramp, Freq 100 mHz, Symmetry 100 %, HighL 3.0 V, LowL 0.3 V, Imped HighZ (Symmetry — руководство DG с. 44). Пила на 10 с изображает датчик от 0,3 до 3,0 В.
Осциллограф. Два вида. XY (36г.13): X — CH1, Y — CH2, по 500 mV/div: должна выйти прямая под 45°. Пульсации: CH2 — AC, 5 mV/div, BW Limit 20M (руководство DHO с. 57); запуск Edge по CH3; 10 us/div.
Что должно получиться. Ступенька выхода — 3,30 мВ (1000 шагов ШИМ на 3,3 В). Отставание фильтра от пилы — 0,27 мВ: незаметно. Пульсации (размах, модель RC на меандре 3,3 В):
| заполнение | пульсации |
|---|---|
| 10 % | 4,12 мВ |
| 50 % | 11,46 мВ |
| 90 % | 4,12 мВ |
Наибольшие — на середине (прикидка V·D(1 − D)·T/τ даёт те же 11,46 мВ). При 5 mV/div и 12 битах шаг кода осциллографа — 9,77 мкВ, пульсация видна во всех подробностях; при 1 V/div в DC — шаг 1,953 мВ, и 11,46 мВ — это 5,9 кода: грубая ступенчатая полоса.
Типичная ошибка. Мерить пульсации в DC на крупной шкале и длинным земляным проводом щупа: фронты ШИМ наводят на нём выбросы, которых в схеме нет (36а.2). Пружинка на землю у самой точки.
36н.9 Задача 8: звон на фронтах и согласование 50 Ом
Цель. Увидеть, что делает кабель без нагрузки и с нагрузкой 50 Ом, и понять, почему счётчик на плате иногда считает фронт дважды. Отражения по теории — 160.3, 160.4; выброс от источника с малым сопротивлением — 36к.5.
Подключение. Генератор CH1 → тройник BNC: одно плечо — щупом на CH1 осциллографа (это «ближний конец», здесь же может стоять плата), другое — кабель 2 м на CH2 осциллографа («дальний конец»). Второй опыт — с проходной нагрузкой 50 Ом на CH2.
Генератор. Pulse, Freq 1 MHz, Width 200 ns, HighL 3.3 V, LowL 0 V, Imped HighZ, Leading 3 ns.
Осциллограф. CH1 и CH2 по 1 V/div, 10 ns/div, запуск Edge по CH1, BW Limit — FULL.
Что должно получиться (ngspice: ЭДС 0 → 3,3 В, выход 50 Ом, кабель 50 Ом и 10 нс):
| точка | без нагрузки | с нагрузкой 50 Ом |
|---|---|---|
| дальний конец, итог | 3,30 В, без выброса | 1,65 В |
| дальний конец, фронт 10…90 % | 3,37 нс | — |
| ближний конец | полка 1,65 В на 20,7 нс, потом 3,30 В | 1,65 В, провал до 1,49 В |
Дальний конец чист: отражение от открытого конца возвращается и гаснет в 50 Ом генератора. А у генератора — ступенька: полка ровно на половине, 1,65 В, ровно столько, сколько волна идёт туда и обратно. Половина 3,3 В — как раз около порога входа КМОП: плата, подключённая у генератора через тройник, видит медленно ползущий через порог фронт, и счётчик без гистерезиса может насчитать два. С нагрузкой 50 Ом ступеньки нет, но амплитуда — половина: Imped на генераторе переводят в Load 50 Ом и выставляют HighL 3.3 V снова (36н.2).
Свой фронт 3 нс на экране DHO914/DHO924 (≤2,8 нс по даташиту, с. 9) растянется примерно до 4,10 нс, на моделях 250 МГц (≤1,4 нс) — до 3,31 нс (сложение по 36а.3).
Типичная ошибка. Нагрузку 50 Ом поставить у генератора, а не на дальнем конце: это не согласование, а делитель, отражение остаётся. И не путать полку на ближнем конце с «плохим генератором».
36н.10 Задача 9: два канала со сдвигом фазы
Цель. Проверить, как осциллограф меряет фазу и задержку, и заодно измерить его собственный перекос каналов и кабелей.
Подключение. CH1 генератора → CH1 осциллографа, CH2 → CH2; кабели одинаковой длины.
Генератор. Оба канала Sine, Freq 1 MHz, Ampl 1 Vpp, Imped HighZ; у CH2 Phase 90° (от −360 до 360°, шаг 0,01° — руководство DG с. 40). Затем нажать Align Phase: без него фазы каналов не привязаны друг к другу, и осциллограф показывает случайный сдвиг (руководство DG с. 101). Чтобы менять частоту обоих сразу — Coupling → Freq Cpl, Ratio 1; сдвиг держит Phase Cpl, Offset 90° (руководство DG с. 98–99).
Осциллограф. CH1 и CH2 по 200 mV/div, 200 ns/div, запуск Edge по CH1; Measure → Phase(r-r) и Delay(r-r), источник A — CH1, B — CH2 (руководство DHO с. 153–154).
Что должно получиться. Сдвиг 90° на 1 МГц — задержка 250 нс. Знак: у DHO900 задержка отрицательна, если фронт A позже фронта B (руководство DHO с. 153); какой знак фазы у DG900 Pro считается «опережением», руководство DG не говорит — проверьте на своём столе. Второй опыт: обоим каналам одна фаза, частота 10 МГц. Разница каналов DHO900 — типично до 2 нс (даташит с. 11), на 10 МГц это 7,2°; лишние 20 см кабеля (5 нс/м, как в 36к.5) — ещё 3,6°. Шаг фазы генератора 0,01° на 10 МГц — 2,78 пс: генератор задаёт точнее, чем осциллограф различает. Перекос убирают подстройкой задержки канала, до ±100 нс (даташит с. 11).
Типичная ошибка. Поменять частоту и не нажать Align Phase снова. Вторая — мерить на 1 кГц: 2 нс там — 0,0007°, перекос не виден, и кажется, что его нет.
36н.11 Задача 10: модуляция и её спектр на БПФ
Цель. Посмотреть на AM и FM в спектре и заодно проверить БПФ осциллографа на сигнале с известными составляющими (как читать БПФ — 36е.21, 36е.22). DG900 Pro умеет AM, FM, PM, ASK, FSK, PSK, PWM и SUM, внутренним сигналом или внешним через [AUX IN/OUT] (руководство DG с. 56).
Подключение. Генератор CH1 → CH1 осциллографа.
Генератор. Sine, Freq 100 kHz, Ampl 1 Vpp, Imped HighZ. Output Mode → Mod. AM: Source Internal, Shape Sine, AM Freq 1 kHz, Depth 100 %, потом 50 % (частота модуляции от 2 мГц до 1 МГц, глубина от 0 до 120 % — руководство DG с. 58). FM: FM Freq 1 kHz, Freq Dev сначала 1 kHz, потом 2.405 kHz (руководство DG с. 60).
Осциллограф. CH1, 200 mV/div, 2 ms/div — окно 20 мс, разрешение БПФ 50 Гц (36е.21). Math → FFT, источник CH1, окно Hanning (по умолчанию, даташит с. 17), центр 100 кГц, полоса около 10 кГц.
Что должно получиться (модель — БПФ с Hanning, дБ к несущей или к немодулированному синусу того же Ampl):
| сигнал | несущая | 1-я боковая | 2-я боковая |
|---|---|---|---|
| AM, Depth 100 % | −6,02 дБ к синусу | −6,02 дБн | — |
| AM, Depth 50 % | −6,02 дБ к синусу | −12,04 дБн | — |
| FM, β = 1 | −2,32 дБ | −7,13 дБ | −18,79 дБ |
| FM, β = 2,405 | −80,86 дБ — пропала | −5,69 дБ | −7,29 дБ |
FM-строки — функции Бесселя: J0(1) = 0,7652, J1(1) = 0,4401; J0(2,405) ≈ 0 — несущая исчезает, J1(2,405) = 0,5191. Это классическая проверка девиации: крутите Freq Dev, пока несущая в БПФ не пропадёт, — девиация будет 2,405 × частоту модуляции. Полоса по Карсону для второго случая — 6,81 кГц.
Почему несущая AM на 6 дБ ниже. По руководству DG при глубине 0 % амплитуда — половина заданной, при 100 % — вся (с. 58): Ampl — это вершина огибающей, а несущая — её середина. Модель с таким толкованием дала −6,02 дБ к синусу того же Ampl при любой глубине.
Типичная ошибка. Окно 2 мс (200 us/div): разрешение 500 Гц, и боковые на ±1 кГц сливаются с несущей. Окно — не короче нескольких периодов модуляции.
36н.12 Задача 11: шум и усреднение
Цель. Вытащить слабый периодический сигнал из шума усреднением Average и понять, почему оно иногда «съедает» сам сигнал. У DHO900 нет режима High Res (36г.16) — остаются Average, BW Limit и цифровые фильтры (36е.19).
Подключение. CH1 генератора → CH1 осциллографа, CH2 генератора → CH2 осциллографа.
Генератор. CH1: Sine, Freq 1 kHz, Ampl 100 mVpp, Imped HighZ; Output Mode → Mod, тип SUM, Waveform Noise — к синусу добавляется шум (SUM Ratio — его доля к размаху синуса, руководство DG с. 68). CH2: Square, Freq 1 kHz, 3.3 Vpp — чистый сигнал запуска той же частоты. Сколько шума в «процентах» SUM Ratio и какая у шума полоса, руководство не говорит: подберите Ratio так, чтобы VRMS шума на осциллографе был около 20 мВ.
Осциллограф. CH1 — 20 mV/div, CH2 — 2 V/div; запуск Edge по CH2; Horizontal → Acquisition → Average, 16, потом 256 (от 2 до 65536, степени двойки — даташит с. 12); 200 us/div.
Что должно получиться (модель: синус 100 mVpp и шум 20 мВ ср. кв.):
| усреднение | остаток шума | расчёт σ/√N |
|---|---|---|
| 16 | 4,93 мВ | 5,00 мВ |
| 256 | 1,25 мВ | 1,25 мВ |
Шаг кода DHO900 на 20 mV/div — 39,1 мкВ, так что 256 усреднений упираются в шум, а не в разрядность. Нужен сигнал ещё меньше — у DG900 Pro есть аттенюатор 40 дБ на 50 Ом, 1 Вт (RA5040K, руководство DG с. 120): 1 mVpp на нагрузке 50 Ом превращаются в 10 мкВ размаха.
Типичная ошибка. Запуск по самому шумному CH1. Модель: уровень 0, взвод ниже −10 мВ (условно): шум запускает развёртку в случайных фазах, и после 256 усреднений от синуса остаётся 11,7 % амплитуды. Average требует, чтобы каждая запись начиналась в одной фазе сигнала, — поэтому запуск по чистому CH2 генератора.
36н.13 Задача 12: всё вместе из Python — АЧХ в CSV
Цель. Снять АЧХ RC-цепи из 36н.3 по точкам автоматически: генератор шагает по частоте, скрипт читает из DHO900 частоту, размахи и фазу и пишет таблицу.
Чем управляем. Команды DHO900 — настоящие, из руководства по
программированию (*IDN? — с. 148, :CHANnel<n>:SCALe — с. 97,
:MEASure:ITEM? — с. 217–218, :SYSTem:ERRor? — с. 290,
:TIMebase:MAIN:SCALe — с. 315; как писать команды и разбирать ответы —
36ж.15). С генератором хуже: руководство DG отсылает за командами в
отдельный DG800 Pro/DG900 Pro Programming Guide (с. 36, 117), а сам
приводит лишь две команды для ключей опций и одну для загрузки точек
(с. 35–36, 83) — ни частоты, ни выхода. Пока руководства по
программированию нет, у генератора спрашиваем только *IDN? — общую
команду IEEE 488.2 — и записываем ответ в шапку CSV. Частотой управляет
сам генератор, режимом Step.
Подключение. Как в 36н.3: вход цепи — CH1, выход — CH2. Оба прибора — по USB или LAN; VISA-адрес генератора — Utility → I/O → VISA Address (руководство DG с. 107), осциллографа — 36ж.15.
Генератор. Sine, Ampl 1 Vpp, Imped HighZ. Sweep: Sweep Type Step, Step Num 31, Start 100 Hz, Stop 100 kHz, Sweep Time 62 s, Source Manual. Время на шаге задают Sweep Time и Step Num (руководство DG с. 71); для Log и Step полное время не больше 500 с (с. 72–73). Как именно расставлены шаги — равно по частоте или по логарифму, — руководство не говорит, поэтому скрипт не полагается на расстановку: он сам меряет частоту. Запустить скрипт, потом нажать Trigger на генераторе.
Осциллограф. Как в 36н.3, без Peak; скрипт сам подбирает развёртку (три периода на экран) и масштаб CH2 (выход — около шести делений).
# sweep_log.py — АЧХ по шагам: DG900 Pro качает сам (Sweep, Step), DHO900 меряет по SCPI, итог — CSV
import csv, math, sys, time
import pyvisa
SCOPE, GEN, OUT = sys.argv[1], sys.argv[2], sys.argv[3] # VISA-адреса и имя файла
DT = 0.25 # с между опросами; шаг генератора должен быть в несколько раз длиннее
STEPS = 31 # Step Num в меню Sweep генератора
rm = pyvisa.ResourceManager()
scope, gen = rm.open_resource(SCOPE), rm.open_resource(GEN)
for d in (scope, gen):
d.timeout = 5000
d.read_termination = d.write_termination = "\n"
def cmd(s):
scope.write(s)
err = scope.query(":SYSTem:ERRor?").strip()
if int(err.split(",")[0]) != 0:
raise RuntimeError(s + " -> " + err)
def meas(item, *src):
v = float(scope.query(":MEASure:ITEM? %s,%s" % (item, ",".join(src))))
return None if abs(v) > 9e36 else v # 9.9E37 — измерение не получилось
ids = [scope.query("*IDN?").strip(), gen.query("*IDN?").strip()] # у генератора — только IEEE 488.2
rows, last, same = [], None, 0
with open(OUT, "w", newline="") as fh:
w = csv.writer(fh)
w.writerow(["# " + ids[0]])
w.writerow(["# " + ids[1]])
w.writerow(["f_Hz", "vin_V", "vout_V", "gain_dB", "phase_deg"])
while len(rows) < STEPS:
f = meas("FREQuency", "CHANnel1")
if f is None:
time.sleep(DT)
continue
if last is None or abs(f - last) > 0.01 * last: # генератор перешёл на новый шаг
last, same = f, 0
cmd(":TIMebase:MAIN:SCALe %.3e" % (3 / f / 10)) # три периода на экран
time.sleep(DT)
continue
same += 1
if same == 2: # второй совпавший опрос — шаг устоялся
vin, vout = meas("VPP", "CHANnel1"), meas("VPP", "CHANnel2")
ph = meas("RRPHase", "CHANnel1", "CHANnel2")
cmd(":CHANnel2:SCALe %.3e" % (vout / 6)) # выход занимает около 6 делений
vout = meas("VPP", "CHANnel2")
row = [round(f, 1), vin, vout, round(20 * math.log10(vout / vin), 2), ph]
rows.append(row)
w.writerow(row)
print("%9.1f Hz %7.2f dB %7.1f deg" % (row[0], row[3], ph))
time.sleep(DT)
Что должно получиться. Прогон против подставных приборов (шаги — по логарифму, 2 с на шаг, виртуальное время): 31 строка за 63,75 с, ни одной ошибки в очереди. Несколько строк вывода:
| частота | усиление | фаза |
|---|---|---|
| 100 Гц | −0,00 дБ | 1,7° |
| 3162,3 Гц | −2,72 дБ | 43,0° |
| 3981,1 Гц | −3,77 дБ | 49,6° |
| 100000 Гц | −29,41 дБ | 88,1° |
Срез 3386,3 Гц лежит между двумя шагами — точнее даёт Mark в 36н.3 или больше шагов. Фаза положительная: выход позже входа, а Delay(r-r) у DHO900 положителен, когда фронт B позже A (руководство DHO с. 153).
Типичная ошибка. Шаг генератора короче, чем два опроса плюс перестройка развёртки: скрипт пропустит частоты. И масштаб CH2, оставленный на 1 В/дел: на −29 дБ размах 34 мВ — это 17 кодов, и усиление пляшет.
36н.14 Грабли
Вдвое больше или вдвое меньше. Imped генератора не совпадает с реальной нагрузкой. HighZ на входе 1 МОм — верно; с проходной нагрузкой 50 Ом — Load 50 Ом (36н.2).
На плате оказалось 20 Vpp. Load Last = Last восстановил вчерашнюю настройку. Выход — сначала на осциллограф, вход платы — через 1,5 кОм (36н.1).
АЧХ при линейном качании «сплюснута». До среза 3386,3 Гц — 3,29 % времени развёртки. Только Log (36н.3).
Прошивка видит 1 кГц, а подано 9 кГц. Алиасинг при выборке 10 кГц; фильтр до АЦП, а не в прошивке (36н.4).
Хвост задержки не ловится. Частота генератора кратна частоте задач прошивки: при расхождении кварцев 20 ppm в 79,2 % десятисекундных попыток хвоста нет. Некратная частота — 1013 Гц (36н.5).
Захват показывает мусор на 1 кГц. Переполнение 16 бит при тике 1/72 МГц: ниже 1098,6 Гц — только с предделителем (36н.6).
Прерывание считает 668 из 1000. Обработчик не успевает за 1 МГц; счёт — таймером от входа (36н.7).
Счётчик у генератора насчитал лишнее. Полка 1,65 В на ближнем конце кабеля без нагрузки — 20,7 нс у порога (36н.9).
Фаза между каналами случайная. Не нажата Align Phase (36н.10).
Несущая AM на 6 дБ ниже ожидаемой. Ampl у DG900 Pro — вершина огибающей (36н.11).
Усреднение стёрло сигнал. Запуск по шумному каналу: 11,7 % амплитуды после 256 записей; запуск по чистому CH2 (36н.12).
36н.15 Итоги
- Выход генератора — 50 Ом последовательно и ЭДС до ±10 В; не источник питания. Вход платы — через 1,5 кОм, первое включение — на осциллограф.
- Imped (HighZ или Load) меняет только число на экране генератора; у DG900 Pro по умолчанию HighZ. Внешнего входа запуска у DHO900 нет — Sync генератора идёт на канал.
- Качание Log с меткой Mark даёт АЧХ на любом осциллографе: Sync падает на нужной частоте, Peak держит огибающую.
- Генератор проверяет прошивку: АЦП и алиасинг, задержку EXTI (частота некратная задачам прошивки), захват (осциллограф с ±25 ppm — эталон), счёт пачки (прерывание теряет выше своей скорости).
- Кабель без нагрузки чист на дальнем конце и даёт полку у генератора; нагрузка 50 Ом убирает полку и половинит амплитуду.
- Align Phase — после каждой смены частоты; перекос каналов виден на 10 МГц, не на 1 кГц.
- AM и FM — готовые эталоны для БПФ: боковые −6,02 дБн при 100 %, несущая FM пропадает при β = 2,405.
- Average работает только с запуском по чистому сигналу.
- Автоматизация: DHO900 — по своим командам SCPI, генератор пока —
только
*IDN?и собственный Step; для полного управления нужен Programming Guide DG900 Pro.
Дальше: часть VI, раздел 37 «Приложения IoT» — сетевые модули, стеки и обмен с сервером.