Skocz do zawartości
Guzik

Przetworniki analogowo-cyfrowe i cyfrowo-analgowe, Budujemy własny ADC, metoda sukcesywnej aproksymacji. Część 3

Pomocna odpowiedź

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.
PCBway_logotyp-350x233.png

Spis treści serii artykułów:

  1. Wstęp
  2. Budujemy przetwornik cyfrowo-analogowy
  3. 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:

997325736_adc-saschematblokowy.thumb.png.da6f5c1133b81520b24d913d30f0f0ad.png

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.

964563597_adc-saprzetwarzaniewykres.thumb.png.32a24c533a4a6aea9b9ed3f593db8b78.png

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.

1553229444_adc_saschemat.thumb.jpg.b8c56b4524463f501db86cdac9a2dc00.jpg

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:

742977212_adc_saukladv2.thumb.jpg.f20de4d3340c401ba157c00065378d3a.jpg

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ść.

1669514033_adc_sapomiary.thumb.jpg.d6fe449b355d1fc8c4cc1cc8c0be5042.jpg

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

760250798_adc_sapomiar279v2.thumb.jpg.a8a2b15b29d116203bf2e67eb4a2aa14.jpg

Pomiar napięcia 2,76V ustawionego za pomocą potencjometru, w wiadomościach wyżej program pokazał napięcie 2,78V.

1576281393_adc_sapomiarbateriav2.thumb.jpg.d629676dd6ea673ec0a875ab26718dd8.jpg

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).

oscyloskop.thumb.png.f87991fec5514fdc93621416d06f91e5.png

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:

  1. Wstęp
  2. Budujemy przetwornik cyfrowo-analogowy
  3. Budujemy przetwornik analogowo-cyfrowy, metoda sukcesywnej aproksymacji (ten artykuł)
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Artykuł został opublikowany, więc podbijam, aby wszyscy widzieli go jako nowy temat 🙂

Udostępnij ten post


Link to post
Share on other sites

Od samego początku w oscyloskopach i innych podobnych aplikacjach (systemy SDR, radary) gdzie potrzebna jest krańcowo duża szybkość próbkowania dostępna na danym etapie rozwoju technologii stosowane były przetworniki FLASH czyli z bezpośrednim porównaniem. Tak było na etapie tranzystorów, tak było i jest zarówno w monolitycznych technologiach CMOS jak i bipolarnych. Nikt tam nie bawi się w SARy.

Artykuł jest bardzo skrótowy. Jeśli już w ogóle pisać o ADC to przydałoby się trochę liczb, choćby liczba bitów vs prędkość osiaganych przez SAR w miarę postępu ostatnich lat i obecnie. To by jakoś spozycjonowało SAR na tle innych dostępnych topologii, bo stwierdzenie "może wykonywać wiele pomiarów na sekundę" bardziej pasuje do stron "Nauka i życie" w jakiejś gazecie niż do forum technicznego jakim jesteśmy. Przydałoby sie też wspomnieć, że chyba już wszystkie SARy dostępne w podstaci scalaków (a także te wbudowane w mikrokontrolery - bo to najczęściej spotykany tam typ ADC) są już wyposażone w układ próbkująco-pamiętający "ustalający"" sygnał podczas pomiaru więc największa bolączka topologii SAR jest usunięta.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...