Skocz do zawartości

Guzik

Użytkownicy
  • Zawartość

    3
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

Guzik wygrał w ostatnim dniu 16 marca

Guzik ma najbardziej lubianą zawartość!

Reputacja

7 Neutralna

O Guzik

  • Ranga
    1/10
  1. Przetworniki analogowo-cyfrowe i cyfrowo-analgowe, Budujemy własny przetwornik ADC, metoda sukcesywnej aproksymacji - Część 3 W tym artykule poznasz najprostszy przetwornik analogow-cyfrowy, który jest bardzo szybki, ale daje wyniki o dość sporym błędzie, ale o tym w dalszej części artykułu. Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac » Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay. Spis treści serii artykułów: Wstęp Budujemy przetwornik cyfrowo-analogowy Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji (ten artykuł) 1. Wstęp Przetwornik analogow-cyfrowy (zwany również ADC – Analog Digital Converter) jest układem który zamienia określone napięcie mierzone na ciąg 0 i 1 zwanych postacią binarną / liczbę (wartość cyfrową), proporcjonalną do napięcia mierzonego. W tym artykule poznasz przetwornik ADC który wykonuje pomiary za pomocą metody sukcesywnej aproksymacji (lub inaczej zwana metodą kompensacji wagowej). Wykonuje on odwrotną konwersję w stosunku do przetwornika cyfrowo-analogowego. Nie bez powodu 1 artykułem na temat przetworników był przetwornik cyfrowo-analogowy, gdyż jest on wykorzystywany w przetwornikach analogowo-cyfrowych jako źródło odniesienia. 2. Działanie przetwornika analogowo-cyfrowego. Działanie tego przetwornika polega na równoważeniu napięcia wejściowego z napięciem generowanym za pomocą przetwornika cyfrowo-analogowego, który próbuje kompensować/równoważyć napięcie mierzone. Układ dąży do jak najmniejszej różnicy pomiędzy napięciem mierzonym a generowanym (przez przetworonik cyfrowo-analogowy), tak by różnica Um – Ug = 0. W praktyce nie da się osiągnąć wartości 0 ze względu na skończoną rozdzielczość przetwornika. Schemat blokowy takiego układu wygląda następująco: W tym przetworniku napięcie mierzone jest porównywane z napięciem odniesienia, generowanego przez DAC, zwiększanym kolejno o wartości wagowe Um/2, Um/4, Um/8 itd. Um/n. Jeżeli napięcie wejściowe Uwe jest większe od kolejnych wartości wagowych to dany bit ustawiany jest na 1, w przeciwnym wypadku, gdy napięcie mierzone jest mniejsze od generowanego, to bit ustawiany jest na 0. Poniżej schemat przebiegu procesu przetwarzania. Przykład przebiegu przetwornica przetwornika ADC z sukcesywną aproksymacją. Pozioma linia oznacza poziom napięcia mierzonego. Układ dąży do zrównania się obu lini. 3. Budujemy przetwornik analogowo-cyfrowy z sukcesywną aproksymacją. Jak zostało wspomniane w poprzedniej części kursu, do budowy tego przetwornika wykorzystamy budowany poprzednio przetwornik cyfrowo-analogowy (DAC), do wyjścia którego podłączamy komparator, który będzie porównywał napięcie generowane przez DAC z napięciem mierzonym. W naszym przypadku napięcie mierzone możemy płynnie regulować potencjometrem (zamiast potencjometru możemy podłączyć dowolne źródło napięcia, np. baterię). By zbudować przetwornik ADC 8 bitowy potrzebujemy przetwornika DAC również 8-bitowego. Schemat układu, drabinka rezystorów do układ DAC z poprzedniej części kursu. Po prawej stronie główna część przetwornika ADC. Do komparatora należy podłączyć również zasilanie. Wygląd układu po złożeniu, komparator to LM393N (można zastąpić dowolnym), prezentuje się następująco: Przyszła pora na kod program, który wygląda następująco (nie zapomnij zmierzyć napięcia pomiędzy 5V a GND, tz. Uref i wstawić odpowiedni pin do którego podłączyłeś komparator oraz zmierzone napięcie): #define Uref 4.91 /* napięcie referencyjne/zasilania, należy zmierzyć i zmienić by otrzymać prawidłowe wyniki */ #define komparatorPin 12 /* Przy podłączeniu do innego pinu wyjścia komparatora, należy tu zmienić numer pinu na odpowiedni (nie zalecam pinu 13). */ void setup() { // Zastępuj instrukcje pinMode(An, OUTPUT);, ustawia piny na porcie F jako wyjściowe DDRF = B11111111; // Ustawia wszystkie piny portu F na 0, odpowiada digitalWrite(An, 0); PORTF = B000000; // ustawiamy pin komparatora jako wejście pinMode(komparatorPin, INPUT_PULLUP); Serial.begin(9600); } void loop() { // Czekamy aż zostanie przesłane żądanie z komputera. while (Serial.available() > 0) { Serial.read(); uint8_t wynik = pomiar(); // Wykonujemy pomiar i zapisujemy wynik do zmiennej 8-bitowej Serial.println("Wynik:"); Serial.print("BIN: B"); Serial.println(wynik, BIN); Serial.print("DEC: "); float napiecie = (wynik / 255.0) * Uref; // Wyliczamy napięcie Serial.print(napiecie, 3); // i wypisujemy je na port szeregowy. Serial.println("V \n"); } } uint8_t pomiar(){ uint8_t rejestr = 0; for(int i = 7; i >= 0; i--){ // 8 iteracji petli, przetwornik 8-bitowy rejestr |= (1<<i); // Wstawiamy jedynkę na i-te miejsce. PORTF = rejestr; /* ustawiamy wartość na port F, przez co wszystkie piny zmienią stan w zależności od liczby 8-bitowej, port F to piny od A0 do A7 (A7 najbardziej znaczący bit)*/ delay(2); // Czekamy na ustawienie się napiecia, na przetworniku DAC // Jeżeli wyjście komparatora jest w stanie niskim, if(digitalRead(komparatorPin) == LOW){ rejestr &= ~(1<<i); // to zerujemy wstawioną poprzednio jedynkę na odpowiednim bicie. } } PORTF = rejestr; return rejestr; } 4. Przetestujmy naszym przetwornikiem analogowo-cyfrowym By dokonać pomiaru należy otworzyć monitor portu szeregowego i wysłać dowolny znak do mikrokontrolera, następnie zostanie wyświetlony wynik pomiaru. Wysyłając kilka znaków zostanie wykonane kilka pomiarów, np. wysyłając 3 znaki otrzymamy 3 wyniki. Kod lekko poprawiony, teraz pokazują się 3 miejsca po przecinku, co zwiększa dokładność. Przykład otrzymanych wiadomości, pionowa linia oznacza kilka pomiarów pod rząd (wysłane kilka znaków), Uz to napięcie rzeczywiste zmierzone za pomocą multimetru Pomiar napięcia 2,76V ustawionego za pomocą potencjometru, w wiadomościach wyżej program pokazał napięcie 2,78V. Pomiar napięcia na akumulatorku, podłączamy go do masy (-) i zamiast potencjometru (+). Program pokazał napięcie 1,33V, jednak zachęcam do samodzielnego testu i sprawdzanie wyników z większą liczbą miejsc po przecinku. 5. Zastosowania Przetwornik tego typu jest używany w układach gdzie wymagana jest wysoka szybkość wykonywania pomiarów, ale przez co są one niższej rozdzielczości. Używany w układach gdzie sygnał wejściowy się nie zmienia podczas procesu próbkowania (n cyklowego, n to ilość bitów, tz. rozdzielczość). Można go wykorzystać do budowy układów, gdzie będzie wykonywał wiele pomiarów na sekundę, jednak będą one obarczone dużym błędem. Przetwornik zbudowany na podstawie metody sukcesywnej aproksymacji wykorzystuje się do budowy podstawowych wolnych oscyloskopów, Układ nie nadaje się do budowy typowego oscyloskopu który można kupić w sklepach (przy tego typu konstrukcjach wykorzystuje się przetwornik typu FLASH, który jest niezależny od zmian napięcia mierzonego). 6. Podsumowanie Przetwornik zbudowany na podstawie metody kompensacji wagowej (sukcesywnej aproksymacji) jest prostym do wykonania przetwornikiem który daje w miarę dobre wyniki przy dużej szybkości działać, może wykonywać wiele pomiarów na sekundę. W przetworniku tego typu, należy pilnować by napięcie wejściowe nie uległo zmianie przez cały okres przetwarzania sygnału. Układ nie jest odporny na zmiany napięcia wejściowego i daje błędne wyniki przy tego typu zmianach. W załączniku kod programu wraz ze schematami. plikiADC_sa.rar Spis treści serii artykułów: Wstęp Budujemy przetwornik cyfrowo-analogowy Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji (ten artykuł)
  2. Przetworniki analogowo-cyfrowe i cyfrowo-analogowe. Budujemy własny przetwornik DAC. Na początku naszą przygodę z przetwornikami, powinniśmy zacząć od układu przetwornika cyfrowo-analogowego, gdyż kolejne układy przetwornikowe (ADC) korzystają z tego najprostszego rodzaju konwertera. Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac » Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay. Spis treści serii artykułów: Wstęp Budujemy przetwornik cyfrowo-analogowy (ten artykuł) Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji 1. Wstęp Przetwornik cyfrowo-analogowy (zwany również DAC – od angielskiego: Digital Analog Conwerter) jest układem zamieniającym wartość liczbową (wartość liczbową) na określoną wartość napięcia (wartość analogową), proporcjonalną do liczby. W tym wpisie zajmiemy się przetwornikami równoległymi DAC, gdyż te są najczęściej stosowane i najprostsze w budowie. Wykonuje on odwrotną konwersję w stosunku do przetwornika analogowo-cyfrowego. 2. Jak właściwie działa konwersja z wartości cyfrowej na analogową. Przetwornik ten konwertuje liczbę n bitową w odpowiadające jej napięcie elektryczne. Napięcie wyjściowe przetwornika proporcjonalne jest do napięcia odniesienia i liczby zapisanej w systemie dwójkowym (dokładniej poszczególnych bitów tej liczby). Wzór na obliczenie napięcia wyjściowego: Gdzie: Uwy – napięcie wyjściowe, Uref – napięcie referencyjne (dla Arduino ok. 5V, w zależności od napięcia zasilania) n – ilość bitów wartości cyfrowej a0 do an – wartość bitowa 0 lub 1, odpowiadająca kolejnym bitom sygnału cyfrowego (liczby), a0 najbardziej znaczący bit (MSB), an – najmniej znaczący bit (LSB) Może wydawać się to skomplikowane, jednak takie nie jest. Pierwszy bit oznacza 1/2 napięcia referencyjnego, 2 oznacza 1/4 (połowę poprzedniego) Uref itd. 3. Budowa teoretyczna przetwornika cyfrowo-analogowego. Sercem przetwornika jest drabinka rezystorów, będących ze sobą w stosunku 1R do 2R (np. 1k do 2k itp.). Na wejście przetwornika podajemy liczbę w postaci binarnej, o n bitach (im większa ilość n, tym większa rozdzielczość przetwornika). Układ posiada 1 wyjście analogowe. Schemat najczęściej stosowanego przetwornika o rozdzielczości 8 bitów, przedstawia się następująco: Przykład budowy drabinki rezystorów 8 bitowego przetwornika DAC (wartość pod lub po prawej stronie to wartość rezystancji). Poziome rezystory o wartości R, pionowe o wartości 2R. Spróbujmy obliczyć wartość napięcia dla wartości 193 8-bitowej (o 256 wartościach). Liczba ta zapisana binarnie B11000001. Możemy podstawić do powyższego wzory, jednak jeżeli posiadamy wartość w systemie dziesiętnym (193) to możemy obliczyć w prostszy sposób: Uwy = wartość/rozdzielczość * Uref, w naszym przypadku Uwy = 5V * 193/255, co daje nam napięcie około 3,78V. Przykład podstawienia do wzoru: Gdy bit jest 1 zostaje podłączony do napięcia zasilania, gdy 0 do masy (co jest bardzo ważne, niepodłączony da błędne wyniki na wyjściu). Rozpływ prądów pokazany poniżej: 4. Budujemy naszego DAC'a. Do budowy prototypu przetwornika cyfrowo-analogowego, użyję Arduino MEGA, skorzystamy z powyższego schematu. Rezystory o wartości 2R będą mieć 2,2k, natomiast R będą to 2 połączone rezystory o wartościach 10k i 1,2k (co daje około 1080 omów, jednak powinno być 1,1k). Magistralę danych (8 bitów) podłączamy do portu F arduino mega(wybieramy 1 port, 8 pinów ułożonych w kolejności, dla prostszego programu), a dla uno port C. Porty analogowe są ułożone w odpowiedniej kolejności, oczywiście my używamy ich jako cyfrowe. W naszym przypadku zbudujemy prosty przetwornik ośmiobitowy. Kod programu do ustawiania napięcia na wyjściu przetwornika i obliczanie oczekiwanego napięcia, wygląda nastepująco: // Zastępuj instrukcje pinMode(An, OUTPUT);, ustawia piny na porcie F jako wyjściowe DDRF = B11111111; // Ustawia wszystkie piny portu F na 0, odpowiada digitalWrite(An, 0); PORTF = B000000; // Komunikacja z komputerem Serial.begin(9600); Serial.print("Podaj wartosc: "); } uint8_t wartosc = 0; void loop() { // Czekamy aż zostanie przesłana wartość z komputera. while (Serial.available() > 0) { wartosc = Serial.parseInt(); // Zamieniamy ciag bajtów na wartość 8 bitową Serial.println(wartosc); Serial.print("Ustawiona wartosc napiecia wynosi "); float napiecie = (wartosc / 255.0) * Uref; // Wyliczamy oczekiwane napiecie Serial.print(napiecie, 3); // i wypisujemy je na port szeregowy. Serial.println("V"); Serial.print("Podaj wartosc: "); PORTF = wartosc; /* ustawiamy wartość na port F, przez co wszystkie piny zmienią stan w zależności od liczby 8-bitowej, port F to piny od A0 do A7 (A7 najbardziej znaczący bit)*/ } } 5. Sprawdzenie poprawności działania, pomiary. Wchodzimy w monitor portu szeregowego i podajemy wartość dziesiętną (od 0 do 255) lub można w postaci binarnej poprzedzając, ciąg 8 zer lub jedynek, duża literą B. Mikrokontroler zwraca oczekiwaną wartość napięcia, którą należy zmierzyć w układzie by porównać błąd przetwornika DAC. Pomiar napięcia rzeczywistego dla ustawionego napięcia 2,46V (wartość 128). 2 pomiar napięcia rzeczywistego dla ustawionego napięcia 0.98V (wartość 51). Przykład komunikatów do powyższych pomiarów, w polu do wysyłania przykład wpisanej liczby w systemie binarnym. 6. Dokładność przetwornika cyfrowo-analogowego. Rezystory użyte przy budowie przetwornika DAC mają swoją określoną tolerancję w moim przypadku 5%, przez co niektóre rezystory mają lekko różne wartości co powoduje nierównomierny rozpływ prądu i lekko odmienne napięcie na wyjściu od oczekiwanego. Jeżeli chcemy uzyskać jak najlepsze wyniki musimy używać rezystorów o jak najmniejszej tolerancji (najczęściej jest to 1%) i zapewnić stabilne źródło zasilania. Mierząc rzeczywistą rezystancję rezystora 2,2k, o tolerancji 5%, otrzymujemy 2,16k (Rezystancja zaniżona o 40 omów). 7. Poprawiamy przetwornik cyfrowo-analogowy Ustawiamy połowę napięcia referencyjnego (wartość 128, Uref = 4.91) i podłączamy do układu obciążenie w postaci opornika 10k i teoretycznie powinniśmy otrzymać około 2,45V (połowę napięcia referencyjnego), ale ... Wynik powinien wyjść około 2,45V, a jednak otrzymujemy 2,19V. Przetwornik daje na wyjściu oczekiwane wartości napięcia, jednak gdy podłączymy obciążenie do układu (np. rezystor o wartości 10k), zauważymy że napięcie bardzo mocno spadło, z powodu słabej wydajności prądowej układu, aby temu zaradzić trzeba wzmocnić napięcie przy wykorzystaniu wzmacniacza operacyjnego, który zwiększy wydajność prądową naszego własnego przetwornika cyfrowo-analogowego. Schemat takiego układu wygląda następująco: Schemat przetwornika DAC z wzmacniaczem operacyjnym, rezystor R17 ma rezystancję 2 razy mniejszą od R (R/2). 8. Zastosowania Układy pomiarowe (generator wzorcowy, konwersja wartości cyfrowych na napięcie) Układy audio (karty dźwiękowe, generowanie dźwięku wyjściowego dla słuchawek lub głośników) Sprzęt wideo (analogowa transmisja sygnału video np. VGA) 9. Podsumowanie Budowa przetwornika analogowo-cyfrowego jest bardzo prosta, jednak uzyskanie dokładnych wyników jest bardzo ciężkie. Przetwornik DAC jest podstawą działania przyrządów pomiarowych i przetworników ADC, które dokonują odwrotnej konwersji w stosunku do przetwornika cyfrowo-analogowego. W dalszych częściach artykułu poznasz budowę i działanie przetworników analogowo-cyfrowych w których będziemy wykorzystywać przed chwilą poznany przetwornik. W załączniku kod programu wraz ze schematami. DAC_pliki.rar Spis treści serii artykułów: Wstęp Budujemy przetwornik cyfrowo-analogowy (ten artykuł) Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji
  3. Przetworniki analogowo-cyfrowe i cyfrowo-analogowe. Wstęp Ten artykuł jest wstępem teoretycznym do następnych, praktycznych już artykułów na temat przetworników. Tą serię artykułów, należy brać jako ciekawostkę, gdyż układy którymi się posługujemy (mikrokontrolery AVR, Arduino, ARM) posiadają w swojej budowie przetworniki ADC i bardziej rozbudowane modele posiadają również przetwornik DAC. Ta seria ma za zadanie pokazania budowy wewnętrznej przetworników i ich zasady działania. Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac » Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay. Spis treści serii artykułów: Wstęp (ten artykuł) Budujemy przetwornik cyfrowo-analogowy Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji 1. Czym właściwie jest przetwarzanie sygnałów? W świecie rzeczywistym (analogowy) występuje wiele różnych wielkości fizycznych, takich jak temperatura, wilgotność, napięcie, natężenie prądu, natężenie światła i wiele więcej, natomiast w świecie komputerów (cyfrowym) występują tylko liczby. Do konwersji tych wielkości pomiędzy 2 światami służą przetworniki, odpowiednio: analogowo-cyfrowy (napięcie jest zamieniane na liczbę, w przypadku gdy chcemy zamienić inną wielkość to musimy najpierw ją przekonwertować w napięcie o odpowiednich proporcjach) cyfrowo-analogowy (zamienia liczby w napięcia, a później można zamienić napięcie w inną wielkość fizyczną) Odwrotnością przetwornika analogowo-cyfrowego jest przetwornik cyfrowo-analogowy, który dokonuje odwrotnej konwersji. 2. Rodzaje przetworników. przetwornik analgowo-cyfrowy – zwany ADC (Analog Digital Converter), zamienia sygnały analogowe w ich reprezentację liczbową (cyfrową). przetwornik cyfrowo-analogowy – zwany również DAC (Digital Analog Converter) – zamienia liczby (reprezentacja cyfrowa) w sygnały analogowe (napięcie). Jedyną metodą przetwarzania jest precyzyjna drabinka rezystorów o proporcjach R:2R. (szerzej opisany w artykule nr. 1) Główne metody przetwarzania sygnałów przez przetwornika ADC: porównanie bezpośrednie (zwany również flash) przetwornik z sukcesywną aproksymacją (metoda zwana również jako metoda kompensacji wagowej) – porównuje napięcie z kolejnymi wagami napięcia generowanym przez przetwornik DAC (dokładniej opisany w artykule nr. 2), nie odporny na zmianę napięcia mierzonego (daje błędne wyniki). przetwornik z podwójnym całkowaniem – mierzy czas ładowania kondensatora, napięciem mierzony i rozładowywania napięciem referencyjnym (niestety z powodu braku elementów nie byłem w stanie go szybko zbudować), uśrednia napięcie mierzone (jeżeli się zmienia). Przetwornik ADC w postaci układu scalonego, do budowy oscyloskopu, wykorzystuje metodę sukcesywnej aproksymacji (układ AD7492) Tabela porównująca właściwości przetworników analogowo-cyfrowych: Zależność pomiędzy szybkością wykonywania pomiarów (w samplach na sekundę) a ich rozdzielczością (w bitach). Elipsami oznaczone poszczególne główne metody dla przetworników ADC. Sygnał wejściowy nie jest idealnie przekształcany na sygnał cyfrowy z powodu skończonej ilości porównań sygnału. Porównanie sygnału wejściowego (siwego), z sygnałem cyfrowym (czerwonym). Jak widać sygnał cyfrowy nie pokrywają się idealnie z sygnałem analogowym, ale w miarę możliwości przybliża go. 3. Zastosowania w praktyce przetworników. Oscyloskop, przetwornik ADC z sukcesywną aproksymacją i generator DAC. Mierniki uniwersalne, przetwornik ADC, metoda podwójnego całkowania. Uśrednia wyniki przy zmieniającym się sygnale wejściowym. Przykład wykorzystania w cyfrowym systemach audio, gdzie sygnał analogowy (z mikrofonów i instrumentów) trafia do przetwornika ADC, który przetwarza sygnał wejściowy i przekształca na wersję bitową (cyfrową), na którą można nakładać efekty (jak w komputerze). Następnie sygnał trafia do przetwornika DAC, który generuje sygnał audio z liczb i przez wzmacniacz trafia on do głośników. 4. Podsumowanie Był to krótki wstęp do poszczególnych artykułów pokazujący zależności pomiędzy różnymi metodami przetwarzania przez przetworniki. Do budowy wszystkich przetworników użyję Arduino Mega. Zaznaczam że tą serię należy traktować jako ciekawostkę, gdyż większość mikrokontrolerów posiada wbudowany przetwornik ADC, a przetwornik DAC jest wbudowany w większe układy i jest rzadko używany (głównie do audio). Spis treści serii artykułów: Wstęp (ten artykuł) Budujemy przetwornik cyfrowo-analogowy Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji
×
×
  • Utwórz nowe...