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
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
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*�
�+
�
�������������
�!"���
"�
Plik z chomika:
phill2k
Inne pliki z tego folderu:
MSP430_cz9.pdf
(2015 KB)
MSP430_cz8.pdf
(538 KB)
MSP430_cz7.pdf
(1596 KB)
MSP430_cz6.pdf
(1341 KB)
MSP430_cz5.pdf
(1213 KB)
Inne foldery tego chomika:
Architektura mikrokontrolerów PIC 16F8x
ARM7TDMI
ATAPI
Autorouter Specctra
AVR Assembler
Zgłoś jeśli
naruszono regulamin