(7) Mikrokontrolery MSP430: obsługa ADC
Zewnętrzne napięcia referencyjne
Zewnętrzne napięcia referencyjne VE(REF–), VE(REF+) podłączamy do kanałów pomiarowych A0, A1 mikrokontrolera (linie P1.0 oraz P1.1). Korzystając z zewnętrznych napięć referencyjnych redukujemy o 2 liczbę dostępnych kanałów pomiarowych. Mimo to stosowanie zewnętrznych napięć referencyjnych w niektórych typach aplikacji może okazać się korzystne. Ustalając wartość napięć referencyjnych, możemy w optymalny sposób zdefiniować rozdzielczości oraz zakres pomiarowy przetwornika. Dodatkowo stabilna wartość napięcia referencyjnego, pozwala uzyskiwać powtarzalne wyniki pomiarów.
Wewnętrzne napięcie referencyjne
Wewnętrzne napięcie referencyjne VREF wytwarzane jest przez wbudowany w strukturę mikrokontrolera generator napięcia REF. Parametry pracy generatora konfigurowane są za pomocą rejestru REFCTL0. Bity konfiguracyjne rejestru można modyfikować tylko, gdy generator nie jest używany (wyzerowany bit REFGENBUSY). Szczegółowy opis bitów rejestru konfiguracyjnego REFCTL0 zamieszczono w materiałach dołączonych do artykułu.
Schemat blokowy generatora ilustruje rysunek 3. Najważniejszym elementem generatora REF jest źródło napięcia typu BANDGAP.
Rys. 3. Schemat blokowy modułu REF. Z modułu mogą korzystać przetwornik ADC, oraz komparator COMP
Generator włączamy ustawiając w rejestrze konfiguracyjnym REFCTL0 bit REFON. Czas od włączenia do pojawienia się napięcia na wyjściu generatora to 30 ms. Na wyjściu generatora dostępne są: napięcie Vbandgap (buforowane napięcie bandgap, używane przez wewnętrzne moduły mikrokontrolera), oraz napięcie VREF (napięcie referencyjne wytwarzane na podstawie napięcia źródła bandgap). Wartość napięci VREF konfigurowana jest za pomocą bitu REFVSELx z rejestru REFCTL0. Dostępne nastawy pokazano w tabeli 7.
Tab. 7. Konfiguracja wartości napięcia VREF
Rejestr |
Bit |
Opis |
REFCTL0 |
REFVSEL_0 |
1,5 V |
REFVSEL _1 |
2,0 V |
|
REFVSEL _2 |
2,5 V |
|
REFVSEL _3 |
Dodatkowo w strukturę generatora REF wbudowano wewnętrzny „napięciowy” czujnik temperatury. Pracę czujnika konfiguruje bit REFTCOFF z rejestru sterującego REFCTL0. Po starcie mikrokontrolera czujnik jest włączony, aby zmniejszyć pobór prądu mikrokontrolera należy ustawić bit REFTCOFF, co spowoduje wyłączenie czujnika.
Wyzwalanie pomiaru
Pomiar napięcia można wyzwolić w sposób programowy albo sprzętowy. Sposób wyzwalania pomiaru konfiguruje bit ADC10SHSx z rejestru ADC10CTL1. W przypadku wyzwalania programowego przetwornik rozpoczyna cykl pomiarowy w momencie ustawienia w rejestrze ADC10CTL0 bitu ADC10SC. W przypadku wyzwalania sprzętowego należy skonfigurować pracę modułu zegara Timer_A/Timer_B, a cykl pomiarowy jest wyzwalany sygnałem OUTx, jednego z rejestrów TACCRx/TBCCRx.
Tab. 8. Wyzwalanie pomiaru
Rejestr |
Bit |
Opis |
ADC10CTL1 |
ADC10SHS_0 |
programowo – ustawienie bitu ADC10SC |
ADC10SHS_1 |
sprzętowo – Timer_A wyjście OUT1 rejestru TACCR1 |
|
ADC10SHS_2 |
sprzętowo – Timer_B wyjście OUT0 rejestru TBCCR0 |
|
ADC10SHS_3 |
sprzętowo – Timer_B wyjście OUT1 rejestru TBCCR1 |
Niezależnie od tego czy wykonujemy pomiar napięcia na pojedynczym kanale (tryb 1), pomiar napięcia w grupie kanałów (tryb 2), cykliczny pomiar napięcia na pojedynczym kanale (tryb 3), cykliczny pomiar napięcia w grupie kanałów (tryb 4), to dla każdego kanału pomiarowego pomiary należy wyzwalać z osobna. Dla trybów pracy 2, 3, 4 przetwornika istnieje możliwość zmiany sposobu wyzwalania pomiarów. Ustawienie w rejestrze ADC10CTL0 bitu ADC10MSC spowoduje, że w przypadku pomiaru grupy kanałów (tryb 2) pomiar wyzwalamy raz dla całej grupy i nie ma konieczności wyzwalania pomiaru dla każdego kanału w grupie z osobna. W przypadku pomiarów cyklicznych: pojedynczy kanał (tryb 3), grupa kanałów (tryb 4), raz wyzwolone pomiary trwają do momentu ich zablokowania.
Wyzwalanie programowe (bit ADC10SC), oraz sprzętowe (sygnały zegarowe) powoduje ustawienie wewnętrznego sygnału SHI (zmiana ze stanu niskiego na wysoki/narastające zbocze sygnału). W praktyce to właśnie sygnał SHI wyzwala pomiar napięcia. Polaryzacja sygnału SHI definiuje bit ADC10ISSH z rejestru ADC10CRL1. Po starcie mikrokontrolera bit jest wyzerowany, a pomiary wyzwalane są narastającym zboczem sygnału SHI.
Taktowanie pomiaru
Próbkowanie sygnału analogowego, oraz konwersja na postać cyfrową taktowane są sygnałem ADC10CLK. Źródłem sygnału ADC10CLK może być jeden z wewnętrznych sygnałów zegarowy ACLK, MCLK, SMCLK, bądź sygnał MODCLK generowany przez wbudowany w strukturę mikrokontrolera oscylator kwarcowy MODOSC. Źródło sygnału ADC10CLK konfiguruje bit ADC10SSELx z rejestru ADC10CTL1. Dostępne nastawy pokazano w tabeli 9.
Tab. 9. Źródło sygnału taktującego konwersję
Rejestr |
Bit |
Opis |
ADC10CTL1 |
ADC10SSEL_0 |
MODCLK |
ADC10SSEL_1 |
ACLK |
|
ADC10SSEL_2 |
MCLK |
|
ADC10SSEL_3 |
SMCLK |
W moduł ADC10_B wbudowano dwa preskalery częstotliwości sygnału ADC10CLK. Pierwszy preskaler pozwala podzielić częstotliwość sygnału ADC10CLK przez 1/4/64. Drugi przez 1/2/3/4/5/6/7/8. Korzystając z obu preskalerów możemy podzielić częstotliwość sygnału ADC10CLK przez wartość z zakresu 1…512. Nastawy preskalerów pokazano w tabeli 10.
Tab. 10. Preskalery częstotliwości sygnału ADC10CLK
Rejestr |
Bit |
Opis |
ADC10CTL1 |
ADC10DIV_0 |
/1 |
ADC10DIV_1 |
/2 |
|
ADC10DIV_2 |
/3 |
|
ADC10DIV_3 |
/4 |
|
ADC10DIV_4 |
/5 |
|
ADC10DIV_5 |
/6 |
|
ADC10DIV_6 |
/7 |
|
ADC10DIV_7 |
/8 |
|
ADC10CTL2 |
ADC10PDIV_0 |
/1 |
ADC10PDIV_1 |
/4 |
|
ADC10PDIV_2 |
/64 |
|
ADC10PDIV_3 |
zarezerwowane |
W praktyce bardzo często sygnał ADC10CLK jest taktowany sygnałem MODCLK generowanym przez wewnętrzny oscylator MODOSC. Wbudowany w strukturę mikrokontrolera oscylator włączany jest na czas trwania konwersji, oraz automatycznie wyłączany po jej zakończeniu. Oscylator może być stosowany w trybach oszczędzania energii LPMx. Typowo częstotliwość sygnału MODCLK wynosi 5 MHz. W praktyce odstępstwo od zdefiniowanej normy może wynosić ±10%.
Pomiar (próbkowanie i konwersja)
Pomiar analogowo/cyfrowy w MSP430FR5739 dzielimy na dwa etapy:
- Próbkowanie i zapamiętanie sygnału analogowego w module S/H (Sample & Hold)
- Konwersja, czyli zamiana zapamiętanego sygnału analogowego na postać cyfrową
Mikrokontroler MSP430FR5739 obsługuje dwa tryby próbkowania sygnału. Są to tzw. tryby: rozszerzony, oraz tryb wyzwalania. Tryb próbkowania sygnału konfiguruje bit ADC10SHP z rejestru ADC10CTL1. W trybie rozszerzonym (wyzerowany bit ADC10SHP), sygnał jest próbkowany tak długo jak ustawiony jest sygnał SHI wyzwalający pomiar napięcia. Sterując sygnałem SHI, możemy dowolnie regulować czas próbkowania sygnału. W trybie wyzwalania czas próbkowania sygnału konfigurujemy za pomocą bitów ADC10SHTx z rejestru ADC10CTL0. Sygnał analogowy próbkowany jest przez x taktów zegara ADC10CLK. Dostępne nastawy pokazano w tabeli 11.
Tab. 11. Czas próbkowania sygnału w trybie wyzwalania
rejestr |
Bit |
opis |
ADC10CTL0
|
ADC10SHT_0 |
4 * ADC10CLK |
ADC10SHT_1 |
8 * ADC10CLK |
|
ADC10SHT_2 |
16 * ADC10CLK |
|
ADC10SHT_3 |
32 * ADC10CLK |
|
ADC10SHT_4 |
64 * ADC10CLK |
|
ADC10SHT_5 |
96 * ADC10CLK |
|
ADC10SHT_6 |
128 * ADC10CLK |
|
ADC10SHT_7 |
192 * ADC10CLK |
|
ADC10SHT_8 |
256 * ADC10CLK |
|
ADC10SHT_9 |
384 * ADC10CLK |
|
ADC10SHT_10 |
512 * ADC10CLK |
|
ADC10SHT_11 |
768 * ADC10CLK |
|
ADC10SHT_12 |
1024 * ADC10CLK |
|
ADC10SHT_13 |
||
ADC10SHT_14 |
||
ADC10SHT_15 |
Narastające zbocze sygnału SHI, wyzwala próbkowanie sygnału na czas zdefiniowany przy pomocy bitu ADC10SHTx (4…1024 takty sygnału ADC10CLK).