TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií
Simulátor hybridních obvodů
Semestrální práce
Tomáš Červinka
Materiál vznikl v rámci projektu ESF (CZ.1.07/2.2.00/07.0247) Reflexe požadavků průmyslu na výuku v oblasti automatického řízení a měření, KTERÝ JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY
Obsah Anotace ................................................................................................................................ ................................ ......................................... 3 Anotation ................................................................................................................................ ................................ ...................................... 3 Úvod ................................................................ ................................................................................................ ............................................. 4 1.
BasicObjects ................................................................................................ ................................ ......................................................... 5 1.1
2.
3.
GraphicsElements................................................................................................ ................................ ................................................. 7 2.1
Ukázka kódu z knihovny součástek sou KiCad ................................................................ .................................. 7
2.2
DRAW ................................................................................................ ................................ .......................................................... 9
Scheme ................................................................................................ ................................ ............................................................... 10 3.1
4.
6.
Metody ................................................................................................ ................................ ........................................................ 10
Scheduler ................................................................................................ ................................ ............................................................ 11 4.1
5.
Funkce a metody ................................................................................................ ................................ ........................................... 5
Seznam událostí ................................................................................................ ................................ .......................................... 11
Návrh součástky ................................................................................................ ................................ ................................................. 13 5.1
Atributy součástky částky ................................................................................................ ...................................... 14
5.2
Programování součástky souč ................................................................ ............................................................. 15
5.2.1
Rezistor ................................................................................................ ................................ ................................................ 15
5.2.2
LED dioda................................ ................................................................................................ ............................................ 16
Sedmisegmentový displej ................................................................................................ ................................... 19 6.1
Programování ogramování sedmisegmentového displeje ............................................................... ................................ 20
6.2
Digitální hodiny ................................................................................................ ................................ .......................................... 23
7.
Závěr................................................................................................................................ ................................ ................................... 25
8.
Použitá literatura ................................................................................................ ................................ ................................................ 25
Obr. 2.1 - sedmisegmentový display v prostředí KiCad ................................................................ ............................................8 Obr. 5.1- příklad součástky částky vytvořené vytvoř v Eeschema ................................................................ .................................................13 Obr. 5.2 - pole vlastností součástky částky ................................................................................................ .........................................14 Obr. 6.1 - sedmisegmentový display ................................................................................................ ........................................19 Obr. 6.2 - graf intenzity svícení displaye ................................................................ .................................................................19 Obr. 6.3 - rozmístění pinůů sedmisegmentového displeje ................................................................ .........................................19 6.4 - schéma digitálních hodin ................................................................................................ .................................................24
2
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Anotace Ročníkový níkový projekt se zabývá simulátorem elektronických obvodů obvodů HyCiSim. Ten se sestává ze čtyř hlavních knihoven, které umí schéma načíst, na íst, rozparsovat na podschémata, v kterých je rychlejší vypočítat ítat ustálený stav schématu a dále obsluhovat požadavky jednotlivých jednot součástek. Návod jak navrhnout a naprogramovat součástku sou ástku je dalším úkolem této dokumentace. Na rozboru tříd íd elementárních součástek, součástek, které simulátor obsahuje (rezistor, LED dioda), jsou použity hlavní metody knihoven simulátoru HyCiSim. Podle tohoto vzoru je dále popsán návrh součástky ástky sedmisegmentového displeje.
Anotation The semestral project deals with the electronic circuit simulator HyCiSim. It consists of four main libraries, which can load the schema, parse schema to subschemes for faster calculate of steady-state and serve requirements of individual components. Instructions how to design and program component is another task of this documentation. The analysis of classes of elementary components, which includes the simulator (resistor, light emitting diode), use the main methods of HyCiSim simulator libraries. According to this model is described the proposal seven-segment seven display devices.
3
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Úvod Simulátor HyCiSim slouží k simulaci elektronických obvodů. obvodů. Naprogramoval ho Ing. Tomáš Martinec, Ph.D. .D. v prostředí edí Delphi jazyka Pascal. Úkolem tohoto projektu je seznámení se se Simulátorem HyCiSim a jeho následné rozšíření rozší ení o další součástku. souč Simulátor již řadu součástek nabízí - mezi nimi například nap mikroprocesor Atmel AT89C51CC03, AT89C51CC03 do kterého lze nahrávat vat hex soubory, osciloskop a různé r základní součástky ástky pro tvorbu elektronických schémat. Pro grafický návrh součástky částky slouží program KiCad. Pomocí něj něj lze vytvořit vytvo celou knihovnu součástek, z níž si pak HyCiSim načítá na informace potřebné ebné pro jejich vykreslení. vykresl Funkci simulátoru lze popsat čtyřmi mi knihovnami. Vzato od nejjednodušší, knihovna GraphicsElement definuje základní tvary pro vykreslení součástky. sou ástky. Pomocí BasicObjects jsou naprogramovány elektrické vlastnosti součástky sou ástky a její další specifické funkce. Knihovna Scheme načítá součástky z knihoven a rozparsovává schéma na podschémata, což je důležité d pro výpočet ustáleného stavu schématu. Jednotlivé události vyvolané některou n z částí schématu obsluhuje knihovna Sheduler. V dalších kapitolách jsou knihovny probrány podrobně. Poslední část ást této dokumentace se zabývá aplikováním metod výše jmenovaných knihoven. Nejprve popisuje třídy řídy elementárních součástek sou ástek (rezistor, LED dioda), které jsou součástí sou simulátoru. Na základěě těchto součástek sou je dále odvozen návrh složitější součástky (sedmisegmentový displej).
4
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
1. BasicObjects Tato knihovna definuje třídy řídy jednotlivých grafických elementů element elektronického schématu. Jsou J pomocí nich v paměti uloženy jak součástky z knihovny, tak ostatní prvky schématu, jako jsou: spojovací ací dráty, uzly obvodu, popisky součástek sou apod.
MaxPinCount – konstanta maximálního počtu po pinů součástky (defaultněě 100) MaxJunctionsInSubscheme - maximální počet po pinů připojených ipojených do jednoho bodu (defaultně (defaultn 100) h = 1e-1 - konstanta přesnosti esnosti – určuje rychlost a stabilitu výpočtu tu ustáleného stavu TPart = class(TBaseObject) -
základní třída ída pro odvození všech součástek sou do simulace
Fields : TObjectList -
obsahuje popisky součástky, např.: nap hodnoty odporu, napětí atd.
PinList : array[0..MaxPinCount-1] array[0..MaxPinCount of TPartPin -
seznam pinů součástky částky
PinCount : Integer -
počet pinů dané součástky částky
OnChangeActive : Boolean -
1.1
tato proměnná určuje, čuje, zda-li zda bude součástka během simulačního čního kroku reagovat na změnu napětí tí na jednom z vývodů (defaultně false) Funkce a metody
procedure LoadConfig(FileName : String); virtual; virtual -
pomocí této funkce součástka sou načítá libovolné hodnoty z konfigurace při p spuštění schématu
procedure SaveConfig(FileName : String); virval; -
funkce pro uložení aktuálního stavu při p i zavírání schématu nebo celého programu progr
procedure InitializePins(count : Integer); -
tato metoda nastavuje v metodě metod Create počet pinů součástky
procedure AddToInfoList(s List(s : String); -
5
touto metodou je možné napsat zprávu do simulačního simula programu
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
procedure Draw(paper : TCanvas; Erase, Highlighted Highlighted : Boolean); virtual; -
nakreslí součástku ástku na prázdnou plochu, pokud je Highlighted true pak ji zvírazní, pokud je Erase true, pak ji smaže
procedure ReDraw(paper : TCanvas); virtual; -
tato funkce se vola v případě, př že je nutné překreslit součástk, nejprve rve je nutné součástku sou smazat
function -
IsInPartArea(X, Y : Integer) : Boolean; virtual;
funkce určující, ující, jestli bude součástka sou reagovat na kliknutí myši
procedure ConnectPin(n : Integer; Jun : TJunction); -
pomocná metoda pro parsování schématu
functionn -
rozdělení pinů součástky částky do subschématu, zda-li zda li na sebe mají vliv při př výpočtu ustáleného stavu
function -
RelationBetweenPins(Pin1, Pin2 : Integer) : Boolean; virtual;
GetCurrent(pin : Integer) : TFloat; virtual;
funkce pro výpočet čet proudu na pinech součástky, počítá ítá se podle ní ustálený stav
procedure Reset; virtual; -
tato metoda se volá ze schématu, pokud uživatel stiskne tlačítko ítko pro reset simulace - musí se modifikovat, pokud si součástka sou má něco pamatovat (např.. stav tlačítka tlač apod.)
Metody vyvolané ané událostmi: procedure OnLeftClick(X, Y : Integer); virval; procedure OnRightClick(X, Y : Integer); virtual; procedure OnDoubleClick(X, Y : Integer); virtual; procedure OnKeyPress(Key : Char); virtual; procedure AfterChange(pin : Integer); virval; virv -
6
tato metoda se volá po přepočtu p nového ustáleného stavu, podmínkou odmínkou je nastavení proměnné nné OnChangeActive na hodnotu true
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
2. GraphicsElements Tato knihovna obsahuje grafické prvky, ze kterých se skládají součástky součástky schématu. Parametry pro vykreslení součástky ástky lze vyčíst vyč z knihovny součástek vytvořené v programu KiCad. Základní grafickou třídou knihovny GraphicsElements je TGraphicsElement. Z ní jsou sou pak odvozeny další třídy tvarů: TGECircle, TGEPolyline, TGEPolyline TGERectangle, TGERectangle, TGEText, TGEText TGEPin.
2.1
Ukázka kódu z knihovny součástek sou KiCad
# MYPART # DEF MYPART U 0 0 N Y 1 F N F0 "U" -108 108 672 60 H V L TNN F1 "MYPART" -108 108 672 60 H V R CNN F4 "2V0" 670 333 60 H I C CNN "Voltage" F5 "RED" 2 -132 132 60 H V C CNN "Color" F6 "50" 692 122 60 H I C CNN "Persistance" DRAW S -200 550 250 -50 50 0 1 4 N S -135 75 -90 90 235 0 1 0 N S -135 280 -90 90 440 0 1 0 N S -90 90 30 70 75 0 1 0 N S 70 75 115 235 0 1 0 N X f 2 -500 350 0 300 R 50 50 1 1 I X b 8 550 250 300 L 50 50 1 1 I X ~ 9 550 350 300 L 50 50 1 1 I X a 10 550 450 300 L 50 50 1 1 I ENDDRAW ENDDEF # #End Library Tento zkrácený zápis odpovídá součástce sou ástce sedmisegmentového displeje viz. Obrázek 4.1.
7
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Obr. 2.1 - sedmisegmentový display v prostředí KiCad
Formát zápisu: F0 – “reference (U, R, IC ..)”, pozice x, pozice y, velikost textu, orientace textu (V=Vertical, ( H=Horizontal(default)), viditelnost (I=Invisible, ( V=Visible(default)), ), horizontální zarovnání textu (L=Left, L=Left, R=Right, C=Centre(default)), C=Centre(default)), vertikální zarovnání textu (T=Top, ( B=Bottom, C=Centre(default)))
8
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
2.2
DRAW
Grafické elementy schématu a piny. piny Každý řádek ádek definuje jeden element. element Řádek začíná písmenem, který značí čí typ. Atributy některých n elementů: o posx, posy = pozice grafických elementů element o unit = číslo íslo jednotky, v případě více jednotkového elementu o convert = v případě ř ě více variantnosti elementu, každá varianta má číslo, č 0 znamená žádné varianty. Například invertor nvertor může m mít 2 varianty – jedna s kroužkem na vstupu a jedna s kroužkem na výstupu o thickness = tloušťka ťka čáry o fill = barva vyplnění ění (F= barva v popředí, pop edí, f= barva v pozadí, N=nevyplněno N=nevypln (defaultně)) o radius = zaoblení Seznam elementů: o o o o o o
9
A - oblouk C - kruh P – polyene (čára z více bodů) bod S - obdélník T - text X – pin: • Elektrický typ: I=Input, O=Output, B=Bidi, T=tristate,P=Passive, U=Unspecified, W=Power In, w=Power Out, C=Open Collector, E=Open Emitter • Typ pinu: N=No Draw, I=Invert (hollow circle), C=Clock, L=Low In (IEEE), V=Low Out (IEEE)
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
3. Scheme Knihovna Scheme definuje hlavní objekt TScheme, který načítá na ítá do paměti pamě všechny knihovny součástek (umístěné v adresáři adresář s programem). TScheme umí otevřít řít schéma a rozparsovat ho, tzn. vytvoří příslušné íslušné objekty a vazby vazby mezi nimi. Další funkcí je zprostředkování komunikace programu s ostatními objekty schématu. 3.1
Metody
procedure Clear; -
smaže schéma
procedure LoadLibrary(FileName : String); -
načetní etní knihoven se součástkami souč
procedure LoadScheme(FileName : String); -
načtení schématu
procedure LoadConfig(FileName : String); -
načte te konfiguraci součástek, volá se hned po načtení na schématu
procedure SaveConfig(FileName : String); -
uloží konfiguraci součástek, volá se před p zavřením schématu
procedure OnLeftClick(X, Y : Integer); procedure ocedure OnRightClick(X, Y : Integer); procedure OnDoubleClick(X, Y : Integer); procedure SetPaper(P : TCanvas; X, Y : Integer); -
nastavení plochy pro vykreslování
procedure Evaluate; -
přepočet et schématu, provede se jen na začátku, za pak je řízeno součástkami částkami
Funkce pro parsování schématu: function PointIsOnWire(X, Y : Integer; W : TWire) : boolean; function PinIsInJunctions(S : TSubscheme; X, Y : Integer) : Boolean; procedure AddWireToJunction(Jun : TJunction; W : TWire);
10
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
procedure AddJunctionToSubscheme(originalS AddJunctionToSubscheme(originalS : TSubscheme; Jun : TJunction; newS : TSubscheme); procedure ParseScheme; -
provede rozparsování schématu na podschémata a nastaví všechny vazby
procedure CreateSubschemes(s : TSubscheme); procedure Draw; -
nakreslí schéma na plochu
4. Scheduler Knihovna Scheduler obsahuje typy událostí a třídu t ídu TScheduler, která obsahuje metody k obsluze těchto událostí. Lze přes ř ni řídit průběh pr simulace, včetně časové osy. Většina ětšina událostí se dostane k vykonání hned, u některých ěkterých lze nastavit zpoždění. zpožd 4.1
Seznam událostí
TEvent = class(TBaseObject) -
základní třída ída událostí (prázdná), ostatní události jsou z ní odvozené atributy: EventType : Integer, Time : Double
TChangePinEvent = class(TEvent) -
událost změny napětí ětí na pinu, volá metodu OnChangePin
atributy: PartPin : TPartPin TRecountSchemeEvent RecountSchemeEvent = class(TEvent) -
přepočet et schématu (zavolá sadu událostí pro přepočet p et subschémat)
atributy: Scheme : TScheme TRecountSubschemeEvent = class(TEvent) -
vynutí přepočet et subschématu atributy: Subscheme : TSubScheme
TRedrawSchemeEvent = class(TEvent) -
událost pro překreslení ekreslení schématu
TRedrawPartEvent = class(TEvent) -
11
vynucené překreslení ekreslení součástky sou
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
TPartRequestEvent = class(TEvent) -
volá OnMyRequest pro danou součástku, sou součástka může že mít více požadavků požadavk (ID)
atributy: Part : TPart, ID : Integer Integ TPauseEvent = class(TEvent) -
zastavení simulace, znovuspuštění znovuspušt tlačítkem Start
TReconfigureSubschemesEvent = class(TEvent) -
provede nové rozparsování schématu, používá se pokud dojde k velkým změnám schématu a nové rozparsování by mohlo zrychlit výpočty výpo
TScheduler = class -
TScheduler je třída ída pro práci s událostmi
Scheme : TScheme; EventList : TObjectList; -
seznam událostí k vyřízení řízení
MaxEvents : Integer; -
maximální počet et událostí k vyřízení vy
StartTime, ActTime, SimulationTime : Double; -
12
čas začátku simulace, aktuální čas (reálný), simulační čas
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
5. Návrh součástky Nejprve je potřeba součástku částku navrhnout v programu KiCad a uložit jí do knihovny. To lze provést otevřením řením ením Eeschema (editor schémat) a následným spuštěním spušt editoru knihoven. Součástka se kreslí pomocí nástrojů nástroj umístěných ných na panelu vpravo (Add rectangle, Add circle, Add pin,…). Piny lze pojmenovat a očíslovat o poklepáním na příslušný íslušný pin. Hotovou součástku sou je nutno uložit buď do již existující knihovny součástek, sou nebo do nověě vytvořené knihovny. Nové schéma se vytvoří ří vybráním knihoven součástek, sou ástek, které budou ve schématu použity a jejich následným pospojováním vodiči vodi na panelu nástrojů vpravo.
Tip: U jednotlivých elementů lze měnit m tloušťka čáry, áry, toho se dá využít v simulátoru HyCiSim například pro výběr jednotlivých ednotlivých segmentů segment displeje a jejich uložení do pole.
Obr. 5.1- příklad součástky částky vytvořené vytvo v Eeschema
13
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
5.1
Atributy součástky
Odpovídající hodnoty součástky (odpor, kapacita, napětí,…) nap tí,…) lze nastavit ve vlastnosti vla pole součástky. ástky. Které se skrývá za ikonou „T“ v horním ovládacím panelu, nebo lze vyvolat poklepáním na součástku. ástku. První řádek je odkaz na součástku, ástku, druhý jméno součástky sou a ostatní řádky lze libovolně nadefinovat.
Obr. 5.2 - pole vlastností součástky souč
Takto navržená součástka částka je připravená p ipravená pro poslední fázi návrhu, kterou je definování elektrických vlastností. Případně řípadně nějakých vizuelních změn (rozsvěcení, ěcení, zobrazování hodnot, realizace pohyblivých částí apod.). Tím se zabývá programová část ást simulátoru HyCiSim.
14
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
5.2
Programování součástky částky
5.2.1
Rezistor
Grafickým návrh součástky částky je hotov. Nyní je potřeba pot eba naprogramovat její funkčnost. funk Pro zařazení součástky ástky do schématu a výpočet výpo et ustáleného stavu obvodu v zásadě stačí naprogramovat její proudové vlastnosti (funkce GetCurrent) a metodu Create. Například Nap takto by se naprogramoval rezistor. Odpor má 2 piny, není závislý na polaritě polarit a výpočet et proudu určuje urč Ohmův zákon, tedy: I = U/R.
Metoda Create: -
pomocí inherited dědíme ědíme vlastnosti obecné součástky sou TPart
constructor TResistor.Create(p: TPart); begin inherited;
-
-
dále je potřeba eba inicializovat všechny piny a načíst na íst hodnotu odporu z pole TField, které obsahuje hodnoty zadané při p návrhu součástky v programu KiCad, KiCa pokud by načtení selhalo, defaultněě přiřadíme řiřadíme hodnotu (v tomto případě p 1kΩ) pomocí AddToInfoList('text') vypíšeme poznámku do infolistu HyCiSim InitializePins(2); Resistor := DecodeResistorValue(TField(Fields.Items[1]).Text); if Resistor = 0 then begin Resistor := 1000;
AddToInfoList('Error in part ' + Reference + ': Resistivity value field is invalid, value is 1k now'); end; end;
15
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Funkce GetCurrent: function TResistor.GetCurrent(pin: Integer): TFloat; begin Result := 0;
-
piny odporu jsou dva, jeden je tedy v seznamu pinů pod indexem 0 a druhý 1 vezmeme-li napětí ětí na jednom z pinů a odečteme od něj napětí ětí na druhém pinu, zjistíme hodnotu napětí ětí na odporu / Rezistor (hodnota odporu) = proud v případě,, že dotazujeme proud na pinu 1,funkce vrátí výsledek s opačným znaménkem (v rámci subschématu je podle Kirchhoffových zákonů zákon součet čet proudů 0)
if (pin in [0 , 1]) and (PinList[0] <> nil) and (PinList[1] <> nil) then
begin Result := (PinList[1].GetVoltage - PinList[0].GetVoltage) ge) / Resistor;
if Pin = 1 then Result := - Result; end; end;
5.2.2
LED dioda
Nyní si uveďme me postup návrhu složitější složit součástky, ástky, kterou je LED dioda. Výpočet Výpo proudu již nebude jednoduchá lineární funkce. Navíc bude nutné nadefinovat metodu pro rozsvícení rozsvíce diody pokud proud překročí č určitou čitou itou mez (metoda AfterChange) a metodu pro překreslení p př součástky (ReDraw).
Metoda Create: -
opětt máme 2 piny (0,1), proud diodou vypočítáme vypo uvedou funkcí
const k1 = 1e-4; k2 = 3.96; temp := (PinList[0].GetVoltage - PinList[1].GetVoltage); if temp <= 0 then temp := 0 else temp := k1 * (Exp( k2 * temp / Voltage ) - 1); if Pin = 1 then Result := temp else Result := - temp;
16
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Metoda AfterChange: -
tato metoda se volá při změně zm hodnoty proudu na některé z pinů, v metotě create musíme nastavit proměnnou OnChangeActive := true; na základě výpočtu čtu proudu nastavíme proměnnou prom nnou Light na true nebo false
-
procedure TLEDDiode.AfterChange(pin: Integer); var temp : TFloat; begin inherited; if (pin in [0, 1]) and (PinList[0] <> nil) and (PinList[1] <> nil) then
begin temp := (PinList[0].GetVoltage - PinList[1].GetVoltage); if temp <= 0 then temp := 0 else temp := k1 * (Exp( k2 * temp / Voltage ) - 1); if (temp > 0.005) <> Light then begin Light := (temp > 0.005);
-
je-li li Light true vyvoláme událost překreslení p součástky if Light then SchemeSheduler.AddRedrawPartEvent(self)
-
jinak zrušíme událost else begin SchemeSheduler.CancelPartRequestEvent(self, 0); SchemeSheduler.CancelPartRequestEvent(self,
-
reálná dioda nezhasne hned, ale až po čase ase perzistence, to simuluje událost AddPaerRequestEvent, kde rezistence znamená zpoždění zpožd v řádu milisekund SchemeSheduler.AddPartRequestEvent(Self, 0, Persistance);
end; end; end; end;
Dále potřebujeme ebujeme rozsvícení vykreslit na schéma. K tomu použijeme metody Draw a ReDraw.
17
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Metoda Draw: -
slouží k vykreslení součástky souč na plátno, bude potřeba eba i metodu ReDraw, vyvolávaná událostí AddRedrawPartEvent, AddRedrawPartEvent k zamezení duplicity kódu Draw pouze volá ReDraw
procedure TLEDDiode.Draw(paper: TCanvas; Erase, Highlighted: Boolean);
begin inherited; Redraw(Paper); end;
Metoda ReDraw: procedure TLEDDiode.ReDraw(paper: TCanvas); var d : Integer; begin inherited;
-
d slouží k přepočtu čtu souřadnic souř elipsy (tvar diody) na základěě zvětšení ětšení ZOOM d := 70 div ZOOM;
-
má-li li být LED dioda rozsvícená (Light = true), nastaví barvu štětce štětce na LEDColor (ta je načtena v metoděě Create z pole součástky ástky TField) jinak na clSilver (nesvítí) if Light ight then Paper.Brush.Color := LEDColor else Paper.Brush.Color := clSilver; Paper.Pen.Color := clBlack; Paper.Pen.Width := 1;
-
zbývá už jen vykreslit požadovanou elipsu Paper.Ellipse(PosX div ZOOM - d, PosY div ZOOM - d, PosX div ZOOM + d, PosY div ZOOM + d);
end;
Metoda Reset: procedure TLEDDiode.Reset; begin inherited; Light := false; end;
18
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
6. Sedmisegmentový displej Jedná se o elektronickou součástku souč určenou pro zobrazování především číslic. Jednotlivé segmenty jsou výráběny ny technologií LED, OLED nebo tekutými krystaly. Typicky se využívají pro zobrazování času asu hodin, kalkulátory apod..
Obrázek 6.2 zobrazuje charakteristiku intenzity svícení segmentu v závislosti na protékajícím proudu.
Obr. 6.1 - sedmisegmentový display
Obr. 6.2 - graf intenzity svícení
Každému segmentu přísluší řísluší jeden pin (včetně (v tečky), ky), sepnutí kombinace více pinů pin tak vytváříme znaky. Na pinech 3 a 8 tohoto displeje je společná spole zem. V projektu je displej modifikován následovně. následovn Pro piny d, e, f, g je nastavena zem na pin 3 a pro piny a, b,c, dot je společná čná zem na pinu 8.
Obr. 6.3 - rozmístění pinůů sedmisegmentového displeje displ
19
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
6.1
Programování sedmisegmentového displeje
Programování sedmisegmentového displeje vychází z návrhu součástek částek rezistoru a LED diody, proto zde nejsou uvedeny úplné kódy, ale pouze po části, ásti, které jsou pro sedmisegmentový displej jiné. Úplný zdrojový kód je v příloze na CD. constructor TMyPart.Create(p: TPart); -
v konstruktoru je potřeba potř načíst celkový počet pinůů (10), nastavit constantu OnChangeActive na true (displej bude reagovat na změny proudůů na pinech)
-
pole Light délky 8 nese informaci o rozsvícených segmentech (včetně (včetně tečky)
-
perzistence je hodnota, po kterou zůstane z segment rozsvícen při ři poklesu hodnoty proudu pod bod rozsvícení InitializePins(10); OnChangeActive := true; for i := 0 to 7 do Light[i] := false; Persistance := DecodeTimeValue(TField(Fields.Items[4]).Text);
procedure TMyPart.Reset;
-
metoda reset nastavuje pole Light do výchozího stavu (všechny segmenty zhasnuto) for i := 0 to 7 do Light[i] := false;
end;
function TMyPart.RelationBetweenPins(Pin1, Pin2 : Integer): Boolean;
-
funkce RelationBetweenPins slouží k rozdělení pinů součástky částky na podschémata, v kterých se vypočítává čítává ustálené proudový stav
-
v tomto případěě jsou piny 1 - 5 v jednom podschématu a piny 6 – 10 v druhém
begin Result := (Pin1 < 5) = (Pin2 < 5); end;
20
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
function TMyPart.GetCurrent(pin: Integer): TFloat; -
pin č.2 je společná čná zem pinů pin 0, 1, 3, 4 – proud na tomto pinu se vypočítá vypo jako součet proudů na všech pinech (pro výpočet výpo proudu na pinech segmentůů je použit stejný vzorec jako pro LED diodu)
if (pin = 2) then begin for
i:= 0 to 4 do
begin if ( (i <> 2) and (PinList[i].GetVoltage <> 0) ) then begin sumVoltage1 := temp1 :=
PinList[i].GetVoltage - PinList[2].GetVoltage;
(k1 * (Exp( k2 * sumVoltage1 / Voltage ) - 1)) + temp1 ;
end; end;
-
pro případ ípad nezapojených pinů, pin je přidán vnitřní 1MΩ temp1 := temp1 + PinList[2].GetVoltage / 1000000; Result := temp1; end;
-
segmentové piny jsou počítány poč stejně jako u LED diody, akorát proti společné spole zemi
if (pin in [0,1,3,4]) then begin temp1 := PinList[pin].GetVoltage - PinList[2].GetVoltage; temp1 := k1 * (Exp( k2 * temp1 / Voltage ) - 1); Result := -temp1; end;
-
21
pro piny 5 – 9 (resp. 6 – 10) je kód až na čísla pinů a pomocné proměnné prom sumVoltage2 a temp2 (datového typu TFloat) stejný
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
procedure TMyPart.AfterChange(pin: Integer); -
metoda AfterChange je stejná jako GetCurrent, navíc nastavuje pole Light na indexu konkrétního segmentu, pokud je na daném pinu proud větší tší než 15 mA
-
pole uchovává indexy segmentů segment v poli Light pro piny 0 - 9
var pole : array [0..9] of Integer; if (temp1 > 0.015) <> Light[pole[pin]] then begin Light[pole[pin]] := (temp1 > 0.015); if Light[pole[pin]] ht[pole[pin]] then
-
došlo-li k rozsvícení zavolá se událost pro překreslení p součástky, částky, Persistance je zpoždění zpožd pro rozsvícení, což je nasimulování reálného chování LED diody SchemeSheduler.AddPartRequestEvent(Self, 0, Persistance) else begin
-
pokud se má zhasnout, zrušíme události součástky, sou ástky, které jsou ve frontě front (CancelPartRequestEvent) a zavoláme pomocí AddPartRequestEvent metodu OnMyRequest se zpožděním zpoždě perzistence, nebo jiným SchemeSheduler.CancelPartRequestEvent(self, 0); SchemeSheduler.CancelPartRequestEvent(self, SchemeSheduler.AddPartRequestEvent(Self, 0, 0.045); end; end;
procedure TMyPart.OnMyRequest(ID: Integer); -
metoda OnMyRequest pouze vyžádá překreslení p součástky
begin SchemeSheduler.AddRedrawPartEvent(Self) SchemeSheduler.AddRedrawPartEvent(Self); end;
22
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
procedure TMyPart.Draw(paper: TCanvas; Erase, Highlighted: Boolean);
-
metoda Draw slouží pro vykreslení změn zm segmentů,, segmenty jsou zastoupeny v poli Shape : array [0..7] of TGERectangle;
begin if Shape[i] <> nil then begin
-
vlastnost TGraphicsElement sElement.Filled je typu char (F – vybarveno, f - nevybarveno) if Light[i] then Shape[i].Filled := 'F' else Shape[i].Filled := 'f'; Shape[i].Draw(Paper, PosX, PosY, A, B, C, D, false, false);
end; end; end;
procedure TMyPart.InitializeSymbol; v inicializační části je potřeba pot eba vybrat jednotlivé segmenty ze schématu součástky sou a uložit je do pole typu TGERectangle (obdélník)
var
temp : array [0..7] of TGERectangle; begin inherited;
-
projdeme všechny grafické prvky dané součástky sou
-
u obdélníků,, které náleží segmentům segment displeje byla nastavena v programu KiCad šířka ší 0, lze je tedy vybrat následovně: následovn
for i := 0 to Symbol.GraphicsElements.ItemsCount - 1 do begin if (Symbol.GraphicsElements.Items[i] is TGERectangle) then if (Symbol.GraphicsElements.Items[i] as TGERectangle).Width = 0 then
begin if j < 8 then Shape[j] := (Symbol.GraphicsElements.Items[i] as TGERectangle); inc(j); end; end;
6.2
23
Digitální hodiny
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Funkčnost hotového ho sedmisegmentového displeje byla ověřena ov ena na schématu digitálních hodin řízených ízených mikroprocesorem (přiloženo (přiloženo na CD). Použitý mikroprocesor Atmel AT89C51CC03 má proudová omezení v součtu čtu všech pinů pin portu na 75 mA. Na piny je připojena řipojena součástka sou driveru pro zesílení proudu. To však zdaleka nestačí nesta na případné ípadné rozsvícení všech 4 displejů displej (4 x 8 x 15 mA). Port 1 dokáže napájet pouze jeden plně pln rozsvícený displej. Rozsvícení všech čtyř se docílí multiplexací displejů. ů. Na pinech portu 1 je nastavena kombinace segment segmentů a na portu 0 je vybrán jeden konkrétní displej. Mikroprocesor přepíná p epíná tyto kombinace rychleji (minimálně (minimáln 4x) než je doba dosvitu segmentů displeje a proto se jeví jako rozsvícené všechny.
6.4 - schéma digitálních hodin
24
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
7. Závěr Tato práce měla la za cíl seznámení se simulátorem HyCiSim. Výhodou HyCiSim je bezesporu možnost relativně snadného návrhu vlastních součástek sou ástek a možnost jejich ladění lad pomocí časové osy. Dalším pozitivem je provázanost s knihovnami návrhového prostředí ředí elektronických obvodů obvod KiCad. Simulátor je naprogramován v jazyce Delphi pascal. Co se týče če budoucnosti, pracuje se na jeho přepsání epsání do vývojového prostředí prost Lazarus. Lazarus je volněě distribuovatelné prostředí prost a je dostupné pro široké spektrum platforem (Microsoft Windows, různé ůzné distribuce Linuxu, FreeBSD a Mac OS X). Další částí ástí projektu bylo naprogramování složitější složit součástky, ástky, která by se dala využít v elektronických schématech simulátoru HyCiSim. Zvolen byl sedmisegmentový displej, di jakožto často asto používaný prvek schémat. Pro ověření ov funkčnosti nosti (proudových vlastností, perzistence apod.) bylo sestaveno schéma s mikroprocesorem reprezentující digitální hodiny, které je součástí přílohy na CD.
8. Použitá literatura [1] Výpis knihoven BasicObjects, GraphicsElements, Scheduler, Scheme simulátoru HyCiSim [2] Zdrojové kódy součástek částek simulátoru HyCiSim [3] Nápověda da návrhového prostředí prost pro elektronická schémata KiCad
25
Hybridní simulátor HyCiSim název kapitoly / podkapitoly
Poděkování:
Tento text vznikl za podpory projektu ESF CZ.1.07/2.2.00/07.0247
Reflexe požadavků ů průmyslu ůmyslu na výuku v oblasti automatického řízení a měřen. m Formát zpracování originálu: titulní list barevně, barevn další listy včetně č ě příloh říloh barevně. barevn
26
Hybridní simulátor HyCiSim název kapitoly / podkapitoly