Хочу поделиться с вами информацией о NGSPICE — профессиональном движке эмулятора электрических цепей, интегрированным в кроссплатформенный программный пакет разработки электроники KiCAD с открытым исходным кодом.
Я думал, что работа с этим инструментом слишком сложна, и долго к нему не подступался. Оказалось, что всё намного проще, и за пару вечеров освоил симуляцию аналоговых схем. Если честно, в первый раз, когда получилось и система нарисовала графики АЧХ и осциллограммы, с губ непроизвольно сорвалось тихое «Вау...». Потому что это настоящий сундук с бриллиантами для тех, кто любит и изучает электронику.
Давайте покажу на простых примерах, как им пользоваться.
▍ Краткая историческая информация
SPICE (Simulation Program with Integrated Circuit Emphasis) проект был разработан в Electronics Research Laboratory в Калифорнийском университете в Беркли в семидесятых годах.
SPICE с момента своего появления функционировала как программное обеспечение с открытым исходным кодом, что сыграло ключевую роль в её повсеместном внедрении и популяризации. Благодаря этой особенности, SPICE утвердилась в качестве общепризнанного отраслевого стандарта для моделирования и симуляции электрических цепей.
▍ Возможности
Движок реализует различные элементы схем, такие как резисторы, конденсаторы, катушки индуктивности (одиночные и трансформаторы), линии передачи и растущее число полупроводниковых устройств, таких как диоды, биполярные транзисторы, МОП-транзисторы: с управляющим переходом, изолированным затвором. И многое другое.
Движок может производить несколько видов анализов цепей:
DC-анализ (рабочая точка и DC-развёртка) — Определяет постоянное напряжение в цепи, игнорируя временные зависимости. Используется для нахождения рабочей точки и для построения статических характеристик при изменении параметров. Тока, напряжения, температуры.
AC-анализ малого сигнала — Анализирует поведение схемы при подаче синусоидальных сигналов малой амплитуды. Сначала вычисляется рабочая точка, затем определяются линеаризованные модели для нелинейных устройств.
Переходный (транзиентный) анализ — Расширение DC-анализа во времени. Показывает, как сигналы в схеме изменяются со временем после получения DC-решения.
Анализ полюсов и нулей — Вычисляет полюсы и нули в передаточной функции малого сигнала. Используется для анализа устойчивости и характеристик передаточных функций схемы.
Анализ искажений малого сигнала — Вычисляет гармонические и интермодуляционные составляющие при малых входных сигналах. Определяет нелинейные искажения в схеме.
Анализ чувствительности — Определяет, насколько выходная величина чувствительна к изменениям параметров компонентов схемы. Работает путём малого возмущения каждого параметра и наблюдения за изменениями.
Анализ шума — Измеряет шум, генерируемый устройствами в схеме. Рассчитывает вклад в шум от каждого компонента и общий шум в заданном диапазоне частот.
Анализ периодического установившегося состояния — Экспериментальный анализ для ВЧ-схем, позволяющий предсказать основную частоту и амплитуды гармоник для осцилляторов, ГУН и подобных схем.
И ещё многое другое, в т. ч. с расчётом выделяемой мощности и изменения температуры.
▍ Интеграция в KiCAD
Симулятор интегрирован в программу разработки электроники и может использовать схемы, созданные в ней с небольшими доработками, о которых я расскажу.
Предполагается, что читатель знаком с программным пакетом и умеет создавать схемы. Если нет, советую хороший вводный курс на русском.
▍ Анализ по постоянному току
Давайте соберём простую схему, состоящую из однополярного источника питания и трёх резисторов.

Чтобы добавить «понятный» движку симулятора источник постоянного напряжения нужно выбрать инструмент «Добавить символы» (шорткат латинская «A», далее указаны именно латинские символы).

Если войти в свойства символа, для этого нужно выделить его и нажать «E», либо правым кликом выбрать «Свойства...» попадём вот в такое окно.

Поле «Значение» содержит значение напряжения источника в вольтах. Я выбрал один вольт, вы можете вписать любое другое значение.
Значки резисторов и конденсаторов можно использовать стандартные, кикадовские, симулятор их корректно обрабатывает. Свойство «Значение» используется движком как значения сопротивления для расчётов.
По умолчанию значение в цифровом виде трактуется как значение в омах. Приставка k означает килоомы, m — миллиомы, M — мегаомы. Обозначение 1000 и 1k равнозначное.
Обратите внимание, как я сделал подключение источника V1 и резисторов, через символы «GND» и «VCC», которые вызываются клавишей «P» в малых схемах можно соединять напрямую, а в больших для удобства источник питания можно разместить где-то в углу листа. Также обратите внимание, что минус источника V1 подключён не только к земле, но и к символу с именем «0», это специальная метка нулевого напряжения, позволяющая однозначно указать точку отсчёта потенциалов, этот символ доступен из группы Simulation_SPICE, через меню добавления символа «A».

Когда ваша схема готова, нажмите на кнопку с символическим экраном осциллографа, и откроется окно симулятора. Пока что оно пустое.

Нажмите на кнопку добавления вкладки (Ctrl+N) и выберите DC — DC sweep. Установите значения как на скриншоте, обязательно укажите источник V1, это наш источник постоянного напряжения из схемы.

Нажмите на кнопку с иконкой «Плей» и симуляция запустится. Если всё прошло корректно, вы получите пустое поле. Справа есть панель, в которой можно поставить галочки графиков.

Если у вас графики тока выглядят ниспадающими, при росте напряжения ток уменьшается, переверните резисторы в схеме (шорткат «R»), подобная рекомендация относится и к симулятору CircuitJS.
Обратите внимание, можно выводить графики мощности.
▍ Снимем ВАХ модели кремниевого диода
Ну тут всё просто, учтите то, что нужно ставить галочку напротив графика тока. Ось со значениями тока расположена непривычно — справа.


▍ Частотный анализ, снимаем амплитудно частотную характеристику
Давайте для примера нарисуем схему простейшей частотозависимой электрической цепи — делителя содержащего сопротивление и ёмкость. Такой узел называют фильтром верхних частот.
Добавьте символы резистора, конденсатора, источник сигнала VSIN и соедините проводниками.

У источника синусоидального сигнала VSIN есть свойство Sim.Params, содержащее строку с настройками: dc=0 ampl=1 f=1k ac=1, они расшифровываются так:
dc=0: постоянная составляющая напряжения равна нулю
ampl=1: амплитуда синусоидального сигнала равна 1 В
f=1k: частота сигнала 1 кГц
ac=1: амплитуда сигнала для AC‑анализа равна 1 В
Так как одни и те же источники сигнала могут служить для разных типов анализа, то сделано разделение настроек. Обратите внимание, что при частотном анализе не учитывается установка частоты (в нашем случае 1 килогерц) так как она изменяется динамически в указанном в настройках анализа диапазоне.
Для большего удобства работы можно снабдить узел схемы меткой «L». Установите её в интересующую вас точку и задайте имя. В моём примере Output. Чуть позже вы поймёте, для чего она пригодится.
Запускаем симуляцию, выбираем «AC — анализ малых сигналов». Рекомендуемые настройки: Количество точек на декаду 10-20, начальная частота 10 Гц, конечная — 24 000 Гц.
Запускаем симуляцию и отмечаем справа галочку Output и появится график.

Рядом находятся две галочки маркеров, я активировал один маркер и установил его на частоту среза, -3 dB.
Задание: поменяйте резистор и конденсатор местами и посмотрите, как изменится АЧХ. У вас получится фильтр нижних частот. Попробуйте переделать его так, чтобы частота среза оказалась около 22 килогерц.
Ещё пример. Приведена схема из параллельного колебательного контура, с резонансной частотой около 2 килогерц и резистора.


▍ Анализ переходных процессов
Этот тип анализа чем-то напоминает работу с реальным цифровым осциллографом, подключаемым к схеме.

Для примера соберём и протестируем схему предусилителя, работу которого я описывал в предыдущей статье. (Там я допустил ошибку, выбрав входной конденсатор слишком большой ёмкости. Мне подсказали уменьшить входную ёмкость, для того чтобы ограничить полосу усиливаемых частот снизу и укоротить время необходимое для зарядки конденсатора и выхода схемы на рабочий режим. Ещё я немного упростил схему, отказавшись от RC цепочки в эмиттерной цепи первого транзистора).
Давайте соберём схему и просимулируем её работу. Я использовал стандартный NPN транзистор из группы символов Simulation_SPICE, который оснащён «усреднённой» моделью кремниевого биполярного транзистора.
В качестве источника сигнала будет связка из знакомого VSIN и источника шумового напряжения VTRNOISE, который имитирует естественный шумовой сигнал.
Расшифровка строки параметров, rms=0.1m dt=5000n ac=0 ph=0:
rms=0.1m — Среднеквадратичное значение амплитуды шума составляет 0.1 милливольт.
dt=5000n — Временной шаг обновления шумового сигнала равен 5000 наносекунд (5 микросекунд). Внимание, не делайте его слишком коротким, если моделируете схемотехнику звуковых частот, потому что малые значения шага сильно нагружают CPU.
ac=0 — Амплитуда шума при AC-анализе равна нулю.
ph=0 — Начальная фаза шумового сигнала, равна нулю.
Также не забудьте про источник постоянного питания с напряжением 3,6 вольт.

Запускаем окно симулятора и создаём TRAN-анализ с параметрами симуляции, как на скриншоте. Обратите внимание, что начало симуляции выбрано 20 миллисекунд, а конец 22 миллисекунды. Зачем так? Дело в том, что движок произведёт расчёты от нулевой отметки, но на график попадёт отрезок в 2 миллисекунды. Первые двадцать не попадут на график. Это полезно, если вам требуется сдвинуть и ограничить «временное окно».

Проверим АЧХ схемы предусилителя, для этого создадим вкладку «AC — анализ малых сигналов». И запустим симуляцию.

Как видно из графика, частота среза снизу — 100 герц, что подходит для записи голоса.
▍ Анализ рабочей точки
Этот тип анализа не имеет настроек, но у него есть полезное свойство, после запуска в схеме на каждом проводнике появляются отметки, обозначающие ток и напряжение.

Как видно, схема неплохо сбалансирована, рабочая точка первого транзистора находится посередине диапазона от нуля до плюса питающего напряжения.
Надеюсь, вам было интересно, и этот вводный туториал пригодится в изучении электроники и пригодится для экспериментов.
© 2025 ООО «МТ ФИНАНС»
Комментарии (0)

VT100
20.09.2025 17:57Проверьте, пожалуйста, запись 1M и 1Meg в примере с резисторами. Например - вместо нижнего 100 кОм (R4).
В примере с усилителем на среднебольничных транзисторах - увеличьте частоту примерно до мегагерца. Какой будет фазовый сдвиг между выходным и входным напряжениями? А если гигагерц?

solawind
20.09.2025 17:57интересно можно ли обьединить эту тулзу с AI чтобы в нее внести схему а она по минимальному числу предложеных ей же замеров выявляла неисправность.

engine9 Автор
20.09.2025 17:57У меня есть приятель, с которым мы тестируем ИИ чтобы он генерировал в виде кода схемы. Он пытается, пыжит, но постоянно результат "ну не шмогла я!". Т.е. схемы частично похожи на рабочие, но абсурдные. Будто он пытается как попугай перерисовывать, без осознания сути.
Возможно, что прогресс будет в сторону дообучения и интерактивного взаимодействия, чтобы ЛЛМ тысячи попыток делала и училась.

Mike-M
20.09.2025 17:57Вспомнился мультфильм про Емелю на печи, который хотел, чтобы кто-то делал пирожки, а ему оставалось только их жевать )

RC-1140
20.09.2025 17:57Вот до боли интересно, но (сугубо аналоговые схемы) лучше LTspice и Proteus я ничего лучше не видел - проходят проверки на симуляцию мултивибраторов. Причём не каким-то "читерским" (добавление синусоидального источника) способом, а именно на аналоговых элементах, зачастую даже "каталожных".

engine9 Автор
20.09.2025 17:57Как я понял, движок один и тот же. Но честно скажу, у меня мультивибратор не получился, симуляция не стабильная и вылетает с одним и тем же сообщением "timestep is small" или что-то подобное. Буду разбираться.

VT100
20.09.2025 17:57Начните с задания начальных условий (как и у реального мультивибратора - разряженные конденсаторы) и задайте игнорирование расчёта начальной точки - пусть считает от начальных условий.

vv_kuznetsov
20.09.2025 17:57Нужно задавать начальные условия, чтобы мультивибратор запустился. Это багофича многих SPICE движков, а не только Ngspice. Прочие генераторы работают без проблем.

avf1906
20.09.2025 17:57Использовал LTSpice для микросхем LT, потому что готовые схемы и модели, а так обычно применяю Microcap - сейчас он бесплатный, правда не обновляется, возможно привычка, но мне кажется удобнее.

vv_kuznetsov
20.09.2025 17:57MicroCAP не бесплатный (freeware), а abandonware, так как SpectrumSoft закрылась. Теперь даже дистрибутив нужно добывать с каких-то непонятных сайтов, так как у SpectrumSoft истёк домен.

nextbystander
20.09.2025 17:57Сайт закрылся, это верно. Но сам Micro-Cap был официально переведен в freeware. Похоже последняя доступная версия 12.2.0.5.
Цитата с сайта:
"News:
Effective 7/4/2019, Spectrum Software is closed. Micro-Cap is now free."
https://web.archive.org/web/20200111223839/http://www.spectrum-soft.com/index.shtm

vv_kuznetsov
20.09.2025 17:57Ещё Ngspice используется в качестве движка в Qucs-S: https://github.com/ra3xdh/qucs_s Про работу в Qucs-S рассказывают мои статьи: https://habr.com/ru/articles/789452/

engine9 Автор
20.09.2025 17:57О, спасибо. Хочу в эту тему глубже вкатиться, т.к. по идее не особо нужен кикад, они понимают netlist модель.

StpMA
20.09.2025 17:57Microcap удобен для анализа абстрактных схем. Есть статистический анализ и оптимизация (в смысле подбор параметров в схеме исходя из заданных критериев). Есть 3D графики (нужны для удобного отображения при степпинге). Подключать сторонние библиотеки – это процесс. Шифрованные библиотеки, насколько я знаю, не поддерживаются. Т.е. автоматически отваливается множество библиотек от производителей компонентов.
LTSpice ценен своими библиотеками Analog Devices (LT). Почти все библиотеки зашифрованы. Очень легко подключить сторонние библиотеки. Ориентирован на практическое применение. В движке обещают специальные оптимизации для улучшения стабильности и скорости решения. Вероятно, невидимые паразитные элементы на схеме. Можно задать свою формулу для обработки результатов после моделирования. 3D графики отсутствуют (при степпинге многих параметров это неудобно). Оптимизация (в смысле подбор параметров в схеме исходя из заданных критериев) отсутствует. Статистика как режим анализа отсутствует (кроме примитивных мин, макс, среднее, RMS в результатах моделирования).
Qorvo QSPICE. Автор LTSpice начал делать новый симулятор. Появляются совершенно новые функции (больше цифры, C++/Verilog compilers), но минус библиотеки от Analog Devices.
PSpice for TI – это урезанный Cadence PSpice, плюс библиотеки и примеры от Texas Instruments.

Mike-M
20.09.2025 17:57Пара фрагментов русского перевода одного скриншота:
«енять источники мест»
«Добавить полный путь для директивы .include библиотека»
Нет. Уж лучше учить английский. А ещё лучше, помнить слова легендарного Боба Пиза: «My favorite CAD is solder» )

vv_kuznetsov
20.09.2025 17:57А ещё лучше, помнить слова легендарного Боба Пиза: «My favorite CAD is solder» )
Это так и есть. Симулятор не освобождает от необходимости знать схемотехнику.

engine9 Автор
20.09.2025 17:57У меня восьмая версия, возможно в девятой поправили. Ну в любом случае к опенсорц софту, разрабатываемому энтузиастами, ниже требования и ошибки можно простить.

Mike-M
20.09.2025 17:57Увы, некорректный перевод — это глобальная проблема. Она касается не только (открытого) ПО, но и предметов быта, продуктов, и даже лекарственных препаратов. Проходят годы, за ними десятилетия, но проблема как была, так и остается. И это несмотря на развивающийся семимильными шагами ИИ. Так что не в инструментах дело, а в людях, которые ими пользуются. А вот люди как раз и не меняются — тысячелетиями. Тоже увы (

engine9 Автор
20.09.2025 17:57Ну как не меняются, за пару столетий мы прошли буквально всю историю современной техники от конных повозок до межпланетных станций.

perfect_genius
20.09.2025 17:57А есть подобные симуляторы электроники для новичков, которые вообще ничего не знают, но хотят начать изучать?

VT100
20.09.2025 17:57Симулятор - не освобождает от необходимости знать и думать. Поэтому теория должна быть хоть на полшага впереди. Иначе, "по клавишам" симулятора будет стучать обезьяна. Вероятность получения мало-мальски хорошей схемы - как у "Война и Мир".
saege5b
Про переворот резисторов не понятно: это фича?
А если в схеме резисторы натыканы "от балды" это сильно скажется на итоговой симуляции? И как это поймать?
Moog_Prodigy
Симуляторы эти все, если речь про аналог, просто игрушки. Типовые резисторы, типовые транзисторы, ну предусилитель посчитать. Понять работу каскада это безусловно полезно и в симуляторах можно обвешать схему кучей приборов... Это просто перерождение стендов для начинающих, и аналог очень неплохой. Но чуть выйти за рамки простейших схем - начинаются приколы. А давайте в схему мультивибратора на МП42 поставим транзисторы КТ117 - для генераторов же транзистор? А вот не совсем..Цифровые схемы - вот тут уже и профессионалам сгодится, хотя гонки всякие тоже.
VT100
Этак и Матлаб с Вольфрамом и Октавой - игрушки. Просто вопрос надо рассматривать в другой плоскости - наличия адекватных моделей компонентов.
saege5b
Да я немного про другое.
Если даже с тремя резисторами можно поймать мусорную симуляцию. То как понять - это "фича" или схема кривая?
Вот ребёнок решит школьную задачку про паралельнопоследовательное соединение резисторов смоделировать. Какая вероятность что на выходе будет мусор?
engine9 Автор
Она не мусорной будет, только знаки в отдельных цепях поменяются, модули значения будут верными.
engine9 Автор
Возможно что CircuitJS еще можно в раздел "игрушек" записать. И да, там можно подставить модель конкретной модели транзистора со всеми его частотными и прочими характеристиками. Есть кремниевые, есть германиевые, даже учитывается температура кристалла при рассчётах. Операционные усилители, например, могут предоставляться в виде модели, в которой рассчёт ведётся на уровне отдельных транзисторов, входящих в состав кристалла. А не просто общей абстрактной модели.
StpMA
У элемента с двумя выводами есть вывод 1 и вывод 2. Направление тока и полярность напряжения по отношению к этим выводам.
RC-1140
А вот это бред... резисторы одинаково ток проводят, что в одну, что в другую сторону... из-за подобных "костылей" попахивает не очень хорошим кодом.
engine9 Автор
Как я понимаю и как сказали ниже, это фундаментальное свойство. У резисторов два полюса, как у магнита. Навряд ли скажется на точности симуляции, просто знак поменяется. Я изучу тему, возможно, что есть опция включить номера выводов и будет видно каким полюсом цеплять в сторону откуда ток притекает.
vv_kuznetsov
Должен существовать виртуальный измеритель тока CurrentProbe, у которого промаркированы выводы и который всегда показывает полярность, как его подключили. Если такого компонента нет, то последовательно в цепь, где можно измерить ток можно включить источник с нулевым напряжением. В SPICE он будет действовать как датчик тока.