Редакция: 17.10.2026 Автор: Андрей Мищук 15 мин чтения

Программно-аппаратный измерительно-управляющий комплекс «Архимед»

Экспериментальный комплекс для автоматизированного управления силовой электроникой, задания импульсных последовательностей, измерения двунаправленного тока и регистрации результатов
Обновлено: 17.10.2026

Исходные тексты

Архив исходных текстов Rust/Forth (forth.tar.gz).

Linux-образ для AC7020C (ac7020c-sd-flash-20261017.tar.gz).

Проект платы SMPS Controller в Altium (SMPSController_prj_01.08.26.zip).

Плата SMPS Controller для изготовления — Gerber (SMPSController_pcb_01.08.26.zip).

Плата AC7020C (Zynq-7020)

Рис. 1. Плата AC7020C (Zynq-7020) — аппаратная платформа комплекса «Архимед». (Нажмите для увеличения)

1. Область применения и границы системы

Комплекс предназначен для исследования переходных процессов, импульсных преобразователей, индуктивных нагрузок и резонансных цепей. Основные функции: генерация импульсов с дискретностью 10 нс; автоматизация циклов заряда/разряда по порогам; измерение прямого и обратного токов; протоколирование; удалённое управление приборами; программирование сценариев на Forth.

2. Состав и функциональная архитектура

Поток команд: оператор / AI / MCP → очередь запросов Rust → проверка прав и параметров → Forth API → драйверы MMIO/SPI/SCPI → PL и приборы. Поток данных: AD7401A/компаратор → PL → AXI4-Lite → Rust/Forth → SQLite/MQTT/Web. Временная точность фронтов определяется PL и внешней электроникой, а не задержками Linux.

Схема логики работы комплекса «Архимед»

Рис. 2. Схема логики работы комплекса «Архимед».

Подсистема Реализация Ответственность
Вычислительная PS Zynq-7020, ARM Cortex-A9, Embedded Linux Сеть, процессы, журналирование, сценарии
Программируемая логика PL FPGA Zynq-7020 Генерация импульсов, входы компаратора, обработка PDM
Системный слой Rust Драйверы, очереди, дескрипторы, ограничения доступа
Исполнительная среда Собственное ядро Forth на Rust Композиция экспериментальных процедур
Интерфейс AI Ollama / удалённый API; MCP / A2A Интерпретация задач и формирование сценариев
Измерительный тракт AD7401A, шунт, цифровая обработка PL Измерение полярности и статистик тока
Пороговый тракт Делитель, буфер, TLV3502, MCP42010 Обнаружение достижения заданных порогов
Приборы OWON ODP6033, XDM3051 по SCPI/TCP Источник питания и независимые измерения

2.1. Разделение ответственности

Rust владеет системными ресурсами и ограничивает доступ к устройствам. Forth задаёт последовательности операций через документированные слова. AI генерирует или предлагает Forth-сценарий, который должен проходить те же проверки, что и команды оператора. FPGA выполняет критичные по времени операции.

3. Программная среда Rust/Forth

Ядро Forth реализовано на Rust, содержит словарь, компилятор, стек данных, стек возвратов, контекст выполнения и регистрацию примитивов с описанием стек-эффекта. Контекст связывает словарь, I/O-источники, таймеры, устройства и SQLite. Диспетчер word_service обслуживает результаты AI, MCP, сетевые/терминальные очереди и таймеры; при отсутствии задач предусмотрено ожидание до 10 мс.

Источник Интерфейс Назначение
Console stdin/stdout, последовательная консоль или SSH Отладка и ручное управление
Web HTTP/WebSocket, порт 8081 Терминал в браузере
MQTT TCP, внешний брокер Телеметрия и интеграция
MCP HTTP, порт 8090, и stdio Внешние AI-агенты
A2A HTTP, порт 8091 Межагентные задачи

3.1. Приборный слой

  • odp: SCPI/TCP, OWON ODP6033, установка напряжений и токовых ограничений, коммутация каналов.
  • xdm: SCPI/TCP, OWON XDM3051, контрольные измерения.
  • spi: /dev/spidev1.0, цифровой потенциометр MCP42010.
  • pulse / pulse_devmem: AXI4-Lite, timing_controller, база 0x43C00000.
  • adc / adc_devmem: AXI4-Lite, обработка AD7401A, база 0x43C10000.
  • sqlite, time, timer, thread: журналирование и вспомогательные службы.

4. Аппаратная платформа и тактирование

Модуль AC7020C содержит Zynq-7020 с процессорной системой PS и программируемой логикой PL. PS работает под Embedded Linux, PL получает команды через AXI4-Lite. Генератор тактируется частотой 100 МГц, поэтому дискретность программируемых интервалов равна 10 нс. Это шаг счётчика, а не гарантированная точность электрических фронтов на затворе MOSFET: следует отдельно измерять задержку драйвера, джиттер и время распространения сигнала.

5. Восьмиканальный генератор

База AXI4-Lite: 0x43C00000. Шаг канала: 0x24 (36 байт). Используемый объём: 8 × 0x24 = 0x120 байт. Описанное внутреннее пространство 0x200 байт достаточно; выделенное в Vivado окно может быть 4096 байт и не обязано совпадать с размером фактически декодируемых регистров. Ширина AXI-адреса в IP — 32 бита; смещение внутри IP определяется младшими адресными разрядами.

Адрес регистра: 0x43C00000 + 0x24 × channel + offset, channel = 0…7.

Смещение Регистр Доступ Назначение
0x00 STATUS RO Состояние канала
0x04 CTRL RW Пуск, сброс, режим, инверсия, секвенсор
0x08 PRE_DELAY RW Предзадержка, такты
0x0C PULSE RW Длительность импульса, такты; 0 запрещён
0x10 PAUSE RW Пауза, такты
0x14 BURST RW Число импульсов; 0 запрещён
0x18 PST_DELAY RW Постзадержка, такты
0x1C CYCLE RW Число пачек / циклов
0x20 BURST_DONE RO Счётчик выполненных импульсов

CTRL: бит 0 RUN, 1 RESET, 2 MODE (0 ONE-SHOT / 1 CONTINUOUS), 3 INVERT, 4 SEQUENCE; биты 5–31 зарезервированы. STATUS: бит 0 running, 1 running_dup, 2 done, 3 bReset, 4 error, 5 comparator_sync (1 — напряжение в окне). Назначения отражают опубликованную карту; не следует менять их без синхронного изменения RTL и драйвера.

Требует формализации по RTL: RESET — уровень или самосбрасывающийся импульс; условия повторного запуска при RUN=1; семантика CYCLE=0; момент очистки BURST_DONE; приоритет STOP/RESET/COMP; фиксация ошибки; состояние выхода после DONE; разрешение записи параметров при RUN=1. До проверки эти свойства нельзя выдавать за гарантированные.

5.1. Пример расчёта таймингов

При частоте 100 МГц: PULSE=1000 задаёт 10 мкс, PAUSE=500 — 5 мкс. Для BURST=10 суммарная длительность десяти импульсов и девяти промежуточных пауз составляет 10×10 + 9×5 = 145 мкс, если FSM не добавляет дополнительную паузу после последнего импульса. Точная длительность пачки должна быть подтверждена временной диаграммой RTL.

6. Оконный компаратор и управление зарядом/разрядом

Система использует TLV3502 и два регулируемых порога от MCP42010 через SPI /dev/spidev1.0. POT0 задаёт верхний порог отключения заряда, POT1 — нижний порог отключения разряда. Опубликованный пример Forth:

0x11 0x0B cmp-set       \ коды верхнего и нижнего порогов
0 0x11 spi-u17 mcp42010-set
1 0x0B spi-u17 mcp42010-set

Пример в прежней редакции интерпретировался как окно приблизительно 34,5–56,5 В; одновременно приводился шаг около 4,06 В/код. Эти значения нельзя считать согласованной калибровкой без измеренной функции передачи. Корректная модель для каждого канала:

$$U_{\mathrm{thr},j}(k)=a_j k+b_j,\quad j\in\{\mathrm{low},\mathrm{high}\}.$$

Коэффициенты a_j, b_j должны быть получены измерением порога переключения на входе контролируемого напряжения и записаны с указанием ревизии платы, температуры и методики. Для MCP42010 необходимо учитывать конечное сопротивление движка и реальную схему включения, а не предполагать идеальный линейный ЦАП.

Принципиальная схема оконного компаратора

Рис. 3. Принципиальная схема оконного компаратора. (Нажмите для увеличения)

Логика цикла: канал 0 формирует импульсы заряда до верхнего порога; канал 1 — разряда до нижнего. Опубликованное описание утверждает аппаратное исключение одновременной работы. Для инженерной верификации требуются RTL-assertions и осциллограммы, подтверждающие взаимную блокировку, в том числе при сбросе, переключении режимов и дребезге компаратора. Следует предусмотреть гистерезис и/или правила повторного разрешения, чтобы избежать колебаний на границе порога.

7. Измерительный тракт AD7401A

База AXI4-Lite: 0x43C10000; четыре канала, шаг 0x40 байт. Шунт: номинально 0,5 Ом. PDM: 20 МГц; OSR: 256. Один блок из 256 PDM-бит занимает 256/20 МГц = 12,8 мкс, что соответствует 78 125 блокам/с. Это скорость выдачи блочных результатов, не полоса пропускания тракта и не возможность разрешить отдельный 20–50-нс импульс.

Принципиальная схема измерительного тракта АЦП (SMPS)

Рис. 4. Принципиальная схема измерительного тракта АЦП (SMPS). (Нажмите для увеличения)

В опубликованной реализации для нуля используется ориентир 128 единиц в 256-битном окне; превышение трактуется как прямой ток, уменьшение — как обратный. Точная зависимость плотности PDM от входного дифференциального напряжения и применимость номинальной полной шкалы ±320 мВ должны подтверждаться документацией AD7401A и калибровкой. Результат простого подсчёта единиц и результат sinc³-децимации неэквивалентны по частотной характеристике.

7.1. Карта регистров одного канала AD7401A

Адрес: 0x43C10000 + 0x40 × channel + offset, channel = 0…3.

Смещение Имя Доступ Назначение по опубликованному интерфейсу
0x00 CTRL RW Управление измерением
0x04 STATUS RO Статус готовности
0x08 COUNT RO Число завершённых окон OSR
0x0C FWD_ACC RO Накопленная положительная составляющая
0x10 FWD_CNT RO Число положительных отсчётов
0x14 FWD_AVG RO Среднее прямой составляющей, Q8
0x18 FWD_EMA RO Экспоненциальное среднее, Q8
0x1C REV_ACC RO Накопленная обратная составляющая
0x20 REV_CNT RO Число отрицательных отсчётов
0x24 REV_AVG RO Среднее обратной составляющей, Q8
0x28 REV_EMA RO Экспоненциальное среднее, Q8

Опубликованная схема разделяет Batch (ACC/CNT/AVG; фиксация при спаде RUN) и Stream (EMA; обновление при поступлении новых блоков). Формула AVG = ACC × 256 / CNT соответствует Q8, если ACC накапливает целочисленные значения той же измеряемой величины, а CNT — число участвующих отсчётов. Требуется явно задокументировать разрядность ACC, переполнение, округление, случай CNT=0, формат отрицательных величин, статус VALID и момент атомарной публикации нескольких регистров.

7.2. Контракт захвата результатов

Для воспроизводимого измерения необходимо определить единый аппаратно-программный контракт: при начале RUN обнулить накопители новой серии; во время RUN обновлять статистики; при окончании RUN сохранить накопленные значения и зафиксировать согласованный снимок. Чтение всех регистров одной серии должно возвращать одну версию данных. Если реализован отдельный механизм LOCK/ARM, его переходы и приоритет относительно RUN должны быть описаны в карте CTRL/STATUS и проверены по RTL. Не следует смешивать две различные версии IP без номера ревизии.

8. Масштабирование, заряд и энергетический баланс

Пусть c_n — результат одного окна PDM, c_0 — измеренный нулевой код, а K_I — калиброванный коэффициент в амперах на код. Тогда:

$$I_n=K_I(c_n-c_0),\qquad Q_{+}=\Delta t\sum_n\max(I_n,0),\qquad Q_{-}=\Delta t\sum_n\max(-I_n,0),$$
$$Q_{\mathrm{net}}=Q_+-Q_-,\qquad \Delta t=12{,}8\ \mathrm{мкс}.$$

Если FWD/REV_AVG хранит среднее в Q8, физическое значение равно raw/256 × K, где K зависит от определения целочисленной единицы в RTL. Прежняя формула I_FWD = FWD_AVG × 5000 / 256 [мкА] означает 5 мА на целый код и может применяться только после проверки калибровки. Аналогично Q_net = (FWD_ACC − REV_ACC) × 64 [нКл] верно лишь при ACC в единицах 5 мА·отсчёт и интервале 12,8 мкс. При Q8-накоплении коэффициент меняется в 256 раз.

Важное ограничение: нулевой суммарный заряд через шунт за интервал не равнозначен нулевой потреблённой энергии. Для энергии необходимо синхронно измерять напряжение и ток:

$$E_{\mathrm{in}}=\int_{t_0}^{t_1}u_{\mathrm{in}}(t)i_{\mathrm{in}}(t)\,dt.$$

При высокочастотных переходных процессах следует учитывать фазовую ошибку каналов, полосу измерения, паразитные элементы, возврат энергии в источник и изменение запасённой энергии в конденсаторах/индуктивностях. Одно среднее значение тока не позволяет вычислить активную энергию при переменном напряжении.

8.1. Метрологический паспорт канала (заполняется испытаниями)

Параметр Метод определения Статус
Смещение нуля Запись при нулевом токе Требует измерения
Коэффициент преобразования Калиброванный DC-ток в обеих полярностях Требует измерения
Нелинейность Несколько контрольных точек диапазона Требует измерения
Полоса/задержка Ступень тока и частотный тест Требует измерения
Температурный дрейф Контроль при разных температурах Требует измерения
Переполнение ACC Длительная серия и граничные тесты Требует RTL-проверки
Согласованность снимка Чтение при RUN/STOP Требует RTL-проверки

9. Аппаратная безопасность и управление доступом

  1. Независимая блокировка: аварийное отключение силовых выходов должно быть реализовано аппаратно и иметь приоритет над RUN и командами AI.
  2. Токовая защита: программное ограничение 200 мА недостаточно для защиты от наносекундных или микросекундных аварий; требуются соответствующий аналоговый/аппаратный канал ограничения и подтверждённое время реакции.
  3. Взаимная блокировка: запрет одновременной проводимости конфликтующих ключей должен подтверждаться на уровне выходов драйверов, включая запуск, RESET и потерю тактирования.
  4. Fail-safe: при сбое Linux, потере связи, зависании Forth, перезагрузке PS или некорректной конфигурации PL выходы должны переходить в безопасное состояние; это требование подлежит реализации и испытаниям.
  5. Арбитраж: только один владелец может менять силовые параметры конкретного канала; чтение телеметрии допускается параллельно.
  6. AI: модель не получает привилегированного прямого MMIO-доступа; все команды проходят проверки диапазонов, прав, состояний и журналируются.

До подтверждения перечисленных механизмов испытания проводить с независимыми ограничителями источника питания, защитой персонала и контролем энергии накопителя.

10. Аппаратный секвенсор заряда и разряда

Секвенсор (sequencer.vhd) — модуль программируемой логики Zynq-7020, координирующий два канала импульсного генератора timing_controller по сигналам оконного компаратора. Канал CH0 управляет зарядом накопительного конденсатора, CH1 — разрядом. После настройки переходы между стадиями выполняются в FPGA без программного переключения каждого этапа со стороны ARM, Linux или Rust/Forth.

Секвенсор определяет, какой канал разрешён к работе, но не генерирует импульсы самостоятельно. Длительность, частота и временные параметры импульсов задаются соответствующими каналами timing_controller.

Функциональная структура

Оконный компараторcomp_high / comp_low (активный 0)Программное управлениеRUN / RESET / SEQsequencer.vhdСинхронизация и логика стадийCH0 — генератор зарядаRUN / RESETCH1 — генератор разрядаRUN / RESET

Функциональная схема. Выходы секвенсора управляют двумя каналами импульсного генератора.

Режимы управления

SEQ0SEQ1РежимПоведение
00РучнойПрограммные RUN/RESET управляют каналами; пороги не участвуют в переключении.
10ЗарядCH0 управляется секвенсором до достижения верхнего порога; CH1 остаётся под ручным управлением.
01РазрядCH1 управляется секвенсором до достижения нижнего порога; CH0 остаётся под ручным управлением.
11ЭстафетаАвтоматическое чередование заряда CH0 и разряда CH1 по двум порогам.

Алгоритм автоматической эстафеты

  1. При разрешённой работе активируется CH0, начинается заряд конденсатора.
  2. При достижении верхнего порога вход comp_high переходит в 0; секвенсор прекращает заряд и разрешает CH1.
  3. CH1 разряжает конденсатор до нижнего порога.
  4. При comp_low=0 разряд прекращается и вновь разрешается CH0.
  5. Цикл повторяется, пока сохраняются условия разрешения работы.

Сигналы comp_high и comp_low имеют активный низкий уровень. Пороги напряжения устанавливаются внешним измерительно-компараторным трактом; секвенсор не измеряет напряжение и не рассчитывает пороги.

Интерфейс и временные характеристики

ГруппаСигналыНазначение
Синхронизацияclk, resetТактовый сигнал и сброс логики
Обратная связьcomp_high, comp_lowСобытия достижения верхнего и нижнего порогов
Управлениеch0_sw_run, ch1_sw_run, ch0_sw_reset, ch1_sw_resetПрограммные запросы RUN/RESET
Выбор режимаch0_sequence, ch1_sequenceВключение последовательного управления по каналам
Выходыch0_gen_run, ch1_gen_run, ch0_gen_reset, ch1_gen_resetУправление генераторами
Резервch0_gen_stop, ch1_gen_stopВ описанной версии постоянно равны 0

При частоте тактирования FPGA 100 МГц период составляет 10 нс. Асинхронные входы компаратора проходят синхронизацию; поэтому фактическая задержка реакции превышает один такт и зависит от структуры синхронизаторов и управляющей логики. Полное время отключения силового ключа дополнительно определяется задержками компаратора и драйвера.

Статус верификации. Для режимов заряда до верхнего порога и разряда до нижнего порога опубликованы испытания. Полная автоматическая эстафета, гарантированное отсутствие перекрытия каналов и реакция на противоречивые входы требуют отдельной проверки перед применением в силовом эксперименте.

Итог: sequencer.vhd формирует аппаратный контур управления стадиями заряда и разряда по обратной связи от оконного компаратора. Временная структура силовых импульсов остаётся задачей timing_controller, а защитные блокировки должны проверяться отдельно.

Технический источник: Описание реализации секвенсора.

11. Протокол эксперимента и воспроизводимость

Каждая серия должна иметь идентификатор и содержать: дату/время, ревизию PCB, версию bitstream и исходников RTL, хеш программной сборки Rust/Forth, версию калибровки, параметры генератора, пороги компаратора, условия питания, исходные счётчики и результаты измерения, события защит, причину останова, а также сведения о контрольных приборах. Для SQLite следует определить схему таблиц и единицы хранения.

10.1. Последовательность безопасного выполнения

  1. Проверить состояние питания, аварийные входы и блокировки; обеспечить отключённые выходы.
  2. Загрузить и проверить калибровку компаратора и измерительного тракта.
  3. Установить нижний и верхний пороги; проверить LOW < HIGH и допустимые пределы.
  4. Записать параметры генератора; прочитать обратно и проверить корректность.
  5. Подготовить АЦП и зафиксировать идентификатор новой серии.
  6. Разрешить аппаратную логику, запустить генератор и регистрацию.
  7. Остановить генератор по завершению, команде или аварии; дождаться подтверждённого останова.
  8. Зафиксировать согласованный набор измерений, сохранить его вместе с параметрами и кодом завершения.
  9. Снять разрешение силовых выходов и вернуть комплекс в безопасное состояние.

10.2. Пример Forth (синтаксис существующего API)

\ Демонстрация известных слов. Перед реальным запуском проверить
\ порядок аргументов, межблокировки и контракт завершения RUN/ADC.
0x11 0x0B cmp-set
adc0 1 adc-enable!
adc0 adc-reset-count
1000 pulse-width!      \ 10 мкс при 100 МГц
500  pulse-pause!      \ 5 мкс
10   pulse-burst!
1    pulse-cycles!
0    pulse-mode!       \ ONE-SHOT
1    pulse-seq!
pulse-start
\ Здесь должно быть ожидание аппаратного DONE или FAULT,
\ а не немедленный останов после запуска.
\ После подтверждения DONE/STOP — фиксация и чтение Batch.

Слова adc-avg-valid?, wait, adc-batch@ из прежнего примера допустимо применять только после проверки их стек-эффектов и фактической семантики. Сама последовательность выше — иллюстрация API, не готовый безопасный производственный скрипт.

12. План верификации и критерии приёмки

Проверка Метод Критерий
Карта AXI Чтение/запись всех регистров, границы каналов Нет алиасинга, корректные RO/RW
Импульс 10 нс × N Логический анализатор/осциллограф Соответствие счётчику с учётом оговорённой задержки
PULSE=0, BURST=0 Негативные тесты Ошибка и отсутствие опасных импульсов
RUN/RESET/DONE Тест переходов FSM Соответствие формальному контракту
Конфликт каналов 0/1 Одновременные команды, RESET, FAULT Отсутствие запрещённого перекрытия
Порог TLV3502 Плавный прогон входного напряжения Срабатывание в калиброванном диапазоне
Нуль/полярность АЦП 0, ±I от эталонного источника Корректный знак, погрешность в спецификации
Интеграл заряда Известный постоянный ток и длительность Q ≈ I × t в заданном допуске
Переполнение Максимальная длительность серии Нет скрытой потери старших разрядов
Отказ связи/PS Отключение сети, зависание процесса Подтверждённое безопасное состояние

Численные допуски, максимальные задержки и результаты тестов должны быть опубликованы после измерений. До этого таблица является планом испытаний, а не свидетельством их успешного прохождения.

AI-Assisted Scientific Research — исследования на естественном языке

Комплекс «Архимед» используется не только для автоматизации лабораторного оборудования, но и непосредственно в экспериментальных исследованиях с участием AI-агентов.

Исследователь формулирует задачи на естественном языке. AI-агент преобразует их в последовательности Forth-команд, управляет генераторами и источниками питания, считывает измерительные параметры, фиксирует результаты и сохраняет контекст текущего эксперимента.

Пример исследовательского сценария — поиск и уточнение резонансной частоты:

Исследователь: «Включи генератор, уточним резонансную частоту».

AI-агент формирует команды управления генератором и запускает измерительный процесс.

Исследователь: «Увеличь/уменьши период сигнала на 10 нс».

AI-агент корректирует временные параметры генератора, сохраняя контекст эксперимента.

Исследователь: «Зафиксируй. На источнике питания 50 В, ток 0,15 А, максимальное измеренное напряжение 347 В. Выключай».

AI-агент регистрирует параметры эксперимента, фиксирует результаты измерений и выполняет команду отключения оборудования.

Ключевые возможности:

  • Интерактивное управление экспериментами на естественном языке.
  • Пошаговая настройка генераторов, источников питания и измерительных приборов.
  • Изменение временных параметров сигналов с наносекундным разрешением.
  • Сохранение контекста эксперимента между последовательными командами.
  • Регистрация измерений и параметров эксперимента в SQLite.
  • Контроль фактического состояния оборудования через аппаратную обратную связь.
  • Выполнение последовательностей измерений с участием AI-агента без ручного написания управляющих программ.

Таким образом, AI используется на двух уровнях: как инструмент ускоренной разработки программного комплекса и как непосредственный участник экспериментальной работы — для управления оборудованием, настройки параметров и регистрации результатов.

Работающая демонстрация управления лабораторным источником питания OWON ODP6033 на естественном языке:

13. Заключение

«Архимед» объединяет детерминированную FPGA-периферию, системное программирование на Rust, расширяемую предметную среду Forth и интерфейсы AI/MCP. Научная и инженерная ценность комплекса определяется не самим наличием AI, а проверяемым соответствием управляющих команд физическим действиям и измеряемым величинам. Поэтому каждая аппаратная гарантия должна подтверждаться RTL и испытанием, а каждая численная характеристика измерительного тракта — калибровкой и указанием погрешности.

Справочная документация