====== Implementacja i badanie potokowego przetwornika ADC ======
===== Cel ćwiczenia =====
Większość sygnałów w otaczającym nas świecie to sygnały analogowe (ciągłe zarówno w dziedzinie czasu jak i co do wartości). Ze względu na ograniczenia sprzętowe w systemach cyfrowych operujemy na sygnałach dyskretnych (zarówno w dziedzinie czasu jak i wartości). Aby możliwe więc było przetwarzanie cyfrowe koniecznym jest przetworzenie sygnałów analogowych na postać cyfrową zanim poddane zostaną dalszej obróbce.
Jedną z popularniejszych architektur przetworników analogowo-cyfrowych (ADC) jest architektura potokowa (pipeline ADC [ref]). Celem tego laboratorium jest:
* Zapoznanie się z zasadą działania potokowego przetwornika analogowo-cyfrowego
* Zapoznanie się z podstawowymi metrykami statycznymi opisującymi jakość działania przetwornika ADC. W szczególności nieliniowość różniczkowa (DNL), nieliniowość całkowa (INL) oraz efektywna liczba bitów (ENOB)
* Zbadanie wpływu parametrów modelu przetwornika (wzmocnienie stopnia, offset komparatora) na jakość pracy przetwornika (tj. jego statyczne metryki)
===== Implementacja modelu analogowo-cyfrowego przetwornika potokowego =====
Podstawowa architektura N-bitowego potokowego przetwornika analogowo cyfrowego została zaprezentowana na rysunku \ref{}. Składa się on z N identycznych bloków MDAC pracujących synchronicznie z jednym zegarem (kwantyzacja czasu).
{{ :hw:lab:e2_adc_pipeline:pipeline.png |}}
Wyjścia z kolejnych stopni są zarazem kolejnymi bitami słowa wyjściowego (ilość bitów wpływa na kwantyzacje wartości).
Działanie jednego bloku ogranicza się do :
- porównanie czy wartość na jego wejściu jest większa czy mniejsza od (Vrefp - Vrefm)/2
- jeśli wartość jest większa to :
- wyjście danego stopnia zwraca 1
- od wartości analogowej jest odejmowane (Vrefp - Vrefm)/2, wynik jest mnożony przez dwa i przekazywany do następnego stopnia
- jeśli wartość jest mniejsza to :
- wyjście danego stopnia zwraca 0
- do wartości analogowej dodawane jest (Vrefp - Vrefm)/2, wynik jest mnożony przez dwa i przekazywany do następnego stopnia
==== Zadanie 1 ====
Zaimplementować procedurę(klasę) realizującą funkcje przetwarzania sygnału w taki sposób jak to robi przetwornik potokowy. Zaimplementowany model powinien mieć możliwość
* zmiany ilości bitów
* zmiany wzmocnienia we wzmacniaczu MDAC (domyślnie 2)
* zmiany offsetu komparatora (domyślnie 0)
==== Zadanie 2 ====
Dla tak przygotowanego modelu proszę wyznaczyć funkcje przejścia (tzn. zależność kodu wyjściowego od wartości analogowej podawanej na wejście) dla przetwornika 4 bitowego w przypadku domyślnych wartości wzmocnienia oraz offsety oraz dla wzmocnienia wynoszącego 1,9 i offsetcie 0,1.
===== Badanie parametrów statycznych przetwornika metodą histogramową =====
W idealnym przetworniku analogowo-cyfrowym każdy ze schodków funkcji przenoszenia ma taką samą szerokość (porównaj poprzedni punktu). Różnice pomiędzy idealną szerokością schodków
a ich rzeczywistą szerokością nazywamy nieliniowością różniczkową (ang. Differen-
tial Non-Linearity - DNL) i obliczamy ją dla każdego z N schodków przy pomocy
następującego równania:
DNL(N) = \frac{V (N + 1) − V (N) − V_{LSB} }{ V_{LSB}}
gdzie V (N + 1) i V (N ) są progami przełączania kolejnych schodków, natomiast VLSB
oblicza się z :
V_{LSB} = \frac{V_{REF}}{2^N}
Nieliniowość całkowa (ang. Integral Non-Linearity - INL) natomiast jest to odległość każdego ze schodków od prostej łączącej początek pierwszego i ostatniego schodka idealnej funkcji przenoszenia (rys. 1.5(b)). Istnieje zależność pomiędzy nieliniowością różniczkową
a całkową, a mianowicie nieliniowość całkową możemy wyznaczyć z równania:
INL(N) = \sum{DNL(N)}
Najpopularniejszą metodą wyznaczania obu wyżej wymienionych nieliniowości jest
tak zwana metoda histogramowa. W metodzie tej na wejście badanego układu poda-
wany jest sygnał narastający liniowo (rys. 4.1a), a wyniki konwersji umieszczane są
w zbiorczym histogramie.
{{ :hw:lab:e2_adc_pipeline:hist.png?650 |}}
Przy zadanej częstotliwości próbkowania i zboczu sygnału
narastającego na każdy poziom przetwornika przypada stała liczba próbek, a co za
tym idzie ilość danych kodów wyjściowych w histogramie 4.1b. Jeśli długości po-
szczególnych poziomów są różne, ma to odzwierciedlenie w histogramie wyjściowym
4.1c. Wysokości poszczególnych przedziałów Ni wykorzystywane są do wyznaczenia
nieliniowości różniczkowej jako:
DNL(N) = \frac{Ni}{N_{avr}}
gdzie N_{avr} jest średnią ze wszystkich schodków. Ze względów praktycznych schodki skrajne najczęściej są odrzucane, jako że zawierają one znacznie większą liczbę przypadków. Jest to związane z tym, iż przetwornik dla napięć z poza zakresu pełnej skaliwskazuje kody brzegowe. Mając wyznaczone nieliniowości różniczkowe, nieliniowości całkowe wyznacza się przy pomocy zależności 4.2.
==== Zadanie 3 ====
Zaimplementować procedurę realizującą wyżej opisaną metodę histogramową.
==== Zadanie 4 ====
Wyznaczyć zależności DNL/DNL od numeru kodu dla przetwornika 10 bitowego (model z zadania 1) w przypadku domyślnych wartości wzmocnienia oraz offsetu oraz dla wzmocnienia wynoszącego 1,9 i offsetcie 0,1.
===== Oczekiwane wyniki =====
==== zadanie 1/2 ====
{{ :hw:lab:e2_adc_pipeline:transfer.png?300 |}}
==== zadanie 3/4 ====
{{ :hw:lab:e2_adc_pipeline:inldnl.png?300 |}}
===== Do przemyslenia =====
* wprowadzac brakujace kody ?
* mowic cos o bledzie wzmocnienia i offsetu ?
* robic cwiczenia z niesymetrycznymi referencjami ?
===== Dla ambitnych =====
* ENOB w funkcji gain
* ENOB w funkcji offsett
* implementacja 2bit/stage