× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

Simulace - 3. díl

[ http://programujte.com/profil/223-ing-matej-pacha/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/75-martin-zak/ ]Google [ :?rel=author ]       10. 1. 2006       24 109×

V tomto díle, jak jsem slíbil, si ukážeme konkrétní příklad nejjednodušší simulace. V elektrotechnice je tím nejjednodušším a nejnázornějším příkladem diferenciální rovnice prvního řádu popis dynamického chování elektrického obvodu s jednou indukčností.
..

K popisu nějakého fyzikálního děje budeme muset zabřednout do učebnic fyziky a trochu si náš děj nastudovat. Pokusím se tedy nejprve prozradit několik teoretických faktů a potom už sami uvidíte, že naprogramovat simulaci není nic těžkého. Největší pozornost musíme věnovat právě teorii, protože ta nám prozradí vlastnosti simulovaného objektu.


Hurá do toho

Vezměme si tedy jednoduchý idealizovaný elektrický obvod, složený ze zdroje stejnosměrného konstantního napětí, spínače, rezistoru (odporu) a induktoru (ideální cívky).


Popíšeme si danou situaci: Ideální zdroj napětí je aktivní elektrotechnický prvek, na jehož svorkách najdeme za všech okolností konstantní hodnotu napětí. Není to tedy akumulátor, který se časem vybíjí, ani malý adaptér, ze kterého dostaneme proměnný, někdy velmi zajímavý, průběh napětí (pulzující napětí). Je to čistě ideální zdroj napětí, neuvažujeme jeho vnitřní odpor. Spínač v našem případě vytváří změnu v obvodu (vysvětlím za chvíli) . Rezistor je ideální pasivní elektrotechnický prvek, jehož jedinou vlastností je za všech okolností konstantní elektrický odpor. Podobně induktor je ideální elektrotechnický pasivní prvek, jehož jedinou vlastností je opět za všech okolností konstantní indukčnost. Sami cítíte, že jsme si situaci silně zidealizovali: ideální zdroj, jehož napětí nezávisí na zatížení ani na čase, ideální rezistor a induktor, jejichž parametry se nemění s teplotou, proudem nebo působením dalších vlivů. To vše pro jednoduchý začátek. Složitosti si přidáme později. A proč spínač? Z velice prostého důvodu: existuje totiž pravidlo - fyzikální zákon, které popisuje vznik indukovaného napětí:


Indukované napětí se tedy indukuje na prvku zvaném induktor a jeho velikost závisí na indukčnosti induktoru a na  časové změně proudu (vyjádřeno derivací proudu podle času). Ve stejnosměrném obvodu se tedy vliv indukčnosti může projevit jen při změně velikosti proudu v obvodu (v obvodu střídavého proudu je vliv indukčnosti vyjádřen tzv. reaktancí cívky/induktoru). Ideální zdroj napětí a k němu připojený ideální rezistor nejsou schopny změnu proudu zajistit (ze své podstaty ideálních prvků a ideálních podmínek). Proto je zde spínač, kterým připojíme obvod s nulovým proudem ke zdroji napětí. Zde už můžeme očekávat změnu, tedy i simulovat její průběh, protože v obvodu by měl začít téci proud a právě tento časový interval nás bude zajímat. V ustáleném stavu (po odeznění tzv. přechodného děje) se indukčnost cívky opět neprojeví - v obvodu se ustálil proud a jeho změna v čase je nulová. Proto vás na základních a středních školách učili, že cívka se ve stejnosměrných obvodech jeví jako vodič s  nulovým odporem - jakoby tam vůbec nebyla.

K vytvoření modelu, tedy k popisu celé situace budeme muset opět sáhnout po jedněch z nejzákladnějších elektrotechnických pravidel, a to Ohmově a Kirchhofových zákonech. Druhý Kirchhofův zákon nám říká, že součet napětí v uzavřené smyčce obvodu je roven nule. Náš obvod se skládá z právě jedné smyčky, můžeme tedy použít tento zákon přímo:


Při vytváření této tzv. napěťové rovnice musíme brát v úvahu napěťovou dohodu (konvenci), kdy zdroj napětí dává proud, který teče z  plusové svorky zdroje (směrem ven) obvodem ve směru k mínusové, na pasivních prvcích, tedy na rezistoru a induktoru, proud vyvolá úbytek napětí orientovaný ve  směru protékajícího proudu. Napěťovou rovnici potom sestavujeme pro každou uzavřenou smyčku proti směru hodinových ručiček: prvky s orientací napětí proti směru hodinových ručiček budou mít kladné znaménko, prvky s opačně orientovaným napětím budou mít záporné znaménko. Situaci lze popsat v rovnici systémem: zdroje na jedné straně rovnice, spotřebiče na druhé straně rovnice. Tento způsob ale platí jen v jednoduchých obvodech (jako je ten náš), ve složitějších případech je nutné podrobně situaci rozebrat





Máme tedy napěťovou rovnici.
Dosadíme si do ní náš indukční zákon a také Ohmův zákon, který nám říká, že úbytek napětí na rezisotru je přímo úměrný proudu rezistorem, mírou úměrnosti je rezistivita, neboli elektrický odpor R.



Dostali jsme tedy úplný opis našeho obvodu, jeho matematický model. Popišme si tedy jeho prvky: součin R*i je úbytek napětí na rezistoru vyvolaný průtokem proudu i, L*di/dt je úbytek napětí na induktoru vyvolaný časovou změnou proudu induktorem a U je konstantní napětí našeho zdroje.


Simulanti

Pusťme se tedy do simulování. Model obvodu musíme převést do tvaru numerické Cauchyho počáteční úlohy. Pro jednoduchost použijeme základní, Eulerovu podobu.



Poslední vzorec už můžeme naprogramovat. Bude potřeba umístit jej do cyklu a výsledky z každého cyklu uchovat nejen pro konečný výsledek (výsledný průběh proudu), ale i pro výpočet následujícího kroku (jak jsme si řekli v minulé části, následující okamžik určujeme z předcházejícího stavu systému). K naprogramování můžeme použít libovolný programovací jazyk. Pro začátek si ale ještě zopakujeme všechny kroky, které jsou při psaní programu nutné:

V prvé řadě bychom měli znát všechny parametry obvodu, tedy napětí zdroje, indukčnost a odpor prvků. Naší stavovou veličinou je proud, takže ten se budeme snažit počítat a někam ukládat. Abychom věděli, v jakém okamžiku se daná hodnota proudu vypočítala, budeme s každou hodnotou proudu ukládat i časový údaj. Způsob ukládání dat je na nás a na naší programátorské zručnosti. Začátečníci mohou zkusit ukládání do textového souboru, pokročilí mohou zkusit využít vícerozměrná pole, struktury nebo další prvky objektového programování a nebo i služby API pro vykreslení bodů a simulovaný průběh si rovnou vykreslit. Pro názornost uvádím algoritmus simulace:



-Definice parametrů obvodu

-Inicializace pomocných proměnných

-Simulační smyčka + ukládání (prezentace) výsledků

Mým rodným jazykem je C, čili v nejjednodušší podobě by simulační program mohl vypadat nějak takhle:


// programujte_simulace.cpp

// Program simulace jednoducheho RL obvodu - pripojeni k idealnimu ss zdroji

#include "stdafx.h"
#include "stdio.h"

#define L 0.001 //indukcnost
#define R 10 //odpor
#define U 10 //napeti zdroje

void simuluj(void);

double	i,		//Proud
		t,		//Cas
		dt;		//krok derivace

FILE *fw;		//Ukazatel souboru (pro zapis dat)

int main(int argc, char* argv[]) //Hlavni program
{
	simuluj(); //Volani funkce simulace
	return 0;
}

void simuluj(void)
{
	i=0;			//pocatecni podminky jsou nulove - proud je rovny nule
	dt=0.0000001;	//nastaveni kroku simulace
	t=0;			//nulovani promennych
	
	//otevreni souboru s oznamenim chyby
	if ((fw = fopen("simulace.txt","w")) == NULL)
	{
		printf("Chyba pri otvirani souboru data_dyn.txt");
		return;
	}
	for (t=0;t<=0.002;t=t+dt)		//smycka simulace
	{
		i=i+dt*(U-R*i)/L;			//vypocet simulace
		fprintf(fw,"%f %f",t,i);	//zapis dat do souboru
	}								//konec smycky simulace
	fclose(fw);						//uzavreni souboru
}

Program je "ořezaný" na nejmenší možnou velikost hlavně kvůli přehlednosti. Zápis výsledků do souboru je nejjednodušší variantou. Není totiž problém data importovat do některého z tabulkových editorů a vykreslit je do grafu.


Vyhodnocení

Program simulace bychom tedy měli. Po  spuštění nám program vyplivne buď soubor dat, nebo rovnou grafické znázornění (záleží na naší šikovnosti). Můžeme se pustit do rozboru výsledku - právě kvůli tomu totiž simulujeme. Proud v obvodu začíná v nule, protože spínač v čase začátku simulace teprve spíná (před tím byl obvod rozpojený). Po jeho sepnutí proud narůstá po tzv. exponenciále, což je dáno indukčním zákonem. Kdybychom do programu vložili výpočet úbytků napětí na jednotlivých pasivních prvcích, viděli bychom jakési "přelévání" napětí z induktoru na rezistor. Vše je dáno indukčním zákonem - napětí na induktoru je určeno časovou změnou proudu, v  prvním okamžiku-připojení ke zdroji-je změna největší, na induktoru je plné napětí zdroje. Napětí na induktoru klesá exponenciálně k nule a stejnou mírou roste napětí na rezistoru, protože jejich součet musí dát napětí zdroje. Kdybychom porovnali exponenciály napětí a proudu, zjistili bychom, že mají stejný časový průběh, ale různou amplitudu. Říkáme, že mají stejnou časovou konstantu. Časová konstanta je jakýsi vymyšlený, ale dobře charakterizující a předem zjistitelný parametr. Lze ho vypočítat v našem případě jako podíl L/R. Časová konstanta vychází z analytického řešení diferenciální rovnice bez pravé strany, kdy hledáme kořen charakteristické rovnice. Je to čas, který vytne tečna v bodě změny na ustálené hodnotě děje. Po nějaké době přechodný děj zanikne - proud i napětí se ustálí. Není problém v simulaci změnit některé parametry  - například s indukčností se mění časová konstanta - trvání děje, s odporem se mění i velikost ustáleného proudu. Můžeme změnit i počáteční proud - jako bychom změnili zdroj za chodu - stačí pouze uvést v inicializaci nenulovou hodnotu proudu. Pomocí podmínek můžeme v cyklu simulace parametry měnit - například v závislosti na čase. Můžeme zkusit dosadit místo konstantního napětí funkci sinus závislou na čase sin(2*3,14*f*t) o frekvenci f a dostaneme obvod se střídavým zdrojem. Zkrátka můžeme si hrát bez obav z toho, že nás kopne "elektrika" nebo že vyhoříme....

Pro pokročilejší matematiky zde uvedu postup řešení tohoto obvodu analyticky.


Pokud si necháme vykreslit tento výsledek, měli bychom dostat stejný průběh jako z datového souboru simulace. Rozdíly mezi těmito průběhy jsou minimální. Bývají způsobeny zaokrouhlováním nebo nevhodnou volbou dt. Ostatně v programu můžete dt volit libovolně a zjistit, jak se chová výsledek. Pro zajímavost vám ukážu řešení v simulačním programu OrCAD. První obrázek je schéma obvodu s naznačeným měřícím bodem, druhý obrázek je výsledek - simulovaný průběh proudu. Na třetím obrázku jsou záznamy průběhu úbytků napětí -  červeně je naznačen úbytek na induktoru, modře úbytek na rezistoru. Změna v obvodu-sepnutí-je posunutá až do bodu t=0.1 s, ale jinak je průběh shodný.





Závěr

Pokusil jsem se vám tedy naznačit, co všechno obnáší jednoduchá simulace. Největší díl práce vždy připadne na teoretický rozbor systému (v našem případě jednoduchého elektrického obvodu). Potom už jen několik drobných kroků k zápisu algoritmu a simulace je na světě. Pokud chcete simulací zjišťovat stavy složitých systémů, je lepší začít s jednoduchými systémy se známými výsledky. Do výpočtu totiž může být vnesena chyba např. zaokrouhlováním nebo špatnou volbou kroku derivace. Po získání několika zkušeností je možné do systému přidávat nelinearity nebo jiné závislosti veličin. Například v našem obvodu by to bylo zavedení oteplení odporu R proudem a jeho následná změna vlivem teploty nebo zapojení neidealizovaného zdroje napětí (usměrněné střídavé napětí, obdélníkový průběh, vnitřní odpor a indukčnost). Zavedení těchto vlastností obvykle vyžaduje naprogramování funkčních závislostí, podmínek nebo tabulek. Další zkušenosti přináší i  více dynamických prvků (např. induktorů a kapacitorů). Takovým systémům říkáme systémy vyššího řádu a vedou k diferenciální rovnici vyššího řádu, která se řeší rozkladem na  soustavu několika diferenciálních rovnic prvního řádu. To už se ale dostáváme k opravdu složitým systémům, kde simulace trvají několik minut. Například stejnosměrný motor je soustava 2. až 4. řádu (tedy soustava až ;čtyř rovnic), asynchronní nebo synchronní stroj se popisuje soustavou 4. až 6. řádu. S rostoucí složitostí se zvyšují i nároky na přesnost, potom už se obvykle volí jiné metody, jejichž chyby jsou až o čtyři řády menší než Eulerova základní metoda (Modifikovaný Euler, Runge-Kutta 2 a 4), ale vyžadují více výpočtů v jednom kroku.
Obor simulace je v dnešní době velice rozšířený. Setkáme se s ním nejen ve vývoji a výzkumu, simulace najdeme v předpovědi počasí, v ekonomice, v psychologii, v řídících systéméch... Někdy se ale simulace přenechává výkonným počítačům a používají se už jen výsledky, tzv. look-up tables (viz chipy v automobilech). Zkrátka simuluje se vše a simulovat se vše i bude....


Pro inormací-lačné jedince vřele doporučuji elektronické skriptum VSCHT - učebnice Měřící a řídící technika [ http://uprt.vscht.cz/ucebnice/mrt/index.htm ] Najdete tam kromě obsáhlejší a méně popularizované teorie několik praktických příkladů. Pokračování příště....


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