MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Speciální obvody a jejich programování v C 2. díl České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek, 2017
Compare Unit jiné řešení Následující tři snímky zobrazuji jiné řešení Compare Unit, které se často používá např. pro generování PWM modulace pro třífázový asynchronní motor. Princip této jednotky (následující snímek): Obousměrný referenční čítač (Up-down Counter) čítá od nuly do průběžně nastavitelné maximální hodnoty a pak začne automaticky odčítač zpět do nuly. Generuje tzv. nosnou vlnu (Carrier Wave) Jednotka obsahuje dva číslicové komparátory, které porovnávají stav obousměrného čítač s obsahem programem nastavitelných komparačních registrů. V případě shody jednotka generuje úroveň logické 0, v případě, že čítaččítá nahoru nebo úroveň logická 1, pokud čítaččítá dolů (odčítá). Generuje se tzv. modulační vlna (Modulation Wave) Výstupní hodnota je dále upravena (zpožděna) tak, aby výstupní jednotka, která generuje komplementární signál pro tranzistory jedné větve výkonového měniče nebyly sepnuty zároveň (Dead Time) Při změně směru čítáníčítače (nula, max) jednotka nastaví žádost o přerušení a program musí znovu nastavit obsah odpovídajícího komparačního registru. A1B14MIS Mikroprocesory pro výkonové systémy 09 2
Compare Unit jiné řešení A1B14MIS Mikroprocesory pro výkonové systémy 09 3
Compare Unit jiné řešení (pokračování) Následující snímek zobrazuje blokové schéma jedné větve Compare Unit. Komparační jednotka má takové větve tři pro generování celkem šesti výstupních impulsů pro tranzistory tří větví úplného můstku pro napájení třífázového asynchronního motoru (Induction Motor) Referenční obousměrný čítač je společný pro všechny tři větve. Fázový posun impulsů jednotlivých větví (pro napájení motoru) musí zajistit software správným plněním všech šesti komparačních registrů (generování modulační vlny. Celkové blokové schéma komparační jednotky pro generování šesti PWM výstupů s ochranou proti zkratu ve větvi výkonového tranzistorového měniče (Dead Time) je uvedeno na druhém následujícím snímku. Výstupní PWM signály z mikrokontroléru nemohou napájet přímo výkonové tranzistory (napěťové úrovně, potenciál impulsů, požadovaný proud). Mezi výstupy PWM modulátoru z mikrokontroléru a tranzistory je proto vložen transformačníčlen tzv. budič (Driver). A1B14MIS Mikroprocesory pro výkonové systémy 09 4
Compare Unit jinéřešení jeden kanál A1B14MIS Mikroprocesory pro výkonové systémy 09 5
Compare Unit celkový pohled pro asynchronní motor A1B14MIS Mikroprocesory pro výkonové systémy 09 6
Řízení přístupu k portům (bránám) Porty (brány) mikrokontroléru PIC18F87J11 (a jemu podobných) mohou být obsluhovány (čteny nebo zapisovány) buď přímo programem (software) nebo vstupem či výstupem hardware (např. Capture Unit nebo Compare Unit, ). Porty jsou osmibitové a jsou navrženy tak, že na daném portu lze nastavit libovolnou kombinaci vstupní a výstupní bitů u standardních portů, u portů pro snímání analogových veličin lze nastavit pouze vstup (analogový nebo číslicový). Po nulování jsou všechny porty (jejich bity) nastaveny na vstup do mikrokontroléru (aby případně nedošlo k elektrickému konfliktu s vnějším hardware). Principielní zapojení standardního portu je na následujícím snímku. Každý bit standardního portu obsahuje: Směrový registr Výstupní registr Vstupní registr Řídící logiku pro správný zápis nebo čtení bitu portu A1B14MIS Mikroprocesory pro výkonové systémy 09 7
Řízení přístupu k portům (bránam) zde jeden bit Čtení stavu výstupního registru LATCH Zápís do výstupního registru LATCH nebo PORT (totéž) Zápis do směrového registru LATCH (1=Input, 0=Output) Čtení stavu pinu mikrokontroléru, registr PORT Vstupní nebo výstupní pin mikrokontoléru (dle nastavení bitů směrového registru TRISx) Vstupní registr PORT (čte se logická hodnoty na pinu port) A1B14MIS Mikroprocesory pro výkonové systémy 09 8
Řízení přístupu k portům (bránám) - pokračování Pro daný bit standardního portu se výstup nebo vstup zvolí zápisem do odpovídajícího bitu směrového registru (TRIS): Výstup (Output) do bitu TRIS se zapíše 0 (mnemo: 0 se podobá O) Vstup (Input) do bitu TRIS se zapíše 1 (mnemo: 1 se podobá I) Pokud je daný bit obsluhován hardware (např. Capture/Compare Unit) je nutné do směrového registru rovněž zapsat programově správnou hodnotu pro volbu vstup/výstup. Po RESET mikrokontroléru jsou v TRIS samé 1 (vše Input) Zápisem do registru (LAT nebo PORT je to stejný registr) se příslušná hodnoty zapíše do registru LATCH. Pokud je příslušný bit registru TRIS nastaven na výstup (0 Output) hodnoty z registru LATCH se objeví na výstupním pinu. Hodnota z výstupního registru se přečte čtením LAT. Hodnota na pinu mikrokontroléru se přečte čtením PORT. Ve výstupním registru LATCH tedy může být jiná hodnota než na pinu mikrokontroléru pokud bit není nastaven na výstup nebo vnější hardware drží na pinu jinou hodnotu než je v LATCH. A1B14MIS Mikroprocesory pro výkonové systémy 09 9
Příklad: 2x interrupt, 2 hladiny přerušení Následující příklad demonstruje použití prioritního systému mikrokontroléru PIC18F87J11, který má dvě hladiny (vyšší a nižší prioritu) Žádosti o přerušení zde generují dva časovače (TMR0 a TMR1) nastavení příslušné žádosti o obsluhu xif (Interrupt Flag). Interrupt Flag nastavuje příslušný zdroj přerušení (zde některý z časovačů) v harware. Nulovat se Interrup Flag musí v ISR programově. Nulování xif je v tomto příkladu provedeno na začátku ISR, ale nulování může být v ISR umístěno kdekoliv. Daná hladina přerušení je v hardware blokována před další žádostí až do dokončení ISR. Vlastní zpracování žádosti je v tomto příkladu pro jednoduchost simulováno inkrementací proměnných x a y v odpovídajících ISR. Povolení přerušení (GIEH, GIEL) musí být v programu vždy umístěno jako poslední po inicializaci a nastavení všech ostatních použitých registrů a bitů. A1B14MIS Mikroprocesory pro výkonové systémy 09 10
Příklad: 2x interrupt, 2 hladiny přerušení A1B14MIS Mikroprocesory pro výkonové systémy 09 11
Příklad: 2x interrupt, 2 hladiny přerušení (pokrač.) A1B14MIS Mikroprocesory pro výkonové systémy 09 12
Příklad: 2x interrupt, 2 hladiny přerušení (pokrač.) A1B14MIS Mikroprocesory pro výkonové systémy 09 13
Příklad: 1x interrupt, 2 zdroje přerušení Následující příklad ukazuje situaci, kdy je nutné připojit více zdrojů žádostí o přerušení do jedné hladiny (například proto, že chceme použít 4 zdroje žádostí o přerušení a mikrokontrolér PIC18F87J11 má pouze dvě hladiny priority. V příkladu jsou časovače TMR0 a TMR1 připojeny do vyšší hladiny priority přerušení, nižší hladina není použita (její Interrupt Enable Flag IE tj. PIE1bits.TMR1IE = 0 (tj. FALSE). V ISR na vyšší hladině jsou testovány xif od jednotlivých časovačů a podle toho nastaveny sw příznaky (Flagy) t0int, t1int. Zároveň je tím ukázáno jak přenést výpočet do základní hladiny (background). Proč to činit? Tento mikrokontrolér má málo hluboká hw zásobník a není vhodné v ISR budovat rozsáhlé uživatelské programy a volat funkce. Povolení přerušení (GIEH, GIEL) musí být v programu vždy umístěno jako poslední po inicializaci a nastavení všech ostatních použitých registrů a bitů. Oba příznaky GIEH i GIEL musí být nastaveny na 1 (TRUE) i když se některá ze dvou hladin priority přerušení nepoužije. A1B14MIS Mikroprocesory pro výkonové systémy 09 14
Příklad: 1x interrupt, 2 zdroje přerušení A1B14MIS Mikroprocesory pro výkonové systémy 09 15
Příklad: 1x interrupt, 2 zdroje přerušení (pokrač.) A1B14MIS Mikroprocesory pro výkonové systémy 09 16
Příklad: 1x interrupt, 2 zdroje přerušení (pokrač.) A1B14MIS Mikroprocesory pro výkonové systémy 09 17
Příklad: 1x interrupt, 2 zdroje přerušení (pokrač.) A1B14MIS Mikroprocesory pro výkonové systémy 09 18
Příklad: Capture Unit měření periody Následující dva snímky připomínají blokové schéma Capture Unit a časové průběhy při jejím použití Připomeňme účel Capture Unit. Jednotka umožňuje odstranit zpoždění od mezi skutečným časem příchodu události (hrany vstupního impulsního sígnálu) a čtením referenčního časovače v ISR (skutečný čas příchodu hrany je uložen v Capture Register). Tím se odstraní nepřijatelné chyby při měření signálů s vysokým kmitočtem (tj. krátkou periodou). Připomeňme rovněž (a z následujícího příkladu to je zřejmé), že Capture Unit sama o sobě nic neumí, musí být obsluhována software. Pro ladění programu s Capture Unit je třeba vstupní signál. V hardware ho musíme připojit na vstup. S výhodou se ale dá program ladit v Simulátoru MPLAB, kde je k dispozici generátor vstupních signálů jménem A1B14MIS Mikroprocesory pro výkonové systémy 09 19
Příklad: Capture Unit měření periody A1B14MIS Mikroprocesory pro výkonové systémy 09 20
Capture Unit princip použití (detail) A1B14MIS Mikroprocesory pro výkonové systémy 09 21
Příklad: Capture Unit měření periody Pro ladění programu s Capture Unit je třeba vstupní signál. V hardware ho musíme připojit na vstup mikrokontroléru. S výhodou se ale dá program ladit v Simulátoru MPLAB, kde je k dispozici generátor vstupních signálů jménem Stimulus V menu MPLAB ho najdeme v Debugger->Stimulus. Stimulus má několik módů pro generování vstupního signálu do vstupů v Simulátoru. Na následujícím snímku je pro ladění programu s Capture Unit použitý mód, kde časování vstupního signálu je odvozeno od hodin procesoru. Vstup použité jednotky Capture Unit 1 je pin RC2. Stimulus po spuštění čeká 1000 kroků (je to volitelné) a pak každých 500 kroků generuje hranu tj. perioda generovaného signálu je 1000 kroků (viz následující snímek). Po tomto snímku následuje program obsluhující Capture Unit s referenčním časovačem Timer1. Pro tento příklad není třeba sledovat přetečení časovače, jeho připojení do nižší hladiny přerušení je jen demonstrativní. Proměnná period musí mít stejný rozměr (zde 16 bitů) jako Capture Register, aby výpočet modulo 16 probíhal správně (předpodlad pro uvedený příklad je, že časovač při měření delších period přeteče jen jednou (nikoliv vicekrát). A1B14MIS Mikroprocesory pro výkonové systémy 09 22
Příklad: Capture Unit měření periody A1B14MIS Mikroprocesory pro výkonové systémy 09 23
Příklad: Capture Unit měření periody A1B14MIS Mikroprocesory pro výkonové systémy 09 24
Příklad: Capture Unit měření periody A1B14MIS Mikroprocesory pro výkonové systémy 09 25
Příklad: Capture Unit měření periody A1B14MIS Mikroprocesory pro výkonové systémy 09 26
Příklad: Capture Unit měření periody Spojení dvou osmibitových slov do jednoho šestnáctibitové probměnné A1B14MIS Mikroprocesory pro výkonové systémy 09 27
Příklad: Capture Unit měření periody Následující snímek ukazuje v okně Watch, že měřená perioda pomocí Capture Unit a vstupu z generátoru signálů Stimulus je přesně očekávaných 1000 kroků hodin procesoru, nezávisle na stavu referenčnícho časovače Timer 1 ze kterého se odebírá časová informace do Capture Register. Okno Watch je v nabídce View->Watch. A1B14MIS Mikroprocesory pro výkonové systémy 09 28
Příklad: Capture Unit měření periody A1B14MIS Mikroprocesory pro výkonové systémy 09 29
Příklad: Compare Unit generování PWM Následující dva snímky připomínají blokové schéma Compare Unit a časové průběhy při jejím použití. Připomeňme účel Compare Unit. Jednotka umožňuje odstranit zpoždění mezi požadovaným časem generování výstupní hrany signálu a skutečným časem hrany pokud by hrana byla generována software v ISR. Compare Unit umožňuje předprogramovat typ a čas (počítaný v kódu referenčního časovače) budoucí generované hrany předem v ISR. Požadovaný čas budoucí hrany se programuje do Compare Register a typ budoucí hrany (náběžná, sestupná) do Event Register. Tímto způsobem Compare Unit společně s software generuje výstupní signál (PWM) přesně vzhledem ke krokování referenčního časovače. Připomeňme rovněž (a z následujícího příkladu to je zřejmé), že Compare Unit sama o sobě nic neumí, musí být obsluhována software. Pro ladění programu s Compare Unit s výhodou použijeme simulátor v MPLAB a k zobrazení generovaného průběhu blok Logic Analyzer tamtéž (View->Simulator Logic Analyzer). Pokud ladíme přímo v hardware je nutné, pro pohled na generovaný signál, použít osciloskop nejlépe digitální. A1B14MIS Mikroprocesory pro výkonové systémy 09 30
Compare Unit schéma - detail A1B14MIS Mikroprocesory pro výkonové systémy 09 31
Compare Unit princip použití se software A1B14MIS Mikroprocesory pro výkonové systémy 09 32
Příklad: Compare Unit generování PWM Následující příklad (poněkud delší) demonstruje použití Compare Unit. Používají se obě hladiny přerušení. Compare Unit v tomto příkladu generuje PWM s pevnou periodou a proměnnou aktivní částí PWM (log. 1). Referenční časovač pro Compare Unit je Timer1. ISR ve vyšší prioritě programuje čas a typ (náběžná, sestupná) příští generované hrany. Aktivníčást PWM (tj. log 1) je rozmítána (sweep) v ISR nižší priority, která reaguje na přetečení Timer0. PWM má nastavené dorazy (Dead Time) na obou koncích generované periody. V příkladu si povšimněte: Struktury programu (několik málo funkcí) Vhodné volby programových příznaků (Software Flags) pomocí konstrukce typu struktura (struktura status ). Symbolické volby konstant programu. Inicializace časovačů a Compare Unit. Struktury ISR v obou hladinách priority. A1B14MIS Mikroprocesory pro výkonové systémy 09 33
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 34
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 35
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 36
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 37
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 38
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 39
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 40
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 41
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 42
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 43
Příklad: Compare Unit generování PWM Následující snímek ukazuje záznam ze simulátoru MPLAB (SIM) a Logického analyzátoru MPLAB (Simulator Logic Analyzer). Horní obrázek snímku zachycuje generovanou pevnou periodu PWM (10000) krokůčasovače a v dané chvíli aktivníčást PWM (Duty Cycle) něco přes 50%. Dolní obrázek snímku pak ukazuje časový rozdíl mezi PWM hranou generovanou Compare Unit (výstup RC2)(tj pomocí hardware) a hranou generovanou software (výstup RD0) viz ISR pro zpracování přerušení od Compare Unit tj. funkce (void CCP1_int(void). Při skutečném použití bude aktivníčást PWM (log 1) řízena např. ze snímače ovládaného člověkem nebo lépe z výstupu regulátoru. A1B14MIS Mikroprocesory pro výkonové systémy 09 44
Příklad: Compare Unit generování PWM A1B14MIS Mikroprocesory pro výkonové systémy 09 45
MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Speciální obvody a jejich programování v C 2. díl KONEC České vysoké učení technické Fakulta elektrotechnická