MSP430_uC_dla_oszczedzajacych_energie.pdf

(1938 KB) Pobierz
084-088_contrans.indd
Dodatkowe materiały
do artykułu
publikujemy na CD-EP
MSP430
µC dla oszczędzających energię
Zagadnienie energooszczędności
urządzeń elektronicznych
niezmiennie pozostaje w centrum
zainteresowania. Nosimy przy
sobie masę elektronicznych
zabawek, których postępująca
miniaturyzacja objęła również
źródła energii. Wokół czyha
sieć inteligentnych czujników,
bezprzewodowych transmiterów
i podobnych gadżetów, których
nowoczesność mierzy się
miesiącami pracy bez wymiany
baterii. Świat oszczędza energię.
cięzcą MSP430. Gdyby jednak su-
miennie policzyć wydajność obli-
czeniową każdego z konkurentów,
bezapelacyjnie wygrałby nowoczes-
ny produkt Intela. Zawdzięcza to
nowoczesnemu procesowi technolo-
gicznemu i obniżeniu napięcia za-
silania. Jednak to MSP430 uważany
jest w tym gronie za mikroprocesor
energooszczędny – nie technologia
jest najważniejsza. Co jeszcze o tym
decyduje? Jakie parametry pozwalają
na taką klasyfikację? I w końcu, jak
zbudować urządzenie bateryjne?
Struktura CMOS, a w takiej
technologii produkuje się dzisiaj
mikrokontrolery, prawie nie pobiera
prądu w stanie statycznym. Przyj-
muje się też, że pobór prądu wzra-
sta w przybliżeniu liniowo wraz ze
wzrostem częstotliwości przełącza-
nia. Wynika z tego, że wzrost szyb-
kości obliczeniowej musi pociągnąć
za sobą wzrost poboru prądu. Za-
tem redukcja szybkości pracy na
pewno przyniesie oszczędność ener-
gii. I to jest recepta druga.
Wiele mikrokontrolerów można
spowolnić do częstotliwości kil-
kudziesięciu kHz i uzyskać pobór
prądu liczony w dziesiątkach mA.
Nie jest to jednak praktyczne roz-
wiązanie – spowolniony system po-
trzebuje dużo czasu aby zareagować
na bodźce, a wszystkie operacje
ciągną się w nieskończoność. Może
zamiast spowalniać system, lepiej
będzie wyłączać go całkowicie?
Pomysł świetny, przynosi ogrom-
ne oszczędności, ale taki system
w ogóle przestaje reagować na oto-
czenie. Recepta druga też nie jest
optymalna.
A może złoty środek? Ow-
szem, wyłączyć należy wszystko,
co nie jest niezbędne, a pozostawić
w pełnej gotowości elementy odpo-
wiedzialne za reakcję na bodźce.
W razie konieczności cały system
rusza do działania.
Okazuje się, że najmniej po-
trzebną mikroprocesorowi do pracy
częścią jest... sam mikroprocesor,
a właściwie jego jednostka central-
na, która nie zawsze ma zadania
do wykonania, ponadto jest głów-
nym konsumentem energii. Recepta
trzecia – wyłączmy jednostkę cen-
tralną. Architektura, która pozwala
wyłączyć większość bloków i akcep-
tuje bezczynność jednostki central-
nej, pozwala budować najbardziej
energooszczędne aplikacje.
Wykorzystanie takiej architektury
implikuje również sposób budowa-
nia aplikacji, której zadaniem, to
nie żart, jest jak najdłuższe pozo-
stawanie w bezczynności.
Na pytanie, co sprawia, że nie-
które procesory zużywają mniej
prądu a inne więcej, niechybnie
padnie odpowiedź: energooszczęd-
ność mikroprocesora wynika z tech-
nologii, w jakiej został wykonany
– technologia jest receptą na ener-
gooszczędność.
Przykładowo mikroprocesor
80C286, wyprodukowany przez In-
tersil, będący oszczędną i szybką
wersją popularnego PC-towego proce-
sora, przy szybkości pracy 12 MHz
pobiera ok. 1,3 W mocy; procesor
CoreDuo o zegarze 1,8 GHz ok.
30 W; At89C2051 i Atiny2313 przy
szybkości 12 MHz – ok. 17 mW,
a MSP430F2131 przy szybkości
12 MHz – ok. 10 mW. Kto jest mi-
strzem oszczędności? Proste przeli-
czenie współczynnika poboru mocy
do szybkości taktowania czyni zwy-
MSP430 i energooszczędność
W procesorach MSP430 zawarto
szereg elementów pozwalających na
realizację powyższych recept. Jed-
nostka centralna jest odrobinę bar-
dziej oszczędna podczas pracy z peł-
ną szybkością niż większość proce-
sorów. Oszczędności nie są wielkie,
ale można liczyć na zmniejszenie
poboru energii o kilkanaście procent
bez większego wysiłku. Układy pe-
84
ELEKTRONIKA PRAKTYCZNA 8/2008
153199108.013.png 153199108.014.png
Rys. 1. Schemat systemu zegarowego procesora MSP430F149
istotne, w trybie HF praca generato-
ra jest nadzorowana, i w razie kło-
potów generowany jest sygnał Oscil-
lator Fault (OFIFG). Trzecie źródło
taktowania to generator XT2, który
działa tylko w trybie HF, a jego
praca jest również nadzorowana.
Przykładowy program nadzoru-
jący uruchomienie generatora XT2
w procesorze serii F4xx przedsta-
wiono na list. 1 . Program włącza
generator XT2 i po skasowaniu flagi
błędu generatora i odczekaniu oko-
ło 200 ms sprawdza, czy generator
poprawnie się uruchomił. Jeśli wy-
stąpił błąd, proces jest ponawiany.
Dopiero po poprawnym uruchomie-
niu sygnał XT2 jest kierowany do
taktowania systemu.
Wszystkie trzy sygnały mogą być
generowane jednocześnie i elastycz-
nie dołączane do szyn zegarowych
w trakcie działania programu. Cie-
kawe, że awaria sygnału taktującego
MCLK sterowanego kwarcem powo-
duje, że CPU jest przełączane na
taktowanie z DCO w celu kontynu-
acji pracy (np. wykonania próby po-
nownego uruchomienia generatora).
Z dostępnych sygnałów zegaro-
wych tworzone są trzy sygnały tak-
tujące: ACLK, MCLK i SMCLK.
Podstawowym sygnałem taktują-
cym jest sygnał zegarowy MCLK.
Służy on taktowaniu CPU i może
być wyłączany poleceniem progra-
mu. Jego źródłem może być każdy
z dostępnych generatorów. Sygnał
SMCLK służy taktowaniu peryfe-
riów: interfejsów, przetworników A/C
i liczników. Jego źródłem może być
DCO lub XT2 (XT1, gdy nie ma
XT2). Podobnie jak MCLK, może
on być wyłączony przez program.
Zwyczajowym źródłem taktowania
timerów (szczególnie do odmierza-
nia czasu) jest sygnał ACLK, który
w większości aplikacji współpracu-
ryferyjne można elastycznie konfigu-
rować, a także całkowicie wyłączyć.
Kluczowe są jednak dwa mechani-
zmy – rozbudowany system takto-
wania i system nadzorujący bezpo-
średnio redukcję mocy.
zacji FLL, sterowaną sygnałem od-
niesienia z generatora kwarcowego
LFXT1, co znacząco poprawia jego
precyzję. Generator LFXT1 (XT1)
jest obecny w każdym procesorze.
Posiada wbudowane kondensatory
i jest przystosowany do współpracy
przede wszystkim z zegarkowym re-
zonatorem kwarcowym (32768 Hz).
Kwarc zegarkowy ma tą zaletę, że
do pracy wymaga wyjątkowo małej
energii. Generator XT1 współpracuje
też z rezonatorem dużej częstotliwo-
ści i rezonatorem ceramicznym, ale
wtedy wymaga przełączenia w tryb
HF o większym zużyciu energii. Co
System taktowania
System taktowania obejmuje
trzy główne sygnały taktujące, któ-
re mogą pobierać sygnał zegarowy
z kilku źródeł. Służą one taktowa-
niu jednostki centralnej i liczników.
W procesorze istnieją jeszcze inne
generatory taktujące, ale nimi nie
będziemy się tutaj zajmować.
Na rys. 1 przedstawiono system
zegarowy procesora MSP430F149.
Sygnał taktujący można pobierać
z trzech niezależnych źródeł. Pod-
stawowe źródło, obecne w każdym
modelu procesora MSP430, to ge-
nerator DCO. W procesorach serii
F1xx nie jest on stabilizowany i je-
go dokładność nie jest lepsza niż
10%. Ponadto DCO jest podatny na
wpływ napięcia zasilania i tempera-
tury. Częstotliwość wyjściową gene-
ratora DCO można jednak regulować
w szerokim zakresie i z niewielkim
skokiem. W procesorach F4xx gene-
rator DCO jest objęty pętlą stabili-
List. 1
FLL_CTL1 &=~XT2OFF;
// włączenie generatora
do
// wykonaj w pętli
{
FLL_CTL0 &= ~XT2OF; // skasuj flagę błędu XT2
for (i = 50000; i; i--); // poczekaj na start generatora
}
while (FLL_CTL0 & XT2OF);
FLL_CTL1 = SELS+SELM1;
// sprawdź poprawność startu
Tab. 1. Ustawienia trybów pracy
Tryb pracy SCG0 SCG1 OSCOFF CPUOFF CPU MCLK SMCLK ACLK DCO
AM 0 0 0 0 T T T T T
LPM0 0 0 0 1 N N T T T
LPM1 0 1 0 1 N N N T warunkowo włączony
LPM2 1 0 0 1 N N N T częściowo wyłączony
LPM3 1 1 0 1 N N N T N
LPM4 1 1 1 1 N N N N N
ELEKTRONIKA PRAKTYCZNA 8/2008
85
// SMCLK, MCLK = HF xtal
153199108.015.png 153199108.016.png 153199108.001.png
je z generatorem LFXT1 i kwarcem
zegarkowym.
OSCOFF i CPUOFF, lecz
używa makr. Jest to
praktyczne i bardziej bez-
pieczne. Ustawienie in-
nej kombinacji bitów, niż
zawarte w tab. 1, może
spowodować nieprawid-
łowe działanie procesora.
Modyfikacja stanu rejestru
SR może być realizowa-
na przez program lub automatycznie
przez system obsługi przerwań w wy-
niku nadejścia przerwania, które to
wymaga obsługi. W takim wypadku
procesor zostaje wybudzony ze stanu
o niskim poborze energii do trybu
aktywnego, co najmniej na czas reali-
zacji podprogramu obsługi przerwania.
Jak wygląda taki mechanizm?
Realizacja podprogramu obsługi
przerwania rozpoczyna się skopiowa-
niem na stos licznika programu PC
oraz rejestru SR ( rys. 3 ). Następnie
bity odpowiedzialne za tryb pracy,
zlokalizowane w SR, są zapisywa-
ne takimi wartościami, jak dla trybu
aktywnego, w wyniku czego procesor
uruchamia wszystkie wyłączone ze-
gary i podejmuje pracę. Do licznika
programu zostaje załadowany adres
procedury pobrany z wektora prze-
rwania i rozpoczyna się realizacja
podprogramu obsługi przerwania. Po
zakończeniu podprogramu odtwarzana
jest poprzednia wartość licznika pro-
gramu PC i zawartość rejestru RS,
a procesor powraca do trybu pracy,
w jakim pozostawał przed
pojawieniem się przerwania.
Program z list. 2 działa
dokładnie według tego sche-
matu. Program jest przygoto-
wany tak, aby do pracy nie
wymagał rezonatora. Roz-
poczyna się zatrzymaniem
watchdog’a , który w MSP430
uruchamia się domyślnie po
starcie programu. Następnie
konfigurowany jest port P1
Redukcja poboru mocy
W procesorach rodziny MSP430
wyróżnia się pięć trybów pra-
cy o ograniczonym poborze energii.
O trybie pracy, w jakim pozostaje
procesor, decyduje zawartość rejestru
R2 ( tab. 1 ), pełniącego rolę rejestru
statusu (SR).
W trybie aktywnym AM ( Active
Mode ), gdy procesor działa z pełną
szybkością, pobór prądu wynosi ok.
280 mA przy 1 MHz ( rys. 2 ). Naj-
większy spadek poboru mocy osią-
gamy poprzez wyłączenie CPU (tryb
LPM0). Ponieważ jednak generator
DCO jest w pełni aktywny, pobór prą-
du jest nadal spory. W trybach LPM1
i LMP2, DCO jest wyłączony lub
częściowo wyłączony, co ogranicza po-
bór prądu do ok. 15 mA. Tryb LPM3
jest najszerzej używany w aplikacjach
o bardzo małym poborze prądu. Do
skutecznego użytkowania LPM3 ko-
nieczne jest działanie generatora XT1.
Włączenie trybu LPM3 i taktowanie
częstotliwością zegarkową daje świet-
ne rezultaty. Najniższym trybem pra-
cy jest LPM4, gdzie przy znikomym
poborze prądu, podtrzymywany jest
stan pamięci RAM, a procesor może
reagować na zewnętrzne przerwania
(np. od portów P1 i P2).
W praktyce programista nie operu-
je bezpośrednio bitami SCG0, SCG1,
Rys. 3. Algorytm podprogramu obsługi przerwania
(dołączona dioda LED) oraz licznik Ti-
merA tak, aby był taktowany z zegara
SMCLK, a pośrednio z DCO. Ostatnią
wykonaną instrukcją jest makro __
low_power_mode_0() , czyli instruk-
cja asemblera bis.w #CPUOFF,SR .
Procesor zatrzymuje się, a następujące
po niej makro _NOP() ( No Opera-
tion ) nigdy nie zostanie wykonane.
Przepełnienie licznika generuje prze-
rwanie o wektorze TimerA0_vector ,
w obsłudze którego występuje zmiana
stanu sygnału sterującego świeceniem
diody LED. W tym czasie procesor
pobiera ok. 280 mA prądu, a podczas
oczekiwania na nadejście przerwania
ok. 65 mA.
Gdy zachodzi potrzeba, aby
w wyniku nadejścia przerwania, zo-
stała wykonana też część programu
zlokalizowana np. w pętli głównej,
konieczne jest wykonanie dodatkowej
operacji, aby procesor pozostał aktyw-
ny również po zakończeniu obsługi
przerwania.
Operacja polega na zmodyfikowa-
niu zlokalizowanej na stosie kopii re-
jestru SR. Zmieniona wartość powinna
odpowiadać wartości charakterystycz-
nej dla trybu aktywnego. W takim
wypadku, po zakończeniu podprogra-
mu obsługi przerwania i odtworzeniu
zawartości PC i SR ze stosu, procesor
pozostaje w stanie aktywnym i może
kontynuować wykonywanie programu
( rys. 4 ).
Według tego właśnie schematu
działa program z list. 3 . Instrukcję
zmiany stanu sygnału sterującego dio-
dą LED przeniesiono do pętli głównej
programu. Po niej wykonywana jest
instrukcja wprowadzenia trybu LPM0.
Wykonanie podprogramu obsługi prze-
rwania wraz z makro __low_po-
wer_mode_off_on_exit() , czyli
asemblerowe bic.w #(CPUOFF+OS
COFF+SCG0+SCG1),0(SP) pozwala
na wykonanie programu z pętli głów-
nej, aż do kolejnej instrukcji wpro-
wadzenia trybu LPM0. Należy jeszcze
wyjaśnić, że zawartość rejestru SR
może znajdować się poniżej szczytu
stosu. W asemblerze należy brać to
pod uwagę i odpowiednio kontrolo-
Rys. 2. Pobór prądu dla pięciu trybów pracy procesora
MSP430
List. 2
void main()
{
init_sys();
__low_power_mode_0();
// wprowadzenie LPM0
_NOP();
// ta instrukcja nie zostanie wykonana
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT^=BIT0;
// zmiana stanu, dioda LED
}
void init_sys()
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff;
TACTL = TASSEL1 + TACLR; // SMCLK taktuje TimerA
CCR0 = 50000;
CCTL0 = CCIE;
TACTL |= MC1;
// włączenie timera
__enable_interrupt();
// główne przyzwolenie dla przerwań
}
86
ELEKTRONIKA PRAKTYCZNA 8/2008
153199108.002.png 153199108.003.png 153199108.004.png
 
List. 3
void main()
{
init_sys();
while (1)
{
P1OUT^=BIT0;
// zmiana stanu, dioda LED
dlatego kod z list. 4 nie zadziała po-
prawnie.
Zaprezentowane przykłady są naj-
prostsze z możliwych i nie wykorzy-
stują wszystkich możliwości ogranicza-
nia poboru mocy. Znacznie lepszym
rozwiązaniem byłoby, po zastosowa-
niu rezonatora zegarkowego, taktowa-
nie licznika TimerA z zegara ACLK
i wprowadzenie trybu LPM3, w któ-
rym pobór prądu wynosi 1...2 mA.
__low_power_mode_0();
// wprowadzenie LPM0
_NOP();
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
__low_power_mode_off_on_exit(); // wyjście z LPMx
}
Rys. 4. Algorytm podprogramu obsługi przerwania z usunięciem trybu pracy LPM0
Energooszczędne aplikacje
– najważniejsze zasady
Na zakończenie kilka zasad, któ-
rych należy przestrzegać przy pro-
jektowaniu aplikacji o bardzo niskim
poborze energii. Przede wszystkim,
budowanie energooszczędnej aplika-
cji polega na odpowiednim stoso-
waniu trybów oszczędzania energii,
z naciskiem na użycie trybu LPM3
i wykonywanie programu tylko
w następstwie zdarzeń ( rys. 5 ).
Czas, gdy procesor działa w trybie
aktywnym, należy ograniczać, co ozna-
cza potrzebę tworzenia programu tak,
aby wykonywał się możliwie szybko.
W tym celu warto pamiętać o:
wać argument instrukcji. Na szczęście
kompilator języka w C dba o to, aby
makro __low_power_mode_off_on_
exit() operowało we właściwym
miejscu stosu.
W odróżnieniu od programu
z list. 3, w programie przedstawio-
nym na list. 4 programista zapomniał
w podprogramie obsługi przerwania
umieścić makro operujące na stosie,
R
E
K
L
A
M
A
ELEKTRONIKA PRAKTYCZNA 8/2008
87
153199108.005.png
 
List. 4
void main()
{
init_sys();
while (1)
{
P1OUT^=BIT0; // zmiana stanu, dioda LED
__low_power_mode_0(); // wprowadzenie LPM0
_NOP();
// ta instrukcja nie zostanie wykonana
Rys. 5. Przebieg pracy procesora w aplikacji
energooszczędnej
• ustawieniu wszystkich nieużywa-
nych linii I/O w tryb wyjścia,
• odpowiednim połączeniu wypro-
wadzeń rezonatorów kwarcowych.
Ważnym elementem konceptu jest
stosowanie generatora DCO do takto-
wania jednostki centralnej i peryfe-
riów. Producent deklaruje, że genera-
tor ten uruchamia się i uzyskuje sta-
bilny sygnał w czasie 6 ms ( rys. 6 ),
a nawet 2 ms w procesorach serii
F2xxx.
Po czasie 6 ms od pojawienia
się przerwania, procesor taktowa-
ny z DCO rozpoczyna wychodzenie
z trybu niskiego poboru energii (np.
LMP3) i podejmuje pracę. Żaden
generator kwarcowy nie uruchamia
się tak szybko, a ponadto, czas
jego uruchamiania może się wahać,
powodując zmienny czas reakcji na
zdarzenia.
cji najlepiej sprawdza się procesor
serii F4xx, który posiada licznik
BasicTimer , dedykowany do tego
typu zastosowań. Zamiast Basic-
Timera , w procesorach serii F1xx
można posłużyć się generatorem
TimerA . Przy taktowaniu z zegara
ACLK każdy z tych generatorów
może generować przerwanie z czę-
stością 1 Hz. W wyniku nadejścia
przerwania, w kilku instrukcjach
odświeżane są informacje o czasie
i dacie, a przez resztę czasu pro-
cesor przebywa w trybie LPM3.
Drugi ciekawy przykład to pilot
zdalnego sterowania. Tutaj również
ograniczenie poboru mocy jest bar-
dzo istotne, szczególnie wtedy, gdy
pilot nie jest używany. W takiej
aplikacji można nawet pokusić się
o zastosowanie trybu LPM4. Od-
powiednie podłączenie klawiatury
(nawet matrycowej) do portów P1
i P2, zapewni niezbędne do obu-
dzenia procesora przerwanie ze-
wnętrzne. Po podjęciu pracy pro-
cesor może zająć cię programową
stabilizacją generatora DCO lub
uruchomieniem generatora z re-
zonatorem kwarcowym (ceramicz-
nym). Nie brakuje na to czasu,
ponieważ bardzo szybka reakcja
na wciśnięcie klawisza nie jest po-
trzebna. Po wykonaniu polecenia
procesor powraca do trybu LPM4.
Mariusz Kaczor
Contrans TI
• budowaniu programu tak, aby
wykonywał zadania tylko w na-
stępstwie zdarzeń (przerwań),
• ograniczaniu wywoływania pod-
funkcji (niepotrzebne dodatkowe
skoki i operacje na stosie),
• stosowaniu tablic w miejsce ob-
liczeń, jeśli tylko jest to możli-
we,
• wykonywaniu skomplikowa-
nych obliczeń na rejestrach (lub
zmiennych lokalnych w języku
C),
• wyłączaniu zbędnych peryferiów,
• używaniu peryferiów (liczników,
bloków capture/compare ) do wy-
konywania zadań kontrolnych,
zamiast bezpośredniej kontroli
programowej
Rys. 6. Diagram przejść stanu pracy procesora w aplikacji
energooszczędnej
Pierwsze
energooszczędne
aplikacje
Na zakończenie
dwa przykłady energo-
oszczędnych aplikacji.
Świetnym przykładem
zastosowania redukcji
poboru mocy jest zegar
czasu rzeczywistego,
którego zadaniem jest
odliczanie czasu z moż-
liwie niskim poborem
energii. W tej aplika-
R
E
K
L
A
M
A
88
ELEKTRONIKA PRAKTYCZNA 8/2008
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
}
153199108.006.png 153199108.007.png 153199108.008.png 153199108.009.png 153199108.010.png 153199108.011.png 153199108.012.png
 
Zgłoś jeśli naruszono regulamin