Ćw.9 Badanie mikroprocesorowego przetwornika A/C (AduC812 lub ADuC831) Problemy teoretyczne: Podstawy architektury mikrokontrolerów i mikrokonwerterów pamięć programu, pamięć danych, interfejs komunikacyjny RS-232, moduły programowanych liczników/dzielników, system przerwań. Teoria próbkowania i kwantowania sygnałów analogowych. Zasada działania przetwornika A/C z równoważeniem wagowym (sukcesywna aproksymacja). Program ćwiczenia: 1. Uruchomić mikrokomputer PC system operacyjny WINDOWS XP/7/8 i zalogować się w systemie jako użytkownik student (bez hasła). 2. W folderze C:\SPWF\ założyć unikalny folder dla studenckiej grupy laboratoryjnej (tylko w tym folderze można dokonywać zapisów i modyfikacji własnych plików). 3. Zapoznać się z podstawowymi własnościami mikrokonwerterów ADuC812 / ADuC831 (plik: ADuC812.pdf lub AduC831.pdf): multiplekser kanałów analogowych, układ T-H, przetwornik A/C, napięcie referencyjne przetwornika, metody transferu danych uzyskiwanych z przetwornika, kanał monitorowania temperatury układu mikrokonwertera, pamięć (organizacja pamięci programu, pamięci danych, pamięci zewnętrznej, rodzaje pamięci, procesor rdzeniowy 8051, podstawowe własności, zegar systemowy, liczniki/dzielniki, porty WE/WY, moduły dodatkowe, zasilanie, urządzenia peryferyjne (moduły transmisji szeregowej, transmisji I 2 C, moduł nadzorcy systemu, moduł kontrolera zasilania), zastosowania modułu mikrokonwertera. 4. Zapoznać się z modułem typu EVAL-KIT ADuC812/831 (zasilanie, konfigurowanie pamięci, podłączanie zewnętrznych analogowych sygnałów testowych: sinus, trójkąt, prostokąt) oscyloskop t Generator / Częstościomierz 0123456789kHz Reg. fx x(t) y(t) UDC Ax x1 x10 x100 x1000 moduł ADuC831 Sensor temp. rdzeń 8051/52 UREF AI7 AI6 AI5 AI4 AI3 AI2 AI1 AI0 AGND T/H A/C U REF 2.5V RAM zewn. 2kB mikrokomputer UART RS232 Rys. 1. Schemat blokowy układu testowania przetwornika A/C modułu mikrokonwerttera ADuC831. SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 1-
(a) & zwolnione (b) wciśnij (c) wciśnij (RESET=0) (PSEN=1) (RESET=0) (PSEN=0) (RESET=1) (PSEN=1) (d) zwolnij (e) zwolnij (RESET=0) (PSEN=0) (RESET=0) (PSEN=1) Rys. 2. Zasada wprowadzenia modułu ADuC8xx w tryb ładowania programu użytkownika (- RESET, -Serial_Download kolejność wciskania i zwalnia przycisków). 5. Uruchomić program komunikacyjny HyperTerminal (ADuC8xx.ht), dostosować port oraz parametry transmisji do współpracy z minimodułem: - kanał komunikacyjny COM1: parametry transmisji (prędkość transmisji- 9600bitów/sek, 8 bitów danych, parzystość/brak, 1 bit stopu, brak sterowania przepływem danych, bufor FIFO z zapewnioną zgodnością z UART em 16550. - konfiguracja terminala ANSI. 6. Uruchomić i zapoznać się z obsługą pakietu programowego μvision4 lub μvision5 do edycji, kompilowania, konsolidowania i uruchamiania aplikacji użytkownika w środowisku C-Keil (GS51.pdf) 7. Załadować i uruchomić wzorcowy projekt AC_8xx.uvproj zawierający pojedynczy moduł programu AC_8xx.c. Zapoznać się z postacią źródłową programu. Przedstawić algorytm programu w formie grafu, wskazać fragmenty kodu odpowiedzialne za przygotowanie modułu do konwersji A/C i wyjaśnić znaczenie parametrów przekazywanych do rejestrów wewnętrznych mikrokonwertera, obsługę przetwornika w trybie pojedynczej konwersji i w trybie DMA. 8. Dokonać modyfikacji programu AC_8xx.c dla dwóch różnych częstości próbkowania sygnałów analogowych fx1 i fx2 (wartości poda prowadzący laboratorium); liczbę próbek mierzonych wielkości ustalić każdorazowo na wartość N=256. W sprawozdaniu przeprowadzić analizę doboru częstości próbkowania związaną z doborem odpowiednich wartości dzielnika częstotliwości systemowej zegara/licznika L2 (Częstotliwość zegara systemowego rdzenia wynosi Fclk=11059200Hz) zwrócić uwagę na lokalizację kompilowanych plików i jej wyników. 9. Określić w szybkość bitową przetwornika, częstość próbkowania i czas konwersji przetwornika A/C (rodzaj i liczba cykli zegara systemowego fclk). 10. W środowisku μvision przeprowadzić realizację projektu (kompilacja, konsolidacja, hexkonwersja) stosując poniższe parametry: - opcje kompilacji C51 CD SB DB OE ROM(Small) Large - opcje konsolidacji BL51 NOOL RS(256) PL(68) PW(78) CO(0) 11. Zweryfikować podłączenie układu pomiarowego zgodnie z rys. 1. W odpowiedniej kolejności zrealizować: włączyć zasilanie oscyloskopu włączyć zasilanie generatora/częstościomierza ustawić zadane parametry testowanego sygnału (rodzaj sygnału: sinusoida/trójkąt/prostokąt, częstotliwość fx, amplituda Ax, składowa stała UDC) (proponowane wartości: sinus, fx=10khz, Ax=1V, UDC=0.5V zadane wartości koniecznie zweryfikować na ekranie oscyloskopu!) SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 2-
podłączyć sygnał testowy fx do wejścia AIN0..7 modułu ADuC831 (wybór wskazuje prowadzący). 12. Opracować wyniki pomiarów wykorzystując funkcję przeniesienia danych z aplikacji HyperTerminal do pliku tekstowego, dokonać konwersji wyników z postaci binarnej na postać reprezentującą wielkość fizyczną (napięcie, temperatura), wyniki przedstawić w postaci graficznej w jednostkach fizycznych wielkości mierzonych (napięcie [V] lub [mv], czas [s], [ms] lub [μs]). Na podstawie przeprowadzonych pomiarów dokonać oceny podstawowych parametrów mierzonych sygnałów (amplituda, wartość średnia, wartość skuteczna, wartość maksymalna, czas obserwacji, okres, częstotliwość, współczynnik wypełnienia). Do rejestrowania wyników pomiarów wykorzystać funkcję programu Hyperterminal z zakładki Transfer/Przechwyć tekst/plik.txt. 13. Zarejestrować kilka pomiarów temperatury wewnętrznego czujnika temperatury mikrokonwertera (kolejne wciśnięcia przyciski INT pakietu minimodułu). Dokonać konwersji binarnego wyniku przetwarzania do wielkości fizycznej temperatury mierzonej w stopniach Celsjusza (niezbędne dane do przeprowadzenia konwersji związane z budową czujnika temperatury przedstawiono na rys. 3 - dokumentacja ADuC8xx.pdf). Przeprowadzić analizę uzyskanych wyników pomiaru. Rys. 3. Charakterystyka przetwarzania przetwornika A/C mikrokonwertera ADuC812/831. Sensor Voltage Output temperatury at 25 C Voltage TC ADuC812 600mV -2.0 mv/ C ADuC831 650mV -3.0 mv/ C [ C] -2mV/ C 25 C 650mV U [mv] Rys. 4. Parametry wewnętrznego czujnika temperatury mikrokonwertera AduC831. SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 3-
14. Zrealizować procedurę restartu mikrokonwertera (wciśnięcie przycisku RESET) z jednoczesnym podtrzymywaniem wciśniętego przycisku INT0, odebrać i zarejestrować binarne wyniki przetwarzania lokalnego sensora temperatury. Dokonać konwersji wartości binarnej wyników przetwarzania na temperaturę w skali Celsjusza. Skomentować wyniki pomiaru. Literatura: 1. Z.Kulka, A.Libura, M.Nadachowski: Przetworniki analogowo-cyfrowe i cyfrowoanalogowe. WkiŁ, Warszawa 1987 2. Rudy van de Plassche: Scalone przetworniki analogowo-cyfrowe i cyfrowo-analogowe. WKiŁ, Warszawa 2001. 3. ADuC831, MicroConwerter TM, Multichannel 12-Bit ADC with Embedded FLASH MCU, Analog Devices, Rev.0, (plik: ADuC831.pdf) 4. MicroConverterTM QuickStartTM, Applications Board User, ADuC831 52PQFP applications board user guide, V3, (plik: 831pcb.pdf) Rys. 5. Schemat blokowy mikrokonwertera AduC 812. SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 4-
Rys. 6. Schemat blokowy mikrokonwertera ADuC 831. dla ADuC812 2 f sampl sygnał wyzwalający przetwornik A/C Rys. 7. Schemat blokowy zegara/licznika-l2 pracującego w 16-bitowym trybie auto-przeładowania i generującego sygnał wyzwalania przetwornika A/C. Tab. 1. Wybrane parametry ADuC831 (DC Accuracy) SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 5-
Parametr VDD=5V VDD=3V Jednostka Warunki Resolution 12 12 Bity Relative Accuracy ±3 ±3 LSB typ Differential Nonlinearity ±1 ±1 LSB max 2.5 V internal Ref. ±0.3 ±0.3 LSB typ Offset Error ±5 ±5 mv max VREF Range Gain Error -0.3-0.3 % typ VREF Range SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 6-
Przykładowy program obsługi mikrokonwertera: (kolorem szarym zaznaczono linie źródłowe związane z zadawaniem częstości próbkowania) #include <ADuC831.h> #include <stdio.h> // predefiniowane symbole ADuC831 #define SENSTEMP 8 // kanal 8 #define DMASTOP 15 // DMA-> STOP #define DZ 18 // dzielnik Licznika2, zadawanie częstotliwości próbkowania // ZMIENNE DEFINIOWANE W WEWNETRZNEJ PAMIECI RAM idata int xdata *ptr; idata int num; bdata bit C; sbit P32 = P3^2; // linia INT0 = Port3.2 - przelacznik Int0 sbit LED = P3^4; // dioda LED idata unsigned char ch; // numer przetwarzanego kanalu xdata int DMASTART[1024]; // segment pamieci dla przeslan DMA // Procedura obslugi przerwania generowanego sygnalem ADCI z przetw. ADC void end_of_adc(void) interrupt 6 { // int_6*8+3 = 51dec = 33hex = ADCI TR2=0; // zakoncz wyzwalanie przetwornika C=0; // zeruj wskaznik } // Procedura obslugi przerwania generowanego sygn. zewnetrznym INT0 // W obsludze tego przerwania realizujemy pomiar temperatury void interrupt_0 () interrupt 0 { int T; } ADCCON1 = 0x80; ADCCON2 = SENSTEMP; for (T=0; T<100; T++) ; SCONV = 1; while (!ADCI); T=((ADCDATAH & 0x0F) * 256) + ADCDATAL; ADCCON1=0x00; printf ( "\ntemperatura binarnie = %u bit",t ); // wlaczenie zasilania przetwornika // wlaczenie sensora temp. // opoznienie programowe // rozkaz pojedynczej konwersji // oczekiowanie na zakonczeniu konwersji SCCONV<=0 // odbior wyniku przetwarzania // wylaczenie zasiolania przetwornika // wyswietlenie binarnej wartosci wyniku przetwarzania A/C main() { int i, DMACOUNT; CFG831=0x11; // Uaktywnij pamiec 2kB pamieci RAM jako XDATA // KONFIGURACJA portu transmisji szeregowej - UART T3CON=0x085; // specjalizowany licznik L3 T3FD= 0x08; // szybkość transmisji 9600baud SCON = 0x052; printf("%ctestowanie PRZETWORNIKA A/C \n", 0x0C); printf("\nwprowadz numer kanalu przetwarzania A/C (0-15):?"); // Numer przetwarzaniego kanalu scanf ("%bd", &ch); ch&=0xf; // liczba: od 0 do 14 printf("\npodaj liczbe probek sygnalu pomiarowego DMACOUNT:?"); // Liczba próbek mierzonego sygnału scanf ("%u", &DMACOUNT); printf("\nwybrales kanal nr=%bd i N=%d probek sygnalu badanego", ch, DMACOUNT); // PRE-KONFIGURACJA zewnetrznej RAM dla DMA w pojedynczym kanale for(i=0; i<dmacount; i++) DMASTART[i] = ch << 12; DMASTART[i]=DMASTOP << 12; // Znacznik konca bloku danych pomiarowych: Stop DMA for (i=0; i<=dmacount; i++) { // Wydruk kontrolny prekonfigurowanego obszaru RAM if (i % 8 ==0) printf("\n"); printf("%3d=%04x ", i, DMASTART[i] ); } // KONFIGURACJA ADC dla konwersji typu DMA... DMAL=0; // adres inicjujacy kanal operacji DMA DMAH=0; DMAP=0; // koniecznie w takim porzadku: DMAL, DMAH, DMAP) TL2,TH2=0; // Fsys=11059200Hz SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 7-
RCAP2L=0x10000-DZ; RCAP2H=(0x10000-DZ)>>8; ADCCON1=0x9E; ADCCON2=0x40; C=1; EA=1; EADC=1; TR2=1; // Tosc=12/Fosc -> 1.085us // okres probkowania = T2 =(DZ*1.085us) // [RCAP2H,RCAP2L]= 65536 - DZ // tryb zasilania -> normaly // tryb przesylania danych -> DMA // wyzwalanie przetwornika -> Timer2 // lokany wskaznik warunku // globalne zezwolenie obslugi przerwan // zezwolenie obslugi przerwan przetwornika ADC // zezwolenie na prace licznika L2 // Trwa konwersja i przesylanie danych DMA // kiedy transmisja DMA jest kompletna, przetwornik ADC generuje // przerwanie i zeruje bit C while (C); // wynik przetwarzania ADC jest juz dostepny w RAM EA=0; // wstrzymana obsluga przerwan - globalnie EADC=0; // wstrzymana obsluga przerwan od przetwornika A/C ADCCON1=0x00; // zasilanie przetwornika wylaczone for(i=0; i<=dmacount; i++) { // wydruk kontrony zawartosci pamieci RAM if (i % 8== 0) printf("\n"); printf("%3d=%04x ", i, DMASTART[i] ); } // wydruk kontrolny w postaci slupka danych for(i=0; i<=dmacount; i++) printf("\n%4u ", DMASTART[i] & 0x0FFF ); printf("\n"); IT0=1; // zezwolenie na obsluge przerwania 0 EA=1; // zezwolenie na obsluge przerwan EX0=1; // zezwolenie na obsluge przerwania zewnetrznego INT0 (przycisk) printf("\nczekam na INT0\n"); while(1) { for (i=0; i<30000; i++) ; LED = ~LED ; } } // KONIEC // Test przetwarzania w trybie pojedynczej konwersji A/C // opoznienie programowe // negacja stanu wysterowania diody LED na przeciwny Przykładowe wyniki (panel hyperterminala) TESTOWANIE PRZETWORNIKA A/C Wprowadz numer kanalu przetwarzania A/C (0-15):?0 Podaj liczbe probek sygnalu pomiarowego DMACOUNT:?128 Wybrales kanal nr=0 i N=128 probek sygnalu badanego 0=0000 1=0000 2=0000 3=0000 4=0000 5=0000 6=0000 7=0000 8=0000 9=0000 10=0000 11=0000 12=0000 13=0000 14=0000 15=0000... 112=0000 113=0000 114=0000 115=0000 116=0000 117=0000 118=0000 119=0000 120=0000 121=0000 122=0000 123=0000 124=0000 125=0000 126=0000 127=0000 128=F000 0=05C9 1=0535 2=04A7 3=0424 4=03AB 5=033F 6=02E4 7=029D 8=0262 9=0236 10=021B 11=020A 12=0220 13=0242 14=0271 15=02B1... 120=038C 121=0400 122=0482 123=050E 124=05A1 125=0639 126=06D3 127=0000 128=F000... 1154 1294 1441 1593 1747... Czekam na INT0 Temperatura binarnie = 1064 bit Temperatura binarnie = 1064 bit Temperatura binarnie = 1064 bit... SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 8-
Pytania kontrolne: 1. Kwantowanie sygnałów analogowych 2. Błąd kwantowania 3. Narysuj schemat blokowy przetwornika A/C pracującego na zasadzie równoważenia wagowego. 4. Schemat blokowy układu testowania przetwornika A/C 5. Multiplekser analogowy w mikrosystemie pomiarowym. 6. Źródło napięcia referencyjnego przetwornika A/C 7. Równanie przetwarzania przetwornika A/C 8. Zasada przetwarzania A/C z dostępem DMA do pamięci RAM 9. Wymienić podstawowe parametry przetwornika A/C 10. Charakterystyka przetwarzania przetwornika A/C unipolarnego i bipolarnego 11. Próbkowanie sygnałów analogowych w mikrosystemach 12. Budowa słowa kodowego przetwornika A/C mikrosystemu ADuC812/831 SPWF_cw_9 Badanie mikroprocesorowego przetwornika AC.docx - 9-