Как я симулятор электрических цепей в одиночку создавал

А теперь допиливаю его функционал и готовлю в релиз.

Триггер Шмитта (он же компаратор с гистерезисом) 
Триггер Шмитта (он же компаратор с гистерезисом) 

Последние несколько лет преподаю в университете "схемотехнику" и все это время (да собственно как и раньше) в курсе с аналоговыми схемами не было ни одной лабораторной. Причина проста: не было стендов/макетов, родных методичек, да и самих лаб, как можно понять, тоже не было.

Нужен был симулятор цепей, который обладал бы целом списком качеств:

  • бесплатный
  • относительно точный
  • отечественный
  • гибкий
  • простой в освоении
  • не нагружающий компы

Как бы я не искал, ничего, что выполнило бы все и сразу, я не нашел, поэтому было принято волевое решение делать собственный с нуля. Сейчас, спустя почти полгода разработки я бы себе сказал, что-то в духе: не лезь, оно тебя сожрет. Ибо симулятор буквально вынул мне душу.

Как я симулятор электрических цепей в одиночку создавал

Что удалось сделать за это время.

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

Набор активных элементов: диод, светодиод, стабилитрон, биполярные транзисторы (модель Эберса-Молла с дополнительными емкостями, чтобы зарезать верхнюю частоту), полевые транзисторы (MESFET модель Шихмана-Ходжеса), а также идеальный ОУ и компаратор с гистерезисом.

Источники: батарея, синус, меандр и логический вход (5/0В).

Цифровая логика: И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ.

Анализ: DC-анализ, малосигнальный анализ, переходные процессы, осциллограф и XY-развертка, а также Амперметр, Вольтметр и Ваттметр.

Как я симулятор электрических цепей в одиночку создавал

Что под капотом: самописный движок на пайтон с использованием PySide6 и numpy, расчет узлов идет через решение системы линейных уравнений по законам Кирхгофа через numpy.linalg.solve. Нелинейные элементы (диоды, транзисторы и операционный усилитель) решаются методом Ньютона-Рафсона. Переходные процессы считаются с помощью приближенного решения обыкновенных дифференцированных уравнений методом Эйлера. Для частотного анализа - прямое решение комплексной системы уравнений на каждой частоте. В общем сплошная численная математика.

Но вот ради чего это все затевалось, так это интегрированные прямо в симулятор лабы. Пока сделал только 7 самых основных работ (и на самом деле думаю этого будет достаточно на семестр). Плюсом сделал конструктор для преподавателя - в котором можно собрать любую лабораторную - хоть аналоговую, хоть цифровую.

Окно выбора лабораторных работ
Окно выбора лабораторных работ

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

И с собранной схемой
И с собранной схемой
А теперь с замерами ВАХ
А теперь с замерами ВАХ

А что дальше? А дальше у меня целая дорожная карта:

По лабораторному комплексу: расширение теории, сейчас есть контекстная теория по клику на элемент, но это скорее сжатый конспект, а не полноценная теория. Автоматическая сборка отчетов из окна программы. Варианты работы, чтобы номиналы генерировались под каждого студента (ну либо не изгаляться и просто сделать классические варианты).

Пример реализации цифрового инвертора 
Пример реализации цифрового инвертора 

По движку: анализ разброса методом Монте-Карло, спектральный анализ, новые элементы (трансформатор и реле уже есть, но они пока больше заглушки чем реальные элементы), больше микросхем: 555, К155ЛА3 и ей подобные для быстрой сборки цифровых устройств. Интеграция со SPICE - нетлисты и перенос схем.

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

12
3
1
1
1