logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Za każdym razem, jak odczytuję wartość z ADC zwraca on 0xFF

ghost666 08 Sty 2017 19:49 2838 0
  • Za każdym razem, jak odczytuję wartość z ADC zwraca on 0xFF
    Pytanie: W moim układzie podłączyłem przetwornik analogowo-cyfrowy (ADC) poprzez interfejs SPI do mikrokontrolera. Za każdym razem, jak odczytuję wartość z ADC zwraca on 0xFF. Co może być w układzie źle?

    Odpowiedź: Nowe przetworniki ADC, zdolne do pracy z częstotliwością próbkowania na poziomie gigapróbek na sekundę, często charakteryzują się bardzo wysokimi parametrami, jeśli chodzi o działanie i niezawodność. Z pewnością, jeśli układ ten zwraca przy każdym zapytaniu wartość 0xFF to coś jest nie tak. Przyczyna może leżeć wewnątrz lub na zewnątrz układu. Przekonajmy się poniżej, jakie mogą być przyczyny takiej sytuacji.

    Najnowsza generacja opisywanych ADC, np. układ AD9680, zaprojektowana jest w 65 nm procesie CMOS, aby sprostać wymaganiom co do parametrów zmiennoprądowych. Układ podzielony jest na domeny zasilane różnym napięciem - 1,25 V, 2,5 V i 3,3 V. Aby układ działał poprawnie konieczne może być sekwencyjne włączanie tych napięć w odpowiedniej kolejności. Układ AD9680 został zaprojektowany tak, aby nie wymagał sekwencyjnego załączania zasilania - wbudowany układ Power-on Reset (POR) wymusza reset przetwornika po ustabilizowaniu się napięć zasilających.

    Dopóki POR nie jest usatysfakcjonowany jakością zasilania, dopóty układ znajdować się będzie w stanie resetu. W takiej sytuacji, jeśli wejścieSPI_VDD ma odpowiednie napięcie (1,8 V, 2,5 V lub 3,3 V) układ poprzez ten interfejs wysyłać będzie 0xFF. Brzmi znajomo? Okazuje się, że ten problem zdebugować możemy zwykłym multimetrem.

    W pierwszej kolejności musimy wykorzystać multimetr do zmierzenia napięć na pinach zasilania naszego przetwornika. Okazać się może, że któryś z nich nie dostaje napięcia w granicach akceptowalnych przez POR. To może nie być aż tak proste jak się wydaje. Spójrzmy na rysunek 1, na którym pokazano schemat blokowy sekcji zasilania układu AD9680-1250 z zegarem 1,25 GHz. Wszystko wygląda w porządku na pierwszy rzut oka. W układzie dla uproszczenia pominięto kondensatory filtrujące i inne linie zasilania - skupmy się na 1,25 V, jako że jest to najmniejsze co do wartości napięcie zasilania ADC.

    Za każdym razem, jak odczytuję wartość z ADC zwraca on 0xFF
    Rys.1. Przetwornik ADC AD9680 zasilany napięciem 1,25 V ze stabilizatora LDO ADP1741.


    Stabilizator ADP1741 musi mieć odpowiedni zapas napięcia do pracy, aby podawać na wyjściu 1,25 V, ale nie jest to duża wartość, bo to układ LDO. Z resztą - problemem nie jest tutaj ani LDO, ani ADC, tylko niepozorny koralik ferrytowy. Ten element jest typowy dla sekcji zasilania układów pracujących z tak wysokimi częstotliwościami i nie ma tutaj nic dziwnego w tym, że go zastosowano.

    Każdy koralik charakteryzowany jest wartością oznaczaną w kartach katalogowych DCR - rezystancja stałoprądowa. Dlaczego powinna ona nas martwić? Ponieważ pan Georg Simon Ohm tak powiedział. Wróćmy do podstaw:

    Prawo Ohma mówi, że przez przewodnik pomiędzy dwoma punktami płynie prąd proporcjonalny do różnicy potencjałów w tych punktach. Jeśli teraz zastosujemy tą wiedzę do naszego przykładu to szybko spostrzeżemy, co następuje: Na wyjściu ADP1741 (LDO) napięcie wynosi 1,25 V (tyle co powinno), jednakże jeśli zmierzymy napięcie na pinie zasilania ADC, po drugiej stronie koralika ferrytowego, spostrzeżemy, że wynosi ono jedynie 1,12 V. Tak niskie napięcie jest przyczyną odczytywania poprzez SPI 0xFF - układ ciągle był zresetowany.

    Przyczyną tego zjawiska jest spadek napięcia na koraliku ferrytowym i dlatego też tak ważna jest wartość DCR. Z niej i z prądu pobieranego przez ADC można wyznaczyć wartość spadku napięcia na koraliku. Co możemy zrobić, aby poprawić działanie układu? Poniżej przedstawiono kilka opcji:

    1. Nie korzystać w ogóle z koralika. To może być problemem, jeśli układ jest czuły na szum w napięciu zasilania, ale z pewnością wyeliminuje problem spadku napięcia.
    2. Zwiększyć napięcie wyjściowe z LDO. Pozwoli to skompensować spadek napięcia na koraliku, ale może też narazić zasilany układ na nadmiernie wysokie napięcia (można to zrealizować ładniej, jeśli nasz LDO ma wejście sprzężenia zwrotnego - wtedy pętlą sprzężenia obejmujemy także koralik - przyp.red.).
    3. Wybrać inny koralik o tej samej impedancji i nie mniejszym prądzie maksymalnym, ale niższej rezystancji DC.
    4. Rozdzielić linię zasilania na kilka osobnych: np. A_VDD1, A_VDD1_SR, D_VDD i DR_VDD i podłączyć koralik w każdej z nich. Wtedy przy tym samym DCR spadki napięcia będą mniejsze, bo prąd rozłoży się na 4 koraliki.

    Na rysunku 2 zaprezentowano implementację punktu 2 oraz 4. Opcja 4 jest najlepszym rozwiązaniem, jednakże zwiększa koszt układu - trzeba kupić 4, a nie jeden koralik i uwzględnić te elementy na PCB, zwiększając jego obszar. Jednocześnie warto zwrócić uwagę, że dodatkowym zyskiem z architektury takiej jak pokazana poniżej jest poprawienie odporności na szum części analogowej układu dzięki zwiększonemu filtrowaniu pomiędzy wejściami A_VDD i D_VDD.

    Za każdym razem, jak odczytuję wartość z ADC zwraca on 0xFF
    Rys.2. Różne możliwości włączenie koralika ferrytowego w system zasilania układu AD9680.


    Zatem - gdy kolejny raz projektować będziecie układ z przetwornikiem ADC, to multimetr może okazać się dobrym narzędziem do debugowania jego działania - nie zapominajmy o trywialnych elementach, takich jak koraliki ferrytowe i o tym co powiedział nam pan Ohm.

    Źródło: http://www.analog.com/en/analog-dialogue/raqs/raq-issue-134.html

    Fajne? Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    https://twitter.com/Moonstreet_Labs
    ghost666 napisał 11960 postów o ocenie 10197, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
REKLAMA