MIKROPROCESORY – architektura i programowanie DAC

Transkrypt

MIKROPROCESORY – architektura i programowanie DAC
MIKROPROCESORY – architektura i programowanie
WEWNĘTRZNE UKŁADY PERYFERYJNE – PRZETWORNIKI ANALOG – CYFRA
ORAZ CYFRA – ANALOG
DAC
Wyposażenie mikro-kontrolerów w przetworniki analogowo-cyfrowe i cyfrowo-analogowe można
uznać za jedno z najważniejszych osiągnięć w ich rozwoju. Nasz przykładowy CISC: ADuC812
jest wyposażony w 8-mio kanałowy 12-to bitowy przetwornik analogowo-cyfrowy i dwa 12-to
bitowe przetworniki cyfrowo-analogowe (DAC0 i DAC1).
Dane z postaci cyfrowej można skonwertować do formy analogowej za pomocą wzmacniacza
pracującego w trybie układu sumującego. Najczęściej wymienia się dwa układy dla tego typu
konwersji. Układ (rys.1.) z zestawem oporników, których wartość stanowi wagę z jaką wartość
odpowiadająca danemu bitowi wchodzi do sumy wyniku. Układ ten ma znaczne wady, głównie
wynikające z potrzeby stosowania precyzyjnych oporników, o wartościach z szerokiego zakresu,
gdy układ miałby być stosowany dla wielobitowych konwersji. Dla 12-bitowych danych największy
opornik miałby wartość 2048 razy większą niż najmniejszy.
Powszechnie stosuje się, przedstawiony na rys.2. układ „drabinki R-2R”.
Rys. 1. Układ konwersji DAC z „ważonymi” opornikami
Rys. 2. Układ konwersji DAC „z drabinka R-2R”
1/10
MIKROPROCESORY – architektura i programowanie
PRZETWORNIKI CYFROWO-ANALOGOWE
DAC
Przetworniki cyfrowo-analogowe
w AduC812 pracują na tym samym napięciu
odniesienia co ADC (opisane poniżej).
Przetworniki te wykazują znany efekt
nieliniowości przy końcach zakresu
konwersji. Poza tymi niewielkimi zakresami
( po kilkadziesiąt mV) wykazują dobrą
liniowość i stabilność.
Konwersja wartości cyfrowej, ustawionej
w odpowiednich rejestrach sterujących
pracą przetworników, następuje
natychmiastowo (w odróżnieniu od
konwersji analog-cyfra, która jest
stosunkowo powolnym procesem
iteracyjnym). Dwa, w znacznym stopniu
niezależne, DAC0 l DAC1 mogą być
ustawiane niezależnie lub synchronicznie.
2/10
MIKROPROCESORY – architektura i programowanie
Przetworniki cyfrowo-analogowe
DAC
Nasz przykładowy mikro-kontroler AduC812 wyposażony jest w dwa przetworniki DAC.
REJESTRY ZARZĄDZJĄCE PRACĄ DAC TO KONTROLNY REJESTR DACCON ORAZ REJESTRY DANYCH:
DACCON rejestr SFR o adresie FDH
MODE RNG1
7
6
RNG0
5
CLR1
4
CLR0
3
SYNC
2
PD1
1
PD0
0
Bit MODE wybiera pracę DAC-ów jako 8-mio bitowe (MODE=1) lub 12-to bitowe.
Bity RNG wybierają zakres sygnałów wyjściowych dla każdego DAC z osobna. RNG = 1 wybiera
zakres 0 – Vdd (napięcie zasilania), RNG = 0 wybiera zakres 0 – Vref.
CLR powinny być ustawione na 1 dla normalnej pracy DAC. Wartość zero forsuje zero sygnału na
wyjściu.
SYNC ustawiony na 1 oznacza, że sygnał wyjściowy pojawia się natychmiast po ustawieniu
młodszego rejestru danych (DAC0L lub DAC1L). Jest to praca asynchroniczna. Gdy chcemy, by
analogowe sygnały wyjściowe pojawiły się równocześnie, wtedy bit SYNC ustawiamy na zero.
Wtedy wpisanie wartości do DAC0L ani do DAC1L nie wyzwala ustawienia wyjścia. Dopiero
postawienie bitu SYNC na 1 wyznacza moment jednoczesnego ustawienia analogowych linii
wyjściowych procesora.
Rejestry DAC0H i DAC1H służą oczywiście do wpisywania czterech starszych bitów danych
i powinny, przy pracy asynchronicznej być wypełniane PRZED wpisaniem wartości do DAC0L/1L.
3/10
MIKROPROCESORY – architektura i programowanie
Przetworniki analogowo-cyfrowe -
ADC
Istnieje wiele metod konwersji analogowo-cyfrowych. Wśród najczęściej stosowanych
wylicza się metodę bezpośrednią (flash ADC), metodę kolejnych przybliżeń, metody całkowe
oraz tzw. metodę Sigma-Delta.
Wspólnym dla różnych technik konwersji, jest zapewnienie niezakłóconego próbkowania
sygnału analogowego oraz zapewnienie jego stabilności na czas przeprowadzania konwersji.
Tę stabilność realizuje się często przez włączenie w układ konwertera bloku S/H – sample
and hold (pobierz i przechowaj).
Przetworniki ADC w mikro-kontrolerach ADuC812
wykorzystują technikę kolejnych przybliżeń.
Konwersja ta opiera się na porównywaniu sygnału
analogowego z przetworzonym przez wewnętrzny
DAC cyfrowym przybliżeniem generowanym krok po
kroku przez zegar napełniający rejestr przybliżenia,
SAR. W pierwszym kroku DAC ładuje się najstarszym
bitem. Bit pozostaje ustawiony, gdy wyjście z DAC nie
przekracza sygnału. W przeciwnym razie bit jest
zerowany. W następnych taktach ustawiane (oraz
ewentualnie zerowane) są kolejne bity.
Liczba taktów zegara potrzebnych dla pełnej konwersji
nieznacznie przekracza liczbę bitów przetwornika.
Schemat blokowy ADC pracującego
techniką kolejnych przybliżeń
4/10
MIKROPROCESORY – architektura i programowanie
ADC
Schematyczny układ przetwornika analogowo-cyfrowego
z ADuC812 przedstawia rysunek (wzięty, jak część rysunków
w tych notatkach z Data Sheet for AduC812, Rev E.
www.analog.com).
Konwersja sygnału analogowego, podawanego na linię
wejściową procesora, sterowna jest zegarem, którego
częstotliwość wynika z częstości zegara procesora
i dzielnika, wybieranego programowo. Zalecany zakres
częstotliwości pracy ADC: 400kHz – 4 MHz (ADuC812).
Przełączaniem kanałów steruje program, odnosząc się do
odpowiednich
rejestrów
SFR.
Niewielka
pojemność
wejściowa, reprezentowana na rysunku kondensatorem 2 pF,
może wnosić pewien błąd pomiarowy przy szybkim
przełączaniu kanałów. Przy zalecanym zakresie częstotliwości
i zapewnieniu małej oporności wyjściowej źródła (poniżej 60
Ω) błąd jest zaniedbywalny. Jeśli warunek małej stałej
czasowej jest niezachowany, to ograniczenie szybkości
przełączania należy do programisty.
5/10
MIKROPROCESORY – architektura i programowanie
Zdolność rozdzielczą ADC wyznacza
liczba bitów wyniku konwersji oraz
napięcie odniesienia (referencja).
Maksymalny sygnał analogowy, który
może zostać poprawnie przetworzony
na wartość cyfrową jest równy
napięciu referencyjnemu, a jego
przetworzona wartość to maksymalny
integer mieszczący się w rejestrze
wyniku.
Dla ADuC812 wewnętrzne napięcie
referencji wynosi 2.5 V. Taki jest więc
maksymalny sygnał, który może być
przetworzony ma wartość 4095, a
najmniejsza mierzalna różnica między
dwoma sygnałami wynosi 0.61mV.
ADuC812 może pracować także z
zewnętrznym źródłem referencji. Jego
wartość, większa od 2.3V, nie może
przekraczać napięcia zasilania.
Idealna, liniowa relacja analog-cyfra
może być obarczona błędami.
Producent ADuC812 wprowadził
automatyczną kalibrację, dzięki której
eliminuje się błąd przesunięcia zera
i błąd nachylenia.
6/10
MIKROPROCESORY – architektura i programowanie
REJESTRY STERUJĄCE PRACĄ ADC:
ADCCON1 (ADC Control #1) to rejestr SFR o adresie EFH.
MD1
7
MD0
6
CK1
5
CK0
4
AQ1
AQ0
T2C
EXC
3
2
1
0
Para bitów MD1 MD0 kontroluje zasilanie obwodów ADC, para CK1, CK0 wyznacza dzielnik zegara,
para AQ1, AQ0 wyznacza liczbę cykli zegara ADC, którą dodatkowo przeznaczamy na czas akwizycji
sygnału wejściowego (zwykle wystarcza 1).
MD1 MD0
CK1
CK0
dzielnik zegara
0
0
Obwody ADC nie są zasilane
0
0
1
0
1
Normalna praca
0
1
2
1
0 ADC nie zasilane jeśli nie biegnie konwersja
1
0
4
1
1
Stan uśpienia
1
1
8
(W stanie uśpienia napięcie referencyjne jest utrzymywane, a wyłączone są pozostałe obwody ADC)
AQ1
0
0
1
1
AQ0
0
1
0
1
liczba extra cykli
1
2
4
8
Bit T2C (ADCCON.1) może być ustawiony przez
programistę. Ustawiony oznacza zezwolenie na
użycie licznika T2 dla wyzwalania procesu konwersji. Konwersja startuje przy DRUGIM przepełnieniu licznika.
Bit EXC jest ustawiany również przez programistę i ustawienie zezwala na użycie sygnału
doprowadzanego do linii procesora CONVST jako wyzwalania konwersji (active low, jak zwykle).
7/10
MIKROPROCESORY – architektura i programowanie
REJESTRY STERUJĄCE PRACĄ ADC:
ADCCON2 (ADC Control #2) to rejestr SFR o adresie D8H.
ADCI
7
DMA
6
CCONV SCONV CS3
5
4
3
CS2
CS1
CS0
2
1
0
Bity CS3 – CS0 ustawiają numer kanału dla przyszłej konwersji:
CS3 CS2 CS1 CS0 Wybrany kanał
Bit ADCI to wskaźnik
0
0
0
0
0
przerwania, który jest
0
0
0
1
1
ustawiany, gdy konwersja
0
0
1
0
2
jest zakończona. Używany
“
“
“
“
“
gdy decydujemy się na
0
1
1
0
6
pracę ADC w trybie
0
1
1
1
7
przerwań.
1
0
0
0
pomiar temperatury układu
1
1
1
1
wstrzymuje pracę DMA
Pozostałe konfiguracje bitów nie są używane.
Ustawienie bitu DMA zezwala na pracę ADC w trybie Direct Memory Access, który zwłaszcza przy
żądaniu konwersji ciągłej zezwala na akwizycję pomiarów bez obciążania procesora. Praca DMA
zostanie omówiona w przyszłych wykładach.
CCONV ustawia programista i zezwala na pracę ADC trybie konwersji ciągłej – po zakończeniu jednego
procesu konwersji, startuje następny. Wyzwalanie konwersji zależy od innych ustawień.
Ustawienie SCONV inicjuje pojedynczą konwersję. Bit jest zerowany sprzętowo po zakończeniu
konwersji.
8/10
MIKROPROCESORY – architektura i programowanie
REJESTRY STERUJĄCE PRACĄ ADC:
ADCCON3 (ADC Control #3) to rejestr SFR o adresie F5H.
BUSY
7
RSVD
6
RSVD
5
RSVD
4
RSVD
3
RSVD
2
RSVD
1
RSVD
0
Ten rejestr nie jest zbyt bogaty. Bit BUSY jest jedynie do czytania. Jest ustawiany automatycznie
(sprzętowo) w trakcie konwersji lub kalibracji i także automatycznie zerowany po zakończeniu
konwersji lub kalibracji.
Wyniki konwersji znajdują się w
ADCDATAH i ADCDATAL , rejestrach SFR. Wynik konwersji jest 12-bitowy. Cztery najstarsze bity
znajdują się na pozycjach ADCTADAH.3 – ADCDATAH.0 a pozostałe w rejestrze ADCDATAL.
UWAGA! Na pozycjach ADCDATAH.7 – ADCDATAH.4 automatycznie, po pomiarze znajduje się numer
kanału ADC, z którego pomiar pochodzi.
ADuC812 ma wbudowaną automatyczną funkcję kalibracyjną, która uruchamia się po włączeniu
zasilania. Programista ma dostęp do dwóch parametrów kalibracyjnych i może je zmieniać, jeśli
uważa, że jego wartości są lepsze. Producent dostarcza kodu procedury i można go zastosować dla
własnej kalibracji lub zmienić.
Parametry kalibracyjne dostępne dla programisty to 14-bitowe wartości umieszczone w
następujących rejestrach:
ADCGAINH (zawiera 6 starszych bitów parametru korygującego nachylenie prostej odnoszącej sygnał
do wartości odczytu), ADCGAINL – pozostałe 8 bitów tego parametru.
ADCOFSH i ADCOFSL – to rejestry zawierające 14-bitową wartość parametru korygującego punkt
przecięcia prostej z początkiem układu współrzędnych.
9/10
MIKROPROCESORY – architektura i programowanie
PRZYKŁAD PROGRAMU używającego ADC w w trybie pojedynczej konwersji, bez zezwolenia na
przerwania.
USTAWIENIA WSTĘPNE:
MOV
ADCCON1,#01100000B
PRZYGOTOWNIE KONWERSJI:
MOV
ADCCON2,#02H
SETB
SCONV
JB
SCONV,$
SETB
SCONV
JB
SCONV,$
PRZETWORZENIE WYNIKU:
MOV
WYNIKH,ADCDATAH
MOV
WYNIKL,ADCDATAL
ANL
WYNIKH,#0FH
;ADC normal, clk div 4, aq 0, no T2, no EXT
;wybranie kanału 2
;czekaj na zakończenie konwersji. Pierwsza zła.
;OK
;”wymaskuj” numer kanału
DYSKUSJA: W przykładzie pokazano użycie ADC BEZ zezwolenia na przerwania. Wynika to stąd, że
konwersja, która w przypadku tego procesora zajmuje ok. 17 cykli zegara ADC, czyli pojedyncze
mikrosekundy. Obsługa przerwania byłaby w tym przypadku nieuzasadniona.
Na pewną przykładową przestrogę wskazuje użycie dwóch następujących po sobie konwersji. Otóż
producent procesora podał w informacjach o błędach, że w przypadku konwersji następującej po
czasie dłuższym niż 200 ms od ostatnio przeprowadzonej wynik jest niepoprawny i należy go
powtórzyć!
10/10

Podobne dokumenty