Kérkel segíts, hogy ne maradjon hibás információ az oldalon!
Ha szerinted valami nem fedi a valóságot, kérlek írd meg, hogy javítani tudjam. Ha kérdésed van, fordulj hozzám bizalommal!

A következő címkéjű bejegyzések mutatása: excel. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: excel. Összes bejegyzés megjelenítése

2009. szeptember 20., vasárnap

Linux, SPICE, Geda suite

A nemrég megkezdett traffipax jammer (zavaró) fejlesztési projektem keretében a jobb megértés és gyorsabb kisérletezés érdekében egy picit elmerültem a linux alatt SPICE rejtelmeiben. Ez nem az első ilyen próbálkozásom volt, de a Gschem kezdeti kényelmetlennek tűnő funkciói és az egész Geda suite pl. egy Orcadhoz mért kényelmetlensége mindig könnyedén eltántorított.

A nagy munka megkezdése előtt picit elvonta a figyelmem a Gschem egy-egy fura funkciója és a forráskódban való kis turkálás után apró átalakításokat eszközöltem. Tényleg nem sok minden,de fura módon sokkal használhatóbbá tette számomra a kezelést. Ilyen pl, hogy a net (összekötő) összekötő parancs hot-key (n) lenyomásakor ne kezdjen el azonnal vonalat húzni, mert úgy használhatatlan. Beletettem a mozgatás közbeni jobb klikkes forgatást, igaz, ez csak kényelmi funkció, inkább Eagleből jött megszokás. Hasonló apró módosítás, hogy az objektumokat forgatáskor a középpontjuk körül forgassa. (Ez egyébként sokkal hosszútávúbb lett, mint egy pár perces módosítás, mert a snap-to-grid szétszórta az alkatrészeket :D.) Sok többi funkciót meg megtaláltam, hogy már kész van :).
Sokat gondolkodom még a cross-hair kurzor megvalósításán és ami csúcs lenne, hogy az Easy spicehoz hasonlóan beírkálni a spice szimuláció munkaponti eredményeit az áramköri rajzra.

És már meg is kezdődhetett a munka! :)

A spice használatát először a Spice-gui és az Easy Spice segítségével akartam megkezdeni, de hamar belefutottam abba, hogy másra lenne szükség, mint ami elkészült ezekben a Gui-s verziókban. Ettől függetlenül mindenkinek ajánlom a megismerésüket, mert alap esetben nagyon hasznosak lehetnek.

Nem célom most egy összefüggő spice tutorial írása, ilyen igen sok van a neten. Inkább csak szemezgetés szinten.

Hogyan kezdjük:
Először is rajzoljuk meg az áramkört Gschemben. Használjuk a General és a Spice alkatrészeket. Nagyon fontos és nem elfelejtendő az áramkör nullájának jelölése a netname=0 paraméter dekralásával. Ha kész vagyunk, mentsük el az áramkört. Az áramkörből a gnetlist segítségével készítünk az ngspice által használható szimulációs fájlt.
# gnetlist -g spice-sdb -o [kimenete.net] [bemeno.sch]

A -g kapcsoló azt mondja meg a gnetlistnek, hogy milyen spice kimenetet generáljon, a -o a kimeneti fájl neve legyen és az sch az elkészített áramkör.
Én ngspice-t használok a szimulációra:
# ngspice [kimeneti.net]
És már előttünk is van a spice konzol. Használatát a cikk alján található linkeken keresztül ismerhetjük meg.

A subckt-k használata:
A spice modellezés lényege az lenne legtöbbször, hogy nem az alap spice modelleket használjuk, hanem azokat a valóságnak megfelelően paraméterezzük fel. Továbbá lehetőség van előzőleg elkészített (akár gschemmel) modellek felépítésére és azoknak behívható modullá (SubCkt) alakítására.
Ilyen aláramköröket úgy implementálhatunk az áramkörünkbe, hogy behívjuk a neki megfelelő spice alaktrészt és a paraméterei közé hozzáadunk egy
file = [subckt elérése]
value = [subckt neve]
A spice csak akkor fogja a subckt modellt használni, ha az alkatrész neve "X"-el kezdődik. Pl van egy tranzisztorunk, Q1, amit subckt modellként szeretnénk használni, akkor a netlistben nem Q1ként kell hogy megjelenjen, hanem pl XQ1-ként.
Ezt azért írom ki, mert a gschemből gnetlist-el generált netlistek nem kapják meg az X előbetűt! Így a spice mindig azt írja, hogy model not found és a default paramétereket használja. Ahhoz, hogy ezt elkerüljük két dolgot tehetünk. Az egyik az, hogy mindig futtatás előtt kézzel javítjuk a netlist fájlt. A másik, hogy a gschemben kézzel a név elé írjuk az X-et és a gnetlistet egy további "-n" kapcsolóval hívjuk.
# gnetlist -n -g spice-sdb -o [netlist.net] [schem.sch]
Ekkor a gnetlist nem javítja a típusnak megfelelően a modell neveket.

Step size too small hiba:
Ha sokáig érthetetlen módon "step size too small" hibaüzenetet kapunk érdemes egy picit megfigyelni a munkaponti értékeket. Ha nagyon nem stimmelnek (pl negatív feszültségek egy csak + tápot tartalmazó áramkörben) ellenőrizzük, hogy a dedikált 0 (nulla) referencia pont meg van-e adva. Éppígy én úgy jártam az ngspice-val, hogy volt egy kábelem n4-nek elnevezve és a 0-val összekötve. A gnetlist természetesen észrevette a dupla nevű kábelt és meg is szüntette nagybuzgón. A 0-t.....
Tapasztalat: mindig használd a gnetlist DRC checket!

Ha mégsem ilyen jellegű a hibánk, előfordulhat, hogy csak nagyobb számítási felbontásra van szükségünk. Ilyenkor lérdemes a környezet paramétereit babrálni egy picit. Ezt (ngspice esetén) a set paranccsal vagy a .ckt fájlba .OPTIONS sorral tehetjük meg.

>> set KULCS=ÉRTÉK
vagy
.OPTIONS KULCS=ÉRTÉK

Megoldási kísérletek, zárójelben jelzem az ngspice alap értékeit.
Emeljük a relatí hiba tolerancia értékét: RELTOL=0.01 (def: 0.001 azaz 0.1%)
Emeljük az absz. hiba toleranciát: ABSTOL=1f (def: 1pico)
Emeljük a fesz. hiba toleranciát: VNTOL=10m (def 1m)
Az ITL paraméterek a konvergencia keresés maximális lépés számát határozzák meg. A tranzienssé a 4-es: ITL4=200 (def=50)

Ha minden kötél szakadt, a hibát a szimulált áramkörben kell keresned. Próbálj IC (initial condition)-ket megadni, vagy realisztikusabbá tenni a modellt. Tegyél be kábel és generátor belső ellenállásokat, szimbolikus szórt kapacitásokat. Próbáld meg darabolni az áramkört. Emelett, ha nem is sikerül a spicének végigszámolni, de találsz olyan paramétereket, hogy néhány mintát mégis kiszámol, mielőtt elhal, akkor mindenképpen plottoltasd vele az érdeksebb de akár a triviálisabb csomópontokat is.




Linkek:

Spice tutorial:
http://littletux.homelinux.org/knowhow/ngspice.pdf

Ngspice kézikönyv:
http://www-ti.informatik.uni-tuebingen.de/~bernauer/lehre/ti-1-0506/spice/ngspice.pdf

spice3 kéziköny:
http://newton.ex.ac.uk/teaching/CDHW/Electronics2/userguide/sec3.html

Egy másik Spice tutorial:
http://web.mit.edu/geda/arch/i386_rhel4/versions/current/share/doc/geda-doc/spice-sdb/intro.html

Minden geda cucchoz:
http://web.mit.edu/geda/arch/i386_rhel4/versions/current/share/doc/geda-doc

Ez is komoly spice leírás:
http://www.seas.upenn.edu/~jan/spice/spice.overview.html

Még spice:
http://www.brorson.com/gEDA/SPICE/t1.html

Érdekes spice modell ötlet:
http://www.ecircuitcenter.com/Circuits/vc_resistor1/vc_resistor1.htm

Spice modell lista
http://homepages.which.net/~paul.hills/Circuits/Spice/ModelIndex.html
Egy érdekes elektronikai könyv spice modellezéssel:
Electronic concepts: an introduction
szerző: Jerrold H. Krenz
http://books.google.com/books?id=Le9zdVoMEOEC&pg=PA146&lpg=PA146&dq=common+emitter+bias+spice&source=bl&ots=WLBrR9C-I3&sig=AXtLdFpM-N7ExJ41NB27Lgpbwoc&hl=hu&ei=dVG1SvXdDYaZ_QbSpN3GDQ&sa=X&oi=book_result&ct=result&resnum=10#v=onepage&q=common%20emitter%20bias%20spice&f=false

2009. március 23., hétfő

Egy kis Excel makrózás

A héten sikerült egy kis Excel VB makró tapasztalatot gyűjtenem. Itt-ott vannak érdekességei, nehézségei, de a makró felvevő egy hihetetlen segítség és örök példatár ;).
A legtöbb fejtörést az 1004-es hibák okozzák. Ezek a hibák akkor jönnek elő, ha a VB makró olyan hiába ütközik, amit az Excel generál és így nem tartozik hozzá (használható) VB hibaüzenet.
Ilyen eset például az Excel függvény hívása VB makróból. Kiemelném, hogy ez pont egy olyan dolog, amit a makrófelvevővel nem lehet kipróbálni én is egy fórumon találtam rá a megoldásra (sajnos nem találtam meg a linkjét most újra). De a megoldás a következő, ha pl a HOL.VAN fv-t akarjuk hívni:

Application.WorksheetFunciton.Match(Mit, mRange)

ahol a Mit a keresett érték, az mRange viszont egy Range, aminek beállítása a következő

[...]
Dim mRange as Range
[...]
set mRange = Range("A1:A10")

Mint látható ilyenkor a függvények angol nevét kell megadni. Ezekhez a szótárt az office telepítési könyvtárában egy excel táblázatban megtalálod (ami általában: C:\Program Files\Microsoft Office\OFFICE11\ és ezen belül \1038\ alkönyvtárban van (2003-as office)) a FUNCS.xls fájlban.

Ha eleget teszteled a Match fv-t hamar belefutsz abba a hibába, hogy a keresett érték nem található a rangen belül és már kapod is a 1004-es hibát. Milyen jó is lenne ezt kezelni, nem? Lássuk is.
A VB ezen része igen silánynak tűnik számomra, főleg, hogy esetenként csak a GoTo-t használhatjuk. Bár pont a match fv esetében a következő kezelés is játszik:

On Error Resume Next
k = Application.WorksheetFunction.Match(0, mRange, 0)
If (Err = 0) Then
[... amt csak akartok ...]
End If

Maga a hibakezelés az On Error kulcsszavakkal történik, lehetséges folytatás még az :

On Error GoTo [Label]

amikor is a VB makróban a progmra futása a Label labeltől fog folytatódni.