Pull to refresh

Comments 33

как ему в ubuntu подсунуть ngspice не понял. Скачал архив, развернул, подсовываю каталог, он просит путь к исполняемому файлу. Как-то иначе наду устанавливать?

Это известная проблема: https://github.com/ra3xdh/qucs_s/issues/333 Причина здесь в том, что KiCAD из PPA криво собран. Если в системе установлен KiCAD из PPA, то он будет конфликтовать с пакетом ngspice из репозитория Ubuntu. При этом ngspice пользоваться становится невозможно, если установлен KiCAD из PPA. Поэтому зависимость ngspice я перевёл в recommended. Пакте ngspice-kicad для Qucs-S не годится, так как это SO-библиотека, а не сам симулятор. Если нужен одновременно KiCAD из PPA и ngspice, то требуется либо удалять ngspice-kicad, либо собирать ngspice из исходников и устанавливать в /opt. Ментейнеры пакета ngspice-kicad проинформированы о данной проблемы, но никакой реакции спустя полгода нет.

При моделировании S-параметров выскакивает ошибка:

malloc: Internal Error: can't allocate -8 bytes. 
Note: No compatibility mode selected!

Как выбрать этот compatibility mode?

Там дело не в compatibility mode. Обычно такая ошибка возникает, если количество портов в схеме не равно 2. Прочие количества портов не поддерживаются. Точно ли в настройках программы используется Ngspice версии 37 или выше? Работает ли пример examples/ngspice/s_param_wideband_amp.sch ? Если всё равно не работает, то просьба прислать багрепорт.

Под портами я имею в виду 50-омные источники "power source"

После добавления второго порта заработало. Пример тоже работает.

С 3, 4, 5 портами работает.

Не работала простейшая схема когда я на порт нагрузил резистор (и землю добавил).

Видимо они в недавних версиях добавили. Некоторое время работало только 2-портовое моделирование.

Сообщения об ошибках у Ngspice, к сожалению, отбитые на всю голову. Отлаживать их очень тяжело. Но это претензии к разработчикам Ngspice.

Ngspice скачал исходники, и скомпилировал согласно прилагаемом описанию, выбрав вариант с исполняемый файлом, там есть ещё вариант где компилируется только разделяемая библиотека, и в данном случае он не нужен, ключи при компиляции оставляйте по максиму из описания, сам по первости не все ключи в команде компиляции прописал в результате некоторые расчёты заканчивались ошибкой(да и в случае пакетного дистрибутива make install не самый лучший метод, лучше checkinstall, тогда сначала из всего скомпилированного скомпонуется пакет, а затем установится обычным для пакетного дистрибутива способом). Останется симулятру указать на исполняемый файл Ngspice. Если не знаете куда установился то поиск по файла имени ngspice решит проблему.

Я обычно самосборный софт складываю в /opt, указывая его через префикс при сборке. Там оно никому не мешаем. Например, у меня несколько версий Ngspice установлено в /opt

Подскажите, пожалуйста, как правильно моделировать обычный мультивибратор? На постоянном токе он показал какое-то установившееся напряжение, которого в реальной жизни не бывает. При моделировании переходного процесса то же самое. Возможно, программа считает схему идеально симметричной, чего в реальной жизни не бывает.

ой, у меня чего-то получилось! :-) Только не пойму почему такие странные графики. Первую ровно секунду не происходит ничего, а потом как-то очень не ожиданно колбасит :-)

(а ещё интересно как система решает с какого плеча начать качаться, если они для неё абсолютно одинаковые)

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

Изменил один кондей на 1%. Принципиально ничего не поменялось, хотя немного графики стали другие.

Дык, там всё надо менять на процент допуска разброса, а не только конденсатор. По идее, им бы ввести кнопку "разбросать все элементы в пределах установленного доступа в случайном порядке".

Да ничего принципиально не меняется. Раскидал я параметры руками - всё то же самое. Графики чуть меняются, но общая картина та же.

только это какой-то другой симулятор, а так да

Некоторые генераторы требуют установки начального напряжения на конденсаторах и моделирования с начальными условиям из-за особенностей алгоритмов SPICE. Также идеальные транзисторы использовать не рекомендуется. Лучше взять транзисторы из библиотеки. У меня заработало без начальных условий в таком виде:

Спасибо, получилось. Секрет оказался в дискретизации шагов. По умолчанию стоял слишком крупный шаг, потому, видимо, такая колбасня получалась. Хотя всё равно не понятно. Поставил как у вас - пошло дело.

Если шаг расчёта меньше, чем время нарастания фронта, то могут быть артефакты на графиках. Ngspice автоматически уменьшает шаг, если где-то напряжение меняется скачком. Но иногда автоподстройка не срабатывает.

А можете показать где конкретно есть C++? Пока что в исходниках я вижу C с классами.

Ну так значительная часть кода в проекте существует с 2003 года. Тогда С++ и был в виде С с классами. Это не хорошо, и не плохо. И это open-source. Всё в ваших руках. Возьмите и перепишите на современном С++. Или доведите до ума вот этот проект: https://github.com/Caneda/Caneda Там настоящий С++, но проект мёртв.

Подскажите, пожалуйста: как измерить thd (кни) синусоидального генератора?

Промоделировать спектр при помощи Spectrum anylysis, измерить амплитуду пиков при помощи маркеров, потом посчитать вручную THD по формулам https://eax.me/amplifier-measurements/ Простым способом автоматизировать это нельзя.

Спасибо. Результат Spectrum anylysis (FFT) можно выгрузить в csv ?

Да, правый щелчок по кривой на графике (именно по кривой, а не на поле). Потом Export to CSV

Огромное спасибо за цикл, очень интересный.

Скажите пожалуйста, а чем отличается "Моделирование переходного процесса (Transient analysis)" от "Моделирование переходного процесса с начальными условиями"?

Спрашиваю, потому, что в эл. схемы не моделировал никогда и терминологии не знаю. А терминология тут специфична, ведь из общей теории дифференциальных уравнений следует, что как-то странно численно моделировать переходные процессы без начальных условий. То есть, со точки зрения неофита (меня) получается "масло маслянное". Разъясните, пожалуйста.

Если для SPICE указать специальную опцию, то он будет подставлять начальные условия заданные пользователем (например напряжение на конденсаторах). Это моделирование переходного процесса с начальными условиями. Если никаких опций не указано, то сначала SPICE делая моделирование рабочей точки DC OP, а потом подставляет результаты DC OP как начальные условия. Начальные условия пользователя при дефолтных настройках игнорируются.

Спасибо! Я вижу, что очень неортогональный по режимам.

Sign up to leave a comment.

Articles