KURS19

Kurs Arduino #19: Oszczędzanie energii

Cześć,
dzisiejsza część kursu będzie nietypowa, nie będziemy omawiać żadnych modułów, co jak do czego podłączyć… Dzisiaj porozmawiamy o tym, jak zrobić by nasze Arduino, bądź projekt oparty na Arduino był bardziej „Eko”. Zapraszamy do czytania :)

Spis treści:

  1. Tryby pracy ATMega328 oraz omówienie pokrótce
  2. Pobór prądu przez Arduino UNO oraz same ATMega328, przyczyny różnic
  3. Podstawowe funkcje
  4. Przykładowy program #1: Usypianie/Budzenie po przez zewnętrzne przerwanie
  5. Przykładowy program #2: Usypianie/Budzenie po przez wbudowany Watchdog

Co będziemy potrzebować:

  • Arduino UNO, albo ATMega328
  • bibliotekę Low Power
  • amperomierz
  • diodę LED
  • rezystor 220 ohm
  • przycisk typu Tact-switch
  • rezystor 470 ohm

 

1. Tryby pracy ATMega328 oraz omówienie pokrótce

W nocie katalogowej ATMega328 możemy znaleźć taką tabelę:

tabela

Jak widać jest ona podzielona na kolumny i rzędy. W kolumnach przedstawione są dane peryferia mikrokontrolera, natomiast w rzędach przedstawiono dostępne tryby zasilania.

Dostępne opcje zasilania:

  • Idle: stan jałowy mikrokontrolera
  • ADC Noise Reduction: „Tryb Idle” lecz z redukcją zakłóceń, co przekłada się na większość dokładność pomiarów ADC
  • Power-down: tryb maksymalnego oszczędzania energii, gdzie wykorzystywana jest tylko minimalna liczba peryferiów, potrzebna do wznowienia pracy mikrokontrolera
  • Power-save: tryb oszczędzania energii. Pobór prądu trochę większy niż przy Power-down, ale nie większy niż przy ADC Noise Reduction
  • Standby: pobór prądu nie większy niż Power-save
  • Extended Standby: Rozszerzony tryb Standby o parę peryferiów, ale nie przekraczający poboru prądu trybu Power-save

Podział peryferiów:

  • Active Clock Domains: aktywne źródła zegarowe
  • Oscillators: Oscylatory
  • Wake-Up Sources: Źródła wybudzania mikrokontrolera, tudzież aktywne peryferia mikrokontrolera

Dokładny opis opcji zasilania:

Idle:
Po przejściu w ten tryb, mikrokontroler przechodzi w stan wstrzymania, lecz peryferia takie jak SPI, USART, komparatory analogowe, ADC, I2C, Timer/Counter , watchdog, system przerwań działają. Zatrzymywane są sygnały zegarowe z clkCPU i clkFLASH. Aby powrócić do wcześniejszego stanu, na mikrokontroler musi być podane przerwanie (interrupt) z któregoś z wyżej wymienionych peryferiów, czy to przez zewnętrzne przerwanie czy też z „wewnątrz” od Timera czy licznika.

ADC Noise Reduction:
Po przejściu w ten tryb, mikrokontroler przechodzi w stan wstrzymania, lecz peryferia takie jak ADC,  zewnętrzne przerwanie, I2C, Timer/Counter2 oraz watchdog działają. Zatrzymywane są sygnały zegarowe z clkI/O, clkCPU i clkFLASH. Dzięki temu trybowi jesteśmy w stanie dokonywać dokładniejszych pomiarów ADC (odblokowanie wyższej rozdzielczości). ADC przechodzi automatycznie w dokładniejszy zakres pomiarowy po przejściu w ten tryb zasilania. W tym trybie Timer i Counter2 będą działać tylko w trybie asynchronicznym. Aby wyprowadzić mikrokontroler z tego trybu należy podać przerwanie na pin INT0, INT1 albo jakikolwiek piny zdefiniowany jako pin przerwań (pin change interrupt).

Power-down:
Po przejściu w ten tryb, mikrokontroler przechodzi w stan „snu”, lecz peryferia takie jak I2C,Watchdog i piny zewnętrznych przerwań działają. Zatrzymywane są wszystkie sygnały zegarowe oraz zewnętrzne oscylatory, przez co mikrokontroler działa tylko na wbudowanych układach asynchronicznych. Mikrokontroler może być tylko wybudzony po przez reset (z pinu 1.) albo przerwanie wysłane z Watchdoga, po przez BoR, I2C bądź zewnętrzne przerwanie z pinu  INT0, INT1 albo jakiegokolwiek pinu zdefiniowanego jako pin przerwań (pin change interrupt). Po przebudzeniu, powstaje opóźnienie w przejściu do zwykłego trybu, aby źródła zegarowe mogły się zrestartować, ponieważ brak resetu miałby wpływ na stabilność pracy układu.

Power-save:
Po przejściu w ten tryb, mikrokontroler przechodzi w stan „snu”. Uruchomione peryferia to te same co w trybie Power-down wraz z Timer/Counter2. Timer/Counter2 może być taktowany zarówno synchronicznie jak i asynchronicznie. Jeżeli nie korzystamy z Timer/Counter2 to zalecany jest tryb Power-down.

Standby:
Po przejściu w ten tryb, mikrokontroler przechodzi w swoisty Standby. Peryferia pracują te same co w trybie Power-down wraz z oscylatorami. Z tego trybu, mikrokontroler wychodzi w 6 cykli zegarowych.

Extended Standby:
Po przejściu w ten tryb, mikrokontroler przechodzi w swoisty Standby. Peryferia pracują te same co w trybie Power-save wraz z oscylatorami. Z tego trybu, mikrokontroler wychodzi w 6 cykli zegarowych.

  • Radosław Józef Ziomber

    Czasowe usypinie (zamiast delay()) mozna realizowac rowniez biblioteka Narcoleptic.h

    http://github.com/rcook/narcoleptic

    • Jest wiele bibliotek typu Low Power, ale w tym poradniku chcieliśmy przedstawić taki, która skupia jak najwięcej opcji oszczędzania energii :)