Постановка проблемы
В современных условиях разработки электронных устройств возникает необходимость в эффективном инструменте моделирования схем до их физической реализации. Существующие решения часто имеют ограниченную гибкость или сложность в расширении функциональности.
Требуется создание программного обеспечения, позволяющего:
Создавать математические модели электронных схем
Проводить различные виды анализа
Обеспечивать возможность расширения базового функционала
Анализ последних исследований и публикаций
Современные системы моделирования электронных схем активно развиваются в направлении повышения точности и скорости вычислений.
Особое внимание уделяется:
Интеграции с другими инструментами проектирования
Расширению библиотек компонентов
Внедрению новых методов анализа
Улучшению пользовательского интерфейса
Формулировка целей статьи
Целью работы является разработка программного обеспечения для моделирования электронных схем, которое:
Обеспечивает создание математических моделей схем
Реализует основные виды анализа (DC и AC)
Имеет модульную архитектуру для дальнейшего расширения
Предоставляет удобный интерфейс для работы с данными
Основная часть
Для решения задачи моделирования электронной схемы необходимо получить математическую модель для возможности дальнейшего анализа.
Следовательно, необходимо реализовать класс, который будет соответствовать математической модели электрической цепи и хранить в себе все необходимые данные, такие как: номера и индексы узлов, список компонентов (нетлист), сформированные уравнения равновесия.
Представим диаграмму класса Circuit:
Рис. 1 Диаграмма класса Circuit
При инициализации объекта класса Circuit формируется список узлов и список компонентов из переданного нетлиста. Также для инициализации объекта можно указать тип модели, которая будет создаваться. реализовано два метода: общий табличный метод и гибридный ГМ10. Но Такая реализация предполагает возможность добавления других необходимых пользователю методов путем дописывания соответствующего кода.
Также на данной диаграмме видны два возможных анализа: DC-анализ и AC-анализ. В дальнейшем планируется доработать еще несколько типов анализа.
Методы DC и AC анализов возвращают словарь с такой структурой:
Название анализа;
начало отсчета времени;
Конец отсчета времени;
Шаг времени;
Список векторов напряжений и токов (для каждого момента времени и каждого элемента схемы).
Сделано это для удобства формирования результатов, как в текстовой, так и в графической формах.
Рис. 2 Диаграмма последовательности работы программы
На диаграмме, представленной выше, изображено подробное описание логики возможного сеанса использования данной программы. Пользователь создает компоненты, необходимые ему для моделирования. Затем необходимо создать объект схемы Circuit и передать ему нетлист для формирования математической модели. При вызове метода для анализа схемы пользователю будет предоставлено решение уравнений равновесия данной модели в виде текстового или графического ответа.
Для реализации компонентов был создан класс Component с общими полями и методами. Все компоненты из базового набора подражают классу Component. То есть, для создания нового компонента необходимо просто переопределить или добавить необходимые поля и/или методы. Это также упрощает создание новейших, нужных юзеру частей схемы, не входящих в базисный набор.
Рис. 3 Диаграмма класса Component
Класс Resistor следует классу Component и выглядит так:
Рис. 4 Диаграмма класса Resistor
Осмотрим параметры, необходимые для инициализации объекта класса:
classResistor(Component):
def__init__(self, name: str, nodes: list, resistance: float):
name – название для компонента в схеме;
nodes – список из узлов, к которым подключен резистор (в данном случае 2 узла)
resistance – числовое значение с плавающей точностью для определения сопротивления
Пример создания объекта:
R1 = Resistor('R1', [0,1],3)# 3 Ohm
Класс CurrentSource следует классу Component и выглядит так:
Рис. 5Диаграмма класса CurrentSource
Осмотрим параметры, необходимые для инициализации объекта класса:
class CurrentSource(Component):
def__init__(self, name: str, nodes: list, current: float, ac_curr ent=None):
name – название для компонента в схеме;
nodes – список из узлов, к которым подключен резистор (в данном случае 2 узла)
current – числовое значение с плавающей точной для определения силы тока
ac_current – функция зависимая от времени (для анализа по переменному току), принимающая функцию или кортеж значений для функций по умолчанию.
Пример создания объекта:
I2 = CurrentSource('I2', [0,1],2)#2 Ampere
Класс VoltageSource следует классу Component и выглядит так:
Рис. 5 Диаграмма класса VoltageSource
Осмотрим параметры, необходимые для инициализации объекта класса:
classVoltageSource(Component):
def__init__(self, name: str, nodes, voltage, ac_voltage=None):
name – название для компонента в схеме;
nodes – список из узлов, к которым подключен резистор (в данном случае 2 узла)
voltage – числовое значение с плавающей точностью для определения напряжения
ac_ voltage – функция зависимая от времени (для анализа по переменному току), принимающая функцию или кортеж значений для функций по умолчанию. Имеющиеся функции:
Пример создания объекта:
V2 = VoltageSource('V2', [0,1],1)#1 Volt
Для выполнения АC-анализа необходимо вызвать метод solve_AC(), имеющий следующие входные параметры:
defsolve_AC(self, start, stop, step):
start – начало отсчета времени;
stop – конец отсчета времени;
step – шаг времени.
Данный метод возвращает словарь, содержащий результаты выполнения матричного уравнения Ax=b для каждого шага времени. На базе данного словаря можно строить графические результаты анализа.
Рассмотрим схему, состоящую из двух элементов: источника тока и резистора и двух узлов (один из которых нулевой).
Рис. 6 Схема к примера
Код для описания конфигурации схемы:
R1 = Resistor('R1', [0,1],3)# 3 Ohm
I2 = CurrentSource('I2', [0,1],2)#2 Ampere
test_circuit = Circuit()
test_circuit.add_components([R1, I2])
Пусть сила тока источника равна 2 Ампера, а сопротивление резистора – 3 Ом.
Проведем DC анализ для данных значений:
test_circuit.solve_DC()#DC
Рис. 7 Результаты примера
Выводы
Разработанное программное обеспечение позволяет эффективно моделировать электронные схемы. Основные результаты:
Создана гибкая архитектура на основе объектно-ориентированного подхода
Реализованы базовые методы анализа DC и AC
Обеспечена возможность расширения функциональности
Система позволяет получать детальные результаты анализа в удобной форме
Список литературы
Бессонов, Л. А. Теоретические основы электротехники : учебник / Л. А. Бессонов. — 12‑е изд., перераб. и доп. — Москва : Юрайт, 2024. — 704 с. — (Высшее образование). — ISBN 978‑5‑534‑17654‑2.
Демирчян, К. С. Теоретические основы электротехники : учебник : в 3 т. / К. С. Демирчян, Л. Р. Нейман, Н. В. Коровин, В. Л. Чечурин. — 5‑е изд., испр. и доп. — Санкт‑Петербург : Питер, 2023. — Т. 1. — 512 с. — ISBN 978‑5‑4461‑2234‑5.
Зевеке, Г. В. Основы теории цепей : учебник для вузов / Г. В. Зевеке, П. А. Ионкин, А. В. Нетушил, С. В. Страхов. — 6‑е изд., стер. — Москва : Энергоатомиздат, 2022. — 528 с. — ISBN 978‑5‑283‑03305‑9.
Лутц, М. Программирование на Python : в 2 т. / М. Лутц ; пер. с англ. — 5 е изд. — Москва : Вильямс, 2024. — Т. 2. — 960 с. — ISBN 978 5 907458 13 0.
Маккинни, У. Python для анализа данных / У. Маккинни ; пер. с англ. — 3 е изд. — Москва : Диалектика, 2023. — 576 с. — ISBN 978 5 907514 95 4.
Марченко, А. Л. Программирование на языке Python : учебник / А. Л. Марченко. — 2 е изд., испр. и доп. — Москва : ИНФРА М, 2024. — 416 с. — (Высшее образование). — ISBN 978 5 16 018234 8.