LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

(7) Mikrokontrolery MSP430: obsługa ADC

Podczas próbkowania sygnału w module przetwornika ADC10_B ładowany jest wewnętrzny kondensator CI (kondensator jest rozładowywany w trakcie pomiaru). Czas próbkowania sygnału musi być tak ustalony, aby można było zgromadzić ładunek w kondensatorze. Na rysunku 4 pokazano schemat zastępczy wejścia analogowego w MSP430FR5739.

 

 Rys. 4. Schemat elektryczny wejścia analogowego w MSP430FR5739

Rys. 4. Schemat elektryczny wejścia analogowego w MSP430FR5739

 

Czas próbkowania sygnału tSample w MSP430FR5739 przy dokładności pomiaru 1/2 bitu i rozdzielczości pomiaru 10 bitów obliczamy ze wzoru 7.2.

gdzie:

tSample – czas próbkowania sygnału [s],

RE – rezystancja zewnętrzna źródła,

RI – rezystancja wewnętrzna [1 k?],

CI – pojemność wewnętrzna [6 pF].

Żeby obliczyć liczbę taktów zegara ADC10CLK potrzebnych do odmierzenia czasu tSample (patrz tabela 11, ustawienie bitu ADC10SHTx) korzystamy ze wzoru 7.3.

gdzie:

xSample – liczba taktów zegara ADC10CLK o czasie trwania tSample,

tSample  – czas próbkowania sygnału [s],

fADC10CLK – częstotliwość sygnału ADC10CLK taktującego pomiar [Hz].

Po zakończeniu próbkowania sygnału zapamiętana w module S/H wartość sygnału analogowego zamieniana jest w rdzeniu SAR na postać cyfrową. W przypadku pracy przy rozdzielczości 10 bitów konwersja sygnału z postaci analogowej na cyfrową trwa 12 taktów sygnału ADC10CLK (przy rozdzielczości 8 bitów 10 taktów). Z kolejnym taktem sygnału ADC10CLK wynik pomiaru (10/8 bitów) jest zapisywany w rejestrze ADC10MEM.

Wynik pomiaru (NADC) może być zapisany w postaci binarnej albo uzupełnień do dwóch. Format prezentacji wyniku konfiguruje bit ADC10DF z rejestru ADC10CTL2. Wynik konwersji w formie binarnej określa wzór 7.1. Po zastosowaniu przekształceń matematycznych otrzymujemy wzór 7.4 na wartość mierzonego napięcia.

gdzie:

VIN – wartość mierzonego napięcia [V],

NRES – współczynnik maksymalnej rozdzielczości przetwornika (1023 gdy 10 bitów, 255 gdy 8 bitów),

NADC – cyfrowy wynik pomiaru odczytany z rejestru ADC10MEM,

VR– – niższy potencjał referencyjny [V],

VR+ – wyższy potencjał referencyjny [V].

Zakończenie pomiaru i wpisanie wyniku do rejestru ADC10MEM, powoduje ustawienie flagi przerwania ADC10IFG.

 

Zatrzymywanie pomiaru

Żeby zatrzymać pomiar napięcia należy w rejestrze ADC10CTL0 wyzerować bit zezwolenia na konwersję ENC. W trybie pracy pomiaru pojedynczego kanału (1) zatrzymanie pomiaru w trakcie jego trwania spowoduje, że w rejestrze ADC10MEM znajdzie się niepoprawny wynik. Dlatego też przed wyzerowaniem bitu ENC, należy sprawdzić, czy przetwornik nie wykonuje pomiaru. Żeby to zrobić należy w rejestrze ADC10CTL1 sprawdzić wartość bitu ADC10BUSY. Ustawiony bit, będzie oznaczał, że przetwornik jest zajęty (wykonuje pomiar). W pozostałych trybach pracy (2, 3, 4), nie ma konieczności sprawdzania bitu zajętości przetwornika. Bit zezwolenia na konwersję ENC można wyzerować w dowolnym momencie. Wówczas w trybie pomiaru grupy kanałów (2), pomiary zostaną zatrzymane po wykonaniu wszystkich pomiarów w grupie, a w trybie pomiarów cyklicznych (3, 4) po zakończeniu cyklu pomiarowego.

 

Wewnętrzny czujnik temperatury

W strukturę modułu generatora napięcia referencyjnego wbudowano „napięciowy” czujnik temperatury. Zmianę wartość napięcia na czujniku w zależności od temperatury czujnika ilustruje rysunek 5.

 

Rys. 5. Napięcie na czujniku, a temperatura czujnika 

Rys. 5. Napięcie na czujniku, a temperatura czujnika

 

Napięcie, oraz temperaturę „na czujniku” obliczamy ze wzorów 7.5 i 7.6.

gdzie:

Vin – wartość napięcia na czujniku [V],

Temp – temperatura na czujniku [°C].

Napięcie Vin (wzór 7.4) mierzymy na 10 kanale pomiarowym modułu ADC10_B. Zmierzoną wartość napięcia podstawiamy do wzoru 7.6 i obliczamy temperaturę na czujniku. Korzystając z czujnika temperatury należy pamiętać, że mierzy on temperaturę mikrokontrolera. Żeby wykonać pomiar temperatury otoczenia należy przeskalować zmierzoną wartość temperatury.

Potencjałem referencyjnym wykorzystywanym podczas pracy czujnika temperatury jest zawsze napięcie VREF (1,5/2,0/2,5 V). W strukturze TLV (opis w rozdziale kalibracja) zapisano współczynniki kalibracji czujnika temperatury dla każdej z 3 wartości potencjału referencyjnego VREF (kalibracja w zakresie temperatur od +30?C do +85?C). Korzystając z współczynników kalibracji, oraz wzorów 7.12, 7.13, 1.14 (opis w rozdziale kalibracja) również możemy obliczyć wartość temperatury mierzonej przez czujnik.

 

Dzielnik napięcia zasilania

W strukturę mikrokontrolera MSP430FR5739 wbudowano dzielnik napięcia zasilania (podział napięcia zasilania mikrokontrolera przez dwa). Przeskalowaną wartość napięcia zasilania vIn (wzór 7.4) mierzymy na 11 kanale pomiarowym moduł ADC10_B. Wartość napięcia zasilania mikrokontrolera obliczamy ze wzoru 7.7.

gdzie

vZas – wartość napięcia zasilania mikrokontrolera [V],

vIn – wartość napięcia na dzielniku [V].

 

Komparator okienkowy

Moduł ADC10_B wyposażono w układ komparatora analogowego. Wartości progowe komparatora ustawiamy w rejestrach:

  • ADC10LO – próg dolny,
  • ADC10HI – próg górny.

Komparator działa niezależnie od CPU mikrokontrolera. Wynik pomiaru z rejestru ADC10MEM porównywany jest z wartościami progowymi i ustawiane są flagi przerwań:

  • ADC10LOIFG, gdy wynik pomiaru jest mniejszy niż wartość progu dolnego komparatora (rejestr ADC10LO),
  • ADC10HIIFG, gdy wynik pomiaru jest większy niż wartość progu górnego komparatora (rejestr ADC10HI),
  • ADC10INIFG, gdy wynik pomiaru jest większy niż wartość progu dolnego komparatora (rejestr ADC10LO) , oraz mniejszy niż wartość progu górnego komparatora (rejestr ADC10HI).

Flagi przerwań ustawiane są w rejestrze ADC10IFG, a obsługę przerwań (źródła przerwań) konfigurujemy w rejestrze ADC10IE. W procedurze obsługi przerwania, flagi nie są zerowane automatycznie i należy je wyzerować manualnie. Podczas ustawiania progów pracy komparatora (dolnego / górnego) należy uwzględnić rozdzielczość pracy przetwornika (8/10 bitów, bit ADC10RES z rejestru ADC10CTL2), oraz format wyniku pomiaru (binarny/uzupełnień do dwóch, bit ADC10DF z rejestru ADC10CTL2). Zmiana wartości bitów konfiguracyjnych ADC10RES, oraz ADC10DF powoduje ustawienie wartości domyślnych progów komparatora. Przy rozdzielczości przetwornika 10 bitów wartości domyślne rejestrów ADC10LO, ADC10HI to: 0x0000, 0x03FF dla trybu binarnego, oraz 0x0200, 0x01FF dla trybu uzupełnień do dwóch. Są to wartość minimalna dla progu dolnego ADC10LO, oraz wartość maksymalna dla progu górnego ADC10HI.

 

Przerwania

Moduł ADC10_B obsługuje 6 źródeł przerwań. Są to przerwania maskowalne i żeby włączyć ich obsługę należy w rejestrze SR ustawić bit GIE. Poszczególne źródła przerwań włączamy ustawiając bity konfiguracyjne w rejestrze ADC10IE. Flagi przerwań umieszczono w rejestrze ADC10IFG.

Tab 12. Opis przerwań modułu ADC10_B

ADC10IE

rejestr źródło przerwania

(włącz/wyłącz)

ADC10IFG

rejestr flaga przerwania

(aktywna / nieaktywna)

 

Opis

 

ADC10TOVIE

 

ADC10TOVIFG

Nadpisanie sekwencji pomiarowej.

Wyzwalany jest pomiar napięcia, w momencie trwania cyklu pomiarowego.

 

ADC10OVIE

 

ADC10OVIFG

Nadpisanie wyniku pomiaru.

Do rejestru wyniku ADC10MEM0 wypisywana jest nowa wartość zanim poprzednia zostanie odczytana z rejestru.

ADC10HIIE

ADC10HIIFG

Komparator analogowy.

Wynik pomiaru większy od wartości progu w górę.

ADC10LOIE

ADC10LOIFG

Komparator analogowy.

Wynik pomiaru mniejszy od wartości progu w dół.

 

ADC10INIE

 

ADC10INIFG

Komparator analogowy.

Wynik pomiaru większy od wartości progu w dół i mniejszy od wartości progu w górę.

ADC10IE0

ADC10IFG0

Zakończenie pomiaru.

Umieszczenie wyniku pomiaru w rejestrze ADC10MEM0.

* najwyższy priorytet obsługi ma przerwanie ADC10TOVIE, a najniższy przerwanie ADC10IE0

 

Przerwania modułu ADC10_B obsługiwane są przez jeden wektor przerwań. Żeby ułatwić obsługę przerwań zaprojektowano specjalny rejestr ADC10IV. W rejestrze ustawiana jest informacja o wystąpieniu przerwania (zawsze przechowywana jest informacja o przerwaniu o najwyższym priorytecie wykonania). Odczyt rejestru (instrukcja switch) powoduje wyzerowanie jego wartości. Dodatkowo czyszczona jest flaga przerwania o najwyższym priorytecie. Wyjątek stanowi flaga ADC10IFG0 (flaga czyszczona jest automatycznie podczas odczytu wyniku pomiaru z rejestru ADC10MEM0, flagę można również wyzerować manualnie).

List. 1. Szablon procedury obsługi przerwania

#pragma vector=ADC10_VECTOR            // procedura obsługi przerwania 
__interrupt void ADC10_ISR(void)       // przetwornika A/C, moduł ADC10_B
{                                      // 
 switch(__even_in_range(ADC10IV,12))   // 
 {                                     // 
  case 0: break;                       // 
  case 2: break;                       // ADC10TOV (najwyższy priorytet)
  case 4: break;                       // ADC10OV
  case 6: break;                       // ADC10HI
  case 8: break;                       // ADC10LO
  case 10: break;                      // ADC10IN
  case 12: break;                      // ADC10MEM0 (najniższy priorytet)
  default: break;                      // 
 }                                     //  
}                                      //

 

W przypadku, gdy wystąpi kilka zdarzeń jednocześnie, to najpierw obsłużone zostaną przerwania o najwyższym priorytecie (obsługę taką gwarantuje wykorzystanie w procedurze obsługi przerwania obsługi rejestru ADC10IV).