POLITECHNIKA WROCŁAWSKA INSTYTUT MASZYN I NAPĘDÓW ELEKTRYCZNYCH LABORATORIUM STEROWNIKÓW MIKROPROCESOROWYCH W NAPĘDZIE ELEKTRYCZNYM Opracowanie: mgr inż. Krzysztof P. Dyrcz mgr inż. Zdzisław Żarczyński
1. CEL ĆWICZENIA Celem ćwiczenia jest poznanie 8 bitowego przetwornika analogowocyfrowego wbudowanego w mikrokontroler SAB 80C535 i zapoznanie się z metodą pomiaru sygnału analogowego. Podczas ćwiczenia należy napisać program w języku asemblera do obsługi przetwornika oraz program w języku BASIC do wizualizacji mierzonego sygnału, uruchomić programy, a także zapoznać się ze sposobem zwiększenia rozdzielczości przetwornika do 10 bitów. 2. PRZYGOTOWANIE DO ĆWICZENIA Zapoznanie się ze strukturą wewnętrzną przetwornika analogowo-cyfrowego, Instrukcje asemblera SAB 80C535, Zintegrowane środowisko programowe asm535. 3. STANOWISKO LABORATORYJNE Sterownik Minikon z klawiaturą i wyświetlaczem, IBM PC z programem Monitor, miernik cyfrowy uniwersalny. 4. WPROWADZENIE Przetwornik a/c jest wewnętrznym układem mikrokontrolera SAB 80C535 przeznaczonym do przetwarzania sygnałów z postaci analogowej na cyfrową 8 - bitową. Istnieje jednak możliwość zwiększenia rozdzielczości przetwornika do 10 bitów dzięki programowalnemu zawężeniu zakresu pomiarowego przetwornika. Wejście przetwornika a/c stanowi 8-wejściowy analogowy multiplekser umożliwiający pomiar napięciowego sygnału analogowego w 8 różnych kanałach w zakresie 0..5V. Czas przetwarzania przetwornika wynosi 13 cykli maszynowych. (15 cykli maszynowych dla mikrokontrolera SAB 80535). Przetwornik a/c wyróżnia się następującymi parametrami: 8 kanałów analogowych AN0..AN7, 8-bitowy port wejść cyfrowych P6, 8-bitowa rozdzielczość pomiaru (10 bitowa przy programowym zawężeniu zakresu pomiarowego), 16 programowalnych podzakresów pomiarowych, programowe wyzwalanie pojedynczego pomiaru lub serii pomiarów, możliwość generowania przerwania po każdym pomiarze. Przetwornik analogowo-cyfrowy Strona 2
Przetwornik korzysta z 3 rejestrów specjalnych SFR: ADCON (adres 0D8H) - wybór kanału pomiarowego i rodzaju przetwarzania, Rejestr ADCON adres 0D8H BD CLK - BSY ADM MX2 MX1 MX0 Znaczenia poszczególnych bitów są następujące: BD - bit używany do określenia szybkości transmisji łącza szeregowego. Zmiana stanu tego bitu może powodować zawieszenie systemu, dlatego podczas pracy przetwornika nie należy modyfikować jego wartości. CLK - umożliwia uzyskanie na wyprowadzeniu procesora CLKOUT (P1.6) sygnału o częstotliwości f CLKOUT = f GEN /12 i wypełnieniu 1/6, przy czym f GEN jest częstotliwością zewnętrznego rezonatora kwarcowego dołączonego do mikrokontrolera. Podobnie jak dla bitu BD nie modyfikuje się jego wartości podczas pracy przetwornika. BSY - wskazuje aktualny stan przetwornika. Jest znacznikiem o atrybucie tylko do odczytu, ustawianym i kasowanym sprzętowo. BSY=0 - przetwornik po zakończeniu przetwarzania, BSY=1 - przetwornik w trakcie przetwarzania. ADM - określa rodzaj przetwarzania. ADM=1 - przetwornik w trybie pracy wielokrotnego pomiaru. Przetwornik wykonuje serię pomiarów, aż do chwili gdy ADM=0. ADM=0 - pomiar pojedynczy, przy czym każdy pomiar musi być uruchamiany programowo. MX2..MX0 - wybór numeru kanału pomiarowego Tabela 4.1. Wybór numeru kanału pomiarowego. MX2 MX1 MX0 Kanał Wejście 0 0 0 0 AN0/P6.0 0 0 1 1 AN1/P6.1 0 1 0 2 AN2/P6.2 0 1 1 3 AN3/P6.3 1 0 0 4 AN4/P6.4 1 0 1 5 AN5/P6.5 1 1 0 6 AN6/P6.6 1 1 1 7 AN7/P6.7 Należy pamiętać, że wejścia AN0..AN7 są jednocześnie wejściami portu cyfrowego P6. Przetwornik analogowo-cyfrowy Strona 3
ADDAT (adres 0D9H) - modyfikowany wynik przetwarzania, Rejestr ADDAT adres 0D9H bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 MSB LSB Przy czym: MSB - najbardziej znaczący bit (Most Significant Bit), LSB - najmniej znaczący bit (Last Significant Bit) W rejestrze ADDAT przechowywana jest całkowita wielokrotność poziomów kwantowania : U x ADDAT =, 1LSB przy czym: 1LSB = V V IntAREF IntAGND 2 8 ( 1LSB oznacza tu najmniejszy poziom kwantowania) Jeżeli podczas pracy mikrokontrolera nie wykorzystujemy przetwornika a/c, wówczas rejestr ADDAT może służyć jako rejestr ogólnego przeznaczenia. DAPR (adres 0DAH) - wybór zakresu przetwarzania. Wybór zakresu rozpoczyna pomiar i przetwarzanie a/c na wybranym kanale. Rejestr DAPR adres 0DAH bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Napięcie V IntAREF Napięcie V IntAGND przy czym: Napięcie V IntAREF - górne wewnętrzne napięcie odniesienia, Napięcie V IntAGND - dolne wewnętrzne napięcie odniesienia. Napięcia te tworzone są przez podział różnicy napięć V AREF i V GND zgodnie ze wzorami: V IntAREF = V AGND + DAPR 7.. 4 16 gdy DAPR 7..4 > 3H (V AREF - V AREF ) V IntAGND = V AGND + DAPR 30.. 16 gdy DAPR 3..0 < 0CH (V AREF - V AREF ) Przetwornik analogowo-cyfrowy Strona 4
Wyboru podzakresu pomiarowego dokonuje się wg tabeli 2 przy założeniu, że wartości napięć odniesienia są następujące: V AREF = +5V, V AGND = 0V. Tabela 4.2. Wybór podzakresu pomiarowego. Podzakres pomiarowy DAPR 7..4 V IntAREF DAPR 3..0 V IntAGND [V] [V] 0 0000 5.0 0000 0.0 1 0001-0001 0.3125 2 0010-0010 0.625 3 0011-0011 0.9375 4 0100 1.25 0100 1.25 5 0101 1.5625 0101 1.5625 6 0110 1.875 0110 1.875 7 0111 2.1875 0111 2.1875 8 1000 2.5 1000 2.5 9 1001 2.8125 1001 2.8125 10 1010 3.125 1010 3.125 11 1011 3.4375 1011 3.4375 12 1100 3.75 1100 3.75 13 1101 4.0625 1101-14 1110 4.375 1110-15 1111 4.6875 1111 - Przy pomiarze na pełnym zakresie pomiarowym 0V..5V dokładność przetwarzania przetwornika wynosi 1LSB = V IntAREF V IntAGND = 5 V 0 V = 19,531 mv, 2 8 256 natomiast przy pomiarze na zakresie zawężonym do 1.25V 1LSB = V IntAREF V IntAGND = 125, V 0 V = 4,883 mv. 2 8 256 Z powyższych obliczeń wynika prosty sposób na zwiększenie dokładności przetwornika o dodatkowe dwa bity. Należy tylko dokonać dwóch pomiarów: pierwszego, na pełnym zakresie pomiarowym dla określenia dwóch najbardziej znaczących bitów wyniku oraz określenia nowego podzakresu pomiarowego, oraz drugiego pomiaru na zawężonym podzakresie pomiarowym dla uzyskania 8 mniej znaczących bitów wyniku przetwarzania. Przetwornik analogowo-cyfrowy Strona 5
Ponieważ rejestr ADDAT jest modyfikowany po każdym cyklu pomiarowym, należy zwrócić uwagę na to, aby podczas pomiaru z dokładnością 10 bitów przed dokonaniem drugiego pomiaru na zawężonym zakresie zapamiętać aktualną zawartość rejestru w innym, nie modyfikowanym podczas pracy przetwornika rejestrze ogólnego przeznaczenia. Do prawidłowej pracy przetwornika a/c wymagane jest spełnienie następujących warunków: napięcia V IntAREF i V IntAGND muszą być dołączone do wyprowadzeń mikrokontrolera. Obecność tych napięć nie jest konieczna, gdy przetwornik nie pracuje, jeżeli napięcia V IntAREF i V IntAGND dołączone są do napięć zasilających mikrokontroler V CC i V SS, to muszą spełniać warunek: V IntAREF = V CC ± 5%, V IntAGND = V SS ± 0.2V, minimalna różnica napięć (V IntAREF - V IntAGND ) 1V, rezystancja wewnętrzna źródła mierzonego napięcia i napięcia wzorcowego nie może być większa niż 5 kω. Po każdym wykonanym pomiarze przetwornik ma możliwość generowania przerwania. Ustawiany jest wówczas bit IADC w rejestrze IRCON, przy czym wektor przerwania ma adres 43H. Rejestr IRCON adres 0C0H EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC Na rys.4.1 przedstawiono schemat blokowy przetwornika a/c. Przetwornik analogowo-cyfrowy Strona 6
wewnętrzna magistrala procesora AN7 AN0 Multiplexer Układ próbkująco-pamiętający (Sample&Hold) V AREF V GND wpis do DAPR f GEN Przetwornik analogowo-cyfrowy V intaref V intagnd Programowanie podzakresu pomiarowego Port P6 wersja ACMOS MX2 MX1 MX0 Rejestr sterujący działaniem ADCON BSY ADM Rejestr wyniku przetwarzania ADDAT Rejestr programowania podzakresu pomiarowego DAPR adres 0DBH adres 0D8H adres 0D9H adres 0DAH BD CLK BSY ADM MX2 MX1 MX0 ADCON MSB bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 LSB ADDAT bit 3 bit 2 bit 1 bit 0 bit 3 bit 2 bit 1 bit 0 DAPR V intaref V intagnd Rys.3.1. Schemat blokowy przetwornika a/c. Przetwornik analogowo-cyfrowy Strona 7
5. LITERATURA 1. SIEMENS, Microcomputer Components. SAB 80515 / SAB 80C515 8 bit single chip Microcontroller Family. Users Manual. 2. Krzysztof P. Dyrcz, Czesław T. Kowalski, Zdzisław Żarczyński, Podstawy techniki mikroprocesorowej, skrypt PWr., Wrocław 1999 3. A. Rydzewski, Mikrokontrolery jednoukładowe rodziny MCS-51. Przetwornik analogowo-cyfrowy Strona 8
Przetwornik analogowo-cyfrowy Strona 9
1. WSTĘP Najprostszym zastosowaniem przetwornika a/c jest jednokrotny pomiar napięcia z rozdzielczością 8 bitową. Ponieważ w rejestrze ADDAT przechowywana jest całkowita wielokrotność poziomów kwantowania, wartość zmierzonego napięcia należy obliczyć ze wzoru: U x = ADDAT 10 * 1LSB, przy czym: ADDAT 10 - dziesiętna postać zawartości rejestru ADDAT. Wynik pomiaru można wyświetlić na linijce diodowej, sterowanej z dowolnego portu wyjścia, na przykład z portu P5. Jednak lepszym sposobem wizualizacji wyniku pomiaru jest wyświetlenie go na ekranie monitora w postaci dziesiętnej, korzystając z programu napisanego w języku BASIC. Listing programu w języku BASIC przedstawiono poniżej: 10 CALL 00H 20 U=XBY(100H) 30 V=(U*5)/256 40 PRINT U = 50 PRINT USING (##.##),V 60 PRINT V 70 INPUT CZY JESZCZE JEDEN POMIAR? 0-NIE, 1-TAK,Z 80 IF Z=1 THEN GOTO 10 90 END przy czym: CALL 00H - wywołanie podprogramu przetwornika a/c, U=XBY(100H) - przypisanie zmiennej U wyniku pomiaru zawartego w zewnętrznej pamięci RAM w komórce o adresie 100H. Algorytm podprogramu do pomiaru napięcia, który należy napisać w asemblerze SAB 535 jest następujący: Przetwornik analogowo-cyfrowy Strona 10
Start programu Deklaracja stałych. Adres początku programu org $00 Konfiguracja przetwornika. Start pomiaru TAK BSY=1 NIE Wysłanie wyniku z ADDAT do zewn. pamięci RAM do komórki #100 Stop programu Rys.4.2. Algorytm programu do pomiaru 8-bitowego przetwornika a/c. 2. PRZEBIEG ĆWICZENIA 1. Zapoznać się z wyposażeniem stanowiska. 2. Przygotować moduł sterownika do pracy z przetwornikiem a/c i do współpracy z komputerem PC. 3. Uruchomić komputer IBM PC. 4. Napisać program w języku asemblera do pomiaru napięcia z rozdzielczością 8 bitów. 5. Uruchomić i przetestować program. 6. Napisać program w języku BASIC do obsługi programu pomiarowego asembler. 7. Uruchomić program BASIC i wyświetlić wyniki pomiaru na ekranie monitora. Przetwornik analogowo-cyfrowy Strona 11
Przetwornik analogowo-cyfrowy Strona 12
1. WSTĘP Jeżeli istnieje potrzeba pomiaru z dokładnością 10 bitów, to pomiaru napięcia U x zawartego w przedziale 0..5V należy dokonać dwukrotnie. Pierwszy pomiar odbywa się przy pełnym zakresie pomiarowym 0..5V. Na podstawie wyniku pomiaru dokonywany jest dobór właściwego podzakresu pomiarowego do wykonania drugiej operacji przetwarzania a/c. Przy doborze podzakresu należy spełnić warunki: V IntAREF - V IntAGND 1V, mierzone napięcie nie może znajdować się na granicy podzakresu, ponieważ wynik drugiego pomiaru może zostać zafałszowany. Sposób pomiaru z rozdzielczością 10 bitów został przedstawiony na rys. poniżej. U 5V pierwszy pomiar 8 bitowy na peł nym zakresie pomiarowym V IntAREF - V IntAGND >= 1V V IntAREF U x V IntGND drugi pomiar 8 bitowy na zawężonym zakresie pomiarowym 0V Rys.4.3. Dobór zakresu pomiarowego. Algorytm doboru podzakresu pomiarowego przedstawiony został poniżej. Dla lepszego zrozumienia ograniczono się do 4 podzakresów pomiarowych: 0..1.25V, 1.25..2.5V, 2.5V..3.75V, 3.75..5V. Dobór podzakresu pomiarowego dokonywany jest na podstawie analizy dwóch najbardziej znaczących bitów wyniku uzyskanego z pierwszego pomiaru. Jeżeli dwa najbardziej znaczące bity mają wartość 00, to wynik pomiaru mieści się w przedziale 6 mniej znaczących bitów, czyli może przyjmować wartości 0..64 d (0..3FH), stąd mierzone napięcie znajduje się w zakresie: (0..64)* 5 256 = 0..1.25V Należy zatem do drugiego pomiaru wybrać zakres 0..1.25V, czyli do rejestru DAPR wpisać wartość 01000000 b = 40H. Przetwornik analogowo-cyfrowy Strona 13
Jeżeli dwa najbardziej znaczące bity mają wartość 01, to wynik pomiaru mieści się w przedziale 7 mniej znaczących bitów, czyli może przyjąć wartości 64..128 d (40H..80H), a mierzone napięcie zmienia się w zakresie: (64..128)* 5 256 = 1.25..2.5V, do drugiego pomiaru należy zatem wybrać zakres 1.25..2.5V, czyli do rejestru DAPR wpisać wartość 10000100 b = 84H. Jeżeli dwa najbardziej znaczące bity mają wartość 10, to wynik pomiaru mieści się w przedziale 8 bitów, czyli przyjmuje wartości 128..192 d (80H..C0H). Mierzone napięcie przyjmuje zatem wartości w zakresie: (128..192)* 5 256 = 2.5..3.75V, czyli należy wybrać zakres 2.5..3.75V wpisując do rejestru DAPR wartość 11001000 b = 0C8H. W ostatnim przypadku dwa najstarsze bity mogą przyjąć wartość 11. Wówczas wynik pomiaru mieści się w przedziale 192..255 d (C0H..FFH), a zmierzone napięcie mieści się w zakresie (192..255)* 5 256 = 3.75..5V, czyli należy wybrać zakres 3.75..5V wpisując do rejestru DAPR wartość 11111100 b = 0FCH. A zatem deklaracja tablicy, w której umieszczone są wartości podzakresów pomiarowych wygląda następująco: db #$40, #$84,#$0C8,#$0FC Wartość mierzonego napięcia obliczana jest na podstawie obu pomiarów wg wzoru: U = A+ B*256 *5, 1024 przy czym: A - osiem bitów z drugiego pomiaru, B - dwa najbardziej znaczące bity z pierwszego pomiaru. B A 1024 256 Przetwornik analogowo-cyfrowy Strona 14
Podobnie jak w pierwszej części ćwiczenia, wynik pomiaru należy wyświetlić na ekranie monitora, korzystając z programu napisanego w języku BASIC, przy czym dwa najbardziej znaczące bity z pierwszego pomiaru należy przesłać do zewnętrznej pamięci RAM do komórki o adresie #101, a osiem bitów z drugiego pomiaru do komórki o adresie #100. Listing programu w języku BASIC przedstawiono poniżej: 10 CALL 00h 20 A=XBY(100H) 30 B=XBY(1O1H) 40 U=256*B+A 50 V=(U*5)/1024 60 PRINT U= 70 PRINT USING (##.##),V 80 PRINT V 90 INPUT CZY JESZCZE JEDEN POMIAR? 0-NIE, 1-TAK,Z 100 IF Z=1 THEN GOTO 10 110 END przy czym: CALL 00H - wywołanie podprogramu przetwornika a/c, A=XBY(100H) - przypisanie zmiennej A wyniku pomiaru zawartego w zewnętrznej pamięci RAM w komórce o adresie 100H, B=XBY(101H) - przypisanie zmiennej B wyniku pomiaru zawartego w zewnętrznej pamięci RAM w komórce o adresie 101H. Algorytm podprogramu do pomiaru napięcia z rozdzielczością 10 bitów, który należy napisać w asemblerze SAB 535 jest następujący: Przetwornik analogowo-cyfrowy Strona 15
Start programu Deklaracja stałych. Adres początku programu org $00 Konfiguracja przetwornika. Start pomiaru TAK BSY=1 NIE Analiza wyniku pomiaru i określenie nowego podzakresu pomiarowego Zapamiętanie 2 najbardziej znaczących bitów pomiaru w komórce o adresie 20H Wybór podzakresu z tablicy. Start pomiaru TAK BSY=1 NIE Przesłanie zawartości komórki #20 do zewn. pamięci RAM do komórki #100 Przesłanie wyniku 2 pomiaru z ADDAT do zewn. pamięci RAM do komórki #100 Stop programu Rys.4.4. Algorytm programu do przetwarzania 10-bitowego przetwornika a/c. Przetwornik analogowo-cyfrowy Strona 16
2. PRZEBIEG ĆWICZENIA 1. Przygotować moduł sterownika do pracy z przetwornikiem a/c i do współpracy z komputerem PC. 2. Uruchomić komputer IBM PC. 3. Napisać program w języku asembler do pomiaru napięcia z rozdzielczością 10 bitów. 4. Uruchomić i przetestować program. 5. Zmodyfikować program BASIC. 6. Uruchomić program BASIC, wyświetlić wyniki pomiaru na ekranie monitora. Przetwornik analogowo-cyfrowy Strona 17