MSP430_cz7.pdf

(1596 KB) Pobierz
072-075_msp430_cz7.indd
PODZESPOŁY
MSP430: mikrokontrolery,
które (prawie) nie
pobierają prądu, część 7
12–bitowy przetwornik A/C
Mikrokontrolery MSP430 są wyposażone w dużą liczbę różnorodnych
pery fe riów. Czyn i to z nic h uniwersalne narzędzie do zadań o zmieniającym
się c hara k terze. Sta ndardem w elektronice jest konieczność „penetracji” świata
analogowego, co powoduje, że niezbędnym wyposażeniem mikrokontrolerów
są przetworniki analogowo–cyfrowe. Kolejne przykłady aplikacji 12–bitowego
przetwornika A/C przedstawiamy w artykule.
pięcia na drugim wejściu
analogowym (port P6.1).
Zakres wynosi 0...+2,5 V
ze względu na wykorzy-
stane wewnętrzne źródło
referencyjne (2,5 V).
W odróżnieniu od po-
przednich przykładów,
w tym wyzwalanie konwer-
sji jest dokonywane sprzę-
towo z wykorzystaniem
licznika (TimerA1). Do-
datkowo wykonywana jest
Pomiar napięcia
zasilania
Drugi przykład wy-
korzystuje wewnętrzny
dzielnik napięcia zasilania
o współczynniku podzia-
łu 1:2. Maksymalny błąd
zmierzonego na dzielniku
napięcia wynosi ±0,04 V.
Algorytm pomiaru pozo-
stawiono niezmieniony.
Niewielka różnica pojawia
się tylko w konfiguracji
przetwornika oraz w funk-
cji translacji wyniku. Do
rejestru konfiguracji wy-
niku ADC12MCTL0 na-
leży wpisać kanał nr 11
(bity ADC12MCTL0.INCH).
Ponadto ze względu na
szerszy zakres mierzonych
napięć należy ustawić re-
ferencję na wartość 2,5 V
(bit ADC12CTL0.REF2_5).
Wartość napięcia moż-
na wyznaczyć z poniższej
zależności:
Wyznaczana wartość
napięcia w [ mV ] przecho-
wywana jest w zmiennej
napiecie ( list. 8 ).
Analogowe wejście
0...2,5 V
Przykład trzeci prezen-
tuje algorytm pomiaru na-
List. 8. Pomiar napięcia zasilania
// Plik naglowkowy
#include „msp430x44x.h”
// Zmienne globalne
signed short napiecie = 0;
// Przerwanie po zakonczonej konwersji
#pragma vector = ADC12_VECTOR
__interrupt void ISR_ADC12(void)
{
napiecie = ADC12MEM0;
__low_power_mode_off_on_exit(); // LPM exit
}
// Inicjacja przetwornika ADC12
void ADC12Init(void)
{
ADC12CTL0 = SHT0_3 + SHT1_3 + REFON + REF2_5V + ADC12ON;
// ADC12, SHtime–>32, SingleConv, Ref–>2.5V, turn on ADC12
ADC12CTL1 = CSTARTADD_0 + SHS_0 + SHP + ADC12DIV_7 + ADC12SSEL_1 + CONSEQ_0;
// MEM0, ADCosc, ACLK/8, Single sequence,
ADC12MCTL0 = SREF_1 + INCH_11; // 0..Vref, in –> Vdiv
ADC12IE = 0x0001; // MEM0–>przerwanie
ADC12CTL0 |= ENC; // włącz konwersję (czekaj na wyzwolenie)
}
// Glowna funkcja
void main(void)
{
unsigned short ShortTmp1; // Zmienna pomocnicza
WDTCTL = WDTPW + WDTHOLD; // watchdog, off
__enable_interrupt(); // system przerwan, wlaczony
ADC12Init(); // inicjacja przetwornika ADC
while (1) // glowna petla
{
ADC12CTL0 |= ADC12SC; // wyzwolenie pojedynczej konw.
__low_power_mode_3(); // LPM3
ShortTmp1 = napiecie; // Przeliczenie wartosci
ShortTmp1 = ShortTmp1 << 3; // 1 + 7 / 32 –> 1,22
ShortTmp1 –= napiecie;
ShortTmp1 = ShortTmp1 >> 5;
napiecie += ShortTmp1;
__no_operation();
}
}
. /�� �+ ��$� . ��� �+
. /�� �+ ��$� . ��� �+
$ "$ $ ���
. /�� �+ ��$� $F��� �+
$ "$
��7* $ ��� �"!$$� �+ �� $ ���
��7* $ ��� �"!$$� �+ �� $ ���
FMO
Zgodnie z i deą opt ym a-
lizacji rozłożymy współ-
czy nnik pr ze kształcenia :
�$ �" $ �"
" !$$� �7
�$ �" E
$ F
72
Elektronika Praktyczna 3/2008
278158483.031.png 278158483.032.png 278158483.033.png 278158483.034.png 278158483.001.png 278158483.002.png 278158483.003.png 278158483.004.png 278158483.005.png 278158483.006.png 278158483.007.png 278158483.008.png 278158483.009.png 278158483.010.png 278158483.011.png 278158483.012.png 278158483.013.png
 
PODZESPOŁY
List. 9. Pomiar napięcia 0…+2,5V
// Plik naglowkowy
#include „msp430x44x.h”
// Zmienne globalne
signed short napiecie = 0;
// Przerwanie po zakonczonej konwersji
#pragma vector = ADC12_VECTOR
__interrupt void ISR_ADC12(void)
{
napiecie = ADC12MEM0; // *5 / 8 –> 0,625
napiecie += ADC12MEM1;
napiecie += ADC12MEM2;
napiecie += ADC12MEM3;
napiecie += ADC12MEM4;
napiecie = napiecie >> 3;
__low_power_mode_off_on_exit(); // LPM exit
}
// Inicjacja przetwornika ADC12
void ADC12Init(void)
{
ADC12CTL0 = SHT0_5 + SHT1_5 + REFON + REF2_5V + ADC12ON;
// ADC12, SHtime–>96, MultiConv, Ref–>2.5V, turn on
ADC12
ADC12CTL1 = CSTARTADD_0 + SHS_1 + SHP + ADC12DIV_7 + ADC12SSEL_1 + CONSEQ_3;
// start MEM0, TimerA, ACLK/8, Repeat sequence,
ADC12MCTL0 = SREF_1 + INCH_1; // 0..Vref, in –> io1
ADC12MCTL1 = SREF_1 + INCH_1;
ADC12MCTL2 = SREF_1 + INCH_1;
ADC12MCTL3 = SREF_1 + INCH_1;
ADC12MCTL4 = SREF_1 + INCH_1 + EOS;
ADC12IE = 0x0010; // MEM4–>przerwanie
ADC12CTL0 |= ENC; // włącz konwersję (czekaj na wyzwolenie)
}
// Glowna funkcja
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // watchdog, off
TACCR0 = 204; // Cykl 1/4s (5 konwersji w cyklu)
TACCR1 = 102; // Wypelnienie 1/2
TACTL = TASSEL_1 + ID_3 + MC_1 + TACLR; // Timer A, ACLK/8, Up to CCR0
TACCTL0 = OUTMOD_0;
TACCTL1 = OUTMOD_3; // Set/Reset
P6DIR &= ~0x02; // konfiguracja 6.1;
P6SEL |= 0x02;
__enable_interrupt(); // system przerwan, wlaczony
ADC12Init(); // inicjacja przetwornika ADC
while (1) // glowna petla
{
__low_power_mode_3(); // LPM3
__no_operation();
__no_operation();
}
}
O ��!*$F
Zatem aby otrzymać
wartość końcową nale-
ży zsumować pięć wyni-
ków konwersji i podzielić
sumę przez 8 (przesunąć
w prawo o 3). Wynik jest
zapisywany do zmiennej
globalnej napiecie .
Zmian w konfiguracji
przetwornika w porówna-
niu z poprzednimi przy-
kładami jest kilka. Został
nieco wydłużony czas S/H
(bity ADC12CTL0.SHT0,1)
w celu zmniejszenia wpły-
wu impedancji multiplek-
sera. Zmieniono źródło
wyzwalania na TimerA1
(bity ADC12CTL1.SHS)
oraz tryb pracy przetwor-
nika na sekwencyjny (bity
ADC12CTL1.CONSEQ).
Rozbudowy wymagała kon-
figuracja komórek pamięci
wyników. Każdy z pięciu
rejestrów konfiguracyjnych
musi zawierać informację
o napięciu referencyjnym
(bity ADC12MCTL0–4.
SREF) i kanale pomiaro-
wym (bity ADC12MCTL0–4.
INCH). Dodatkowo ostatni
rejestr wymaga ustawie-
nia bitu końca sekwencji
EOS (bit ADC12MCTL4.
EOS). W rejestrze prze-
rwań (ADC12IE) ustawia-
my piąty bit (ADC12IE.
ADC12IE4) tak, by prze-
rwanie wystąpiło po za-
pisie do ostatniej komórki
w serii.
seria 5 pomiarów. Każdy
z wyników jest zapisywany
w osobnej komórce bufora.
W ten sposób można zre-
alizować uśrednianie lub
przekształcenie.
Licznik generuje w tle
przebieg prostokątny, któ-
rego zbocze narastające
jest wykorzystywane do
inicjacji każdej konwersji
w serii. Po zakończeniu
serii pomiarów wyzwalane
jest przerwanie. Z następ-
nym zboczem zegara se-
ria pomiarów zapisywana
jest od początku. Zarówno
przetwornik, jak i moduł
S/H w dalszym ciągu są
taktowane z własnego re-
zonatora RC.
Źródłem zegara dla
licznika jest sygnał ACLK,
który wymaga oscylatora
XLF1. Przewidziano oscy-
lator zegarkowy o częstotli-
wości 32,768 kHz. Dodat-
kowo wykorzystano dziel-
nik częstotliwości podsta-
wy licznika przez 8. Przy
założeniu, że dokonywane
będą 4 pomiary na sekun-
dę w serii po 5, wartość
rejestru licznika wynosi:
przerwanie. W obsłudze
tego przerwania może być
dokonywane np. uśred-
nianie wyników w serii.
W naszym przykładzie do-
datkowo przekształca się
wynik do postaci wartości
napięcia w [mV]. Wartość
napięcia można wyznaczyć
z poniższej zależności:
Może się przydać
Podczas pracy z prze-
twornikiem analogowo–
cyfrowym w MSP430 warto
pamiętać o kilku rzeczach:
wiemy, że rdzeń procesora
potrafi pracować pobierając
niewiele prądu, ale moduły
„analogowe” potrzebują go
kilkakrotnie więcej. Pobór
prądu modułu przetwor-
nika z włączoną referencją
wynosi ok. 2,5 mA. Jeśli
budujemy aplikację zasilaną
bateryjnie, ma to ogromne
znaczenie. Nie zapominaj-
my zatem wyłączać prze-
twornika, jeśli go w danej
chwili nie potrzebujemy.
. " �+ �� . ��� �+
$ "$
$ ���
$ "$
. " �+ �� $F��� �+
'$$�0 �$E*O� �"
��7* $ ��� ��!*"� �+ �� $ ���
9����.������0-����������������0-�������4����:�����������
��7* $ ��� ��!*"� �+ �� $ ���
Procesor w trakcie pra-
cy przetwornika pozosta-
je w trybie uśpienia. Po
ostatniej konwersji w se-
rii budzi go z tego stanu
Wartość współczynnika
przekształc en ia d a je się
zapisać z zadawalającym
p rzybliżeniem w postaci:
74
Elektronika Praktyczna 3/2008
�!*"� F
O��� �" ��F �$��
278158483.014.png
 
 
 
278158483.015.png 278158483.016.png 278158483.017.png 278158483.018.png 278158483.019.png 278158483.020.png 278158483.021.png 278158483.022.png 278158483.023.png 278158483.024.png 278158483.025.png 278158483.026.png 278158483.027.png
PODZESPOŁY
eMeSpEk 430
Czytelników zainteresowanych mikrokontrolerami MSP430 zachęcamy
do udziału w konkursie (piszemy o nim na str. 8) i odwiedzenia targów
Automaticon 2008, podczas których będzie można otrzymać komputerek
z mikrokontrolerem MSP430F1232 (egzemplarz modelowy widoczny na
zdjęciu poniżej).
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.
Opis budowy komputerka opublikujemy w EP4/2008 wraz ze
szczegółowym wykazem nagród.
Pamiętajmy również, że bity
konfiguracyjne w rejestrach
przetwornika w większości
nie mogą być zmieniane
w trakcie jego pracy (bit
ADC12CTL1.ENC=1).
Kolejną sprawą jest
„gospodarka” sygnałami
zegarowymi i częstotliwoś-
cią taktowania peryferiów,
a podczas konwersji A/C
należy wyłączać rdzeń
procesora. Wspomnieć war-
to również o rozsądnym
dobieraniu czasu próbko-
wania w układzie S/H oraz
o podstawie jego genera-
cji. W zależności od tego,
jakim zegarem taktujemy
moduł, różne będą czasy
S/H, przy tej samej konfi-
guracji rejestrów.
Ostania uwaga dotyczy
konfiguracji portu wyko-
rzystywanego do pomia-
rów analogowych. Należy
nie zapominać o ustawie-
niu odpowiedniego reje-
stru PxSEL. Wiąże się to
z możliwością wystąpienia
prądów pasożytniczych
w przypadku, gdy analogo-
wy sygnał będzie w okoli-
cy wartości napięcia pro-
gowego bufora. Rejestr Px-
SEL wyłącza bufory portu,
dlatego nie ma nawet ko-
nieczności odpowiedniego
ustawienia kierunku trans-
misji danych.
Piotr Tadrzak
Contrans TI
R E K L A M A
Elektronika Praktyczna 3/2008
75
278158483.028.png 278158483.029.png 278158483.030.png
Zgłoś jeśli naruszono regulamin