Comments 30
как ему в ubuntu подсунуть ngspice не понял. Скачал архив, развернул, подсовываю каталог, он просит путь к исполняемому файлу. Как-то иначе наду устанавливать?
разобрался.
sudo apt update
sudo apt install ngspice
правда, был конфликт с kiCad
Это известная проблема: 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 портами работает.
Не работала простейшая схема когда я на порт нагрузил резистор (и землю добавил).
Сообщения об ошибках у Ngspice, к сожалению, отбитые на всю голову. Отлаживать их очень тяжело. Но это претензии к разработчикам Ngspice.
Ngspice скачал исходники, и скомпилировал согласно прилагаемом описанию, выбрав вариант с исполняемый файлом, там есть ещё вариант где компилируется только разделяемая библиотека, и в данном случае он не нужен, ключи при компиляции оставляйте по максиму из описания, сам по первости не все ключи в команде компиляции прописал в результате некоторые расчёты заканчивались ошибкой(да и в случае пакетного дистрибутива make install не самый лучший метод, лучше checkinstall, тогда сначала из всего скомпилированного скомпонуется пакет, а затем установится обычным для пакетного дистрибутива способом). Останется симулятру указать на исполняемый файл Ngspice. Если не знаете куда установился то поиск по файла имени ngspice решит проблему.
Подскажите, пожалуйста, как правильно моделировать обычный мультивибратор? На постоянном токе он показал какое-то установившееся напряжение, которого в реальной жизни не бывает. При моделировании переходного процесса то же самое. Возможно, программа считает схему идеально симметричной, чего в реальной жизни не бывает.
ой, у меня чего-то получилось! :-) Только не пойму почему такие странные графики. Первую ровно секунду не происходит ничего, а потом как-то очень не ожиданно колбасит :-)
(а ещё интересно как система решает с какого плеча начать качаться, если они для неё абсолютно одинаковые)
Почему так система себя ведет, действительно странно. Я бы предложил на долю процента изменить емкость одного из конденсаторов. В реальности ничего одинакового не бывает, так мы подгоним систему ближе к реальным условиям.
Изменил один кондей на 1%. Принципиально ничего не поменялось, хотя немного графики стали другие.
Дык, там всё надо менять на процент допуска разброса, а не только конденсатор. По идее, им бы ввести кнопку "разбросать все элементы в пределах установленного доступа в случайном порядке".
Да ничего принципиально не меняется. Раскидал я параметры руками - всё то же самое. Графики чуть меняются, но общая картина та же.
Да работает всё, вот тут лучше видно http://tinyurl.com/yktcuaft
Некоторые генераторы требуют установки начального напряжения на конденсаторах и моделирования с начальными условиям из-за особенностей алгоритмов SPICE. Также идеальные транзисторы использовать не рекомендуется. Лучше взять транзисторы из библиотеки. У меня заработало без начальных условий в таком виде:
Спасибо, получилось. Секрет оказался в дискретизации шагов. По умолчанию стоял слишком крупный шаг, потому, видимо, такая колбасня получалась. Хотя всё равно не понятно. Поставил как у вас - пошло дело.
А можете показать где конкретно есть C++? Пока что в исходниках я вижу C с классами.
Ну так значительная часть кода в проекте существует с 2003 года. Тогда С++ и был в виде С с классами. Это не хорошо, и не плохо. И это open-source. Всё в ваших руках. Возьмите и перепишите на современном С++. Или доведите до ума вот этот проект: https://github.com/Caneda/Caneda Там настоящий С++, но проект мёртв.
Подскажите, пожалуйста: как измерить thd (кни) синусоидального генератора?
Промоделировать спектр при помощи Spectrum anylysis, измерить амплитуду пиков при помощи маркеров, потом посчитать вручную THD по формулам https://eax.me/amplifier-measurements/ Простым способом автоматизировать это нельзя.
Qucs-S: руководство по видам моделирования, часть 1