SVETELEKTRO

10. decembra 2012   Verzia pre tlač Verzia pre tlač

Programujeme AVR v jazyku C – 11. časť


zawin

Režimy spánku mikropočítača, minimalizovanie spotreby, ukážkové príklady

Režimy spánku

Režimy so zníženou spotrebou umožňujú vypnúť práve nepoužívané periférie mikrokontroléra a tým znížiť spotrebu zariadenia. Mikrokontrolér ponúka viacero režimov so zníženou spotrebou a tak umožňuje užívateľovi redukovať spotrebu energie v závislosti na požiadavkách aplikácie.
Režimy spánku využijeme hlavne v aplikáciách, pri ktorých je mikrokontrolér napájaný z batérie. Tam môžeme využitím vhodného režimu spánku niekoľkonásobne zvýšiť výdrž batérie.
 

Popis registrov

Ak chceme využiť ľubovoľný z piatich úsporných režimov, potom bit SE v MCUCR registri musí byť nastavený na hodnotu 1. Výkonom inštrukcie SLEEP prejde MCU do zvoleného úsporného režimu. Hodnoty bitov SM2, SM1 a SM0 v registri MCUCR definujú, ktorý z piatich možných režimov bude aktivovaný. Ak sa v priebehu úsporného režimu vyskytne povolené prerušenie MCU prejde do aktívneho stavu. V tomto prípade MCU bude na 4 hodinové cykly zastavená a po nábehovom čase sa realizuje príslušná obsluha prerušenia. Po obsluhe prerušenia bude MCU pokračovať vo výkone programu, inštrukciou nasledujúcou za inštrukciou SLEEP. Obsah pola univerzálnych registrov a pamäte SRAM ostáva nezmenený. Register MCUCR obsahuje riadiace bity pre riadenie spotreby.
 
MCUCR:

 
Bit 7 – SE: Sleep Enable
 
Ak bit SE je nastavený na hodnotu 1, potom je povolené vykonanie inštrukcie SLEEP. Vhodné je nastaviť bit SE práve pred inštrukciou SLEEP.
 
Bity 6, 4 – SM2 . . 0 Sleep Mode Select 2, 1 a 0
 
Pomocou bitov SM2, SM1 a SM2 je možné zvoliť jeden z piatich úsporných režimov MCU podľa Tab. 1
 

SM2 SM1 SM0 Úsporný režim
0 0 0 Idle
0 0 1 ADC noise reduction
0 1 0 Power-down
0 1 1 Power-save
1 0 0 Rezervované
1 0 1 Rezervované
1 1 0 Standby(1)

(1)   Standby režim je možné využiť len s externým kryštálom, alebo rezonátorom
Tab.1 Režimy spánku MCU
 

Popis režimov spánku

 

Idle mode, režim nečinnosti

Ak bity SM2..0 sú nastavené na hodnotu 000, potom realizácia inštrukcie SLEEP spôsobí, že MCU prejde do režimu nečinnosti. V tomto režime je zastavená činnosť CPU, ale SPI, USART, analógový komparátor, ADC, TWSI, čítače/časovače, watchdog a prerušovací systém pokračujú v činnosti. Je zrejmé, že v tomto režime je zastavený hodinový signál clkCPU a clkFLASH. Z režimu nečinnosti sa MCU dostane na základe  výskytu žiadosti o prerušenie od povolených interných a externých zdrojov prerušenia.
  

ADC noise reduction mode, režim redukcie šumu

Ak sú bity SM0..2 nastavené na hodnotu 001, potom realizácia inštrukcie SLEEP spôsobí, že MCU prejde do režimu redukcie šumu. Tento režim zastaví CPU a niektoré I/O obvody. V režime redukcie šumu budú zastavené nasledovné hodinové signály: clkIO, clkCPU a clkFLASH. Toto spôsobí zníženie úrovne šumu generovaného digitálnymi obvodmi a zvýši sa presnosť A/D prevodu. Z režimu redukcie šumu sa MCU dostane na základe výskytu žiadosti o prerušenie od nasledovných povolených zdrojov: koniec ADC prevodu, externý reštart, watchdog reštart, Brown-out reštart, TWSI zhoda adresy, čítač/časovač2, SPM a EEPROM pripravené a externé prerušenia na úroveň INT0 a INT1.
 

Power-down mode, režim zo zníženou spotrebou  

Ak sú bity SM0..2 nastavené na hodnotu 010, potom realizácia inštrukcie SLEEP spôsobí, že MCU prejde do režimu so zníženou spotrebou. V tomto režime je zastavený externý oscilátor. Externé prerušenia, TWSI a watch-dog pokračujú v činnosti. Z režimu so zníženou spotrebou sa MCU      dostane na základe výskytu žiadosti o prerušenie od nasledovných povolených zdrojov: externý reštart, watchdog reštart, Brown-out reštart, TWSI zhoda adresy a externé prerušenia na úroveň INT0 a INT1. V tomto režime sú pozastavené generátory hodinových signálov a v činnosti zostávajú len asynchrónne pracujúce moduly.
  

Power-save mode, režim s úspornou spotrebou

Ak sú bity SM0..2 nastavené na hodnotu 011, potom realizácia inštrukcie SLEEP spôsobí, že MCU prejde do režimu s úspornou spotrebou. Tento režim je identický s predchádzajúcim režimom so zníženou spotrebou s nasledovnou výnimkou: Ak čítač/časovač2 pracuje asynchrónne (bit AS2 v ASSR je nastavený), bude v tomto režime aktívny a v prípade výskytu žiadosti o prerušenie prejde MCU do aktívneho stavu. Ak nie je povolená asynchrónna činnosť čítača/časovača2 odporúča sa používať režim so zníženou spotrebou. V tomto režime sú pozastavené všetky hodinové signály s výnimkou clkASY.

Standby mode, pohotovostný režim

Ak sú bity SM0..2 nastavené na hodnotu 110 a CPU využíva ako zdroj hodinového signálu generátor s externým kryštálom/rezonátorom, potom realizácia inštrukcie SLEEP spôsobí, že MCU prejde do pohotovostného režimu. Tento režim je identický s režimom so zníženou spotrebou s výnimkou, že oscilátor zostáva v činnosti. Z tohto režimu MCU prechádza do aktívneho režimu v priebehu 6 hodinových periód.
           

 Tab. 2 – Popis jednotlivých režimov spánku
 

Minimalizácia spotreby

Pri minimalizovaní spotreby mikropočítača sa snažíme v maximálnej miere využiť možnosti režimov spánku, ktoré nám mikropočítač ponúka. Niektoré periférie mikropočítača však potrebujú osobitné nastavenie, ak požadujeme znížiť spotrebu do maximálnej možnej miery.
 
Ďalšie možnosti zníženia spotreby teda sú:
–          Vypnúť AD prevodník pomocou (bit ADEN v registri ADCSRA)
–          Vypnúť Analógový komparátor (bit ACD v registri ACSR)
–          Vypnúť Brown-out Detect (nastavenie BODEN v poistkách)
–          Vypnúť  Watch-dog timer (bit WDE v registri WDTCR)
 
Na spotrebu mikropočítača nielen v režimoch spánku má najväčší vplyv frekvencia hodinového signálu a pracovné napätie. Preto sa snažíme voliť kompromis medzi výkonom a spotrebou mikropočítača.
 
V  tabuľke č. 3 som meraním zisťoval spotrebu mikropočítača v rôznych režimoch činnosti. Ako zdroj hodín som využíval interný RC oscilátor s rôznou frekvenciou. Počas merania bol vypnutý Brown-out detektor, AD prevodník, Watchdog-timer a Analógový komparátor.
 
Najväčší vplyv na spotrebu vo všetkých režimoch činnosti mal AD prevodník, ktorý odoberal po zapnutí prúd 0,3mA.
 
 

Režim spánku Napätie Oscilátor Spotreba
Bez spánku 5V 1MHz 3,4mA
Bez spánku 5V 8MHz 11,4mA
Bez spánku 3,3V 1MHz 1,63mA
Bez spánku 3,3V 8MHz 5,3mA
Idle 5V 1MHz 2,5mA
Idle 5V 8MHz 6,8mA
Idle 3,3V 1MHz 0,6mA
Idle 3,3V 8MHz 2,9mA
Power Down 5V 8MHz 0,7uA
Power Save 5V 8MHz 0,7uA

Tab. 3 – Meranie spotreby MCU ATMega8 v rôznych režimoch 

Vidíme teda, že najmenšiu spotrebu dosiahneme s režimami Power Down alebo Power Save.
 
 

Praktická realizácia režimov spánku u mikropočítača

 
Priamo na prácu s režimami spánku slúži knižnica (avr/sleep.h), ktorú som využíval aj v nasledovných príkladoch.
 
Pomocou funkcie set_sleep_mode(<mode>); nastavíme cez parameter funkcie požadovaný režim spánku a funkciou sleep_mode (void); daný režim spánku aktivujeme.
 
Schéma zapojenia:
 

 

Príklad č. 1:
Nastav externé prerušenie generované dobežnou hranou signálu a prejdi do režimu spánku – Idle mód. Po zobudení rozsvieť po 2sec LED.
 
Zdrojový kód:
 
 
Youtube video:
 
 
Príklad č. 2:
Nastav externé prerušenie generované nízkou úrovňou signálu, prejdi do režimu spánku – Power Down. Po zobudení rozsvieť po 2sec LED.
Pozn.: Pri režimoch spánku ,okrem režimu Idle, je možné použiť externé prerušenie jedine v režime, keď je generované nízkou úrovňou signálu. Preto po zobudení musíme zakázať externé prerušenia, nakoľko inak by mikropočítač po zobudení neustále generoval prerušenia pokiaľ by bola nízka úroveň signálu.
 
Zdrojový kód:
 
Youtube video:

Ďakujem všetkým čo sa podielali na tejto časti seriálu.

Ako sa vám páčil tento článok?
  • Páči sa mi (0)
  • Súhlasím (0)
  • Zábavné (0)
  • Informatívne (0)
Najnovšie články od zawin (zobraziť všetky)

Pridaj komentár