× Aktuálně z oboru

Programátoři po celém světě dnes slaví Den programátorů [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]
Celá zprávička [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]

Simulace - 7. díl

[ http://programujte.com/profil/223-ing-matej-pacha/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       31. 8. 2006       22 398×

RLC obvody jsou prakticky ve všech obvodech, ať už vysokofrekvenčních nebo třeba silnoproudých. My si je zkusíme alespoň v základní podobě nasimulovat.

Za soustavu prvního řádu jsme považovali elektrický obvod, který obsahoval jeden energeticky setrvačný prvek, tedy induktor (cívku – proudově setrvačný prvek) nebo kapacitor (kondenzátor – napěťově setrvačný prvek). Systém druhého řádu bude obsahovat oba tyto prvky, každý v jednom exempláři. Na řešení obvodů se dvěmi cívkami nebo kondenzátory si posvítíme někdy později.

Dnešním dílem také vstoupíme do tzv. stavové analýzy, kdy nás pro začátek nebudou zajímat všechny veličiny v obvodu, ale jen veličiny stavové. V minulých dílech jsme se se stavovými veličinami již setkali, ale mluvit o stavové analýze, když máme pouze jednu stavovou veličinu, je směšné.

Našimi stavovými veličinami jsou proud induktorem a napětí na kapacitoru (protože se ze své fyzikální podstaty nemohou měnit skokově). Pro každou veličinu určíme diferenciální rovnici prvního řádu a získáme tak soustavu dvou rovnic, které už budeme řešit podobně jako v minulém díle. Bude nás tedy zajímat, jak vytvořit a upravit tyto rovnice.

Pro začátek si můžeme vzít jednoduchý obvod se sériově zapojeným rezistorem, induktorem a kapacitorem. Pokud jste se zajímali o radioamatérství, určitě jste poznali sériový rezonanční obvod. Ne vždy se ale toto zapojení používá jako generátor sinusového průběhu, resp. ne vždy tento obvod rezonuje. Dost často se objevuje ve zdrojích stejnosměrného napětí jako výstupní filtr nebo jako výhybka pro reproduktory.

Rezistor zde zastupuje parazitní odpor vodičů cívky, popřípadě přívodních vodičů kondenzátoru, může zastupovat i skutečný rezistor. Zanedbáváme drobnosti jako indukčnost přívodních vodičů . Také zanedbáváme vliv teploty, frekvence a dalších na vlastnosti prvků. Určitě jsem ještě spoustu věcí zapomněl, ale pro nás bude zatím stačit uvedený idealizovaný obvod, už jen proto, že v běžných podmínkách se jeho chování blíží skutečnosti. Dalším zjednodušujícím předpokladem bude napájení z ideálního zdroje stejnosměrného napětí.

Výhodu mají ti, kteří dávali na hodinách elektrotechniky pozor. Máme totiž jednu smyčku, takže podle Kirchhoffových zákonů sestavíme jednu napěťovou rovnici:

V podstatě je to všechno, co potřebujeme k sestavení modelu vědět, protože víme, že:

S těmito vědomostmi pouhým dosazením vytvoříme rovnici, např. pro napětí na kondenzátoru. Bude to ale jedna rovnice druhého řádu, kterou můžeme přímo řešit pouze analyticky:

Tento způsob je opravdu vhodný jen tehdy, když chceme řešit obvod analyticky. Pro numerické řešení se bude hodit pár následujících rad:

› Pro každý induktor sestavíme napěťovou rovnici podle smyčky, ve které se nachází. Napětí na kondenzátorech v této smyčce (tedy i v rovnici) zapíšeme pouze identifikátorem jejich napětí (např. uc), nepřepisujeme je do diferenciálního ani integračního tvaru! Napětí na induktoru nahradíme výrazem L*diL/dt.

› Pro každý kondenzátor sestavíme proudovou rovnici podle uzlu, ze kterého je napájen. Proud kondenzátorem potom nahradíme výrazem C*duC/dt.

Podle těchto rad lze sestavit rovnice pro většinu obvodů. V každé rovnici by měla vystupovat pouze jedna derivace. Ostatní veličiny, ačkoliv jsou stavovými veličinami, pouze dosazujeme tak, jak jsme je vypočítali v minulém kroku.

Sestavíme tedy rovnice pro náš obvod. Obsahuje pouze jednu smyčku a žádný uzel, můžeme tedy sestavit jen jednu rovnici, a to napěťovou. Druhou rovnici ale už známe. Víme totiž, že proud kondenzátorem je:

Máme tedy dvě rovnice, v každé vystupuje pouze jedna derivace – to jsme chtěli. Teď už zbývá pouze přepsat je pro program (do tzv. diferenčního tvaru):

Poslední dvě rovnice už stačí jen naprogramovat, v programu uvést hodnoty parametrů a nezapomenout na počáteční podmínky simulace (obvykle volíme nulové).

// Simulace sériového RLC obvodu
// www.programujte.cz 2006 - Matěj Pácha
// Visual C++ 2005 Express Edition
// Výsledek ukládá do souboru "sim.txt"

#include "stdafx.h"
#include <fstream>
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	ofstream fout;
	fout.open("sim.txt");

	double t,h,i,u,uc,r,l,c,konec;
	
	t=0;			//proměnná času
	i=0;			//nastavíme počáteční podmínky
	uc=0;			//
	u=10;			//napětí zdroje U = 10 V
	h=0.0001;		//krok, se kterým počítáme
	konec=0.1;		//čas konce simulace
	r=10;			//Odpor R = 10 ohm
	l=0.1;			//Indukčnost L = 100 mH
	c=0.0005;		//Kapacita C = 500 uF
	
	for(t = 0; t < konec ; t += h)
	{
				//simulační rovnice
		i += h*(u - r*i - uc)/l;
		uc += h*i/c;
				//výstup do souboru
		fout << t << "\t" << i << "\t" << uc << "\n";
	}
	fout.close();
	return 0;
}

Jen tak ze cviku bychom si mohli uvést příklad, ve kterém budeme uvažovat se svodovým odporem kondenzátoru nebo, chcete-li, s jeho vybíjecím rezistorem. Schéma vypadá následovně:

Pro induktor sestavíme napěťovou rovnici podle smyčky, ve které se nachází. Pro kondenzátor zase rovnici proudovou pro uzel, ze kterého je napájen.

Zbývá už jen zdrojový kód, opět např. v jazyku C, podobný tomu předcházejícímu. Stačí jen doplnit chybějící proměnné a změnit výpočtovou část. Zručnější programátoři už mohou pouzdřit v OOP a poté na celou problematiku zapomenout. Přesto si ale myslím, že znát princip je velkou devizou. Pro zajímavost ještě uvedu příklad, jak mohou vypadat průběhy stavových veličin.

Průběhy proudu i=f(t) a napětí uc=f(t)

a) L = 100mH, C = 500 uF

b) L = 10 mH, C = 500 uF

Jak je vidět, průběhy veličin se mohou značně lišit. Obecně rozeznáváme tři teoretické typické tvary, z nichž pouze dva mohou v reálném světě nastat. Nazývají se periodický (kvaziperiodický), aperiodický a na hranici periodicity. První název je odvozen ze sinusové (periodické) složky průběhu, druhý naopak nevykazuje ani náznak opakování kterékoliv jeho složky. Průběh na hranici periodicity vykazuje nejrychlejší ustálení, ale dosažení tohoto stavu ve skutečnosti je dost problematické. Tento průběh veličin se vyskytuje pouze při jedné jediné kombinaci hodnot parametrů vyšetřovaného systému a jak jistě tušíte, parametry skutečného světa nejsou nikdy dost přesné a nebývají ani stálé. Proto je tento průběh pouze teoretický.

Pokud budete experimentovat s hodnotami L a C, můžete narazit na problém s divergencí (probráno v minulém díle). Z prvních dvou grafů je také zřejmé, proč kupovat kondenzátory na vyšší napětí, než k jakému ho budeme připojovat: napětí při přechodovém ději může krátkodobě dosáhnout až dvojnásobku ustálené hodnoty napětí. Kondenzátor samozřejmě může vydržet, ale pravděpodobně zkrátíte jeho životnost. Indukčnost se totiž vyskytuje v každém síťovém zdroji (transformátor, tlumivky ve spínaných zdrojích, vodiče), takže nikdy nejde stoprocentně jen o prosté připojení kondenzátoru (čistě exponenciální průběh).

Příště si zkusíme simulace z jiného soudku…


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2006082808-simulace-7-dil/ ].