msp430_cz9.pdf

(2419 KB) Pobierz
054-058_msp430_cz9.indd
PODZESPOŁY
MSP430: mikrokontrolery,
które (prawie) nie
pobierają prądu, część 9
Komparator analogowy
W ramach cyklu przedstawiamy dwa (w zasadzie
niemal trzy) kolejne przykładowe projekty dla
mikrokontrolerów MSP430. Funkcjonalność obydwu
przykładów oparto na komparatorze analogowym,
który jest jedynym z elementów peryferyjnych
zaimplementowanym w prezentowanych
mikrokontrolerach.
Dodatkowo włączony jest
wbudowany filtr dolnoprze-
pustowy, stanowiący drugi
człon opóźnienia, który
ustala częstotliwość drgań
na wartości kilkuset kHz.
Teraz wystarczy do
wyprowadzenia CA1 pod-
łączyć płytkę wykonaną
z materiału przewodzącego,
by zbliżenie palca powo-
dowało zakłócenie pracy
generatora i zmianę jego
częstotliwości. Płytka może
być zaizolowana i umiesz-
czona pod osłoną. Dla za-
uważenia reakcji układu
wystarczy zbliżenie palca
na odległość kilku milime-
trów.
Konfiguracja kompara-
tora obejmuje włączenie
inwersji wejść (bit CAEX ),
wybór referencji i włącznie
komparatora a następnie po-
łączenie wejścia i wyjścia.
Wyjście komparatora
P2.6 (CAOUT) należy pod-
łączyć zewnętrznym prze-
wodem do wejścia TACLK
licznika TimerA i włączyć
licznik w odpowiedni tryb
pracy, by mierzyć często-
tliwość generowanego syg-
nału. Licznik TimerA jest
skonfigurowany do pracy
ciągłej, z taktowaniem syg-
nałem TACLK.
Ponieważ komparator
w stanie generacji pobiera
sporo prądu, warto ograni-
czać czas pracy generatora
i czas pomiaru. Najlepiej
jest włączać generator cy-
klicznie na krótką chwilę.
Aby nie angażować zbyt
wielu zasobów mikrokon-
trolera do tego prostego
działania, zadanie odli-
czenia czasu pomiaru re-
alizuje pętla oczekiwania.
Postąpienie wbrew ogólnej
zasadzie unikania takich
pętli w energooszczędnych
aplikacjach jest tutaj całko-
wicie uzasadnione. Po każ-
dym cyklu pomiaru moduł
komparatora i moduł liczni-
ka są wyłączane a ich wy-
prowadzenia odłączane.
Czas pracy generatora
t wynosi ok. 1,5 ms. Po-
bór prądu i związany z je-
go działaniem wynosi ok.
0,5…1 mA (w zależności
od częstotliwości taktowa-
nia jednostki centralnej).
Średni pobór prądu wyno-
si zatem:
Eksperyment trzeci –
sensor pojemnościowy
W trzecim eksperymen-
cie moduł komparatora
użyty zostanie jako gene-
rator o zasadzie działania
identycznej z zasadą dzia-
łania działania generatora
przebiegu prostokątnego
ze wzmacniaczem opera-
cyjnym. Generator, jaki
powstał w wyniku ekspe-
rymentu, nie jest zbyt sta-
bilny ale to właśnie jego
niestabilność została użyta
w celu wykonania senso-
ra pojemnościowego do
zastosowań w aplikacjach
zasilanych bateryjnie. Nie-
wątpliwymi zaletami stoso-
wania takiego sensora jako
czujnika dotyku w miejsce
tradycyjnego klawisza jest
uproszczenie konstrukcji
obudowy i możliwość her-
metycznego zamknięcia
urządzenia.
W projekcie ( rys. 25 )
wykorzystano wejście P1.7
(CA1) oraz wyjście CAO-
UT, które należy połączyć
szeregowym rezystorem
o dużej rezystancji (ok.
1 MV). Rezystor ten wraz
ze szczątkową pojemnością
wyprowadzenia CA1 two-
rzy filtr dolnoprzepustowy,
przez który wynik kom-
paracji napięć z wyjścia
podawany jest ponownie
na wejście, powodując
(z opóźnieniem zależnym
od parametrów układu RC)
ponowne przełączenie kom-
paratora. Powstaje generator
przebiegu prostokątnego.
Isr
=
i
t
=
1
ms
1
mA
=
1
1
s
=
1
µ
Uzyskany pobór prądu
jest na tyle niewielki, że
można rozpatrzeć zasto-
sowanie takiego rozwią-
zania w każdej aplikacji.
Na koniec uwaga. Można
założyć, że zbliżenie pal-
ca zwiększa pojemność
wcho dzącą w skład układu
RC. Stąd też częstotliwość
pracy generatora spada
nieznacznie, gdy zbliżymy
palec do płytki metalowej.
W przedstawionej konfigu-
racji uzyskuje się zmianę
częstotliwości o ok. 1…2%,
co swobodnie wystarcza
do detekcji zbliżenia pal-
ca. Autor pozostawia Czy-
telnikom swobodę w eks-
perymentowaniu z innymi
ustawieniami.
Rys. 25. Schemat połączeń dla sensora pojemnościowego
54
Elektronika Praktyczna 5/2008
A
153199107.012.png 153199107.013.png 153199107.014.png 153199107.015.png 153199107.001.png 153199107.002.png
PODZESPOŁY
List. 12. Fragment programu obsługującego sensor pojemnościowy
{
TACTL = TASSEL0 + TASSEL1 + TACLR + MC1; // wlaczenie licznika
P1SEL |= BIT5; //wybor wejscia dla InClock (TACLK)
P1DIR &=~ BIT5; // wejscie TACLK jako wejscie
CACTL1 = CAEX + CAREF0 + CAON; // wlaczenie komparatora
P2SEL |= BIT6; //wybor wyjscia clk
CACTL2 |= P2CA1; // P1.7 jako (+) komparatora
CACTL2 |= CAOUT ;
P2DIR |= BIT6; // koncówka jako wyjscie
for (i=0;i<burst;i++) {}
zliczenie = TAR; // odczyt licznika drgan
P1SEL &=~ BIT5;
TACTL &=~MC1; // wylaczyc TimerA
P2DIR &=~ BIT6;
CACTL2 &=~ CAOUT + P2CA1; //odlaczenie wyprowadzen
CACTL1 &=~ CAEX + CAREF0 + CAON ; //wylaczenie komparatora
P2SEL &=~ BIT6; //odlaczenie wyjscia
P1SEL &=~ BIT5; //odlaczenie wyjscia
P1DIR |= BIT5;
}
oczekuje na przerwanie
od licznika Basic Timer ,
w wyniku którego wyko-
nywane są dalsze operacje
(np. treść innego warunku
instrukcji case). Częstość
przerwania od Basic Ti-
mera ustalono na 32 Hz.
Okno czasowe dla po-
miaru, wyznaczone przez
częstość przerwania, wy-
nosi 30 ms, co powinno
być wystarczające w każ-
dych warunkach (warto
wiedzieć, że rezystancja
termistora NTC może być
w temperaturze bliskiej 0°C
nawet kilkukrotnie większa
od nominalnej).
W pierwszym warunku
(gdy zmienna LicznikBT
= 0) występuje operacja
ustalająca stan początkowy.
Modyfikowane są ustawie-
nia dla wyprowadzenia
P1.6 (CA0), tj. odłączenie
wejścia komparatora i usta-
wienie portu jako wyjście
w celu rozładowania kon-
densatora. Wprowadzony
jest tryb redukcji pobo-
ru mocy LPM3, w którym
działa właściwie tylko ge-
nerator kwarcowy, sygnał
taktujący ACLK i licznik
Basic Timer – elementy
niezbędne do odliczenia
czasu do kolejnego prze-
rwania.
W tym miejscu warto
zwrócic uwagę, że zapis:
LPM3;
jest równoznaczny z za-
pisem:
_BIS_SR(LPM3_bits);
W obu przypadkach
mamy do czynienia z ma-
krem zdefiniowanym m.in.
w środowiskach IAR Em-
bedded Workbench i Qu-
adravox AQ430 . W następ-
stwie przerwania realizo-
wany jest kolejny fragment
programu, gdzie włączany
jest komparator z referencją
0.5V CC i włączane wypro-
wadzenie CA0. Następnie
wykonywana jest konfigu-
racja bloku komparującego
licznika TimerA .
Instrukcja o treści:
CCTL1 = CM0 + CCI-
S0 + CAP;
wykonuje operacje kon-
Eksperyment czwarty
– pomiar rezystancji
Pomiary rezystancji
w elektrotechnice występu-
ją bardzo często. Pomiar
większości parametrów śro-
dowiskowych to w istocie
pomiar rezystancji. Wy-
konanie takiego pomiaru
nie zawsze musi się wią-
zać z użyciem przetworni-
ka analogowo–cyfrowego.
W czwartym eksperymen-
cie omówiony zostanie
porównawczy pomiar re-
zystancji z przetwornikiem
integracyjnym wykonanym
w oparciu o komparator
napięcia. Opisana aplika-
cja pomiarowa może być
podstawą do budowy ter-
mometru elektronicznego
i została do takiego zasto-
sowania zoptymalizowana.
Metoda pomiaru polega na
porównaniu stałej czaso-
wej obwodu RC, w którym
znajduje się kondensator
C o niezmiennej wartości
i element rezystancyjny R,
którym naprzemiennie jest
rezystor wzorcowy Rref
lub rezystor mierzony
Rpom. Przy zachowaniu
zbliżonych warunków po-
miaru zachodzi zależność:
Rpom =
Tpom
kondensator C=220 nF,
co daje stałą czasową ok.
2,2 ms. Przypomnijmy, że
stała czasowa to czas, po
którym kondensator nała-
duje się do wartości ok.
0,69 V CC . Ponieważ mie-
rzony jest czas ładowa-
nia do wartości 0,5 V CC ,
faktycznie zmierzony czas
może być jeszcze krótszy
– na pewno nie dłuższy
niż 2 ms dla rezystora
wzorcowego. Aby uzyskać
rozsądną precyzję pomiaru
czasu, warto ustalić wyso-
ką częstotliwość taktującą
licznik TimerA. Ustalono
ją na ok. 3 MHz, co po-
winno dać wynik pomiaru
czasu wzorcowego na po-
ziomie 5000 cykli.
Program ( list. 13 ) jest
tak przygotowany, by był
możliwie krótki i mało
skomplikowany. Stąd za-
stosowanie kilku uprosz-
czeń, szczególnie w sposo-
bie wyzwolenia pomiaru
i zbierania wyników.
Pomiar składa się
z czterech operacji: łado-
wania kondensatora przez
rezystor wzorcowy z po-
miarem, pobrania wyniku
i rozładowania, ponownego
ładowania przez rezystor
mierzony z pomiarem oraz
ponownego pobrania wyni-
ku i rozładowania. Wszyst-
kie te operacje odbywają
się pojedynczo, w wyniku
wykonania instrukcji wy-
boru case , a po każdej
z nich następuje zatrzy-
manie jednostki centralnej
(wprowadzenie trybu obni-
żonego poboru pomocy co
najmniej LPM0). System
Rref
Tref
, czyli
Rref
Tpom
Rpom
=
Rref
Kondens ator C jes t
podłączony do wyprowa-
dzenia P1.6 (CA0). Będzie
on ładowany z napięcia
V CC przez rezystor Rref
lub Rpom, kluczowany
odpowiednio przez port
P1.3 lub P1.7. Komparator
z napięciem referencyjnym
o wartości 0,5 V CC ma za
zadanie śledzić narastanie
napięcia i wykryć fakt na-
ładowania kondensatora do
wartości progowej. Wyjście
komparatora jest sprzężone
z licznikiem TimerA a czas
osiągnięcia wartości pro-
gowej jest rejestrowany.
Następnie kondensator jest
rozładowywany przed po-
nownym pomiarem.
Postawmy kilka założeń
wstępnych przyjmując, że
docelową aplikacją jest ter-
mometr z termistorem NTC
o wartości 10…20 kV (dla
25 o C). Zastosowano rezy-
stor wzorcowy o wartości
zbliżonej do średniej ocze-
kiwanej rezystancji termi-
stora – Rref=10 kV oraz
Rys. 26. Schemat połączeń dla pomiaru rezystancji
Elektronika Praktyczna 5/2008
55
153199107.003.png 153199107.004.png 153199107.005.png 153199107.006.png 153199107.007.png 153199107.008.png
PODZESPOŁY
figuracji bloku komparują-
cego CCR1 i włącza tryb,
w którym nastąpi rejestra-
cja wartości rejestru TAR ,
tj. stanu licznika TimerA
w wyniku pojawienia się
zbocza narastającego sygna-
łu CCI1B, który w mikro-
kontrolerze MSP430F449
jest w istocie sygnałem
CAOUT. Operacja ta nastą-
pi w chwili, gdy napięcie
kondensatora przekroczy
wartość progową.
Konfigurowany jest
również licznik TimerA
do trybu pracy z zegarem
SMCLK, w tym wypad-
ku ok. 3 MHz. Następnie
włączony zostaje klucz
dla rezystora wzorcowego
i usunięte zwarcie kon-
densatora. Rozpoczyna się
ładowanie kondensatora
przez rezystor wzorcowy.
Zostaje wprowadzony tryb
LMP0, w którym wyłączo-
na jest jednostka centralna
lecz działa sygnał SMCLK,
taktujący licznik TimerA .
Wynik pomiaru czasu zo-
stanie wychwycony samo-
czynnie.
W kolejnym fragmencie
programu, realizowanym
po następnym przerwaniu
od Basic Timera zachowy-
wany jest wynik pomiaru
czasu, odłączane wejście
CA0, odłączany klucz rezy-
stora referencyjnego i zwie-
rany kondensator. Kompa-
rator nie jest wyłączany.
Nie jest również wyłącza-
ny licznik TimerA , co nie
ma większego znaczenia,
gdyż w trybie LPM0, który
następuje bezpośrednio po-
tem, licznik nie jest tak-
towany, gdyż jego sygnał
taktujący – SMCLK – jest
wyłączany.
W kolejnych fragmen-
tach programu powtarza-
ne są powyższe operacje
w odniesieniu do rezysto-
ra mierzonego. Na koniec
wyłączany jest komparator
i licznik TimerA oraz ob-
liczana jest i wskazywana
wartość. Warto zwrócić
uwagę, że do obliczenia
wartości rezystora mie-
rzonego uwzględnia się
List. 13. Program realizujący pomiar rezystancji
void BT_TM1(void)
{ // przerwanie ma czestosc 32Hz
licznikBT = (licznikBT & petla); //modulo 15, co daje 1/2 sek okresu
switch (licznikBT)
{
case 0:
{
CACTL2 &=~ P2CA0;
P1DIR |= klucz; //zwarcie kondensatora
LPM3;
break;
}
case 1:
{
CACTL1 = CAON + CARSEL + CAREF1; // ustaw ref na 0.25 Vcc
CACTL2 = P2CA0; // P1.6 = +comp
CCTL1 = CM0 + CCIS0 + CAP; //ustawienie capture
P1DIR |= wzorzec;
TACTL = MC1 + TASSEL1 + TACLR; // SMCLK, bez dzielnika, zerowanie
P1DIR &=~ klucz; //wylacz zwarcie kondensatora
LPM0;
break;
}
case 2:
{
v_wzorzec = CCR1; //pobierz wynik
P1DIR &=~ wzorzec;
CACTL2 &=~ P2CA0;
P1DIR |= klucz; //zwarcie kondensatora
LPM3;
break;
}
case 3:
{
CACTL1 = CAON + CARSEL + CAREF1; // ustaw ref na 0.25 Vcc
CACTL2 = P2CA0; // P1.6 = +comp
CCTL1 = CM0 + CCIS0 + CAP; //ustawienie capture
P1DIR |= termistor;
TACTL = MC1 + TASSEL1 + TACLR; // SMCLK, bez dzielnika, zerowanie
P1DIR &=~ klucz; //wylacz zwarcie kondensatora
CCR1 = 1;
LPM0;
break;
}
case 4:
{
v_termo = CCR1; //pobierz wynik
P1DIR &=~ termistor;
CACTL1 = 0; //wylacz komparator
CACTL2 &=~ P2CA0;
TACTL = 0; //wylacz timerA
P1DIR &=~klucz; //odpusc kondensator, oszczedz prad
obliczenie = wzorcowy+portrez;
obliczenie = obliczenie *v_termo;
obliczenie = obliczenie / v_wzorzec;
obliczenie –= portrez;
swiec (obliczenie);
uni_pntr = (unsigned char *)LCD_buffer;
seven_seg2LCD (LCD_buffer);
LPM3;
break;
}
default:
{
LPM3;
break;
}
} //end of switch
licznikBT++;
}
w równaniu rezystancję
klucza (portu).
Na koniec jeszcze kil-
ka słów o uproszczeniach
programu i sposobach jego
rozwinięcia.
W programie nie użyto
żadnego przerwania poza
przerwaniem od licznika
Basic Timer . Zrezygnowa-
no z użycia przerwania od
modułu komparatora lub
przerwania od licznika Ti-
merA , związanego z prze-
chwyceniem zdarzenia od
komparatora, które umoż-
liwiłyby natychmiastowe
wykonywanie kolejnych
zadań. W efekcie wszyst-
kie działania są rozsunięte
w czasie, pomiar odbywa
się dłużej ale zachowana
jest przejrzysta struktu-
ra programu. Należy za-
uważyć, że program nie
zadziała właściwie, jeśli
w systemie pojawi się do-
datkowe przerwanie, a to
z uwagi na zastosowany
bardzo prosty mechanizm
przerywania działania
funkcji BT_TM(void) przez
zatrzymanie jednostki cen-
tralnej.
Przyjęta metoda pomia-
ru czasu ładowania kon-
densatora nie jest opty-
malna. Przede wszystkim
pomiar czasu ładowania
jest obciążony relatywnie
dużym błędem związanym
z chwilowym spadkiem na-
pięcia zasilania w chwili
ładowania kondensatora
(szczególnie w przypadku
zasilania słabą baterią).
Lepszym rozwiązaniem
jest wstępne ładowanie
kondensatora i pomiar cza-
su rozładowania, na który
stan baterii nie ma wpły-
56
Elektronika Praktyczna 5/2008
153199107.009.png
PODZESPOŁY
Elektronika Praktyczna 5/2008
57
153199107.010.png
PODZESPOŁY
rejestracja wyniku i w kon-
sekwencji wpływa na
zmierzone czasy. Ponieważ
jednak zmiany te są pro-
porcjonalne, w efekcie nie
odnotowujemy ich wpływu
na wynik obliczenia.
stają dwa czasy ładowa-
nia a wynik obliczany jest
z prostej proporcji czasów.
W przypadku pomia-
ru napięcia zasilania stałą
wartość zachowuje rezy-
stor (nie musi być to re-
zystor precyzyjny) a prze-
łączaniu ulegają wartości
napięcia progowego (np.
0,25 Vcc i 500 mV). Po-
nownie zmierzone zosta-
ją dwa czasy ładowania,
skomplikowaniu ulegają
tylko obliczenia, które jed-
nak w warunkach małych
wahań napięcia zasilania
można zastąpić prostą pro-
porcją.
Mariusz Kaczor
Contrans TI
Rys. 27. Przebieg napięcia na kondensatorze w trakcie
pomiaru
Pomiar własnego
napięcia zasilania
Program pomiaru re-
zystancji niezwykle łatwo
jest zmodyfikować tak, by
użyć go do pomiaru na-
pięcia zasilania mikrokon-
trolera. Warto zauważyć,
że w programie pomiaru
rezystancji stałe są war-
tości napięcia progowego
a przełączana jest wartość
rezystancji. Zmierzone zo-
wu. Warto wtedy też zasto-
sować referencję 0,25Vcc,
do której kondensator roz-
ładowuje się dłużej. Wy-
dłużenie mierzonego okresu
czasu mogłoby pozytywnie
wpłynąć na precyzję po-
miaru. Autor ponownie po-
zostawia Czytelnikom pole
do usprawnień. Na koniec
rozważmy wpływ napięcia
niezrównoważenia na pre-
cyzję pomiaru. Jego war-
tość wpływa na faktyczną
wartość napięcia kondensa-
tora, przy którym nastąpi
eMeSPEk 430
Czytelników zainteresowanych mikrokontrolerami MSP430 zachęcamy do udziału w konkursie (piszemy o nim
na str. 8).
Oprócz mikrokontrolera wyposażonego w 8 kB + 256 B pamięci Flash i 256 B pamięci RAM, komputerek
wyposażono w dwa źródła sygnałów zegarowych, dwa mikroprzełączniki, interfejs RS232, złącze JTAG,
złącze USB (do zasilania), stabilizator napięcia 3,3 V, głośnik piezoceramiczny, gniazdo baterii 3 V oraz
złącze wyświetlacza LCD 2 x16 znaków ze sterownikiem 44780. Wszystkie linie I/O wyprowadzono na złącza
szpilkowe.
Szczegółowy wykaz nagród publikujemy na str. 47.
58
Elektronika Praktyczna 5/2008
153199107.011.png
Zgłoś jeśli naruszono regulamin