Čítače a časovače

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání

Verze z 21. 3. 2010, 00:02

V minulé úloze jsme regulaci otáček motoru ventilátoru řešili pomocí softwarově časované pulsně šířkové modulace. Nevýhody jsou zřejmé - procesor stále běží a je zatěžován nepřetržitým "nicneděláním", doba trvání pulsů je obtížně nastavitelná a ovlivněná vyvoláváním přerušení apod. Přitom se nabízí využít další část logiky zabudované do mikroprocesoru, blok čítačů a časovačů. Ten obsahuje dva 8-bitové a jeden 16-bitový čítač/časovač s předděliči kmitočtu a komparátory hodnot, na ně je navázáno celkem 6 kanálů PWM. Jednotlivé kanály se v možnostech mírně liší, princip popisovaný dále pro 8-bitový kanál 0 je ale stejný.

Základní vlastnosti

Hlavní částí každého čítače/časovače je jednotka programovatelného čítače TCNTn, taktovaná buď hodinovým signálem procesoru vyděleným nastavitelným předděličem, nebo externím zdrojem hodinového signálu. Výstup čítače je nepřetržitě porovnáván s hodnotou uloženou v Output Compare Register (OCRnx, např. OCR0A, OCR0B, 1A...). Výsledek porovnání lze použít pro PWM na výstupech Output Compare (OCnx, např. OC0A, OC0B, ...). V okamžiku shody stavu čítače a registru OCRnx je také nastavován příznak Compare Flag (OCFnx, tj. OCF0A až OCF2B), to lze využít pro vytváření požadavku na přerušení.


Čítač/časovač múže být nastaven pomocí nastavení registrů WGMn a COMnx, Waveform Generation mode a Compare Output mode na jeden za 4 módů, detaily je třeba hledat v datasheetu v sekcích Counter/Timer0, 1, 2:

Normal Mode, (WGM02:0 = 0) Je nejjednodušší mód, čítač čítá vždy nahoru, po přetečení přes 0xFF pokračuje opět od 0x00 a při přetečení do nuly nastaví příznak přetečení Timer/Counter Overflow Flag (TOV0). Přerušení může vyvolávat i výstupní komparátor.

Clear Timer on Compare Match (CTC) Mode, (WGM02:0 = 2) V tomto módu je registr OCR0A použit ke změně počtu stavů čítače, nastavuje koncovou hodnotu, po jejímž dosažení je čítač vynulován a znovu čítá od nuly, v tu chvíli také nastaví příznak přetečení Timer/Counter Overflow Flag (TOV0).

Fast PWM Mode, (WGM02:0 = 3 or 7) Tento mód dovoluje generovat PWM výstup, čítač čítá od nuly do maxima (0xFF pro WGM2:0 = 3, a OCR0A pron WGM2:0 = 7) a potom přejde opět do stavu 0x00, porovnávací jednotka umožňuje generovat na výstupech OCOx PWM signály.

Phase Correct PWM Mode, (WGM02:0 = 1 or 5) Mód je podobný předchozímu, liší se tím, že čítač po dosažení nejvyšší hodnoty čítá zpět ke své nejnižší hodnotě, tím vytváří přesně symetrický výstup.

Příklad

Pro náš účel regulace ventilátoru využijeme mód Fast PWM, při kterém čítač čítá od nuly do maxima (0xFF pro WGM2:0 = 3, a OCR0A pron WGM2:0 = 7), nabízí se časovač 0 s výstupem OC0A, ten sdílí pin č. 12 s momentálně nepotřebným portem PD6. S maximem čítače nastaveném na 0xFF máme rozlišení 256 stupňů regulace, to je pro tyto účely zcela zbytečné, navíc při hodinovém kmitočtu mikroprocesoru 1 MHz bude frekvence PWM signálu zhruba 6x nižší než požadovaných 25 kHz, při předděliči nastaveném na 1 dostaneme 1 MHz/256=3,9 kHz. Pokud ale nastavíme mód s WGM2:0 = 7, můžeme zapsat koncovou hodnotu čítače do OCR0A a její volbou získáme požadovaný kmitočet 25 kHz pro PWM, 1 MHz/25 kHz=40. K dispozici máme rozlišení 40 stupňů regulace, to bohatě stačí. Mírný problém nastane pouze s požadavkem na nulovou hodnotu výstupu, dle datasheetu se na výstupu při nastavení na nulu bude objevovat úzká špička. Pokud by to vadilo, lze pro tento případ odpojit od vývodu procesoru časovač a nulu nastavit na patřičném bitu paralelního portu PD6.

Osobní nástroje