Nazwa SPICE powstała z pierwszych liter pełnej nazwy Simulation Program with Integrated Circuit Emphasis. Pomimo licznych dostępnych wersji, protoplastę SPICE opracowano na uniwersytecie Berkeley w Kalifornii [1], a obecnie jest rozwijany przez wiele firm w wersjach komercyjnych np. HSPICE (Synopsys), PSPICE (Cadence), Eldo i AFS (Mentor Graphics) i darmowych, na podstawie różnych licencji np. LTspice (Analog Devices), ngspice, Gnucap itp.
Pliki wejściowe i wyjściowe
W programach typu SPICE układ jest opisywany w pliku tekstowym (pliku wejściowym) zwanym z języka angielskiego netlistą. Definiuje ona nie tylko obwód elektryczny/elektroniczny, ale także rodzaj analizy, wymuszenia i warunki pracy układu. Na jej podstawie SPICE wykonuje odpowiednie obliczenia i generuje pliki wyjściowe, którymi zazwyczaj są: plik z zapisem wykonanych czynności (log), wyjściowy plik tekstowy z wynikami zdefiniowanych pomiarów, plik binarny z zachowanymi wartościami napięć i prądów. Ten ostatni jest wykorzystywany do graficznego zobrazowania zapisanych sygnałów w postaci wykresów.
Format netlisty jest ściśle sprecyzowany i zostanie później opisany w tym kursie. Początkowo netlisty tworzone były ręcznie. Jednak, wraz z rozwojem komputerów i w ogóle technologii, programy SPICE były integrowane w większe środowiska projektowe, zawierające graficzne edytory schematów, symboli i programów wizualizacji wyników.
LTspice
W kręgu naszego zainteresowania pozostaną darmowe wersje tego rodzaju programów, a naszą przygodę rozpoczniemy od LTspice.
Program LTspice można pobrać ze strony www.analog.com [2]. Aby tego dokonać, należy kliknąć w link znajdujący się w dolnej części witryny (rysunek 1). Przekieruje on nas na stronę poświęconą samemu LTspice, gdzie znajdują się odnośniki do źródeł (rysunek 2).
Po uruchomieniu programu zostaje wyświetlone okno, w którym tworzymy schemat i uruchamiamy symulację. Niektóre pozycje paska narzędzi edycji schematu zostały opisane na rysunkach 3 i 4. Większość z tych opcji da się także uzyskać, korzystając z głównego menu programu, menu kontekstowego lub skrótów klawiszowych. Na przykład, aby utworzyć nowy schemat, można także:
- wybrać z menu: File → New Schematic,
- klikając prawym przyciskiem myszy, otworzyć menu podręczne i wybrać New Schematic,
- użyć skrótu klawiszowego Ctrl + N.
Przydatne skróty klawiszowe edytora schematów wymieniono w ramce.
Pierwsza symulacja
Prawdopodobnie najprostszym obwodem, który można sobie wyobrazić, jest rezystor dołączony do źródła napięcia stałego, jak na rysunku 5. Przykładowo może to być wyidealizowany schemat zastępczy żarówki zasilanej z baterii. Należy zwrócić uwagę, że symbol rezystora w tego typu programach jest inny niż ogólnie przyjęty kształt prostokąta.
Aby uzyskać taki schemat, należy po uruchomieniu programu wybrać nowy schemat, a następnie wstawić rezystor bezpośrednio z odpowiedniego menu. Źródło napięciowe znajduje się pod symbolem wstaw element. Znajduje się tam wiele elementów, dlatego być może trzeba będzie przewinąć pasek (rysunek 6). W kolejnych krokach pozostaje już tylko dorysować połączenia między tymi elementami i umieścić symbol masy (rysunek 7). Schemat jest już prawie gotowy. Należy teraz określić, jaką wartość napięcia ma nasza bateria (źródło napięcia) i jaka jest wielkość oporu. W tym celu klikamy prawym przyciskiem myszy na tych elementach i wstawiany żądane wartości w odpowiednie pola tak, jak na rysunkach 8 i 9.
Czy możemy już uruchomić symulację? No prawie. Jeszcze tylko musimy programowi SPICE jakoś powiedzieć, co ma policzyć. Między innymi do tego celu służą dyrektywy. Dlatego teraz klikamy na ikonkę z tekstem „.op” i w puste pole wpisujemy… właśnie .op (rysunek 10) i zatwierdzamy przyciskiem OK. Gotowy schemat zamieszczono na rysunku 11.
Instrukcja .OP służy do wyznaczania statycznego punktu pracy (ang. operational point). Dzięki temu SPICE wie, że ma obliczyć składowe stałe wartości napięć panujących w każdym węźle i składowe stałe wartości prądów płynących przez każdy element układu. Ta analiza traktuje pojemności jako rozwarcia, a indukcyjności jako zwarcia w obwodzie. W przypadku nieliniowych elementów (np. tranzystory) wyznaczane są także ich małosygnałowe parametry dla obliczonego stałoprądowego punktu pracy.
Uruchamiamy symulację, a jako wynik wyświetlony zostanie plik, w którym – jak wcześniej zaznaczono – wypisane są wartości wszystkich napięć i prądów w układzie. Jego zawartość wygląda mniej więcej tak:
--- Operating Point ---
V(n001): 5 voltage
I(R1): 0.5 device_current
I(V1): -0.5 device_current
V(n001) oznacza napięcie na węźle łączącym dodatnią końcówkę źródła V1 z rezystorem R1. Nazwa n001 została utworzona automatycznie przez edytor schematów. Oczywiście, można samemu nadać nazwy węzłom poprzez użycie ikonki nazwa węzła lub wybranie menu Edit → Label Net albo skrótu klawiszowego F4.
I(R1) oraz I(V1) oznaczają wartości prądów płynących przez odpowiednio rezystor R1 i źródło napięcia V1. Wartość prądu źródła napięcia jest ujemna, ponieważ jest to prąd wypływający ze źródła. Inaczej można powiedzieć, że przepływa przez samo źródło od ujemnej do dodatniej końcówki.
Sprawdźmy jeszcze, czy SPICE się nie pomylił. Na rezystorze 10 Ohm panuje napięcie 5 V, więc zgodnie z prawem Ohma przez ten element płynie prąd o natężeniu 0,5 A. Na szczęście, to dokładnie tyle samo, ile obliczył program. Może to w tym wypadku brzmi zabawnie, ale mówi się, że nie powinno się używać SPICE-a jeśli projektant kompletnie nie wie, czego ma się spodziewać jako wyniku. Jest to uzasadnione, ponieważ źle dobrane parametry analizy i dokładności obliczeń mogą skutkować błędnymi rezultatami. Na szczęście, nie dotyczy to aż tak prostego przykładu.
Więcej wiadomości o warunkach analizy czy parametrach elementów nieliniowych znajduje się w pliku rejestru zdarzeń log, który otwiera się za pomocą skrótu Ctrl+L, jednak rozważany przykład nie zawiera tranzystorów, więc jedyną istotną informacją może być wartość temperatury. Tego rodzaju pliki są wstępnie zaprezentowane pod koniec niniejszego artykułu.
W wyniku działania analizy .OP otrzymujemy jedynie pliki tekstowe, nie ma możliwości oglądania wartości na wykresie (zresztą byłyby to pojedyncze punkty). Nie jest to konieczne, ponieważ ta analiza służy do sprawdzenia wartości prądów i napięć, a bardzo łatwo wyszukuje się te informacje w pliku tekstowym. Natomiast można wyświetlić uzyskane wartości napięć poszczególnych węzłów na schemacie poprzez użycie sondy napięciowej (ang. probe). W tym celu należy po prostu kliknąć lewym przyciskiem myszy na odpowiednie połączenie (rysunek 12 i 13).
Analiza stałoprądowa .DC
Kolejnym rodzajem symulacji, którego można się nauczyć już na tak prostym obwodzie, jest analiza stałoprądowa „.DC”. Podobnie jak poprzednia, ta analiza również oblicza stałe wartości napięć i prądów, jednak nie informuje o małosygnałowych parametrach elementów nieliniowych. Umożliwia za to wykonanie obliczeń przy zmianie wartości napięcia/prądu w zastosowanym źródle. W naszym wypadku zmianie będzie ulegało napięcie źródła V1 w zakresie 0…10 V z krokiem co 1 V (rysunek 14). Aby zdefiniować takie zachowanie źródła, należy najpierw usunąć zdefiniowaną w poprzednim przykładzie dyrektywę .op (na przykład za pomocą ikonki wytnij – cut), a następnie dodać nową (np. za pomocą ikonki z napisem .op) .dc V1 0 10 1. Informuje ona program SPICE, że ma on zamienić zadeklarowaną wartość źródła V1 z 5 V na wartości kolejno 0, 1, 2, … 10 V i dla każdej z nich wykonać symulację.
Po zakończeniu wykonywania analizy można, jak poprzednio, kliknąć lewym przyciskiem myszy na połączeniu między dodatnią końcówką V1 i rezystorem. W tym wypadku, zamiast pokazania wartości napięcia przy tym połączeniu na schemacie, zostanie wyświetlony wykres zależności napięcia V(n001) od wartości napięcia V1 (rysunek 15). W zależności od tego, czy jest aktywne okno schematu, czy wykresu, zmienia się menu programu. Aby wykreślić wartość prądu płynącego przez rezystor, można najpierw utworzyć nowy wykres poprzez wybranie Add Plot Pane z menu Plot settings (rysunek 16), oczywiście gdy jest aktywne okno wykresu. Następnie klikamy lewym przyciskiem myszy na tym elemencie – powoduje to użycie sondy prądowej (rysunek 17). Do wykresu zostanie dodana charakterystyka poboru prądu w zależności od napięcia V1 (rysunek 18).
Netlista
Analiza gotowa, wyniki zaprezentowane. Jednak na początku wspomniane było, że SPICE to wszystko wykonuje na podstawie netlisty, a my zrobiliśmy to bez tego pliku…
Tak, to prawda, nie tworzyliśmy tego pliku ręcznie, ale został on wygenerowany automatycznie na podstawie schematu. Wszystkie informacje, które zawarte są w schemacie jako nazwa źródła czy elementu, ich wartości, a także dyrektywy zostały w nim umieszczone. Aby zobaczyć, jak taka netlista wygląda, należy z menu View wybrać SPICE netlist (rysunek 19).
Jej zawartość będzie następująca:
* D:EPprzyk_1_02.asc
V1 N001 0 5
R1 N001 0 10
.dc V1 0 10 1
.backanno
.end
Netlista ma rozszerzenie net, dla naszego przykładu jest to przyk_1_02.net. Często spotykane są także inne rozszerzenia netlist np.: cir, sp, in.
Pierwsza linia jest zawsze traktowana jako komentarz. W tym przypadku LTspice podaje ścieżkę do pliku asc, który jest tekstowym plikiem opisującym schemat. Nie jest to netlista, ale opis, jak graficznie wygląda schemat. Zawiera on np. współrzędne linii połączeniowych, współrzędne symboli elementów.
Natomiast deklaracje elementów układu i definicji analiz zawsze rozpoczynają się od nowej linii. Co więcej, pierwszy znak w linii definiuje rodzaj elementu. Na przykład rezystor jest deklarowany tylko i wyłącznie za pomocą litery r lub R (wielkość litery nie ma znaczenia), a niezależne źródło napięcia poprzez v albo V. Definicje analiz, czyli dyrektywy, rozpoczyna się od kropki i nazwy tej symulacji, np. poznane już .op, .dc.
W naszym układzie źródło napięcia stałego V1, o wartości 5 V, jest umieszczone pomiędzy węzłem nazwanym automatycznie przez LTspice jako N001 a symbolem masy. Jest to widoczne w netliście jako: V1 N001 0 5. W programach typu SPICE masa jest węzłem wyróżnionym i zawsze nazwanym „0”.
Ogólnie, źródła napięcia stałego definiuje się poprzez Vnazwa_źródła węzeł_dodatni węzeł_ujemny wartość lub Vnazwa_źródła węzeł_dodatni węzeł_ujemny DC wartość. Słowo DC oznacza deklarację źródła napięcie stałego i można je pominąć. Rezystor o oporze 10 Ohm jest definiowany w bardzo podobny sposób: R1 N001 0 10, co można zapisać ogólnie jako Rnazwa_rezystora węzeł_dodatni węzeł_ujemny wartość. Kolejna linia zawiera deklarację analizy stałoprądowej (.dc V1 0 10 1), a poszczególne pola oznaczają .dc Vnazwa_źródła wartość_początkowa wartość_końcowa krok. Oczywiście analizę stałoprądową można także zdefiniować dla źródeł prądowych, o których jeszcze nie wspominaliśmy, a także dla wielu źródeł jednocześnie, na przykład .dc V1 0 10 1 I1 0 2 0.1.
Powyższa netlista zawiera także deklarację .backanno, która jest automatycznie dodawana przez LTspice i jest wykorzystywana do automatycznego wyświetlania na wykresie prądów płynących przez element po kliknięciu na tym komponencie [4]. Koniec definicji obwodu jest oznaczany poprzez słowo end poprzedzone kropką, które podobnie jak w przypadku znacznika dyrektyw, także powinno znajdować się na początku linii.
Gdy netlistę tworzymy samodzielnie lub edytujemy, dla lepszej przejrzystości można zastosować puste linie i komentarze, które są pomijane przez program podczas jej wczytywania. Początek komentarza jest definiowany za pomocą gwiazdki * i obowiązuje on aż do końca linii. Należy tu podkreślić, że pierwsza linia, która zawsze jest komentarzem, nie musi zaczynać się od znaku gwiazdki. Trzeba o tym pamiętać, ponieważ umieszczenie w pierwszej linii np. deklaracji elementu lub analizy spowoduje, że będzie ona pominięta. Może być to przyczyną błędów zgłoszonych przez SPICE (np. braku analizy) albo, co gorsza, analiza może zostać wykonana bez uwzględnienia jakiegoś elementu i w wyniku otrzyma się błędny rezultat.
Pliki wyjściowe
W wyniku uruchomienia analizy generowane są także pliki wyjściowe. W plikach z rozszerzeniem raw zawarte są wartości prądów i napięć w układzie, które można wyświetlić jako wykresy. Natomiast w tekstowych plikach log SPICE umieszcza między innymi informacje o:
- czynnościach, które wykonał,
- ostrzeżeniach i błędach, jeśli takie zaistniały,
- warunkach pracy układu,
- dacie wykonania symulacji,
- czasie trwania symulacji,
- wykorzystanych metodach obliczeń i ustawieniach.
Zawartość pliku log można wyświetlić poprzez wybranie View → SPICE Error Log i dla naszego przykładu może wyglądać, jak poniżej:
Circuit: * D:EPprzyk_1_02.asc
.OP point found by inspection.
Date: Sat Nov 17 10:10:23 2018
Total elapsed time: 0.034 seconds.
tnom = 27
temp = 27
method = trap
totiter = 20
traniter = 0
tranpoints = 0
accept = 0
rejected = 0
matrix size = 2
fillins = 0
solver = Normal
Matrix Compiler1: 36 bytes object code size
Matrix Compiler2: 96 bytes object code size
Na razie zwróćmy uwagę tylko na fakt, że nasza analiza została wykonana w temperaturze 27 stopni (temp = 27). SPICE domyślnie przyjmuje tę wartość (temperatura nominalna tnom = 27), jeśli użytkownik nie wskaże innej wartości.
Podsumowanie
Program SPICE jest profesjonalnym narzędziem wspomagającym projektowanie oraz analizę obwodów elektrycznych i elektronicznych. Moim zdaniem, jego naukę powinno się rozpocząć od prostych przykładów pokazujących z osobna poszczególne możliwości i cechy takiego oprogramowania. Pozwoli to na zdobycie podstawowych umiejętności, które zostaną w późniejszym czasie użyte do zgłębiania kolejnych tajników i rozwiązywania bardziej zaawansowanych problemów. Jednocześnie badanie prostych obwodów umożliwia naukę samej elektroniki. Daje możliwości sprawdzenia „co się stanie gdy…” bez obaw, że zostanie uszkodzony być może kosztowny element. W niektórych przypadkach można nawet zaobserwować wartości prądów i napięć występujących wewnątrz układu, co jest niemożliwe do zmierzenia w realnych elementach. Aczkolwiek zbadane lub zaprojektowane przez siebie układy czy urządzenia warto wykonać i porównać wyniki pomiarów z symulacjami.
Adam Gołda
adlogmada@gmail.com
Bibliografia:
1. J. Porębski, P. Korohoda, SPICE program analizy nieliniowej układów elektronicznych, WNT 1996
2. www.analog.com, listopad 2018
3. LTspice_ShortcutFlyer.pdf, http://bit.ly/2SORLHe, listopad 2018
4. www.ltwiki.org, listopad 2018