Váení zákazníci, dovolujeme si Vás upozornit, e na tuto ukázku knihy se vztahují autorská práva, tzv. copyright. To znamená, e ukázka má slouit výhradnì pro osobní potøebu potenciálního kupujícího (aby ètenáø vidìl, jakým zpùsobem je titul zpracován a mohl se také podle tohoto, jako jednoho z parametrù, rozhodnout, zda titul koupí èi ne). Z toho vyplývá, e není dovoleno tuto ukázku jakýmkoliv zpùsobem dále íøit, veøejnì èi neveøejnì napø. umisováním na datová média, na jiné internetové stránky (ani prostøednictvím odkazù) apod. redakce nakladatelství BEN technická literatura
[email protected]
18 JEDNOTKA ECCP U PIC18F1220
Mikrokontrolér PIC18F1220 disponuje jednotkou ECCP (Enhanced Capture/Compare/PWM). V této kapitole se seznámíme s jejími monostmi a pouitím.
18.1
ZÁKLADNÍ VLASTNOSTI
ECCP jednotka je implementována jako klasická jednotka CCP (podobnì jako v kapitole 17) s rozíøenými schopnostmi v reimu PWM. Jedná se o podporu 2 nebo 4 kanálù, uivatelsky nastavitelné polarity, øízení mrtvého pásma a automatické vypnutí a restartu.
30
30
'&%
'&%
&&30
&&30
&&30
&&30
5:
5:
5:
5:
5:
5:
5:
5:
3030±3:02XWSXW&RQILJXUDWLRQELWVNRQILJXUDþQtELW\3:0YêVWXSX SUR&&30&&30 [[[[[[ [[±3$MHSRXåLWMDNR&&3YêYRG3%3&3'MVRXRE\þHMQpYêYRG\SRUWX SUR&&30&&30 [[ ±MHGQRGXFKêYêVWXS3$MHPRGXORYiQ3%3&3'MVRXRE\þHMQpYêYRG\SRUWX ±SOQêPRVW3'MHPRGXORYiQ3$DNWLYQt3%3&QHDNWLYQt ±SRORYLþQtPRVW3$3%MVRXPRGXORYiQ\YþHWQ t]HQtPUWYpKRSiVPD3&3' MVRXRE\þHMQpYêYRG\SRUWX ±SOQêPRVWUHYHU]QtYêVWXS3%MHPRGXORYiQ3&DNWLYQt3$3'QHDNWLYQt '&%'&%±3:0'XW\&\FOHELWDQGELWVSRGQtELW\VW tG\SUR3:0 W\WRELW\VHSRXåtYDMtSRX]HYS tSDG åHMHGQRWNDMHNRILJXURYiQDGRUHåLPX3:0 MHGQiVHRGYDQHMQLåãtELW\ELWDELW ELWRYp3:0VW tG\KRUQtFKELW MHXORåHQRYUHJLVWUX &&35[/ &&30&&30±(&&30RGH6HOHFWELWVYêE UUHåLPXMHGQRWN\(&&3 ±(&&3MHGQRWNDRGVWDYHQDUHVHWMHGQRWN\(&&3 ±Y\KUD]HQR ±UHåLP&RPSDUHQHJDFHYêVWXSXS LVKRG WRJJOHIXQNFHELW(&&3,)VHQDVWDYt ±Y\KUD]HQR ±UHåLP&DSWXUHDNWLYDFHVHVWXSQRXKUDQRX ±UHåLP&DSWXUHDNWLYDFHQiE åQRXKUDQRX ±UHåLP&DSWXUHDNWLYDFHNDåGRXþWYUWRXQiE åQRXKUDQRXG OLþND ±UHåLP&DSWXUHDNWLYDFHNDåGRXãHVWQiFWRXQiE åQRXKUDQRXG OLþND ±UHåLP&RPSDUHYêFKR]tVWDYYêYRGX&&3MHORJSRVKRG ORJELW(&&3,)VHQDVWDYt ±UHåLP&RPSDUHYêFKR]tVWDYYêYRGX&&3MHORJSRVKRG ORJELW(&&3,)VHQDVWDYt ±UHåLP&RPSDUHS LVKRG JHQHUXMHS HUXãHQtELW(&&3,)VHQDVWDYtVWDYYêYRGX (&&3VHQHP Qt ±UHåLP&RPSDUHVSHFLiOQtXGiORVWQtVSXãW þELW(&&3,)VHQDVWDYt (&&3QXOXMH705QHER705DVSRXãWt$'S HYRGSRNXGMH$'SRYROHQ ±UHåLP3:03$D3&DNYLWQtYORJ3%D3'DNWLYQtYORJ ±UHåLP3:03$D3&DNYLWQtYORJ3%D3'DNWLYQtYORJ ±UHåLP3:03$D3&DNYLWQtYORJ3%D3'DNWLYQtYORJ ±UHåLP3:03$D3&DNYLWQtYORJ3%D3'DNWLYQtYORJ
Obr. 18.1
208
Registr CCP1CON
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
Jednotka obsahuje 16bitový registr, který mùe pracovat buï jako 16bitový záchytný registr (capture), 16bitový porovnávací registr (compare) nebo PWM registr. Jedná se o registrový pár CCPR1H:CCPR1L. Obr. 18.1 uvádí øídicí registr CCP1CON. Pro rozíøené PWM operace a automatické vypnutí se pouívají registry PWM1CON a ECCPAS. ECCP výstupy Jednotka ECCP mùe mít (v závislosti na zvoleném reimu) a ètyøi výstupy. Tyto výstupy oznaèené jako P1A a P1D jsou multiplexovány s vývody portu B. Pøiøazení vývodù je zøejmé z tab. 18.1. edì vybarvené buòky indikují pøiøazení vývodù, které není pouito pro jednotku ECCP. Pro konfiguraci vývodù portu B jako PWM výstupù je tøeba správnì nastavit bity CCP1M3:CCP1M0 z registru CCP1CON. Rovnì je tøeba konfigurovat odpovídají vývody jako výstupní pomocí registru TRISB. Tab. 18.1
Pøiøazení vývodù v rùzných reimech jednotky ECCP (&&3 UHåLP
&&3&21 NRQILJXUDFH
5%
NRPSDWLELOQt &&3
[[[[
&&3
5%,17
GYD3:0
[[[[
3$
3%
þW\ L3:0
[[[[[
3$
3%
Tab. 18.2
5% 5%3*& 7262 7&., .%, 5%3*& 7262 7&., .%, 3&
5% 5%3*' 726,.%, 5%3*' 726,.%, 3'
Zdroje hodin pro CCP reim
(&&3UHåLP &DSWXUH &RPSDUH 3:0
18.2
5%
=GURMKRGLQ 7LPHUQHER7LPHU 7LPHUQHER7LPHU 7LPHU
REIM CAPTURE
Reim Capture (té Input Capture, èesky èasto pøekládáno jako záchytný registr) zachytí aktuální obsah registru TMR1/TMR3 ve chvíli, kdy nastane tzv. vstupní událost. Jako vstupní událost lze konfigurovat (pomocí bitù CCP1M3:CCP1M0 z registru CCP1CON): n
sestupná hrana na vstupu CCP1,
n
nábìná hrana na vstupu CCP1,
n
kadá ètvrtá nábìná hrana na vstupu CCP1,
n
kadá estnáctá nábìná hrana na vstupu CCP1.
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
209
Dojde-li ke spoutìcí události, je jednak nastaven pøíznak pøeruení CCP1IF z registru PIR1 a dále dojde (dle aktivity øídicího bitu T3CCP1) k uloení aktuálního stavu registrového páru TMR1H:TMR1L/TMR3H:TMR3L do páru CCPR1H:CCPR1L. QDVWDYHQt &&3,) 7&&3 &&3
705+ SRYROHQt705
&&35+
S HGG OLþND
705/
&&35/
SRYROHQt705
7&&3 YROED KUDQ\
705+
705/
&&30&&30
Obr. 18.2
Blokové schéma pro reim Capture
Pokud si obsah èasovaèe Timer1/Timer3 pøedstavíme jako èasovou osu, je tedy uloen okamik aktivace vstupní události. Pokud nastane nová vstupní událost pøed ètením obsahu CCPR1H:CCPR1L, dojde k pøepisu novì zachycenou hodnotou. Konfigurace vývodu CCP1 Vývod CCP1 by mìl být pøísluným registrem TRISB nastaven jako vstupní. Pokud vývod konfigurujeme jako výstupní, mùe zápis na port zpùsobit vstupní událost. Volba Timer1 nebo Timer3 jako zdroje hodin Jako zdroj hodin pro jednotku Capture lze pouít Timer1 nebo Timer3 pracující v reimu èasovaèe nebo jako synchronizovaný èítaè (asynchronní èítaè nelze pouít). Výbìr mezi Timer1 a Timer3 provádíme pomocí registru T3CON bitem T3CCP1. Pøeruení V pøípadì, e zmìníme reim jednotky CCP1, mùe dojít k falené generaci pøeruení. Proto je dobré pøed zmìnou reimu vynulovat bit CCP1IE z registru PIE1 a následnì vynulovat bit CCP1IF z registru PIR1. Pøeddìlièka CCP Pøeddìlièka je nulována vdy, kdy je jednotka CCP vypnuta nebo kdy se nenachází v reimu Capture. K vynulování dojde i po libovolném resetu mikrokontroléru. Pøi pøepínání mezi jednotlivými reimy Capture nedochází k automatickému nulování pøeddìlièky. Proto je tøeba pøepnutí pøes reim CCP1M3:CCP1M0 = 0000.
18.3
REIM COMPARE
V reimu Compare (té Output Compare) je obsah registru CCPR1H:CCPR1L neustále porovnáván s obsahem registru TMR1/TMR3. Pøi shodì se nastaví pøíznak CCP1IF a vývod CCP1 mùe být:
210
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
n
uveden do log. 1,
n
uveden do log. 0,
n
znegovat svùj stav (tzv. toggle),
n
zùstat beze zmìny.
Akce na vývodu CCP1 je závislá na nastavení bitù CCP1M3:CCP1M0. Viz obr. 18.1. Princip èinnosti v reimu Compare je zøejmý z obr. 18.3.
&&35+
VSHFLiOQt XGiORVWQt VSRXãW þ
QDVWDYHQt &&3,)
&&35/
YêVWXSQt ORJLND
VKRGD
7&&3
705+
Obr. 18.3
&&3 6
08;
4
5
75,6% ELW
&&30&&30
705/
705+
705/
Blokové schéma pro reim Compare
Dle stavu bitu T3CCP1 se testuje shoda obsahu registrového páru CCPR1H:CCPR1L s obsahem páru TMR1H:TMR1L/TMR3H:TMR3L. Je-li dosaeno shody, je jednak nastaven pøíznak pøeruení CCP1IF z registru PIR1 a dále dojde k aktivaci bloku výstupní logiky. Dle zvoleného reimu pak výstupní logika zajistí nulování, nastavení nebo negaci pomocí klopného obvodu RS. Signál z klopného obvodu pak pokraèuje výstupním budièem (cesta musí bít aktivována vynulováním pøísluného bitu z registru TRISB) na vývod CCP1. Tab. 18.3 5HJLVWU 705/ 705+ ,17&21 3,5 3,( ,35 7&21 705/ 705+ 7&21 75,6% &&35/ &&35+ &&3&21 $'&21
Souhrn registrù spojených s reimy Capture, Compare a Timer1, Timer3 %LW
%LW
*,( *,(+ ² ² ² 5'
3(,( *,(/ $',) $',( $',3 7581
5'
²
30 30 9&)*9&)*
%LW
%LW
%LW
%LW
%LW
705,)
,17,)
+RGQRWD SR 325%25 [[[[[[[[ [[[[[[[[
+RGQRWDSR MLQêFK UHVHWHFK XXXXXXXX XXXXXXXX
5%,)
[
X
705,) 705,( 705,3 70521
[[[[[[[[ [[[[[[[[ [[[[[[[[ [[[[[[[[
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXX XXXXXXXX XXXXXXXX
%LW
VSRGQtFKELW 7LPHU KRUQtFKELW 7LPHU 705,(
,17,(
5%,(
5&,) 7;,) ² &&3,) 705,) 5&,( 7;,( ² &&3,( 705,( 5&,3 7;,3 ² &&3,3 705,3 7&.36 726&(1 76<1& 705&6 VSRGQtFKELW 7LPHU KRUQtFKELW 7LPHU 7&.36 7&&3 76<1& 705&6 UHJLVWUVP UXGDWSRUWX% UHJLVWU&&3GROQtEDMW UHJLVWU&&3KRUQtEDMW '&%'&% &&30&&30 ² &+6&+6 *2
70521
$'21
Legenda: n x = neznámá hodnota, n u = hodnota se nezmìní, n edì vybarvené buòky nejsou v reimech Capture nebo jednotkou Timer1 vyuívány.
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
211
Konfigurace vývodu CCP1 Vývod CCP1 musí být pøísluným registrem TRISB nastaven jako výstupní. Vynulování registru CCP1CON nastaví vývod do log. 0. Volba Timer1 nebo Timer3 jako zdroje hodin Jednotky Timer1 nebo Timer3 musí pracovat jako èasovaèe nebo synchronizované èítaèe. Pøi pouití èítaèe v asynchronním reimu nebude reim Compare pracovat. Speciální událostní spoutìè Výstup speciálního událostního spoutìèe jednotky CCP1 nuluje obsah TMR1/ TMR3 registru. Tím CCPR1H:CCPR1L registr efektivnì zajiuje 16bitovou programovatelnou periodu pro jednotku Timer1/Timer3. Jednotku CCP1 lze pouít rovnì pro sputìní A/D pøevodu. Vynulování Timer1/Timer3 nevede nikdy k nastavení pøíznaku pøeteèení tìchto jednotek.
18.4
ROZÍØENÝ REIM PWM
Rozíøený PWM reim poskytuje irí monosti generování PWM signálu ne klasická jednotka CCP. Je moné zvolit polaritu signálu (zda je aktivní v log. 1 nebo v log. 0) pomocí bitù P1M1:P1M0 a CCP1M3:CCP1M0 z registru CCP1CON. Obr. 18.4 ukazuje zjednoduené blokové schéma PWM jednotky. Vechny øídicí registry jsou dvojitì bufferované a k aktualizaci dochází vdy na zaèátku PWM cyklu aby se zabránilo zákmitùm výstupù. Výjimkou je registr zpodìní PWM1CON, který se nahrává buï na konci aktivní fáze nebo na konci periody. Bufferování vede k tomu, e prùbìhy PWM výstupù nejsou stejné jako u bìné PWM jednotku (napøíklad u PIC18F452), ale vzniká zpodìní v délce jednoho instrukèního cyklu. Pro povolení funkce výstupù je tøeba správnì konfigurovat registr TRISB. UHJLVWUVW tG\
'&%'&%
3030
&&30&&30
&&35/
3$&&3 75,6% ELW
&&35+ 5
4
6
705
YêVWXSQt DGLþ
75,6% ELW
75,6% ELW
QXORYiQtþDVRYDþH YêYRGX&&3 S HSLV&&35+KRGQRWRX&&35/
35
3%
3&
3'
75,6% ELW
Obr. 18.4
212
Blokové schéma pro reim PWM
3:0&21
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
Perioda PWM Perioda PWM signálu je urèena hodnotou uloenou v registru PR2. Periodu PWM lze vypoèítat takto: TPWM = (PR2 + 1) · 4 · TOSC · (pøeddìlièka TMR2), kmitoèet je tedy: I3:0
73:0
V okamiku hodinového cyklu následujícího po shodì TMR2 = PR2 budou provedeny tyto akce: n
TMR2 bude vynulován,
n
vývod CCP1 bude uveden do log. 1 (vyjma pøípadu, e støída je 0; tedy je CCP1 stále v log. 0),
n
hodnota støídy je pøepsána z CCPR1L do CCPR1H.
Støída PWM Støída je urèena 10bitovou hodnotou CCPR1L:DC1B1:DC1B0. Registr CCPR1L obsahuje nejvyích 8 bitù, DC1B1:DC1B0 obsahují nejnií 2 bity. Pro výpoèet doby trvání aktivní èásti periody (støídy v èasovém mìøítku) lze pouít vzorec: doba aktivní èásti (CCPR1L:DC1B1:DC1B0) · 4 · TOSC · (pøeddìlièka TMR2). Pokud bude aktivní èást delí ne perioda PWM, nedojde k vynulování vývodu CCP1. Zùstane stále v log. 1. Hodnotu do CCPR1L:DC1B1:DC1B0 lze zapsat v libovolném èasovém okamiku, k pøepisu do CCPR1H dojde vdy na konci periody. V PWM reimu lze registr CCPR1H pouze èíst. Této technice se øíká dvojité bufferování, je nezbytná pro zabránìní vzniku zákmitù pøi nesynchronizované zmìnì parametrù PWM. Maximální rozliení PWM v bitech pro daný kmitoèet PWM lze stanovit pomocí vztahu:
UR]OLãHQt 3:0 Tab. 18.4
I ORJ ⎛⎜ 26& ⎝ I3:0 ORJ
⎞ ⎟ ⎠ ELW
Pøíklad kmitoètù PWM a rozliení pøi hodinovém kmitoètu 40 MHz
I3:0>N+]@ 3 HGG OLþNDþDVRYDþH 35KRGQRWD 0D[LPiOQtUR]OLãHQtELW\
[))
[))
[))
[) [) [
Konfigurace PWM výstupu Bity P1M1:P1M0 registru CCP1CON umoòují konfigurovat výstup rozíøené jednotky PWM do tìchto ètyø variant (viz obr. 18.5): n
jednoduchý výstup (kompatibilní se standardním PWM výstupem),
n
výstup typu polovièní mùstek,
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
213
n
výstup typu plný mùstek, pøímý reim,
n
výstup typu plný mùstek, reverzní reim.
Obr. 18.5 platí pro reim aktivní v log. 1 (CCP1M3:CCP1M0 = 1100). Interval td zaøazený v reimu polovièního mùstku odpovídá intervalu mrtvého pásma nastaveného pomocí registru PWM1CON. VW tGD SHULRGD 3030
3$PRGXORYiQ
MHGQRGXFKêYêVWXS WG
3$PRGXORYiQ
3030 SRORYLþQtP VWHN
WG 3%PRGXORYiQ
3$DNWLYQt 3030 FHOêP VWHN
S tPêUHåLP
3%QHDNWLYQt 3&QHDNWLYQt 3'PRGXORYiQ
3030 FHOêP VWHN
3%PRGXORYiQ
UHYHU]QtUHåLP
3&DNWLYQt
Obr. 18.5
3$QHDNWLYQt
3'QHDNWLYQt
Èasové prùbìhy PWM výstupù
Polovièní mùstek (H mùstek) V reimu polovièního mùstku se pouívají dva výstupní signály: P1A (klasický PWM výstup) a P1B (komplementární výstup). Zátì je mono budit pomocí dvou spínacích tranzistorù v podobì polovièního mùstku (viz obr. 18.6) nebo pomocí ètyø spínacích tranzistorù v podobì plného mùstku (viz obr. 18.7).
214
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
Obvod dle obr. 18.6 nechá protékat proud zátìí ve smìru zleva doprava pøi sepnutí tranzistoru T1 (aktivaci výstupu P1A). Naopak pøi sepnutí tranzistoru T2 (aktivaci výstupu P1B) bude proud zátìí protékat ve smìru zprava doleva. Budièe tranzistorù zajistí plný rozkmit signálu dle napájecího zdroje zátìe. 7
EXGLþ
8
3$ ]iW å 7
EXGLþ
8
3%
Obr. 18.6
±
±
Pøíklad zapojení standardního polovièního mùstku (nutné dva zdroje)
Obvod dle obr. 18.7 vystaèí s jedním napájecím zdrojem. Proud protéká zátìí ve smìru zleva doprava pøi souèasném sepnutí tranzistorù T1 a T4 (aktivaci výstupu P1A). Naopak pøi souèasném sepnutí tranzistorù T2 a T3 (aktivaci výstupu P1B) bude proud zátìí protékat ve smìru zprava doleva. Budièe tranzistorù zajistí plný rozkmit signálu dle napájecího zdroje zátìe.
7
7
EXGLþ
EXGLþ
3$
]iW å 7 EXGLþ
8
7 EXGLþ
±
3%
Obr. 18.7
Pøíklad zapojení celého mùstku øízeného signály polovièního mùstku (jeden zdroj)
V reimu polovièního mùstku je moné nastavit mrtvý interval td, aby se vylouèilo souèasné sepnutí tranzistorù v totemu (T1 a T2 pøípadnì i T3 a T4 a tedy i zkrat napájecího zdroje). Tento interval se nastavuje pomocí registru PWM1CON. Tak je mono stanovit, kolik instrukèních cyklù má uplynout mezi vypnutím jednoho tranzistoru a zapnutím druhého tranzistoru v totemu. Situace je zøejmá z obr. 18.8.
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
215
VW tGD SHULRGD WG 3$
WG
3%
Obr. 18.8
Výstup PWM v reimu polovièního mùstku (signály aktivní v log. 1)
Plný mùstek V reimu plného mùstku se pouívají ètyøi výstupní signály, aktuálnì jsou vak vdy aktivní pouze dva z nich. V pøímém reimu je P1A stále aktivní a P1D je modulován. V reverzním reimu je P1C stále aktivní a P1B je modulován. Situace je zøejmá z obr. 18.5. V zapojení dle obr. 18.9 protéká proud zátìí ve smìru zleva doprava pøi sepnutí tranzistorù T1 a T4 (pøímý smìr). Proud zprava doleva protéká pøi sepnutí tranzistorù T3 a T2 (reverzní smìr). Øízení smìru mezi pøímým a reverzním zajiuje v reimu plného mùstku bit P1M1 z registru CCP1CON. Po zmìnì tohoto bitu dojde k pøepnutí smìru v následujícím
7
7
EXGLþ
EXGLþ
3$
]iW å 7 EXGLþ
8
7 EXGLþ
±
3%
3&
3'
Obr. 18.9
216
Pøíklad zapojení plného mùstku
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
PWM cyklu. Prùbìh pøepnutí ukazuje obr. 18.10. K pøepnutí smìru dojde jeden hodinový cyklus periody Timer2 pøed koncem periody, signál støídy bude sputìn a se zaèátkem nové periody. Reim plného mùstku neposkytuje mrtvý interval, v øadì pøípadù to není tøeba. Situace, kdy by byl mrtvý interval vhodný jsou: n
pøi zmìnì smìru PWM výstupu v pøípadì, e støída je blízko 100 % (dle obr. 18.9 a obr. 18.10 dojdeme ke zjitìní, e se mohou souèasnì sepnout napøíklad tranzistory T3 a T4 a totemem vpravo poteèe pøíèný proud),
n
vypínací èas tranzistorù (vèetnì budièe) je vìtí ne zapínací èas (opìt mùe dojít k neádoucímu soubìhu).
Uvedené problémy lze øeit buï pomocnými obvody nebo správným návrhem programu resp. zapojení: n
pøed pøepnutím smìru je dobré sníit hodnotu støídy,
n
pouít tranzistory a budièe, které zajistí krátké doby vypnutí (kratí ne doby zapnutí). SHULRGD
SHULRGD
3$ 3%
VW tGD
VW tGD
3&
3' MHGHQKRGLQRYêF\NOXV7LPHU
Obr. 18.10
Pøepnutí smìru (reim aktivní v log. 1)
Programovatelný mrtvý interval Polovièní mùstek pøináí potenciální nebezpeèí soubìného sepnutí horního i dolního tranzistoru v totemu (viz obr. 18.6 a obr. 18.7). Tento jev lze eliminovat vzájemným zpodìním aktivace pomocí programovatelného mrtvého intervalu (viz obr. 18.8). Pro nastavení mrtvého intervalu slouí spodních 7 bitù registru PWM1CON dle obr. 18.11. Interval je nastavitelný v rozsahu 0 a 127 strojních cyklù mikrokontroléru (pøipomeòme, e strojní cyklus trvá ètyønásobek hodinového cyklu). PWM auto-shutdown Výstupní vývody ECCP lze v reimu PWM konfigurovat jako auto-shutdown. Oznaèení Auto-shutdown znamená automatické odpojení vývodù. Po aktivaci vnìjí události pøejdou výstupy do pøeddefinovaných úrovní. Pro øízení tohoto reimu slouí registr ECCPAS dle obr. 18.12.
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
217
Pro volbu spoutìcího zdroje slouí bity ECCPAS2:ECCPAS0, jako zdroj lze zvolit vývody INT0, INT2 nebo INT1. Po aktivaci vybraného vstupu jsou dané výstupy okamitì uvedeny do pøednastavených hodnot dle stavu bitù PSSAC1:PSSAC0 a PSSBD1:PSSBD0. Po aktivaci auto-shutdown reimu mohou výstupu pøejít do log. 0, log. 1 nebo do tøetího stavu.
356(1
3'&
3'&
3'&
3'&
3'&
3'&
3'&
5:
5:
5:
5:
5:
5:
5:
5:
356(1±3:05HVWDUW(QDEOHELWSRYROHQtUHVWDUWX3:0 S LUHåLPXDXWRPDWLFNpKRY\SQXWt 356(1 ELW\(&&3$6(VHQXOXMtDXWRPDWLFN\MDNPLOHQDVWDQHVKXWGRZQ3:0VH UHVWDUWXMHDXWRPDWLFN\ 356(1 ELW\(&&3$6(VHPXVtQXORYDWSURJUDPRY 3'&3'&±3:0'HOD\&RXQWELWV]SRåG QtYSRþWXF\NO SRþHWVWURMQtFKF\NO PH]LSOiQRYDQêPRNDPåLNHPDNWLYDFHDVNXWHþQêPRNDPåLNHPDNWLYDFH
Obr. 18.11
Registr PWM1CON
(&&3$6( (&&3$6 (&&3$6 (&&3$6 5:
5:
5:
5:
366$&
366$&
366%'
366%'
5:
5:
5:
5:
(&&3$6(±(&&3$XWR6KXWGRZQ(YHQW6WDWXWVELWVWDWRYêELWDXWRVKXWGRZQ ±(&&3YêVWXS\SUDFXMt ±(&&3YêVWXS\MVRXRGVWDYHQ\ (&&3$6±(&&3$XWR6KXWGRZQELWRGVWDYRYDFtELW ±YêYRG,17QHPiYOLY ±ORJQD,17]S VREtRGVWDYHQt (&&3$6±(&&3$XWR6KXWGRZQELWRGVWDYRYDFtELW ±YêYRG,17QHPiYOLY ±ORJQD,17]S VREtRGVWDYHQt (&&3$6±(&&3$XWR6KXWGRZQELWRGVWDYRYDFtELW ±YêYRG,17QHPiYOLY ±ORJQD,17]S VREtRGVWDYHQt 366$&Q±3LQV$DQG&6KXWGRZQ6WDWH&RQWUROELWVVWDY3$D3&SRRGVWDYHQt ±YêYRG\3$D3&EXGRXYORJ ±YêYRG\3$D3&EXGRXYORJ [±YêYRG\3$D3&EXGRXYHW HWtPVWDYX 366%'Q±3LQV$DQG&6KXWGRZQ6WDWH&RQWUROELWVVWDY3%D3'SRRGVWDYHQt ±YêYRG\3%D3'EXGRXYORJ ±YêYRG\3%D3'EXGRXYORJ [±YêYRG\3%D3'EXGRXYHW HWtPVWDYX
Obr. 18.12
218
Registr ECCPAS
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
Po aktivaci reimu auto-shutdown je nastaven bit ECCPASE a tím indikuje aktivaci tohoto reimu. Pokud není povolen automatický restart (PRSEN = 0 z registru PWM1CON), lze bit ECCPASE nulovat pouze programovì. Pokud je povolen automatický restart (PRSEN = 1 z registru PWM1CON), dojde k vynulování bitu ECCPASE automaticky po tom, co pøíèina aktivace zanikne. Pokud je bit ECCPASE nastaven v okamiku, kdy PWM perioda zaèíná, zùstanou výstupy na pøednastavených hodnotách i v dalích periodách. Pøi vynulování bitu ECCPASE se výstupy vrátí do normální funkce na zaèátku nové periody. Zápis do bitu ECCPASE je odstaven, pokud je podmínka aktivace aktivní. Reim auto-shutdown lze konfigurovat s automatickým restartem. Restart provede dalí spoutìcí událost. Tuto monost povolíme nastavením bitu PRSEN z registru PWM1CON (viz obr. 18.11). Je-li PRSEN = 1, zùstane bit ECCPASE nastaven, dokud pøíèina aktivace trvá. Kdy pøíèina zanikne, je bit vynulován. Je-li PRSEN = 0, zpùsobí první aktivace nastavení bitu ECCPASE. Bit lze nulovat pouze programovì. Vynulování bitu ECCPASE vede k novému rozbìhu v sledující periodì PWM. Reim auto-shutdown lze vyvolat programovì nastavení bitu ECCPASE. Nastavení PWM reimu Jeliko mikrokontrolér ve stavu resetu uvádí vývody do tøetího stavu, musí vnìjí obvod pøi pouití PWM reimu zajistit pøipojení vnìjích pull-up nebo pull-down rezistorù tak, aby nedolo k neádoucímu sepnutí spínacích tranzistorù. Rezistor pull-up vytáhne linku do log. 1, rezistor pull-down stáhne linku do log. 0. Bity CCP1M1:CCP1M0 z registru CCP1CON umoòují volit aktivní úroveò pro spínání vnìjích tranzistorù. Tato polarita výstupu musí být nastavena pøed konfigurováním vývodù jako výstupù. Zmìna polarity v prùbìhu PWM cyklu mùe pokodit vnìjí obvod. Pro úspìnou konfiguraci modulu ECCP jako PWM je tøeba provést tyto operace: 1.
Konfigurace vývodù P1A a P1D jako vstupù nastavením odpovídajících bitù TRISB.
2.
Nastavení periody PWM pomocí registru PR2.
3.
Konfigurace reimu pomocí registru CCP1CON (výbìr reimu výstupù pomocí bitù P1M1:P1M0, výbìr polarity pomocí bitù CCP1M3:CCP1M0).
4.
Nastavení støídy pomocí CCP1RL:DC1B1:DC1B0.
5.
Pro polovièní mùstek je tøeba nastavit interval td pomocí registru PWM1CON.
6.
Pro auto-shutdown operaci je tøeba nastavit registr ECCPAS (výbìr zdroje pro aktivaci pomocí bitù ECCPAS2:ECCPAS0, volba pøednastavených hodnot výstupù pomocí bitù PSSAC1:PSSAC0 a PSSBD1:PSSBD0, nastavení bitu ECCPASE).
7.
Pro auto-restart operaci je tøeba nastavit bit PRSEN z registru PWM1CON.
8.
Konfigurace jednotky Timer2 pro sputìní PWM (vynulování bitu TMR2IF z registru PIR1, nastavení pøeddìlièky pomocí bitù T2CKPS2:0 z registru T2CON, spoutìní èasovaèe pomocí bitu TMR2ON z registru T2CON).
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
219
9.
Povolení PWM výstupù po startu nového PWM cyklu (poèkáme na pøeteèení jednotky Timer2 bit TMR2IF z registru PIR1 bude nastaven, povolení pøísluných výstupù pomocí registru TRISB, vynulování bitu ECCPASE z registru ECCPAS).
Práce v reimech sníené spotøeby V reimu Sleep jsou vechny zdroje hodin odstaveny, take ani Timer2 nemùe mìnit svùj obsah a generovat PWM signál. Hodnoty vybavené na výstupy zùstanou zachovány. V reimu PRI_IDLE je hlavní zdroj v èinnosti a jednotka ECCP pokraèuje v èinnosti. V ostatních reimech sníené spotøeby lze vybrat hodinový signál pro øízení Timer2. Je-li povolena jednotka Fail-Safe Clock Monitor a dojde k selhání hodin, pøepne se mikrokontrolér do reimu RC_RUN a nastaví se bit OSCFIF z registru PIR2. Jednotka ECCP je pak taktována ze zdroje hodin INTRC s velmi nízkým kmitoètem. Pomocí bitù IRCF2:IRCF0 pøi resetu lze povolit oscilátor INTOSC s vyím kmitoètem. Tab. 18.5 5HJLVWU ,17&21 5&21 3,5 3,( ,35 705 35 7&21 75,6% &&35/ &&35+ &&3&21 (&&3$6 3:0&21 26&&21 $'&21
Souhrn registrù spojených s reimem PWM a Timer2 %LW
%LW
*,( *,(+ ,3(1 ² ² ²
3(,( *,(/ ² $',) $',( $',3
²
%LW
%LW
%LW
%LW
%LW
%LW
705,(
,17,(
5%,(
705,)
,17,)
5%,)
² 5&,) 5&,( 5&,3
5, 7;,) 7;,( 7;,3
7, 3' 325 %25 ² &&3,) 705,) 705,) ² &&3,( 705,( 705,( ² &&3,3 705,3 705,3 REVDK7LPHU SHULRGD7LPHU 728736728736 70521 7&.367&.36 UHJLVWUVP UXGDWSRUWX% UHJLVWU&&3GROQtEDMW UHJLVWU&&3KRUQtEDMW '&%'&% &&30&&30
3030 (&& (&&3$6(&&3$6 3$6( 356(1 ,'/(1 ,5&),5&) 9&)*9&)* ²
366$&366$& 3'&3'& 2676 ,2)6 &+6&+6
+RGQRWD SR 325%25
+RGQRWDSR MLQêFK UHVHWHFK
[
X
TT [[[[[[[[ [[[[[[[[
TTTXX XXXXXXXX XXXXXXXX
366%'366%'
6&6 *2
TT
XXXXXXXX XXXXXXXX TT
6&6 $'21
Legenda: n x = neznámá hodnota, n u = hodnota se nezmìní, n edì vybarvené buòky nejsou v reimech rozíøené jednotky PWM pouity.
18.5
PØÍPRAVEK MBRIDGE
Pøípravek MBRIDGE umoòuje provést test PWM reimu plný mùstek. Schéma zapojení je uvedeno na obr. 18.13. Jádrem pøípravku jsou budièe IO1, IO2 typu TC428. Jedná se o budièe vyrábìné firmou Microchip s pracovním napìtím 4,5 a 18 V. Pomocí tìchto budièù lze snadno øídit unipolární tranzistory oznaèené TA a TD. Vzhledem k tomu, e pøi spínání smìrem k napájecímu napìtí je lepí pouívat tranzistor s kanálem P a pøi spínání smìrem k zemi je lepí pouívat tranzistor s kanálem N, byl vybrán právì dvojitý budiè TC428. Horní budiè je toti invertující (pøi log. 1 sepne tranzistor s P kanálem) a dolní budiè je neinvertující (pøi log. 1 sepne tranzistor s N kanálem). Pokud bychom nemìli tento typ budièe, nedal by
220
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
se pouít reim CCP1M3:CCP1M0 = 1100. Ale problém by se dal vyøeit volbou jiného reimu. Rezistory R1 a R4 pracují jako pull-down rezistory pro jednotlivé budièe. Je-li øídicí vývod ve tøetím stavu, definují na vstupu log. 0. Take jsou vechny tranzistory rozpojeny. ± . 7$
ELW 5
7%
ELW 5
& '
7&
/(' 5
,2 ,2
'
' &
/('3
& '
7'
.
,2 /('
' &
5
,2
ELW 5 ELW *1'
5
Obr. 18.13
Schéma zapojení pøípravku MBRIDGE
Kondenzátory C5 a C8 zajiují blokování napájecího napìtí (ve schématu nejsou uvedeny), jsou dùleité vzhledem k vysokým hodnotám pièkových odbìrù pøi pøepínání budièù. Napájecí napìtí je tøeba pøipojit na svorkovnici K1. Dioda D5 zajiuje ochranu pøípravku proti pøepólování. LED oznaèená LEDP indikuje pøipojení napájecího zdroje ve správné polaritì. Tranzistory TA a TC jsou s kanálem P typu IRF9530, tranzistory TB a TD jsou s kanálem N typu IRF530. Diody D1 a D4 jsou reverzaèní. Oba typy tranzistorù je mají zaintegrovány, ale pro pøípadný jiný typ tranzistorù jsou pøidány i jako vnìjí souèástky. Kondenzátory C1 a C4 potlaèují vysokofrekvenèní ruení. Výstup mùstku je vyveden na konektor K2. Diody oznaèené LED+ a LED indikují polaritu výstupu (jsou pøidány spíe pro informaci o aktuálním stavu). LED+ svítí, pokud jsou sepnuty TA a TD. LED svítí, pokud jsou sepnuty TC a TB.
Rozpis souèástek pro pøípravek MBRIDGE (cena asi 120 Kè): C1 a C4 C5, C6 C7 C8 D1 a D5 IO1, IO2
A
CK 10P CK 100N E2M2/50V E470M/25V 1N4004 TC428CPA+patice DIL08 Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
4 ks 2 ks 1 ks 1 ks 5 ks 2 ks
221
K1, K2 LED+, LED, LEDP P R1 a R4 R5, R6 TA, TC TB, TD
ARK500/2 LED 5MM MLW10G RR 10K RR 1K IRF9530PBF+chladiè DO1A IRF530PBF+chladiè DO1A
Obr. 18.14
Výkres desky ploných spojù pøípravku MBRIDGE (BEN 0252)
Obr. 18.15
Osazovací plánek (strana bìných souèástek, dvì drátové propojky)
222
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
2 ks 3 ks 1 ks 4 ks 2 ks 2 ks
A
18.6
PØÍKLAD È. 22
V tomto pøíkladu si ukáeme pouití pøípravku MBRIDGE pro regulaci otáèek motorku obìma smìry s pouitím PWM reimu plného mùstku. Pøíklad je konstruován podobnì jako pøíklad è. 21. Pøíklad je urèen pro mikrokontrolér PIC18F1220. Na port B pøipojíme pøípravek MBRIDGE (na svorky K1 jsme pøivedli napájecí napìtí 6 V a na svorky K2 jsme pøipojili malý motorek na 6 V). Na port A pøipojíme pøípravek MLEDSW. Nejdøíve je zvolen zdroj hodin. Pouijeme reim INTIO2 a pomocí registru OSCCON zvolíme taktovací kmitoèet 8 MHz. Pro øízení zmìny otáèek obìma smìry pouijeme promìnné hodnota (velikost støídy) a rezim (0 pøímý smìr, 1 reverzní smìr). Pro realizaci prodlevy ètení stavu tlaèítek pouíváme promìnnou d. Pøi inicializaci PWM postupujeme dle døíve uvedeného návodu. Nejdøíve pøepneme port B do vstupního reimu, nastavíme plnou 8bitovou periodu, PWM konfigurujeme jako plný mùstek v pøímém reimu, vypneme generování nastavením bitu ECCPASE, vynulujeme pøíznak TMR2IF, nastavíme výchozí hodnotu støídy a jednotku Timer2 konfiguruje s dìlièkou 1:4. Kmitoèet PWM je pak zhruba 1953 Hz. Programová smyèka vyèkává na pøeteèení Timer2, poté aktivujeme port B jako výstupní a vynulujeme bit ECCPASE. Tím je PWM jednotka inicializována. Pro správnou konfiguraci portu A musíme pouít nejen registr TRISA, ale souèasnì musíme pøepnout vývody portu A z analogového do digitálního reimu pomocí registru ADCON1 (viz kapitolu 4.3 a kapitolu 12.1). Následnì se rozbíhá cyklus, který sleduje stav tlaèítek. Realizace je velmi podobná jako v pøíkladu è. 21. Rozdíl vak spoèívá v pøepínání reimu mezi pøímým a reverzním smìrem. Pøi pøímém reimu (rezim = 0) vede stisk tlaèítka na bitu RA0 ke zvýení støídy a stisk tlaèítka na bitu RA1 ke sníení støídy. Pøi reverzním reim (rezim = 1) je funkce tlaèítek obrácená. Tento postup je zvolen proto, aby pøi sniování støídy dolo postupnì k pøechodu z pøímého do reverzního reimu (od maxima v pøímém smìru pøes nulu do maxima v reverzním smìru). A podobnì pøi zvyování støídy byl opìt hladký pøechod mezi reverzním a pøímým reimem. Reim se pøepíná pøi dosaení nulové støídy. Tlaèítky bit0 a bit1 na pøípravku MLEDSW lze tedy regulovat otáèky motorku obìma smìry. PROG_22.C: #include
#pragma config OSC = INTIO2 #pragma config WDT = OFF void main() {
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
223
unsigned d; unsigned char rezim=0,hodnota=50; OSCCON=0b01110011; //8 MHz TRISB=255; PR2=0xFF; CCP1CON=0b01001100; ECCPAS=0b10000000; PIR1bits.TMR2IF=0; CCPR1L=hodnota; T2CON=0b00000101;
//vstupy //perioda //konfigurace PWM //ECCPASE=1 //nulovani TMR2IF //strida //konfigurace Timer2
while(PIR1bits.TMR2IF==0); TRISB=0; //vystupy ECCPAS=0b00000000; //ECCPASE=0 TRISA=255; ADCON1=0b01111111; while(1) { if(PORTAbits.RA0==0 && rezim==0 && hodnota<255) hodnota++; if(PORTAbits.RA0==0 && rezim==1 && hodnota>0) hodnota--; if(PORTAbits.RA1==0 && rezim==0 && hodnota>0) hodnota--; if(PORTAbits.RA1==0 && rezim==1 && hodnota<255) hodnota++; if((PORTAbits.RA0==0 || PORTAbits.RA1==0) && hodnota==0) rezim=!rezim; CCPR1L=hodnota; CCP1CONbits.P1M1=rezim; for(d=0;d<1000U;d++); } }
224
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A