Как стать автором
Обновить

Комментарии 30

как ему в 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

Благодарю!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории