Nadpróbkowanie. Programowe zwiększenie rozdzielczości przetwornika A/C

Nadpróbkowanie. Programowe zwiększenie rozdzielczości przetwornika A/C
Pobierz PDF Download icon
W niniejszym artykule w formie skróconej przedstawiam podstawy teoretyczne oraz praktyczny sposób wykorzystania oversamplingu (nadpróbkowania), dzięki któremu możliwe jest programowe zwiększenie rozdzielczości przetwornika A/C wbudowanego w mikrokontroler. Zalety takiego podejścia do problemu zbyt małej rozdzielczości przetwornika są w zasadzie dwie: po pierwsze, niższe koszty, gdyż nie musimy stosować przetwornika zewnętrznego, po drugie, uproszczenie połączeń oraz oszczędność miejsca na płytce drukowanej.
62 ELEKTRONIKA PRAKTYCZNA 12/2009 NOTATNIK KONSTRUKTORA Nadpróbkowanie nie jest panaceum na wszystkie problemy związane z  roz- dzielczością przetwornika. Oczywiście, należy liczyć się z pewnymi ograniczenia- mi i  mieć na względzie, że w  niektórych warunkach sposób ten w ogóle nie będzie mógł być zastosowany, ponadto nie jest to droga do zastąpienia wysokiej jakości spe- cjalizowanych przetworników A/C. Jednak warto zainteresować się tym sposobem, gdyż w  wielu aplikacjach mikrokontrole- Nadpróbkowanie Programowe zwiększenie rozdzielczości przetwornika A/C W  niniejszym artykule w  formie skróconej przedstawiam podstawy teoretyczne oraz praktyczny sposób wykorzystania oversamplingu (nadpróbkowania), dzięki któremu możliwe jest programowe zwiększenie rozdzielczości przetwornika A/C wbudowanego w  mikrokontroler. Zalety takiego podejścia do problemu zbyt małej rozdzielczości przetwornika są w  zasadzie dwie: po pierwsze, niższe koszty, gdyż nie musimy stosować przetwornika zewnętrznego, po drugie, uproszczenie połączeń oraz oszczędność miejsca na płytce drukowanej. rowych nie stawiamy wygórowanych wy- magań przetwornikowi A/C, zaś przydała- by się większa rozdzielczość. Na zachętę dodam, że korzystając z  oversamplingu, z  powodzeniem zwiększyłem rozdziel- czość przetwornika A/C w  ATmega8535 do 12 bitów, co przy napięciu odniesienia równym 4,096 V dało teoretyczną, idealną rozdzielczość 1 mV. Prezentowany artykuł powstał na pod- stawie dwóch not aplikacyjnych: AVR121 ? Enhancing ADC resolution by oversampling oraz AN2668: Improving STM32F101xx and STM32F103xx ADC resolution by oversam- pling, dostępnych odpowiednio na stro- nach internetowych ?rm Atmel i  STM. Nota aplikacyjna STM prezentuje dwa spo- soby zwiększenia rozdzielczości przetwor- nika AD ? w tym artykule zajmiemy się tyl- ko sposobem wykorzystującym szum biały. Podstawy teoretyczne Częstotliwość próbkowania ustalona dla płyt CD ma taką nieco dziwną war- tość równą 44,1  kHz. Najwyższa słysza- na przez człowieka częstotliwość sygnału akustycznego wynosi około 20  kHz, więc zgodnie z  twierdzeniem Nyquista (przy- pomnijmy, że mówi ono, iż w  celu unik- nięcia zniekształceń, częstotliwość prób- kowania sygnału powinna być większa niż dwukrotność największej spodziewanej 63ELEKTRONIKA PRAKTYCZNA 12/2009 Programowe zwiększenie rozdzielczości przetwornika A/C częstotliwości próbkowanego sygnału) wy- starczyłoby próbkowanie z częstotliwością 40 kHz. Po co te dodatkowe 4,1 kHz? War- to w tym momencie wspomnieć, że prób- kowanie z  częstotliwością wyższą od wy- maganej przez twierdzenie Nyquista nosi nazwę nadpróbkowania, od angielskiego terminu oversampling. Kolejnym ważnym terminem, który musimy poznać, jest SNR (Signal to Noise Ratio). Zgodnie z  zasadą działania prze- twornika A/C, sygnał analogowy o nieskoń- czonej liczbie stanów przetwarzany jest na wartość cyfrową o  skończonej liczbie bitów, z  czym wiąże się błąd kwantyza- cji. Dla idealnego przetwornika A/C błąd kwantyzacji wynosi ?0,5 LSB (połowa naj- mniej znaczącego bitu). W przypadku, gdy mierzony sygnał przyjmuje różne poziomy pomiędzy próbkami oraz częstotliwość próbkowania nie jest zsynchronizowana z częstotliwością tego sygnału, błąd kwan- tyzacji można uznać za szum biały, którego moc jest równomiernie rozłożona w zakre- sie od napięcia stałego do połowy często- tliwości próbkowania. Dla idealnego prze- twornika A/C pomijamy inne źródła szumu i  przyjmujemy, że SNR to stosunek mocy szumu przetwornika A/C do mocy sygnału wejściowego, przy czym szum przetworni- ka odpowiada szumowi kwantyzacji. Dla pełnozakresowego sygnału sinusoidalnego, SNR przetwornika A/C przyjmuje maksy- malną wartość, którą określa wzór: SNR [dB]=6,02?N+1,76 gdzie N to liczba bitów przetwornika A/C. Z powyższego równania wynika, że aby zwiększyć rozdzielczość przetwornika A/C; wystarczy zwiększyć wartość parametru SNR, co uczynimy w dalszej części artykułu. Przy założeniu, że szum kwantyzacji odpowiada szumowi białemu, jego moc Rys. 1. Wpływ oversamplingu na szum kwantyzacji jest równomiernie rozłożona w zakresie od napięcia stałego do połowy częstotliwości Nyquista, zaś samo skupienie mocy jest niezależne od częstotliwości próbkowana. Przy próbkowaniu z  większymi częstotli- wościami szum kwantyzacji rozciąga się na całą szerokość pasma, odpowiadają- cą częstotliwości próbkowania. Na rys.  1 przedstawiono wpływ oversamplingu na szum kwantyzacji. Na rys.  1a pokazano normalną sytuację, gdy sygnał jest próbko- wany zgodnie z twierdzenie Nyquista (tzn. z  częstotliwością dwukrotnie większą niż maksymalna, spodziewana częstotliwość sygnału), zaś na rys.  1b sytuację, gdy sy- gnał jest próbkowany z  częstotliwością dwukrotnie większą (oversampling) od częstotliwości Nyquista. Obszar niebieski reprezentuje sygnał wejściowy, zaś obszar zielony szum kwantyzacji. Porównując oba rysunki, można zauważyć, że obszar nakładania się szumu oraz próbkowanego sygnału (część wspólna obszaru niebie- skiego i zielonego) zmniejsza się (rys. 1b) wraz ze wzrostem częstotliwości prób- kowania, co pociąga za sobą zwiększenie SNR. Nadpróbkowanie sygnału z częstotli- wością OSR-razy większą niż częstotliwość Nyquista pozwala osiągnąć SNR określony następującym wzorem: SNROVS [dB]=6,02?N+1,76+10?log(OSR) Na podstawie powyższego równania można stwierdzić, że każde podwojenie częstotliwości próbkowania zwiększy SNR o  3  dB, zwiększając jednocześnie rozdziel- czość pomiaru o 0,5 bitu. Aby zwiększyć roz- dzielczość o 1 bit, należy więc uzyskać SNR o  6  dB większy. Ogólnie rzecz biorąc, aby zwiększyć rozdzielczość przetwornika A/C o n bitów, należy sygnał próbkować z często- tliwością FOVS =4n ?FS , gdzie FS jest aktualnie używaną częstotliwością próbkowania. Uważny Czytelnik może teraz stwier- dzić: próbkujemy sygnał ileś tam razy częściej i  co z  tego? Owa większa liczba próbek okaże się bardzo przydatna, co już wyjaśniam. Najprościej rzecz ujmując, aby uzyskać jeden bit więcej, należy sygnał próbkować czterokrotnie, wyniki zsumo- wać, a  następnie uśrednić. Ogólnie, aby uzyskać N bitów więcej, należy próbkować sygnał 4N razy, otrzymane wyniki zsumo- wać i uśrednić. Należy zwrócić uwagę na fakt, że uśrednienie wyników nie polega na podzieleniu sumy próbek przez ich liczbę. W zamian, należy sumę przesunąć o N bi- tów w  prawo, co odpowiada jej podziele- niu przez 2N (jest to tzw. decymacja). Od tej pory możemy cieszyć się wynikiem pomia- ru o rozdzielczości większej o N bitów. Ograniczenia Aby oversampling mógł działać, w  próbkowanym sygnale powinny znaj- dować się ?śmieci? w postaci szumu o po- ziomie 1?2 LSB. Normalnie szum ten bę- dzie pochodził ze źródeł takich jak: szum termiczny, CPU, przełączanie portów I/O czy wahania napięcia źródła zasilania, i  będzie wystarczający. Dobrym rozwią- zaniem jest podłączenie innych układów peryferyjnych do portu, w którym znajduje się wejście przetwornika AD. Czasem może się jednak zdarzyć, że szum pochodzący z wymienionych źródeł nie będzie wystar- czający. W tym przypadku należy do prób- kowanego sygnału dodać dodatkowy szum. W  najgorszym przypadku oversamplingu w ogóle nie będzie można zastosować ? po szczegóły odsyłam do wspomnianych not aplikacyjnych. Należy pamiętać o  tym, że oversam- pling zmniejsza maksymalną częstotliwość sygnału, którą możemy próbkować, co jest związane z  maksymalną częstotliwością próbkowania przetwornika AD oraz liczbą dodatkowych bitów, które chcemy uzy- skać; zależność tę określa wzór: Fmax =FADC max/(2?4n ) gdzie: Fmax ? maksymalna częstotliwość próbko- wanego sygnału FADCmax ? maksymalna częstotliwość prób- kowania przetwornika AD n ? liczba dodatkowych bitów, które chce- my uzyskać. Układ testowy oraz oprogramowanie W roli układu testowego wystąpił kit AVT-2550 ?Mikrokomputer PECEL?, w  którym jako źródło napięcia odniesie- nia przetwornika AD zastosowałem układ MCP1541 o  napięciu 4,096  V. Do kanału 6 przetwornika AD mikrokontrolera pod- łączone zostało środkowe wyprowadzenie potencjometru 10  kV (skrajne wyprowa- 64 ELEKTRONIKA PRAKTYCZNA 12/2009 NOTATNIK KONSTRUKTORA dzenia podłączone zostały odpowiednio do masy oraz napięcia 4,096 V źródła napięcia odniesienia). Ponadto, między masę układu a środkowe wyprowadzenie potencjometru podłączony został multimetr (UNITEST 9005), dzięki czemu możliwe stało się prze- prowadzenie pomiarów. Wyniki pomiaru napięcia dokonane przetwornikiem AD oraz multimetrem zostały zestawione w  tab.  1. Jak widać, różnica między pomiarami do- konanymi przez przetwornik AD oraz mul- timetr jest nieznaczna i  kształtuje się na poziomie 0,007  V. Różnica ta najprawdo- podobniej spowodowana jest niedoskona- łością przetwornika AD (oraz multimetru) ? dokładne sposoby kalibracji przetwornika AD można znaleźć w odpowiednich notach aplikacyjnych, zaś w  najprostszym przy- padku wystarczy uwzględnić średnią róż- nicę w  programie, kosztem nieznacznego błędu dokonywanych pomiarów. Układem testowym steruje program napisany w  języku C++ (avr-gcc), przed- stawiony na list.  1. Głównym zadaniem programu jest pomiar napięcia z przetwor- nika AD skon?gurowanego w  trybie Fre- e-running oraz wysyłanie tej wartości na wyświetlacz LCD. Należy zwrócić uwagę na fakt, że przed wysłaniem wartości do LCD, napięcie z przetwornika próbkowane jest 16-krotnie, a  następnie suma próbek przesuwana jest o  2 bity w  prawo. Zało- żeniem było zwiększenie rozdzielczości przetwornika AD z 10 do 12 bitów (n=2), czyli: 42 =16 ? liczba wymaganych próbek, 2 ? o  tyle bitów należy wynik przesunąć w  prawo. Dodatkowe informacje zawar- te zostały w  komentarzach, dzięki czemu pełne zrozumienie programu nie powinno stanowić problemu. Podsumowanie Przedstawiony artykuł ma z  założenia formę skrótową i  zawiera jedynie zarys informacji z  zakresu oversamplingu. Po szczegółowe informacje, między innymi od- nośnie do częstotliwości próbkowania oraz wymagań co do próbkowanego sygnału, od- syłam do wspomnianych not aplikacyjnych. Uwaga praktyczna: jeżeli zależy nam na w miarę przyzwoitej jakości przetwarza- List. 1. #include #include #include #include ?lcd.h? void adc_start(); void adc_convert(); // zmienna przechowujaca wynik konwersji volatile uint16_t conv_result; int main() { // ustaw preskaler ADC na 64, co daje czestotliwosc jego pracy wynoszaca ~172,8kHz // dla kwarcu 11,0592MHz. ADCSRA |= _BV(ADPS2) | _BV(ADPS1); // wybor kanalu ADC (kanal 6) ADMUX = 6; // wlacz przerwanie od ADC ADCSRA |= _BV(ADIE); // wlacz ADC ADCSRA |= _BV(ADEN); // wlacz obsluge przerwan sei(); // rozpocznij konwersje adc_start(); while( 1 ) { lcd.clrscr(); // wypisz wynik konwersji lcd << conv_result; _delay_ms( 500 ); } return 0; } void adc_start() { // rozpocznij konwersje ADCSRA |= _BV(ADSC); } void adc_convert() { static uint8_t sample_no; static uint16_t sample_sum; // sumuj kolejne probki z przetwornika sample_sum += ADC; sample_no++; // jesli pobrano 16 probek if( sample_no == 16 ) { // wyzeruj licznik probek sample_no = 0; // zapisz wynik konwersji, // uwzgledniajac wymagane przesuniecie o 2 bity w prawo conv_result = sample_sum>>2; // wyzeruj sume probek sample_sum = 0; } // rozpocznij konwersje adc_start(); } ISR( ADC_vect ) { adc_convert(); } nia wartości napięcia na postać cyfrową, to nie warto stosować napięcia odniesienia pobieranego z  systemowego stabilizatora (np. 7805), lecz raczej wykorzystać dedy- kowane, specjalizowane źródło napięcia odniesienia, o  wartości np. 2,048  V lub 4,096  V. Po pierwsze, unikniemy błędów związanych z  zaokrąglaniem (liczby 2048 i 4096 w obliczeniach będą dzieliły się bez reszty), po drugie, stabilizator 7805 rzadko kiedy da na wyjściu dokładnie 5 V. Rzeczy- wistą wartość napięcia będzie trzeba mie- rzyć w każdym nowo budowanym urządze- niu i odpowiednio mody?kować tę wartość w programie. Dla przykładu, zastosowanie źródła napięcia odniesienia o  wartości 4,096 V w miejsce napięcia ze stabilizatora 7805 zaoszczędziło mi wyrwania wszyst- kich włosów z  głowy, gdy przetwarzałem wartość napięcia z  czujnika temperatury LM235 (przy stabilizatorze 7805 wyniki były zadziwiająco rozbieżne). Andrzej Telszewski atelszewski@gmail.com Tab. 1. Zestawienie wyników pomia- rów [V] multimetr ADC różnica 0 0 0 0,028 0,020 0,008 0,150 0,143 0,007 0,415 0,409 0,006 1,058 1,051 0,007 1,726 1,719 0,007 2,258 2,252 0,006 2,827 2,822 0,005 3,248 3,242 0,006 4,09 4,092 ?0,002 65ELEKTRONIKA PRAKTYCZNA 12/2009 Programowe zwiększenie rozdzielczości przetwornika A/C Rabbit ? RCM5700 Darmowe środowisko programistyczne Dynamic C 10/100Base-T Ethernet z konektorem RJ45 Standard MiniPCIExpress Wydajna platforma sprzętowa Wbudowany Web serwer Wsparcie dla projektantów Pełna certy?kacja Multitech ? Socket Ethernet IP Kompatybilność pin-to-pin z modemami Multitech?a pracującymi w innych technologiach sieciowych Zgodny z normą EN60601 do zastosowań medycznych Stos Univeral IP rozszerzający funkcjonalność M2M Kompletne rozwiązanie Serial to Ethernet Sterowanie komendami AT Teridian ? seria 78Q21xx Rozwiązanie dla projektów Set Top Box, IP Video Zintegrowana warstwa MAC i PHY Tryb transmisji synchronicznej i asynchronicznej Transmisja Full Duplex z funkcją autonegocjacji Pojedyncze napięcie zasilania 3,3 V Łatwa integracja Współpracujemy ze światowymi liderami!!! Rabbit ? RCM5700 Darmowe środowisko programistyczne Dynamic C Pełna certy?kacja Kreujemy bezprzewodową rzeczywistość... ?Przemysłowy Ethernet?
Artykuł ukazał się w
Grudzień 2009
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje lipiec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich lipiec 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów