(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 

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:

  1. Próbkowanie i zapamiętanie sygnału analogowego w module S/H (Sample & Hold)
  2. 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).

Do pobrania

O autorze