MSP430_cz6.pdf

(1341 KB) Pobierz
068-072_msp430_cz6.indd
PODZESPOŁY
MSP430: mikrokontrolery,
które (prawie) nie
pobierają prądu, część 6
12–bitowy przetwornik A/C
Mikrokontrolery MSP430 mogą być wyposażone w dużą liczbę różnorodnych
peryferiów. Czyni to z nich uniwersalne narzędzie do zadań o zmieniającym
się charakterze. Standardem w elektronice jest konieczność „penetracji” świata
analogowego, co powoduje, że niezbędnym wyposażeniem mikrokontrolerów
są przetworniki analogowo–cyfrowe.
Pierwszy przykład wykorzystania 12–bitowego przetwornika SAR wbudowanego
w mikrokontroler MSP430 przedstawiamy w artykule, kolejne za miesiąc.
S/H, w drugim odbywa się
„właściwa” konwersja. Czas
trwania etapu S/H można
wybrać (bit ADC12CTL1.
SHP) poprzez odpowiednią
konfigurację licznika (bity
ADC12CTL1.SHT0,1) lub
sterować nim bezpośrednio
sygnałem wyzwalania SHI.
Multiplekser analogowy
pozwala wybrać do kon-
wersji, poza portami pro-
cesora, dodatkowo wejścia
zewnętrznych referencji,
wyjście czujnika temperatu-
ry i dzielnika napięcia za-
silania. Napięcia wejściowe
nie mogą przekroczyć na-
pięć zasilania.
Przetwornik może pra-
cować w czterech trybach
(bity ADC12CTL1.CONSEQ):
pojedynczej konwersji jedne-
go kanału, pojedynczej sek-
wencji kanałów, sekwencyj-
nej konwersji pojedynczego
kanału oraz sekwencyjnej
konwersji wielu kanałów.
Dodatkowo bit ADC12CTL0.
Mikrokontrolery z rodzi-
ny MSP430 mogą być wy-
posażone w dwa typy prze-
tworników: SAR, 10– lub
12–bitowy, alternatywnie 16–
bitowy Σ–∆ ( Sigma–Delta ).
Ponieważ mikrokontroler
MSP430F449, zastosowany
w zestawie uruchomienio-
wym (opisanym w EP12/
2007), wyposażono w 12–
bitowy przetwornik SAR,
w artykule skupimy się na
prezentacji jego obsługi.
W konfiguracji testowej
wykorzystano ośmiocyfrowy
wyświetlacz siedmiosegmen-
towy LCD. Przykłady napi-
sano w C w środowisku IAR
(bezpłatna wersja kickstart ,
publikujemy ją na CD–EP2/
2008B).
śla minimalny czas kon-
wersji równy 2,1 ms (czyli
475 kHz). Poprawna praca
modułu wymaga zasilania
w zakresie 2,2…3,6 V.
Moduł przetwornika ma
możliwość podłączenia ze-
wnętrznych napięć odniesie-
nia. Wyższy potencjał powi-
nien mieć wartość większą
od 1,4 V, mniejszą zaś od
napięcia zasilania, a niższy
potencjał – wartość mniej-
szą od 1,2 V, ale oczywiście
większą lub równą 0 V. Daje
to możliwość dość swobod-
nego operowania zakresem
i rozdzielczością pomiarową
przetwornika. Dostępny jest
również wewnętrzny moduł
referencji o dwóch napię-
ciach 1,5 lub 2,5 V (wybór
bitem ADC12CTL0.REF2_
5V). Rozrzut produkcyjny
napięć referencyjnych mo-
dułu wynosi 4%, zaś sta-
bilność temperaturowa nie
jest gorsza niż ±100 ppm.
Wyboru konfiguracji referen-
cji dokonuje się w rejestrach
każdej z pamięci bufora wy-
ników (bity ADC12MCTL0–
15.SREF).
Źródłem sygnału tak-
tującego przetwornik może
być jeden z głównych ze-
garów procesora lub nieza-
leżny oscylator RC o czę-
stotliwości ok. 5 MHz (bity
ADC12CTL1.ADC12SSEL).
W miarę potrzeby sygnał
zegarowy można dodatko-
wo podzielić przez war-
tość całkowitą 1…8 (bity
ADC12CTL1.ADC12DIV).
Wyzwalanie konwersji
może być zrealizowane pro-
gramowo (bit ADC12CTL0.
ADC12SC) lub sprzęto-
wo z wykorzystaniem jed-
nego z liczników. Można
przy tym zdefiniować ro-
dzaj zbocza wyzwalania
(bit ADC12CTL1.ISSH). Sam
proces konwersji podzie-
lony jest na dwa etapy.
W pierwszym jest zapamię-
tywana wartość w module
Architektura ADC12
Sercem przetwornika
ADC12 jest 12–bitowy rdzeń
SAR. Dokonuje on konwersji
napięcia do postaci cyfro-
wej, posługując się dwoma
potencjałami referencyjnymi.
Błąd konwersji nie powinien
typowo przekroczyć ±2LSB.
Czas konwersji zamyka się
w 13 taktach zegarowych.
Częstotliwość taktowania
rdzenia nie powinna prze-
kroczyć 6,3 MHz, co okre-
Przetworniki SAR
Przetwornik SAR ( Successive Approximation Register ) występuje
w mikrokontrolerach MSP430 wersji 10– lub 12–bitowej. Poza
rozdzielczością, odróżnia je jeszcze moduł zapisu wyników konwersji.
W ADC12 jest wydzielony oddzielny obszar pamięci o wielkości 16
słów (12–bitowych), zaś w ADC10 jest pojedynczy rejestr wyniku oraz
moduł transferu w dowolny dostępny pamięci. Główne bloki funkcjonalne
przetwornika SAR to: moduł referencyjny (1,5 V oraz 2,5 V), multiplekser
analogowy, moduł S/H ( Sample–And–Hold ), dzielnik do pomiaru napięcia
zasilania oraz czujnik temperatury mikrokontrolera.
Przetworniki Σ
16–bitowy przetwornik Σ ( Sigma–Delta ) również cechuje własna
referencja (1,2 V), multiplekser analogowy na wejściu i wbudowany
czujnik temperatury. Dodatkowo wyposażono go we wzmacniacz PGA
( Programmable Gain Amplifier ) oraz może występować w wersji potrójnej
(trzy rdzenie przetwarzające). Wyniki konwersji w tym przetworniku
zapisywane są do pojedynczego rejestru.
68
Elektronika Praktyczna 2/2008
278158205.051.png 278158205.061.png 278158205.072.png 278158205.083.png 278158205.001.png 278158205.002.png 278158205.003.png 278158205.004.png 278158205.005.png 278158205.006.png 278158205.007.png 278158205.008.png 278158205.009.png 278158205.010.png 278158205.011.png 278158205.012.png 278158205.013.png 278158205.014.png 278158205.015.png 278158205.016.png 278158205.017.png 278158205.018.png 278158205.019.png 278158205.020.png 278158205.021.png 278158205.022.png 278158205.023.png 278158205.024.png 278158205.025.png 278158205.026.png 278158205.027.png 278158205.028.png 278158205.029.png 278158205.030.png 278158205.031.png 278158205.032.png 278158205.033.png 278158205.034.png 278158205.035.png 278158205.036.png 278158205.037.png 278158205.038.png 278158205.039.png 278158205.040.png 278158205.041.png 278158205.042.png 278158205.043.png 278158205.044.png 278158205.045.png 278158205.046.png 278158205.047.png 278158205.048.png
PODZESPOŁY
MSC pozwala na zapętlenie
pracy przetwornika bez syg-
nału wyzwalania.
Wyniki konwersji zapisy-
wane są do 16–pozycyjnego
bufora wyników. Każda ko-
mórka pamięci bufora ma
swoją reprezentację w posta-
ci rejestru konfiguracyjnego.
Określa się w nim kanał
wejściowy (ADC12MCTL0–
15.INCH) oraz konfigura-
cję napięć referencyjnych
(ADC12MCTL0–15.SREF).
Zapis rozpoczyna się od
pozycji określonej poprzez
bity ADC12CTL1.CSTAR-
TADD. W przypadku sek-
wencji pomiarów, każdy
następny wynik zapisywany
jest do kolejnej komórki.
Koniec sekwencji określa bit
ADC12MCTL0–15.ESC.
Zapis do którejkolwiek
komórki pamięci wyni-
ków może wywołać prze-
rwanie (rejestry ADC12IE
i ADC12IFG), przy czym ist-
nieje możliwość rozróżnienia
źródła przerwania (rejestr
ADC12IV). Dodatkowo moż-
na wywołać przerwanie od
przepełnienia lub od prze-
kroczenia czasu S/H.
Rys. 21. Schemat blokowy przetwornika ADC12
Pomiar temperatury
W pierwszym przykła-
dzie wykorzystamy czujnik
temperatury wbudowany
w strukturę mikrokontrolera.
Jest nim złącze półprzewod-
nikowe zasilane źródłem
prądowym o wydajności ok.
100 mA. W temperaturze 0°C
spadek napięcia na czujniku
wynosi 986 mV. Niestety
dopuszcza się 5% rozrzut
produkcyjny tej wartości.
Współczynnik nachylenia
krzywej skalowania wynosi
3,55 mV/°C z 3% błędem.
Bez skalowania pomiar tem-
peratury nie jest zbyt do-
kładny.
W pierwszej kolejności
konfigurowany jest prze-
twornik. Założono, że każda
konwersja będzie inicjowana
w pętli głównej, a podczas
jej trwania procesor bę-
dzie usypiany. Wymusza
to konieczność wykorzysta-
nia oscylatora ADC12OSC
do taktowania przetwor-
nika (bity ADC12CTL1.
ADC12SSEL ). Ponieważ
pomiar temperatury nie
wymaga dużych prędko-
ści zegara wybrano współ-
czynnik podziału dzielnika
przez 8 (bity ADC12CTL1.
ADC12DIV ). Częstotli-
wość zegara przetwornika
ADC12CLK wynosi zatem:
Tab. 3. Rejestry przetwornika ADC12
Rejestr
Nazwa
Typ Adres Stan
Rejestr kontrolny nr 0
ADC12CTL0 R/W 01A0h Reset z POR
SHT1
SHT0
MSC REF2_5V REFON ADC12ON ADC12
OVIE
ADC12
TOVIE ENC ADC12SC
Rejestr kontrolny nr 1
ADC12CTL1 R/W 01A2h Reset z POR
CSTARTADD
SHS SHP ISSH
ADC12DIV ADC12SSEL CONSEQ
ADC12
BUSY
Flagi przerwań ADC12IFG R/W 01A4h Reset z POR
Flagi zezwoleń przerwania ADC12IE R/W 01A6h Reset z POR
Wektor ident. przerwania ADC12IV R 01A8h Reset z POR
Rejestry wyniku 0...15 ADC12MEM0..ADC12MEM15 R/W 0140h...015Eh niezmieniony
Rejestry kontrolne wyniku 0...15 ADC12MCTL0..ADC12MCTL15 R/W 080h...08Fh Reset z POR
��$�%$(, F�B�
O �*$F�B�
Dla przetwornika tempe-
ratury wymagany jest czas
S/H co najmniej 30 ms. Do
EOS SREF
INCH
70
Elektronika Praktyczna 2/2008
278158205.049.png 278158205.050.png 278158205.052.png
 
PODZESPOŁY
wyznaczenia wymaganego
podziału SHT wykorzystamy
poniższą formułę:
List. 7. Pomiar temperatury struktury mikrokontrolera
// Plik naglowkowy
#include „msp430x44x.h”
// Zmienne globalne
signed short temperatura = 0;
// Przerwanie po zakonczonej konwersji
#pragma vector = ADC12_VECTOR
__interrupt void ISR_ADC12(void)
{
temperatura = ADC12MEM0;
__low_power_mode_off_on_exit(); // LPM exit
}
// Inicjacja przetwornika ADC12
void ADC12Init(void)
{
ADC12CTL0 = SHT0_3 + SHT1_3 + REFON + ADC12ON;
// ADC12, SHtime->32, SingleConv, Ref->1.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_10; // 0..Vref, in -> temp
ADC12IE = 0x0001; // MEM0->przerwanie
ADC12CTL0 |= ENC; // włącz konwersję (czekaj na wyzwolenie)
}
// Glowna funkcja
void main(void)
{
unsigned short ShortTmp1, ShortTmp2; // Zmienne pomocnicze
WDTCTL = WDTPW + WDTHOLD; // watchdog, off
__enable_interrupt(); // system przerwan, wlaczony
ADC12Init(); // inicjacja przetwornika ADC
while (true) // glowna petla
{
ADC12CTL0 |= ADC12SC; // wyzwolenie pojedynczej konw.
__low_power_mode_3(); // LPM3
ShortTmp2 = temperatura; // Przeliczenie wartosci
ShortTmp2 = ShortTmp2 << 3; // * 13 / 128 -> 0,102
ShortTmp1 = temperatura << 2;
ShortTmp1 += temperatura;
ShortTmp2 += ShortTmp1;
ShortTmp2 = ShortTmp2 >> 7;
temperatura = ShortTmp2 - 278; // offset
__no_operation();
}
}
SHT =30[ms]·625[kHz]=18,75
Najbliższy (większy)
współczynnik to 32 (bity
ADC12CTL0.SHT0,1).
Ponieważ przetwornik
ma być wyzwalany progra-
mowo, należy wybrać jako
źródło wyzwalania sygnał
ADC12SC (bity ADC12CTL1.
SHS). Należy pamiętać rów-
nież o bicie ADC12CTL1.
SHP=1, który rozróżnia
funkcję wyzwalania od
bezpośredniego sterowania
mechanizmem S/H prze-
twornika. Tryb pojedyn-
czej konwersji ustawiamy
poprzez bity ADC12CTL0.
MSC=0 oraz ADC12CTL1.
CONSEQ=0.
Zaplanowano, że wynik
konwersji będzie zapisywany
do pierwszej komórki bufo-
ra (bity ADC12CTL1.CSTAR-
TADD). Ponieważ przetwor-
nik będzie pracował w trybie
pojedynczej konwersji, nale-
ży skonfigurować tylko ten
rejestr konfiguracyjny, który
odnosi się do tej komór-
ki (rejestr ADC12MCTL0).
W rejestrze tym wybiera-
my kanał 10 multipleksera
(bity ADC12MCTL0.INCH)
oraz określamy źródło na-
pięć referencyjnych (bity
ADC12MCTL0.SREF). Za-
łożono wykorzystanie we-
wnętrznego źródła referen-
cyjnego (ADC12CTL0.RE-
FON) o napięciu 1,5 V.
Ostatni etap konfigura-
cji przetwornika to włącze-
nie przerwania p o zapisie
wyniku do pamięci (bity
ADC12IE.ADC12IE0). Obsłu-
ga przerwania ogranicza się
do przepisania przetworzo-
nej wartości do zmiennej
globalnej ( temperatura ) oraz
wyprowadzenie procesora
z trybu uśpienia.
Pętla główna programu,
poza wyzwalaniem konwer-
sji, zawiera algorytm prze-
kształcenia wartości nie-
mianowanej (w bitach) na
temperaturę w °C. Funkcja
temperatury jest określona
zależnością:
��������#������.�����4�����������.-���
' -$ �� . �+ ��7O*� �+
�!FF� �+ -$
w przypadku, gdy mikrokon-
troler nie potrafi sprzętowo
mnoż yć i dzielić, kompi-
lator dołączy do kodu do-
datkową bibliotekę, a samo
przeliczanie będzie dłu-
go trwać. Jeżeli nie zależy
nam na optymalizacji, za-
równo wielkości programu,
jak i szybkości jego działa-
nia, to rzeczywiście nie ma
sensu gimnastykować umy-
słu. Warto jednak wiedzieć,
że w większości przypad-
ków optymalizacja z bardzo
dobrym skutkiem nie jest
skomplikowana. Proszę za-
uważyć, że wartość 0,103
można zastąpić ułamkiem
z dość dobrym przybliże-
niem:
przez liczbę 2. Wynika to
z systemu dwójkowego ja-
kim się posługuje. Dzielenie
i mnożenie przez 2 to prze-
cież nic i nnego jak prze-
suwanie w lewo lub w pra-
wo. Dlateg o bardzo ważne
aby w mianowniku naszego
uła mka znalazła się całko-
wita potęga liczby 2. Licz-
nik również warto rozłożyć
na sumę całkowitych potęg
2. Tak za implementowa -
na fun kcja tran slac ji będ zie
wykonywała się znacznie
s zybc iej i zajmowała mniej
pamięci kodu. Dopełniając
idei optymalizacji wykorzy-
stajmy do obliczeń zmien-
ne lok alne u mie szcza ne
w rejestrach oraz zapiszmy
działania w postaci krótkich
formuł. Wyznaczona wartość
temperatury znajduje się
w zmiennej temperatura .
Piotr Tadrzak
Contrans TI
gdzie, U S – spadek na-
pięcia na czujniku wyzna-
czany z pon iższej for muły:
����������4�5���#0�
. �+ �� . ��� �+
$ "$
$ ����
. �+ �� "F��� �+
��7* $ ���� ��!�**� �+ �� $ ����
gdzie, C temp – wyni k kon-
wersji analogowo–cyfrowej
pr zetwornika 12–bitowego.
W wyniku podstawienia
otrzymujemy osta teczną za-
leżność:
�����#4���������-�����������.��
' -$ �� �!�**� �+ �� $ ���� �7O*� �+
�!FF� �+ -$
' -$ ���!"��� -$ �� $ ���� �$EO
"$O $ $ $ "
$ E ��!"�$
�!FF� �+ -$
' -$ ���!"��� -$ �� $ ���� �$EO
Przy rozkładzie należy
kierować się podstawową
zasadą: procesor potrafi bar-
dzo szybko mnożyć i dzielić
W języku C taką za-
leżność można zaimple-
mentować wprost, jednak
72
Elektronika Praktyczna 2/2008
��7* $ ���� ��!�**� �+ �� $ ����
' -$ �� �!�**� �+ �� $ ���� �7O*� �+
�������������
�!"��� "�
278158205.053.png 278158205.054.png 278158205.055.png 278158205.056.png 278158205.057.png 278158205.058.png 278158205.059.png 278158205.060.png 278158205.062.png 278158205.063.png 278158205.064.png 278158205.065.png 278158205.066.png 278158205.067.png 278158205.068.png 278158205.069.png 278158205.070.png 278158205.071.png 278158205.073.png 278158205.074.png 278158205.075.png 278158205.076.png 278158205.077.png 278158205.078.png 278158205.079.png 278158205.080.png 278158205.081.png 278158205.082.png 278158205.084.png 278158205.085.png
 
Zgłoś jeśli naruszono regulamin