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.
Závěr
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 Najdete tam kromě obsáhlejší a méně popularizované teorie několik praktických příkladů. Pokračování příště....