Компьютерное моделирование электрических схем
Компьютеры могут быть мощным инструментом при правильном использовании, особенно в области науки и техники. Существует программное обеспечение для моделирования электрических схем, и эти программы могут быть очень полезны, помогая разработчикам проверять идеи перед сборкой реальных схем, экономя много времени и денег.
Эти же программы могут быть фантастическими помощниками для начинающих студентов-электронщиков, позволяя быстро и легко исследовать идеи без необходимости сборки реальных схем. Конечно, ничто не заменит сборку и тестирование реальных схем, но компьютерное моделирование определенно помогает в процессе обучения, позволяя студенту экспериментировать с изменениями значений и видеть их влияние на схему. В этой книге я буду часто использовать распечатки схем моделирования, чтобы проиллюстрировать важные концепции. Наблюдая за результатами компьютерного моделирования, учащийся может получить интуитивное представление о поведении схемы без пугающего абстрактного математического анализа.
Моделирование схем с помощью SPICE
Чтобы смоделировать схемы на компьютере, я использую специальную программу под названием SPICE, которая работает, описывая схему для компьютера с помощью текстового списка. По сути, этот список сам по себе является своего рода компьютерной программой и должен соответствовать синтаксическим правилам языка SPICE. Затем компьютер используется для обработки или «запуска» программы SPICE, которая интерпретирует текстовый список, описывающий схему, и выводит результаты его подробного математического анализа, также в текстовой форме. Если кому-то нужна дополнительная информация, то многие детали использования SPICE описаны в томе 5 «Справочная информация» этой серии книг. Здесь я просто представлю основные концепции, а затем мы применим SPICE для анализа этих простых схем, о которых читали.
Во-первых, нам нужно установить SPICE на нашем компьютере. Как бесплатная программа, она обычно доступна для загрузки в Интернете в форматах, подходящих для многих различных операционных систем. В этой книге я использую одну из более ранних версий SPICE (версию 2G6) из-за простоты использования. Далее нам понадобится схема для анализа SPICE. Давайте попробуем одну из схем, показанных ранее в данной главе. Вот эта принципиальная схема:
Эта простая схема состоит из батареи и резистора, соединенных напрямую вместе. Нам известно напряжение батареи (10 В) и сопротивление резистора (5 Ом), но больше ничего неизвестно о схеме. Если мы опишем эту схему для SPICE, она сможет сказать нам (по крайней мере), какой ток у нас будет в цепи, используя закон Ома (I=E/R).
SPICE – это программа, использующая текст
SPICE не может напрямую понять диаграмму схемы или любую другую форму графического описания. SPICE – это компьютерная программа, использующая текст, которая требует, чтобы схема была описана относительно ее составляющих компонентов и точек соединений. Каждая уникальная точка соединения в цепи описывается для SPICE номером «узла». Точки, которые являются электрически общими друг для друга в моделируемой цепи, обозначаются одним номером. Возможно, будет полезно думать об этих числах как о номерах «проводов», а не как о номерах «узлов», следуя определению, данному в предыдущем разделе. Так компьютер узнает, что с чем связано: через общие номера проводов или узлов. В схеме из нашего примера есть только два «узла»: верхний провод и нижний провод. SPICE требует, чтобы где-то в цепи был узел 0, поэтому мы обозначим наши провода 0 и 1:
На приведенной выше иллюстрации я показал несколько меток «1» и «0» вокруг каждого провода, чтобы подчеркнуть концепцию общих точек, имеющих общие номера узлов; но всё же это графическое изображение, а не текстовое описание. Прежде чем можно будет продолжить анализ, SPICE должен получить значения компонентов и номера узлов в текстовой форме.
Использование текстового редактора для создания файлов SPICE
Создание текстового файла на компьютере включает использование программы, называемой текстовым редактором. В текстовых редакторах отсутствует возможность форматирования текстовых процессоров (без курсивных, полужирных или подчеркнутых символов), и это хорошо, поскольку такие программы, как SPICE, не знают, что делать с этой дополнительной информацией. Если мы хотим создать простой текстовый файл, в котором абсолютно ничего не записано, кроме символов клавиатуры, мы выбираем, текстовый редактор.
При использовании операционной системы Microsoft, такой как DOS или Windows, с системой идут несколько текстовых редакторов. В DOS есть старая программа редактирования текста Edit, которую можно вызвать, набрав edit в командной строке. В Windows стандартным выбором будет текстовый редактор Notepad. Доступно множество и других программ для редактирования текста. Я использую бесплатный текстовый редактор под названием Vim и запускаю его в операционных системах Windows 95 и Linux. Неважно, какой редактор вы используете, поэтому не беспокойтесь, если скриншоты в этом разделе не похожи на ваши; здесь важна информация о том, что вы вводите, а не о том, какой редактор вы используете.
Примечание: возможно, вам будет удобно использовать редактор Notepad++, для которого есть плагин для подсветки синтаксиса SPICE.
Чтобы описать для SPICE эту простую схему из двух компонентов, я начну с вызова моей программы текстового редактора и ввода строки «названия» для схемы:
Мы можем описать батарею, набрав строку текста, начинающуюся с буквы «v» (означает «voltage source», источник напряжения), указав, к какому проводу подключается каждая клемма батареи (номера узлов), и напряжение батареи, например:
Данная строка сообщает SPICE, что у нас есть источник напряжения, подключенный между узлами 1 и 0, являющийся источником постоянного напряжения (DC), с напряжением 10 вольт. Это всё, что нужно знать компьютеру о батарее.
Теперь обратимся к резистору: SPICE требует, чтобы резисторы были описаны буквой «r», номерами двух узлов (точек соединения) и сопротивлением в омах. Поскольку это компьютерное моделирование, указывать номинальную мощность резистора не нужно. В «виртуальных» компонентах есть одна хорошая черта: им не могут повредить чрезмерное напряжение или ток!
Теперь SPICE будет знать, что между узлами 1 и 0 подключен резистор со значением 5 Ом. Эта очень короткая строка текста сообщает компьютеру, что у нас есть резистор («r»), подключенный между теми же двумя узлами, что и батарея (1 и 0), со значением сопротивления 5 Ом.
Если мы добавим в эту последовательность команд SPICE оператор .end
, чтобы указать конец описания схемы, у нас будет вся необходимая SPICE информация, собранная в одном файле и готовая к обработке. Это описание схемы, состоящее из строк в текстовом файле, технически известно как список соединений (netlist или deck):
Перемещение текстовых файлов в SPICE
После того, как мы закончили вводить все необходимые команды SPICE, нам нужно «сохранить» их в файл на жестком диске компьютера, чтобы SPICE мог ссылаться на него при запуске. Поскольку это мой первый список соединений SPICE, я сохраню его под именем «circuit1.cir» (фактическое имя произвольно). Вы можете назвать свой первый список соединений SPICE совершенно другим именем, при условии, что вы не нарушаете никаких правил именования файлов своей операционной системы, например, используя не более 8 + 3 символов (восемь символов в имени и три символа в расширении: 12345678.123) в DOS.
Чтобы вызвать SPICE (указать ему, что необходимо обработать содержимое файла списка соединений circuit1.cir), мы должны выйти из текстового редактора и получить доступ к командной строке, где мы можем ввести текстовые команды для операционной системы компьютера. Этот «примитивный» способ вызова программы может показаться архаичным пользователям компьютеров, привыкшим к графической среде «укажи и щелкни», но это очень мощный и гибкий способ решения задач. Помните, что то, что вы делаете здесь, используя SPICE, является простой формой компьютерного программирования, и чем больше вы будете привыкать давать компьютеру команды в текстовой форме (в отличие от простого щелчка мышью по иконкам), тем большее мастерство в управлении компьютером вы приобретете.
В командной строке введите следующую команду, а затем нажмите клавишу Enter (в этом примере используется имя файла circuit1.cir; если вы выбрали другое имя файла для файла списка соединений, замените его):
spice < circuit1.cir
Вот как это выглядит на моем компьютере (под управлением операционной системы Linux) непосредственно перед нажатием клавиши Enter:
Как только вы нажмете клавишу Enter для выполнения этой команды, на экране компьютера должен будет напечататься текст из вывода SPICE. Ниже приведен скриншот, показывающий, что SPICE вывел на моем компьютере (я увеличил окно «терминала», чтобы показать вам полный текст; в терминале обычного размера текст легко превышает длину одной страницы):
SPICE начинает свой вывод с повторения списка соединений, полностью от строки названия до оператора .end
. Примерно на середине моделирования он отображает напряжения во всех узлах относительно узла 0. В этом примере у нас только один узел, кроме узла 0, поэтому он отображает напряжение в нем: 10,0000 вольт. Затем он выводит величину силы тока, протекающего через каждый источник напряжения. Поскольку у нас только один источник напряжения во всей схеме, он отображает только ток через него. В этом случае сила тока через источник составляет 2 ампера. Из-за причуды в способе, которым SPICE анализирует ток, значение 2 ампера выводится как отрицательное: (-) 2 ампера.
Последняя строка в отчете компьютерного анализа – «total power dissipation» (полная рассеиваемая мощность), которая в данном случае выражается как «2.00E+01» ватт: 2.00 x 101, или 20 ватт. SPICE выводит большинство значений в виде экспоненциальной записи, а не в виде обычной записи (с фиксированной запятой). Хотя сначала это может показаться более запутанным, на самом деле эта запись будет проще, когда будут задействованы очень большие или очень маленькие числа. Подробности экспоненциальной записи будут рассмотрены в следующей главе этой книги.
Одним из преимуществ использования «примитивной», использующей текст программы, такой как SPICE, является то, что текстовые файлы, с которыми мы имеем дело, чрезвычайно малы по сравнению с другими форматами файлов, особенно графическими форматами, используемыми в другом программном обеспечении для моделирования схем. Кроме того, тот факт, что вывод SPICE представляет собой обычный текст, означает, что вы можете направить вывод SPICE в другой текстовый файл, где он может быть обработан. Для этого мы повторно отправляем команду операционной системе компьютера, чтобы запустить SPICE, на этот раз перенаправляя вывод в файл, который я назову «output.txt»:
На этот раз SPICE будет работать «тихо», без вывода текстового потока на экран компьютера, как раньше. Будет создан новый файл output1.txt, который вы можете открыть и изменить с помощью текстового редактора. Для иллюстрации этого я воспользуюсь тем же текстовым редактором (Vim) и открою этот файл результатов:
Теперь я могу свободно редактировать этот файл, удаляя любой посторонний текст (например, «баннеры», показывающие дату и время), оставляя только текст, который, как мне кажется, имеет отношение к анализу моей схемы:
После соответствующего редактирования и повторного сохранения под тем же именем файла (в этом примере output.txt) текст может быть вставлен в любой документ, причем «простой текст» является универсальным форматом файла почти для всех компьютерных систем. Я даже могу включить его прямо в текст этой книги, вместо графического изображения «скриншота», например:
my first circuit
v 1 0 dc 10
r 1 0 5
.end
node voltage
( 1) 10.0000
voltage source currents
name current
v -2.000E+00
total power dissipation 2.00E+01 watts
Кстати, этот формат для вывода текста из моделирования SPICE в этой серии книг является предпочтительным: в виде текста, а не в виде картинок скриншотов.
Изменение значений в SPICE
Чтобы изменить значение компонента в моделировании, нам нужно открыть файл списка соединений (circuit1.cir) и внести необходимые изменения в текстовое описание схемы, затем сохранить эти изменения в файле с тем же именем и повторно запустить SPICE через командную строку. Этот процесс редактирования и обработки текстового файла знаком каждому программисту. Одна из причин, по которой мне нравится преподавать SPICE, заключается в том, что он подготавливает студента к тому, чтобы думать и работать как программист, и это хорошо, потому что программирование – это важная область работы, связанная с передовой электроникой.
Ранее мы исследовали последствия изменения одной из трех переменных в электрической цепи (напряжения, тока или сопротивления), используя закон Ома, чтобы математически предсказать, что произойдет. Теперь давайте попробуем сделать то же самое с помощью SPICE, чтобы он выполнил вычисления за нас.
Если бы мы утроили напряжение в схеме из нашего последнего примера с 10 до 30 вольт и оставили сопротивление цепи неизменным, мы бы ожидали, что ток также утроится. Давайте попробуем выполнить это, изменив имя нашего файла списка соединений, чтобы не перезаписывать первый файл. Таким образом, оба варианта моделирования схемы будут храниться на жестком диске нашего компьютера для будущего использования. Результатом работы SPICE для этого измененного списка соединений будет следующий текстовый список:
second example circuit
v 1 0 dc 30
r 1 0 5
.end
node voltage
( 1) 30.0000
voltage source currents
name current
v -6.000E+00
total power dissipation 1.80E+02 watts
Как мы и ожидали, ток утроился с увеличением напряжения. Раньше ток составлял 2 ампера, но теперь он увеличился до 6 ампер (-6,000 x 100). Также обратите внимание, как увеличилась общая рассеиваемая мощность в цепи. Раньше она составлял 20 Вт, а сейчас 180 Вт (1,8 x 102). Если вспомнить, что мощность пропорциональна квадрату напряжения (закон Джоуля: P=E2/R), то этого можно было ожидать. Если мы утроим напряжение в цепи, мощность должна увеличиться в девять раз (32 = 9). Результат произведения 9 и 20 действительно равен 180, поэтому выходные данные SPICE действительно коррелируют с тем, что мы знаем о мощности в электрических цепях.
Создание комментариев в SPICE
Если мы хотим увидеть, как эта простая схема будет реагировать на широкий диапазон напряжений батареи, мы можем задействовать некоторые из более продвинутых опций SPICE. Здесь я воспользуюсь опцией анализа ".dc
", чтобы изменять напряжение батареи от 0 до 100 вольт с шагом 5 вольт, выводя на каждом этапе напряжение и силу тока в цепи. Строки в списке соединений SPICE, начинающиеся со звездочки ("*
"), – это комментарии. То есть они не заставляют компьютер делать что-либо, связанное с анализом схемы, а служат просто заметками для любого человека, читающего текст списка соединений.
third example circuit
v 1 0
r 1 0 5
*оператор ".dc" говорит spice пройтись напряжением
*источника "v" от 0 до 100 вольт шагом 5 вольт.
.dc v 0 100 5
.print dc v(1) i(v)
.end
Команды печати и вывода графиков
Команда .print
в этом списке соединений SPICE инструктирует SPICE напечатать таблицу чисел, в которой каждая строка соответствует отдельному этапу анализа:
v i(v)
0.000E+00 0.000E+00
5.000E+00 -1.000E+00
1.000E+01 -2.000E+00
1.500E+01 -3.000E+00
2.000E+01 -4.000E+00
2.500E+01 -5.000E+00
3.000E+01 -6.000E+00
3.500E+01 -7.000E+00
4.000E+01 -8.000E+00
4.500E+01 -9.000E+00
5.000E+01 -1.000E+01
5.500E+01 -1.100E+01
6.000E+01 -1.200E+01
6.500E+01 -1.300E+01
7.000E+01 -1.400E+01
7.500E+01 -1.500E+01
8.000E+01 -1.600E+01
8.500E+01 -1.700E+01
9.000E+01 -1.800E+01
9.500E+01 -1.900E+01
1.000E+02 -2.000E+01
Если я повторно отредактирую файл списка соединений, заменив команду .print
на команду .plot
, SPICE выведет грубый график, состоящий из текстовых символов:
Legend: + = v#branch
------------------------------------------------------------------------
sweep v#branch-2.00e+01 -1.00e+01 0.00e+00
---------------------|------------------------|------------------------|
0.000e+00 0.000e+00 . . +
5.000e+00 -1.000e+00 . . + .
1.000e+01 -2.000e+00 . . + .
1.500e+01 -3.000e+00 . . + .
2.000e+01 -4.000e+00 . . + .
2.500e+01 -5.000e+00 . . + .
3.000e+01 -6.000e+00 . . + .
3.500e+01 -7.000e+00 . . + .
4.000e+01 -8.000e+00 . . + .
4.500e+01 -9.000e+00 . . + .
5.000e+01 -1.000e+01 . + .
5.500e+01 -1.100e+01 . + . .
6.000e+01 -1.200e+01 . + . .
6.500e+01 -1.300e+01 . + . .
7.000e+01 -1.400e+01 . + . .
7.500e+01 -1.500e+01 . + . .
8.000e+01 -1.600e+01 . + . .
8.500e+01 -1.700e+01 . + . .
9.000e+01 -1.800e+01 . + . .
9.500e+01 -1.900e+01 . + . .
1.000e+02 -2.000e+01 + . .
---------------------|------------------------|------------------------|
sweep v#branch-2.00e+01 -1.00e+01 0.00e+00
В обоих выходных форматах левый столбец чисел представляет напряжение батареи на каждом этапе, и по нему видно, что оно увеличивается от 0 до 100 вольт, по 5 вольт за раз. Числа в правом столбце указывают силу тока в цепи для каждого из этих напряжений. Посмотрите внимательно на эти числа, и вы увидите пропорциональную связь в каждой паре значений: закон Ома (I=E/R) верен в каждом случае, каждое значение силы тока составляет 1/5 соответствующего значения напряжения, потому что сопротивление цепи составляет ровно 5 Ом. Опять же, отрицательные числа для силы тока в данном анализе SPICE – это скорее причуда, чем что-либо еще. Просто обращайте внимание на абсолютное значение каждого числа, если не указано иное.
Программы для интерпретации и преобразования данных SPICE
Существуют даже некоторые программы, способные интерпретировать и преобразовывать неграфические данные, выводимые SPICE, в графические диаграммы. Одна из этих программ называется Nutmeg, и ее выходные данные выглядят примерно так:
Обратите внимание, как Nutmeg выводит график напряжения на резисторе v(1) (напряжение между узлом 1 и предполагаемой опорной точкой узла 0) в виде линии с положительным наклоном (от нижнего левого к верхнему правому углу). Станете ли вы когда-нибудь опытным в использовании SPICE, не имеет отношения к его применению в данной книге. Важно только то, чтобы вы поняли, что означают числа в отчете, созданном SPICE. В следующих примерах я приложу все усилия, чтобы аннотировать численные результаты SPICE, чтобы устранить любую путаницу и раскрыть всю мощь этого удивительного инструмента, который поможет вам понять поведение электрических цепей.
Программный пакет LTspice
В качестве альтернативы консольному симулятору SPICE можно рассмотреть использование программного обеспечения LTspice от Analog Devices. LTspice представляет собой мощный программный пакет, включающий в себя SPICE-симулятор, редактор принципиальных схем и средство просмотра осциллограмм с улучшениями и моделями, позволяющими упростить моделирование аналоговых схем.
Основы работы с LTspice представлены в следующих статьях:
А ниже показаны скриншоты примера схемы и ее анализа.