8-bitowe mikrokontrolery ADuC firmy Analog Devices w układach
Transkrypt
8-bitowe mikrokontrolery ADuC firmy Analog Devices w układach
Sławomir Marczak – III rok Koło Naukowe Techniki Cyfrowej Dr inŜ. Wojciech Mysiński – opiekun naukowy 8-bitowe mikrokontrolery ADuC firmy Analog Devices w układach pomiarowych 8-bit microcontrollers ADuC manufactured by Analog Devices in measurement circuits. Keywords: microcontroller, ADUC, measurement circuits, Analog Devices, 8052 Sława kluczowe: mikrokontroler, ADUC, układ pomiarowy, 8052 Mikrokontrolery ADuC firmy Analog Devices są rodziną mikrokontrolerów 8-bitowych, których architektura wewnętrzna bazuje na znanym mikrokontrolerze 8052. Producent zadbał szczególnie o moŜliwość ich zastosowania w precyzyjnych systemach pomiarowych. Obecnie najwięcej zastosowań znajdują w systemach wagowych, czujnikach ciśnienia, pomiarach temperatury, systemach akwizycji danych pomiarowych. Rys. 1 Schemat blokowy architektury mikrokontrolera, na przykładzie ADuC845 Źródło – www.analog.com Dzięki małemu poborowi mocy i niewielkim rozmiarom (8x8mm) moŜliwe jest stosowanie układu takŜe w urządzeniach przenośnych zasilanych bateryjnie. Ich budowę wewnętrzną przedstawia rysunek 1. Mikrokontroler ten jest jednotaktowy, do jego taktowania stosowany jest kwarc 32.768kHz i dzięki wbudowanemu układowi PLL (Phase-locked loop) uzyskuję się częstotliwości pracy 12 MHz. Jest on wyposaŜony w 62kB wbudowanej pamięci,2kB pamięci RAM. Posiada on wbudowany czujnik temperatury o dokładności 2°C, a takŜe 16-bitowy generator PWM oraz 16bitowy przetwornik cyfrowo – analogowy. WyposaŜono go takŜe w dwa źródła prądowe o wydajności 200uA kaŜde lub 400uA przy ich połączeniu. Jest ono bardzo uŜyteczne przy budowie układów do dokładnego pomiaru temperatury opartych na czujnikach rezystancyjnych RTD, mogą one mierzyć temperaturę z dokładnością do 0.02°C. Zastosowania tego układu w precyzyjnych systemach pomiarowych umoŜliwia wbudowany w strukturę układu 24-bitowy przetwornik analogowo – cyfrowy Sigma – Delta. Układ ma moŜliwość pomiaru napięcia za pośrednictwem 10 multipleksowanych wejść analogowych. Układ posiada równieŜ dodatkowy przetwornik – pomocniczy o tej samej dokładności lecz o mniejszej moŜliwości regulacji trybu pracy. PoniŜsza tabela przedstawia wybrane parametry przetwornika analogowo cyfrowego na przykładzie układu ADuC845 Tab. 1 Wybrane parametry przetwornika analogowo – cyfrowego Rozdzielczość 24-bity Szybkość konwersji w trybie Chop On 5.4 – 105Hz Szybkość konwersji w trybie Chop Off 16.06 – 1365Hz Wbudowane napięcie odniesienia 1.25V ±1% Dryft temperaturowy ±10nV/°C Dokładność ±3uV Przetwornik ten jest oparty na metodzie modulacji Sigma – Delta. W uproszczeniu zasadę jego działania przedstawia Rysunek 2. Mierzone napięcie podawane jest na wejście odwracające wzmacniacza operacyjnego, jednocześnie na wejście nieodwracające tego wzmacniacza jest podawane napięcie z jednobitowego przetwornika cyfrowo – analogowego który znajduje się w pętli sprzęŜenia zwrotnego. Następnie róŜnica tych dwóch sygnałów jest przekazywana na układ całkujący (integrator) na którym jest ona zapamiętywana do chwili następnego pomiaru i dodawana do wartości z poprzedniego pomiaru. Następnie trafia ona na wejście komparatora na którym jest porównywana do zera. Jeśli jest ona mniejsza od 0V to na wyjściu układu pojawia się logiczne 1, w przeciwnym wypadku na wyjściu tym jest logiczne 0. Stan ten jest wyjściem układu skąd jest przekazywany na zespół filtrów cyfrowych których zadaniem jest zmniejszenie zakłóceń wprowadzanych przez przetwornik. Wyjście z komparatora jest jednocześnie wejściem jednobitowego przetwornika cyfrowo – analogowego. Rys. 2 Uproszczony schemat przetwornika Sigma – Delta; źródło – www.analog.com Przetwornik analogowo – cyfrowy jest najczęściej wykorzystywanym układem peryferyjnym tego mikrokontrolera, dlatego teŜ posiada on wiele trybów pracy w celu uzyskania jak najlepszej dokładności pomiaru napięcia. Podczas projektowania płytki drukowanej do budowanego układu pomiarowego producent zaleca rozdzielenia masy cyfrowej oraz masy analogowej, oddzielne powinno być teŜ napięcie zasilające. Dwa moŜliwe warianty podłączenia układu przedstawia rysunek 3 i 4. W przypadku braku moŜliwości niezaleŜnego zasilania części analogowej i cyfrowej naleŜy połączyć je poprzez rezystor i koralik ferrytowy którego zadaniem jest ochrona części analogowej przed zakłóceniami powstającymi w części cyfrowej układu. W celu eliminacji zakłóceń zaleca się takŜe maksymalne zmniejszenie częstotliwości taktowania układu w chwili wykonywania pomiaru napięcia. Jest to moŜliwe dzięki zastosowaniu generatora PLL. Wartość częstotliwości ustala się przez wpisanie słowa do rejestru PLLCON. Rys. 3 Zasilanie układu z dwóch niezaleŜnych źródeł; źródło – www.analog.com Rys. 3 Zasilanie układu z jednego źródła napięcia; źródło – www.analog.com Przetwornik posiada dwa tryby wejścia mierzonego napięcia: bipolarny i unipolarny. Wejścia te przedstawia rysunek 4. Maksymalne wartość mierzonego napięcia w przypadku trybu bipolarnego wynosi 2.5V (mierzona w odniesieniu do masy analogowej AINCON) i ±2.5V dla trybu unipolarnego. Rys. 4 Wejście na mierzonego napięcia w trybie unipolarnym i bipolarnym źródło – www.analog.com Mikrokontrolery rodziny AduC zostały dodatkowo wyposaŜone w sprzętową obsługę protokołu SPI i I2C (dla I2C tylko w trybie slave tryb master jest programowy). Został on takŜe wyposaŜony w dodatkowy zegar TIC (Time Interval Counter) który potrafi zliczać od 0 do 255 godzin z dokładnością do 1/128 s, posiada on takŜe moŜliwość generowania przerwań. MoŜe on zliczać czas ciągle lub odmierzać zadane odcinki czasu. W przypadku zastosowania mikrokontrolera w układach akwizycji danych pomiarowych waŜna jest moŜliwość współpracy z zewnętrzną pamięcią. W przypadku AduC producent umoŜliwił adresowanie do 16MB pamięci. Uzyskano to dzięki adresowaniu pamięci zewnętrznej trzema bajtami (w przypadku standardowego mikrokontrolera 8052 do adresowania wykorzystywano dwa bajdy). Adres komórki pamięci zewnętrznej jest przechowywany w 3 rejestrach DPP, DPH i DPL. Taki tryb adresowania wymaga zastosowania dwóch zewnętrznych zatrzasków. Schemat takiego podłączenia przedstawia rysunek 5. Rys. 5 Sposób podłączenia pamięci zewnętrznej o rozmiarze 16MB źródło – www.analog.com Firma Analog Devices dodatkowo na swojej stronie internetowej udostępnia bezpłatne oprogramowanie do programowania układu za pośrednictwem portu szeregowego, nie wymaga to stosowania specjalnych programatorów. Do zaprogramowania mikrokontrolera wystarczy komputer PC i układa konwertera napięć ze standardu RS232 do TTL. Dzięki pełnej zgodności architektury wewnętrznej jest moŜliwe tworzenie oprogramowania w standartowych kompilatorach do mikrokontrolerów 8051. Wsparcie przy tworzeniu oprogramowała zapewniła firma Keil, program uVision2 i uVision3 umoŜliwiają pełną symulację wszystkich jego układów peryferyjnych. Wygląd tego środowiska programistycznego przedstawia Rysunek 6. Rys. 6 Przykład wyglądu programu Keil uVision2 Przykład programu napisanego w języku C w programie uVision2 przedstawia Listing 1. Po uruchomieniu wprowadza się częstotliwość próbkowania i ilość uśrednień. Cały program wykonywany jest w pętli przerwania przetwornika ADC pętla główna programu jest pusta. Po wykonaniu pomiaru wartość zmierzonego napięcia jest przesyłana przez łącze szeregowe wraz z dokładnym czasem pomiaru. #include <stdio.h> #include <ADuC845.h> #define U_REF 2.56 union { unsigned long napiecie; struct { unsigned char ADC_0; unsigned char ADC_H; unsigned char ADC_M; unsigned char ADC_L; }bajty; }nap; double U; unsigned long temp,Usr; unsigned int sr,f,i; void konfiguracja(void) { do { printf("Podaj częstotliwosc próbkowania 17-1365Hz:\n"); scanf("%d",&f); } while (f<17 || f>1365); do { printf("Uśrednianie co : 1-20\n"); scanf("%d",&sr); } while (sr<1 || sr>20 ); SF=4096/f; // Fadc=(1/(8*SF))*32678Hz f=4096/SF; printf("Częstotliwosc próbkowania: %d, uśrednianie: %d\n\n\n\n",f,sr); } void INT_ADC (void) interrupt 6 //przerwanie przetwornika AC { nap.bajty.ADC_0=0x00; //odczyt zmierzonego napięcia nap.bajty.ADC_H=ADC0H; nap.bajty.ADC_M=ADC0M; nap.bajty.ADC_L=ADC0L; if (i<sr) { temp+=nap.napiecie; i++; } else { Usr=temp/sr; //obliczenie wartości sredniej napiecia temp=0; U = (U_REF*Usr)/0x1000000; //U=(ADC*U_REF)/2^24 [V] printf("%d:%d:%d:%d U=%#.6f V\n",(int)HOUR,(int)MIN,(int)SEC,(((int)HTHSEC*50/64)),U); // 01:02:03:88 U=1.123456 V i=0; } RDY0=0; //zerowanie flagi przerwania AC } void main (void) { EA=0; PLLCON=((PLLCON&0xf0)||01); // f=6.2MHz TIMECON=0x00; // ustawienie TIC w stan ciągłego odlicznia bez przerwań HTHSEC=0x00; SEC=0x00; MIN=0x00; HOUR=0x00; TH1=0xFD; szeregowego T3CON = 0x81; T3FD = 0x12; SCON = 0x52; ADC0CON1 = 0x2f; ADC0CON2 = 0x40; ADCMODE = 0x2b; RDY0=0; EADC=1; konfiguracja(); TIMECON=0x19; EA=1; while(1) { } //konfiguracja portu //UART: 19200 //Mode 1: 8-bit UART //tryb wspólnej masy Uref=2.56 //REFIN+, Ustawienie multiplexera AIN1-AINCOM //uruchomienie głównego przetwornika AC, konwersja ciągła //zerowanie flagi przerwania ADC //start TIC //Pętla główna programu } Listing 1. Przykład programu w języku C dla mikrokontrolera AduC845 LITERATURA [1] Analog Devices AduC8xx family user’s guide. 2005; www.analog.com