Как я симулятор электрических цепей в одиночку создавал
А теперь допиливаю его функционал и готовлю в релиз.
Последние несколько лет преподаю в университете "схемотехнику" и все это время (да собственно как и раньше) в курсе с аналоговыми схемами не было ни одной лабораторной. Причина проста: не было стендов/макетов, родных методичек, да и самих лаб, как можно понять, тоже не было.
Нужен был симулятор цепей, который обладал бы целом списком качеств:
- бесплатный
- относительно точный
- отечественный
- гибкий
- простой в освоении
- не нагружающий компы
Как бы я не искал, ничего, что выполнило бы все и сразу, я не нашел, поэтому было принято волевое решение делать собственный с нуля. Сейчас, спустя почти полгода разработки я бы себе сказал, что-то в духе: не лезь, оно тебя сожрет. Ибо симулятор буквально вынул мне душу.
Что удалось сделать за это время.
Набор пассивных элементов: резисторы, конденсаторы, катушки индуктивности. Каждый из них можно сделать переменным, а потом двигать ползунки и смотреть как меняется картинка на осциллографе.
Набор активных элементов: диод, светодиод, стабилитрон, биполярные транзисторы (модель Эберса-Молла с дополнительными емкостями, чтобы зарезать верхнюю частоту), полевые транзисторы (MESFET модель Шихмана-Ходжеса), а также идеальный ОУ и компаратор с гистерезисом.
Источники: батарея, синус, меандр и логический вход (5/0В).
Цифровая логика: И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ.
Анализ: DC-анализ, малосигнальный анализ, переходные процессы, осциллограф и XY-развертка, а также Амперметр, Вольтметр и Ваттметр.
Что под капотом: самописный движок на пайтон с использованием PySide6 и numpy, расчет узлов идет через решение системы линейных уравнений по законам Кирхгофа через numpy.linalg.solve. Нелинейные элементы (диоды, транзисторы и операционный усилитель) решаются методом Ньютона-Рафсона. Переходные процессы считаются с помощью приближенного решения обыкновенных дифференцированных уравнений методом Эйлера. Для частотного анализа - прямое решение комплексной системы уравнений на каждой частоте. В общем сплошная численная математика.
Но вот ради чего это все затевалось, так это интегрированные прямо в симулятор лабы. Пока сделал только 7 самых основных работ (и на самом деле думаю этого будет достаточно на семестр). Плюсом сделал конструктор для преподавателя - в котором можно собрать любую лабораторную - хоть аналоговую, хоть цифровую.
В каждой работе сразу включена методичка с заданием, схемой, контрольными вопросами и содержанием отчета. Студенту остается только собрать схему, правильно расставить измерительные приборы, снять с них показания, написать отчет и защитить его мне.
А что дальше? А дальше у меня целая дорожная карта:
По лабораторному комплексу: расширение теории, сейчас есть контекстная теория по клику на элемент, но это скорее сжатый конспект, а не полноценная теория. Автоматическая сборка отчетов из окна программы. Варианты работы, чтобы номиналы генерировались под каждого студента (ну либо не изгаляться и просто сделать классические варианты).
По движку: анализ разброса методом Монте-Карло, спектральный анализ, новые элементы (трансформатор и реле уже есть, но они пока больше заглушки чем реальные элементы), больше микросхем: 555, К155ЛА3 и ей подобные для быстрой сборки цифровых устройств. Интеграция со SPICE - нетлисты и перенос схем.
Параллельно делаю школьную версию с графическим интерфейсом, чтобы перед переходом к реальным макеткам и элементам дети могли потренироваться в симулятор.