Jste zde

Návrh elektroniky v programu KiCAD (11. díl)

Aktuální pokračování seriálu se ponese ve znamení simulace v programu KiCAD - začínáme rovnou od schématických značek.

11 Simulace v programu KiCAD

Výhodou KiCADu je, že můžeme nakreslit schéma obsahující jakékoliv schématické značky, které si nakreslíme a přiřadíme k nim libovolné modely. Nevýhodou je, že KiCAD nepodporuje tabulky pro zadávání parametrů a parametry musíme do součástek zadat ručně, přičemž toto ruční zadání neobsahuje kontrolu správnosti. KiCAD umožňuje přímo vygenerovat netlist pro program PSpice a také pomocí tlačítka v netlistu spustit simulátor. Simulátorem může být jakýkoliv spustitelný program. Zde je možné spouštět bash program, který spustí simulační program (používám gnucap) zformátuje výstup a výsledek zobrazí pomocí programu gnuplot. Tím se dostáváme až na dvě kliknutí myši pro simulaci obvodu.

11.1 Schématické značky

Základní schématické značky (R, L C, D) jsou již v programu KiCAD vytvořeny v knihovně pspice.lib. Další schématické značky je poměrně jednoduché vytvořit, ale musíme respektovat určitá pravidla. Podívejme se nyní na model komparátoru LM111:

* LM111 VOLTAGE COMPARATOR "MACROMODEL" SUBCIRCUIT

* CREATED USING PARTS VERSION 4.03 ON 03/07/90 AT 12:28

* REV (N/A)

* CONNECTIONS: NON-INVERTING INPUT

* | INVERTING INPUT

* | | POSITIVE POWER SUPPLY

* | | | NEGATIVE POWER SUPPLY

* | | | | OPEN COLLECTOR OUTPUT

* | | | | | OUTPUT GROUND

* | | | | | |

.SUBCKT LM111 1 2 3 4 5 6

*

F1 9 3 V1 1

IEE 3 7 DC 100.0E-6

VI1 21 1 DC .45

VI2 22 2 DC .45

Q1 9 21 7 QIN

Q2 8 22 7 QIN

Q3 9 8 4 QMO

Q4 8 8 4 QMI

.MODEL QIN PNP(IS=800.0E-18 BF=666.7)

.MODEL QMI NPN(IS=800.0E-18 BF=1002)

.MODEL QMO NPN(IS=800.0E-18 BF=1000 CJC=1E-15 TR=102.5E-9)

E1 10 6 9 4 1

V1 10 11 DC 0

Q5 5 11 6 QOC

.MODEL QOC NPN(IS=800.0E-18 BF=103.5E3 CJC=1E-15 TF=11.60E-12 TR=48.19E-9)

DP 4 3 DX

RP 3 4 6.667E3

.MODEL DX D(IS=800.0E-18)

*

.ENDS

Bývá slušností označit jednotlivé vývody obvodu. Aby obvod mohl správně fungovat, musí mít neinvertující vstup číslo 1, invertující č.2 atd. Takže schématická značka bude vypadat podle obrázku. Tato součástka má jediný parametr, a tím je vyplnění LM111. Předpokládal jsem totiž, že tento operační zesilovač může sloužit pro více typů komparátorů než je jen LM111. Proto jsem ho nazval COMP-OC (open collector).

 

Jiný problém nastává, pokud potřebujeme vytvořit součástku obsahující parametry. To KiCAD přímo neumožňuje, ale dá se to obejít. Obejití spočívá v přidání pole, které bude zobrazeno. Toto pole jsem nazval usage, a do textu používám use(parametry).

     

 

Velikost parametru usage jsem nastavil na 0,3 inch oproti odkazu a hodnotě, které jsou 0,5 inch. Pole jsem nastavil na zobrazovat (není skryté). Nyní je už při zadávání jasné, co napíšu do parametru VSIN ve schématu . Pro signál se střední hodnotou 10 V, amplitudou 2 V a frekvencí 1 kHz napíšu sin(10 2 1k 0 0).

Jak již bylo zmíněno v kapitole „Simulace“ nesmíme zapomenout, že prvky s parametrickými modely mají na počátku znak označující jejich typ (viz. manuál gnucap) a prvky modelované pomocí obvodu (subckt) mají na začátku U nebo X.

Dalším specifikem programu KiCAD (o kterém se můžeme dočíst v manuálu) je umístění příkazů pro program PSPICE. Zde se jedná nejen o příkazy, ale i o zahrnutí knihoven. Tedy vše na co jsme zvyklí při simulaci v příkazové řádce. Stačí vložit textové pole. Pokud toto textové pole začíná +SPICE nebo +gnucap, vloží se další obsah textového pole (bez direktivy +SPICE) na začátek souboru (před schéma). Pokud je na začátku textového pole -SPICE nebo -gnucap, vloží se obsah textového pole na konec souboru (za schéma).

11.2 Simulace se spuštěným zobrazovacím programem

Nejdříve si vytvoříme projekt a otevřeme schéma. Zvolíme knihovny (postačí knihovna power, pspice, PSpice/devices a PSpice/sources). Nakreslíme schéma:

 

Ve schématu nepoužíváme místní popisky, ale pouze globální označení. Místní popisky se uloží s lomítkem na začátku a to nezvládne gnucap zpracovat. Jako zem musí být použita zem s označením 0 (nula). Dále do schématu přidáme následující textová pole.

-PSPICE .include /mnt/Elektro/KiCad/share/models/1N4007.model

 

které říká, že zahrneme model 1N4007.

+PSPICE .print tran v(Vstup Usmerneno Vyhlazeno)

.tran 0 5m 1u > Simulace.dat

 

Které říká, že se data s transient analýzy budou uchovávat z bodů Vstup, Usmerneno a Vyhlazeno. Další řádek řádek přikazuje provést transient analýzu a data ukládá do souboru Simulace.dat.

 

Nyní můžeme vygenerovat netlist pro SPICE, ale (pro začátek) nespouštíme simulátor. Obvod jsem pojmenoval Ki1, takže se vygeneruje Ki1.cir.

* EESchema Netlist Version 1.1 (Spice format) creation date: Ne 20. leden 2013, 11:24:25 CET

 

* To exclude a component from the Spice Netlist add [Spice_Netlist_Enabled] user FIELD set to: N

* To reorder the component spice node sequence add [Spice_Node_Sequence] user FIELD and define sequence: 2,1,0

.include /mnt/Elektro/KiCad/share/models/1N4007.model

 

*Sheet Name:/

V1 Vstup 0 sin(1 3 1k 0 0)

D1 Vstup Usmerneno 1N4007

C1 Usmerneno 0 100n

R2 Usmerneno Vyhlazeno 10k

C2 Vyhlazeno 0 100n

R1 0 Usmerneno 10k

 

.print tran v(Vstup Usmerneno Vyhlazeno)

.tran 0 5m 1u > Simulace.dat

 

.end

 

Spustíme příkazovou řádku (terminál) a přejdeme do místa, kde je soubor vygenerován. Spustíme gnucap pro dávkové zpracování:

[majk@Tranzistor SchKi1]$ gnucap -b Ki1.cir

Gnucap 2009.12.07 RCS 26.136

The Gnu Circuit Analysis Package

Never trust any version less than 1.0

Copyright 1982-2009, Albert Davis

Gnucap comes with ABSOLUTELY NO WARRANTY

This is free software, and you are welcome

to redistribute it under the terms of

the GNU General Public License, version 3 or later.

See the file "COPYING" for details.

* EESchema Netlist Version 1.1 (Spice format) creation date: Ne 20. leden 2013, 10:18:14 CET

[majk@Tranzistor SchKi1]$

 

Vše proběhlo v pořádku a vytvořil se soubor Simulace.dat. Nyní můžeme datový soubor načíst pomocí programu gaw [17] nebo gwave [18]. Program gaw umožňuje zobrazovat ve více panelech, nebo zobrazovat data do jednoho grafu, zvýraznit vybrané signály, měnit barvy a exportovat obrázky.

 

     

 

 

Nyní již víme jak spustit simulátor, takže můžeme simulátor spouštět přímo z KiCADu pomocí tlačítka. Stačí do políčka „Příkaz simulátoru“ napsat: /usr/bin/gnucap -b Ki1.cir a po spuštění se přepnout do gaw a kliknout na Reload All. Tak lze snadno měnit hodnoty součástek i schéma zapojení.

 

Nevýhodou této simulace je, že v případě problémů se nevypíše výsledek chyby. Aby se výsledek vypsal, potřebovali bychom spustit nějaký program, který by analyzoval výstup programu gnucap. Nejjednodušší by asi bylo spočítat počet řádků a zobrazit tento výstup.

 

11.3 Simulace s okamžitým výsledkem a kontrolou výstupu

Pro simulaci jsem vytvořil následující skript:

#!/bin/bash

rm Simulace.dat

/usr/local/bin/gnucap -b $1 > gnuout.txt

 

COLS=`head -1 Simulace.dat | awk '{print NF}'`

TITL=`head -1 Simulace.dat`

if ! [ -e Simulace.dat ] ; then

kwrite gnuout.txt &

exit

fi

 

if [ $COLS -lt 2 ] ; then

kwrite gnuout.txt &

kdialog --error "Počet sloupců je menší než 2"

exit

fi

 

LIN=`wc -l gnuout.txt | awk '{print $1}'`

if ! [ $LIN -eq 10 ] ; then

kwrite gnuout.txt &

fi

 

printf "set style data lines\n" > cmd.gnuplot

printf "set terminal wxt size 720,360\n" >> cmd.gnuplot

printf "set key out vert\n" >> cmd.gnuplot

printf "set key right top\n" >> cmd.gnuplot

printf "plot" >> cmd.gnuplot

printf " 'Simulace.dat' using 1:2" >> cmd.gnuplot

titx=`echo $TITL | awk '{print $2}'`

printf " title '" >> cmd.gnuplot

printf $titx >> cmd.gnuplot

printf "'" >> cmd.gnuplot

for (( x=3 ; $x-$COLS-1 ; x=$x+1 ))

do

printf ", 'Simulace.dat' using 1:" >> cmd.gnuplot

printf $x >> cmd.gnuplot

titx=`echo $TITL | awk -v tnum=$x '{print $tnum}'`

printf " title '" >> cmd.gnuplot

printf $titx >> cmd.gnuplot

printf "'" >> cmd.gnuplot

done

printf "\n" >> cmd.gnuplot

 

gnuplot -p cmd.gnuplot

 

Na začátku skriptu se smaže původní soubor se simulací a poté se spustí gnucap. Dále se ověří, jestli existuje výsledek simulace, kolik má sloupců a jestli má výstup z programu gnucap přesně 10 řádků (pozor, to se může lišit pro různé verze). Pokud dojde k chybě, vypíše se soubor s chybou a případně se zobrazí chybová hláška. Pro výpis chyby používám kwrite a chybový dialog kdialog (pracuju v KDE; pro GNOME nebo jiná prostředí zde použijte jiné příslušné náhrady). Dále už je simulace hotova a mohl bych program ukončit a použít gaw pro prohlížení výstupů. Ale pokud chci rychlé zobrazení pomocí programu gnuplot [19], je nutno vhodné výsledek sformátovat, přiřadit titulky, posunout legendu apod. O to se stará následující část programu, která vytvoří soubor s příkazy pro gnuplot. Nakonec se spustí gnuplot se souborem příkazů.

 

Do políčka „Příkaz simulátoru“ programu KiCAD stačí napsat ./simulace.bash Ki1.cir a kliknout na tlačítko Spustit simulátor. Výsledkem je graf, který se objeví, ale až za nějaký čas. Bohužel ten čas je dán simulátorem a nastavením simulace, a nikdy nevíme jak dlouho to bude trvat, protože simulace jsou rozdílné. Postihnout programem bash všechny druhy simulací a číst počet řádků výstupního souboru by bylo velmi složité. Proto pro simulaci se zobrazením a grafickým naklikáním parametrů (která ovšem neumožňuje všechno) musíme použít externí program. Pokud se simulace zasekne (nebo bude trvat nepřiměřeně dlouho), stačí v KDE stisknout CTRL+ESC a proces ukončit.

 

11.4 Simulace pro změnu hodnoty jedné součástky

Pro simulaci stačí v KiCADu upravit textové pole se simulací:

+PSPICE .modify R1=5k

.print tran v(Vyhlazeno)

.tran 0 5m 1u > Simulace1.dat

.modify R1=10k

.print tran v(Vyhlazeno)

.tran 0 5m 1u > Simulace2.dat

.modify R1=15k

.print tran v(Vyhlazeno)

.tran 0 5m 1u > Simulace3.dat

.modify R1=20k

.print tran v(Vyhlazeno)

.tran 0 5m 1u > Simulace4.dat

 

Výsledkem jsou 4 soubory, které lze otevřít pomocí programu gaw.

 

11.5 Simulace pomocí programu gSpiceUI

Pro zadání parametrů simulace přímo z KiCADu musíme znát příkazy simulátoru. Znamená to studovat a pochopit manuál. Jednodušší cestu nabízí program gSpiceUI, který mnohé věci vyřeší za nás. gSpiceUI umí otevřít netlist vygenerovaný jiným programem a do něj zadat vlastní simulaci, kterou jednoduše naklikáme.

 

Ve sloupci Nodes si vybereme pro které uzly budeme sbírat hodnoty, případně v pravém sloupci Components můžeme hodnoty měřit přímo na součástkách (například proud rezistory R1 a R2). Je možno nejdříve si vygenerovat netlist obsahující instrukce pro simulaci (ikonka ), a poté tento netlist ručně upravit. Dále pokračujeme spuštěním simulace (ikonka ) a zobrazením výsledku (ikonka ) pomocí externího programu gwave nebo gaw. Pokud jste udělali přesně tuto simulaci a nedostali jste jedno z napětí, je to chybou programu gaw, které nedokáže analyzovat prázdný sloupec. Na začátku program gnuspice vygeneruje v souboru Ki1.gnucap.dc řádek:

 

# V(usmerneno) V(vyhlazeno) V(vstup)

a tento řádek stačí v textovém editoru upravit na

#V1 V(usmerneno) V(vyhlazeno) V(vstup)

a potom znovu načíst programem gaw. To V1 tam ani být nemusí, můžete tam klidně napsat xxx.

Nevýhodou programu gSpiceUI je, že chybí secondary sweep a má při simulaci některé nedostatky.

Hodnocení článku: