9 Simulace
Program QUCS obsahuje v sobě velké množství různých součástek a je ideální pro středoškolské i vysokoškolské laboratorní práce. Problém nastane v případě, že potřebujete do QUCS dostat nějakou součástku, jejíž parametry jsou sice popsány pomocí SPICE [14] (lze stáhnout z webových stránek výrobce). Program QUCS nebudu popisovat, jednak proto, že je jednoduchý a také proto že pro mou práci s použitím specifických součástek už od počátku nevyhovoval.
Oregano obsahuje mnohem menší počet součástek než QUCS, ale zase umožňuje snadno přidat parametrizované součástky od výrobce. Pokud se však nejedná o součástku, jejíž schématická značka je v knihovně, je třeba modifikovat knihovny vytvořením součástky. Bohužel jsem nenašel program, co umožňuje upravit tyto knihovny a tak je nutno upravit knihovnu ručně. Lze to, ale je to dost časově náročné. Oregano je grafickou nástavbou pro řádkové programy ngspice a gnucap (lze si zvolit druh simulace). Oregano je jednodušší než QUCS.
KiCAD je jen grafickou nástavbou pro tvorbu schématu. Samotnou simulaci neumožňuje. Umožňuje exportovat obvod a spustit simulátor. Pokud je simulátorem řádkový program a výsledek zobrazujeme pomocí programu volaného z příkazového řádku, vystačíme si pomocí dvou kliknutí myši pro spuštění simulace. Bohužel to v tomto případě znamená že veškeré příkazy pro simulaci musíme do KiCADu zadat ručně. Samozřejmě, že existují i grafické nástavby pro simulaci SPICE obvodů – kjwaves [15] nebo gSpiceUI [16]. Exportujeme netlist, který otevřeme pomocí grafické nástavby a zde již nastavíme parametry simulace, spustíme simulátor a výsledek zobrazíme v prohlížeči gwave nebo gaw. Výhodou KiCADu je snadná tvorba schématických značek (například není problém vytvořit dvoubázový MOSFET, nebo úplně nový obvod).
9.1 Modely a simulační programy
Pro simulaci existují různé modely pro různé simulační programy. Mezi ně patří PSpice, HSpice, TINA, atd. My budeme využívat modely PSpice a parametrizované PSpice, což jsou jednořádkové modely, nejčastěji se jedná o dvou vývodové součástky:
*SRC=1N4007;1N4007;Diodes;Si; 1.00kV 1.00A 3.00us Diodes, Inc. diode
.MODEL 1N4007 D ( IS=76.9p RS=42.0m BV=1.00k IBV=5.00u
+ CJO=26.5p M=0.333 N=1.45 TT=4.32u )
nebo
.MODEL BC327_25 PNP (IS=10.0029F BF=307.467 NF=994.875M VAF=100 IKF=1.02438
+ ISE=2.093469E-020 NE=1.17204 BR=101.222M IKR=1.00524 ISC=1.762216E-020
+ RE=360.928M RC=743.144M CJE=2P MJE=500M CJC=50.3851P VJC=700M MJC=558.066M
+ TF=501.007P XTF=499.987M VTF=10 ITF=10.0724M TR=10N )
Pro modely PSpice s více řádky je typické vytváření části obvodu. Například krystal můžeme popsat indukčností, dvěma kondenzátory a jedním rezistorem:
* 32768 hertz watch crystal, XY cut, series resonant, Q=81780
*
.subckt QZS32768 1 2
*
lqz 1 11 lmod 4448.72259
.model lmod ind(tc2 = 8.68e-8)
cs 11 12 5.30279780e-015
rqz 12 2 11.2k
cp 1 2 1.84pf
.ends
Nebo tranzistor MOSFET tvoří složitější model:
*---------- BSS138 Spice Model ----------
.SUBCKT BSS138 10 20 30
* TERMINALS: D G S
M1 1 2 3 3 NMOS L = 1E-006 W = 1E-006
RD 10 1 0.9338
RS 30 3 0.001
RG 20 2 47
CGS 2 3 1.906E-011
EGD 12 0 2 1 1
VFB 14 0 0
FFB 2 1 VFB 1
CGD 13 14 4.9E-011
R1 0 1
D1 12 13 DLIM
DDG 15 14 DCGD
R2 12 15 1
D2 15 0 DLIM
DSD 3 10 DSUB
.MODEL NMOS NMOS LEVEL = 3 VMAX = 8E+005 ETA = 1E-012 VTO = 1.422
+ TOX = 6E-008 NSUB = 1E+016 KP = 0.5025 U0 = 400 KAPPA = 7.117
.MODEL DCGD D CJO = 9.463E-012 VJ = 6.446 M = 0.9816
.MODEL DSUB D IS = 7.582E-010 N = 1.586 RS = 0.1976
+ BV = 65 CJO = 1.173E-011 VJ = 0.03727 M = 0.2868
.MODEL DLIM D IS = 0.0001
.ENDS
Asi je jasné, že hvězdička na začátku znamená komentář a modely jsou 1N4007, BC327_25, QZS32768 a BSS138. Ne všechny modely stažené s webových stránek umí simulační programy použít. Například firma Texas Instruments používá s oblibou v modelech polynomy vyšších řádů, se kterými se neporadí například gnucap. Důležité je, že na parametrické modely se odvoláváme referencí zkratky (D pro diody, Q pro tranzistory, M pro MOSFETy) a na modely tvořené obvodem se odvoláváme referencí U nebo X (X1 pro krystal, ale X_Q1 nebo X_M1 pro MOSFET).
Program ngspice vyžaduje, aby všechny simulační modely byly zkompilovány, aby je snadno mohl zahrnout do simulace. Díky tomu je ngspice velmi rychlý, ale je nutno při každém novém modelu provádět jeho začlenění.
Program gnucap umožňuje jak použití kompilovaných modelů, tak použití přímo modelů stažených z webových stránek výrobce ve formátu PSpice. Nevýhodou je o něco pomalejší simulace. Další nevýhodou je horší simulace tranzistorů MOSFET a gnucap nepodporuje polynomy vyššího řádu a použití tranzistorů JFET. Některé problémy, jako implementaci JFET a další součástky lze doinstalovat pomocí pluginů. Ovšem to vyžaduje stažení vývojové verze, stažení modelů a provedení kompilace celého programu včetně modelů. Sadu modelů je možno kompilovat samostatně a tu poté načíst.
10 Simulace v programu Oregano
Na počátku se rozhodneme, jestli budeme jako simulační program používat gnucap nebo ngspice. Abychom využili všechny možnosti simulace a ukázali si zakomponování stažených modelů bez nutnosti kompilace, použijeme gnucap. To lze nastavit v Upravit/Nastavení/Engine. V levé části okna je lišta knihoven. Zde si vybereme knihovnu a součástky přetáhneme na kreslící plochu. Je možno také použít tlačítko Place. Součástky neotáčíme a vždy je necháme v té poloze jak jsme je přetáhli, i když to komplikuje návrh obvodu. To proto, že program (v 0.69) obsahuje bug, kdy po načtení schématu se špatně načtou přípojné body součástek (zůstanou načtené v původní poloze). A pak to simuluje nesmysly.
Ve schématu je nutno mít alespoň jednu sondu . Ta se připojuje na libovolný vodič ve schématu. Vodiče nakreslíme pomocí spojů dostupných z tlačítka . Při spojení s jiným vodičem se vytváří spojení automaticky. Vyhneme se raději spojování čtyř vodičů do jednoho místa, protože ne vždy to funguje zcela korektně.
Pomocí tlačítka nastavíme parametry simulace. Můžeme zvolit mezi Transient, Fourier, DC a AC sweep. Další volby můžeme nastavit v záložce Analysis options (nejčastěji teplotu a ITL4). Tlačítkem spustíme simulaci. V okně výsledku si zaškrtneme, které signály chceme vidět.
Jistou nevýhodou je omezený rozsah simulací, zobrazování v grafu (zde je ukázka, jak se zobrazilo napětí ticícovkách milivoltů. Velice zajímavou vlastností je přidávání funkcí, zatím se jedná jen o rozdíl a podíl. Další nevýhodou je, že napětí se v grafu zobrazují jako napětí v bodech obvodu, a ne jako napětí na sondách. Síť lze však po simulaci zobrazit pomocí Zobrazení/Node labels. Ale po úpravě schématu se síť změní a je nutno vypnout a zapnout její zobrazení.
10.1 Standardní prvky s modelem
Standardními prvky míním ty, které mají schématickou značku v programu Oregano a jejíž model je stažitelný na Internetu. Program oregano uchovává modely v adresáři /usr/share/oregano/models. Tyto modely jsou pojmenovány jméno.model. Je vhodné, aby každý modelový soubor obsahoval jen jeden model. Je možno použít i více modelů v jiném souboru, ale zde už je nutno umístit do schématu „schématikou značku“ include.
Praktická ukázka jak použít tranzistor BC327. Stáhneme si model tranzistoru BC327 a uložíme ho do adresáře pro modely pod jménem BC327.model.
.MODEL BC327 PNP (IS=10.0029F BF=402.001 NF=994.875M VAF=100 IKF=991.671M
+ ISE=1.218485E-022 NE=2.14585 BR=101.214M IKR=1.00622 ISC=1.218700E-019
+ RE=360.928M RC=743.15M CJE=2P MJE=500M CJC=50.3851P VJC=700M MJC=558.066M
+ TF=501.007P XTF=499.987M VTF=10 ITF=10.0724M TR=10N )
Na tranzistor, který chceme změnit dvou-klikneme a upravíme formulář. Jako Model přiřadíme název a v dolním řádku změníme NPN na @model. Klikneme na Close. Nyní když znovu dvou-klikneme na tranzistor objeví se v záložce Model výpis modelu tranzistoru. Nyní má tranzistor přiřazen model BC327.
Jinou možností je přímo upravit soubor default.oreglib, který se nachází v adresáři /usr/share/oregano/libraries. Lepší cestou je vytvořit si vlastní knihovnu kopií a upravit tento soubor. Pak restartovat program oregano.
Části původního souboru default.oreglib |
Části nového soubor transistors.oreglib |
<ogo:symbol> <ogo:name>N-MOS</ogo:name> <ogo:objects> <ogo:line>(0 20)(15 20)</ogo:line> <ogo:line>(15 10)(15 30)</ogo:line> <ogo:line>(20 30)(30 30)(30 40)</ogo:line> <ogo:line>(20 10)(30 10)(30 0)</ogo:line> <ogo:line>(20 20)(25 24)</ogo:line> <ogo:line>(25 16)(20 20)(40 20)(40 40)</ogo:line> <ogo:line>(20 7)(20 13)</ogo:line> <ogo:line>(20 17)(20 23)</ogo:line> <ogo:line>(20 27)(20 33)</ogo:line> </ogo:objects> <ogo:connections> <ogo:connection>(30 0 1)</ogo:connection> <ogo:connection>(0 20 2)</ogo:connection> <ogo:connection>(30 40 3)</ogo:connection> <ogo:connection>(40 40 4)</ogo:connection> </ogo:connections> </ogo:symbol> |
<ogo:symbol> <ogo:name>MOSFET-N</ogo:name> <ogo:objects> <ogo:line>(0 20)(15 20)</ogo:line> <ogo:line>(15 10)(15 30)</ogo:line> <ogo:line>(20 30)(30 30)(30 40)</ogo:line> <ogo:line>(20 10)(30 10)(30 0)</ogo:line> <ogo:line>(20 20)(25 24)</ogo:line> <ogo:line>(25 16)(20 20)(30 20)(30 30)</ogo:line> <ogo:line>(20 7)(20 13)</ogo:line> <ogo:line>(20 17)(20 23)</ogo:line> <ogo:line>(20 27)(20 33)</ogo:line> </ogo:objects> <ogo:connections> <ogo:connection>(30 0 1)</ogo:connection> <ogo:connection>(0 20 2)</ogo:connection> <ogo:connection>(30 40 3)</ogo:connection> </ogo:connections> </ogo:symbol> |
<ogo:part> <ogo:name>N-MOS</ogo:name> <ogo:symbol>N-MOS</ogo:symbol> <ogo:description>N MOSFET</ogo:description> <ogo:labels> <ogo:label> <ogo:name>Reference designator</ogo:name> <ogo:text>@refdes</ogo:text> <ogo:position>(0 0)</ogo:position> <ogo:modify>yes</ogo:modify> </ogo:label> </ogo:labels> <ogo:properties> <ogo:property> <ogo:name>Refdes</ogo:name> <ogo:value>M</ogo:value> </ogo:property> <ogo:property> <ogo:name>Template</ogo:name> <ogo:value>M_@refdes %d %g %s %b nmos</ogo:value> </ogo:property> </ogo:properties> </ogo:part> |
<ogo:part> <ogo:name>MOSFET-N</ogo:name> <ogo:symbol>MOSFET-N</ogo:symbol> <ogo:description>N MOSFET</ogo:description> <ogo:labels> <ogo:label> <ogo:name>Reference designator</ogo:name> <ogo:text>@refdes</ogo:text> <ogo:position>(0 0)</ogo:position> <ogo:modify>yes</ogo:modify> </ogo:label> <ogo:label> <ogo:name>Model</ogo:name> <ogo:text>@model</ogo:text> <ogo:position>(15 30)</ogo:position> <ogo:modify>yes</ogo:modify> </ogo:label> </ogo:labels> <ogo:properties> <ogo:property> <ogo:name>Refdes</ogo:name> <ogo:value>M</ogo:value> </ogo:property> <ogo:property> <ogo:name>Model</ogo:name> <ogo:value>nmos</ogo:value> </ogo:property> <ogo:property> <ogo:name>Template</ogo:name> <ogo:value>M_@refdes %1 %2 %3 @model</ogo:value> </ogo:property> </ogo:properties> </ogo:part> |
A příště se vrátíme k simulaci pomocí KiCADu.