Elektroda.pl
Elektroda.pl
X
AM TechnologiesAM Technologies
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Kalibracja przetwornika A/C w ADuC841

17 Sie 2005 16:32 3851 10
  • Poziom 26  
    Witam,

    Nie wiem co robię źle, ale za nic nie potrafię skalibrować wewnętrznego przetwornika A/C w mikrokontrolerze ADuC841.
    (PDF: http://tinyurl.com/bvwv9 od strony 30)

    Na wejście kanału 0 poprzez bufor na LM358 podaje napięcie z potencjometru, wszystko to zasilane z AVDD. Porównuje napięcie mierzone multimetrem na wejściu kanału 0 (wyjście wzm. oper.) z napięciem obiczonym przez uC na podstawie odczytu z rejestrów przetwornika.

    Bez kalibracji błąd jest niewielki, natomiast po kalibracji tylko błędu offsetu (zera), lub tylko błędu wzmocnienia, lub obu błędów naraz pojawia się znaczny błąd (błąd 120mV przy Uwe = 500mV).

    Dokonałem kilkunastu pomiarów (na szybko) i uzyskałem takie charakterystyki:
    http://republika.pl/dykus/aduc841.htm

    Kalibracji dokonuję zgodnie z dokumentacją, tzn.:
    (obsługa przetwornika w procedurze przerwania)

    Code:
             MOV   ADCCON1, #8Ch      ; podzial przez 32 i 4 okresy akwizycji
    

             MOV   ADCCON2, #0Bh      ; odczyt z kanalu AGND
             MOV   ADCCON3, #25h      ; uruchom kalibracje offsetu (31 odczytow)
    kal_1:   MOV   A, ADCCON3         ; sprawdzaj czy kalibracja juz sie
             JB    ACC.7, kal_1       ;  zakonczyla

             MOV   ADCCON2, #0Ch      ; odczyt z kanalu Vref
             MOV   ADCCON3, #27h      ; uruchom kalibracje wzmocnienia (31 odczytow)
    kal_2:   MOV   A, ADCCON3
             JB    ACC.7, kal_2   

             MOV   ADCCON2, #00h      ; odczyt z kanalu 0      
             MOV   IE, #0C0h          ; przerwania od przetwornika ADC

    pomiar:  SETB  SCONV              ; uruchom pojedynczy pomiar
             CALL  Delay_100ms        ; co 100ms
             JMP   pomiar


    Podobne jest, jeśli np. kanał 1 połączę z masą analogową i użyję go do kalibracji błędu zera (nie próbowałem tego robić z Vref). Wg pomiarów (nóżka Cref) Vref = 2.48V (powinno być 2.5V z dokładnością +/-10mV).

    Próbowałem zmieniać ilość pomiarów przy kalibracji (średnia), kolejność kalibracji, ale ten duży błąd nadal występuje.

    Mikrokontroler zasilam pojedyńczym napięciem DVDD=5V (część analogowa jest zasilana wg dokumentacji - przez diody, rezystor i dławik), masy (AGND i DGND) połączone w jednym miejscu blisko uC, wyświetlacz LCD zasilam od strony masy cyfrowej (z DVDD), zaś wzm. oper. i potencjometr od strony masy analogowej (z AVDD), przy każdym układzie kondesatory odsprzęgające (na płytce z uC w SMD), kabel z przetwornika ekranowany. Odczyt jest dość stabilny, tyle, że ze sporym błędem.

    Czy ktoś ma jakieś pomysły, co może być nie tak? Czy ktoś dokonywał takiej kalibracji i mógłby się podzielić w pełni działającym kodem programu (chodzi tylko o klalibrację)?

    Pytałem o to na grupie 'pl.misc.elektronika', ale brak odpowiedzi...

    Pozdrawiam,
    Dykus.
  • AM TechnologiesAM Technologies
  • Poziom 12  
    Dykus napisał:
    Nie wiem co robię źle, ale za nic nie potrafię skalibrować wewnętrznego przetwornika A/C w mikrokontrolerze ADuC841.


    Mam podobny problem z ADuC814. Nie jestem pewien czy to na pewno to samo, ale pomiary rozmijają mi się z teorią. Nie robiłem jeszcze charakterystyk, bo w najbliższym czasie jestem zbyt bardzo zajęty innym projektem.

    Cytat:
    Na wejście kanału 0 poprzez bufor na LM358 podaje napięcie z potencjometru, wszystko to zasilane z AVDD. Porównuje napięcie mierzone multimetrem na wejściu kanału 0 (wyjście wzm. oper.) z napięciem obiczonym przez uC na podstawie odczytu z rejestrów przetwornika.

    Metodologia pomiaru wygląda na poprawną, natomiast wzmacniacz operacyjny jest zddecydowanie za słaby do 12 bitowego przetwornika. On ma typowo 2mV offsetu (max 7mV), to daje błąd wskazań przetwornika odpowiednio ok 3 (12 dla max).


    Cytat:
    Bez kalibracji błąd jest niewielki, natomiast po kalibracji tylko błędu offsetu (zera), lub tylko błędu wzmocnienia, lub obu błędów naraz pojawia się znaczny błąd (błąd 120mV przy Uwe = 500mV).

    To jest dziwne. Gdybyś znalazł przyczynę to chętnie posłucham dlaczego tak się dzieje. Kalibracja jest opisana w PDFie, więc trudno cos tu zepsuć.


    Cytat:
    Dokonałem kilkunastu pomiarów (na szybko) i uzyskałem takie charakterystyki: http://republika.pl/dykus/aduc841.htm

    Ciekawe jest to wygięcie charakterystyki pod koniec zakresu. Może źródło ma zbyt wysoką impedancję i kondensator próbkujący nie zdąża się naładować?
    Czy przetwornik masz podpięty bezpośrednio do wyjścia wzmacniacza czy przez rezystancję? Dokumentacja mojego kontrolera (ADC wygląda na ten sam) zaleca rezystancję mniejszą niż coś w okolicach 60 omów.


    Cytat:
    Próbowałem zmieniać ilość pomiarów przy kalibracji (średnia), kolejność kalibracji, ale ten duży błąd nadal występuje.

    Tak przy okazji czy próbowałeś bawić się WASP-em? Generalnie świetne narzędzie, ale czasami nie chce ruszyć. Nie mam pojęcia dlaczego.


    Cytat:
    część analogowa jest zasilana wg dokumentacji - przez diody, rezystor i dławik

    Nie bardzo rozumiem o jakie diody w zasilaniu chodzi. Czy możesz wskazać choćby stronę w PDF-ie? Zagięcie charakterystyki jest w okolicy 0,6V od Vref - może to będzie wskazówką?
    Czy Vref masz zewnętrzne, czy korzystasz z wewnętrznego? Kiedyś robiłem pomiary. Statycznie w temperaturze pokojowej nie widać różnicy między wewn. i zewn., natomiast wewnętrzny ma słaby współczynnik temperaturowy, chyba rzędu 100 ppm i w lodówce wyniki strasznie pływały :-).

    Cytat:
    Odczyt jest dość stabilny, tyle, że ze sporym błędem.

    WASP jest rewelacyjnym narzędziem do szybkiej oceny stabilności. Ja znalazłem kilka błędów (a w zasadzie dziur) w projekcie właśnie dzięki niemu. Szybko pozwala sprawdzć rózne konfiguracje ADC i rysuje wykresy zbieranych wyników. Na wykresach widać wszystkie zakłócenia wchodzące z zewnątrz: tętnienia od przetwornicy, szpilki zakłóceń, błędy offsetu wzmacniaczy itp.

    Cytat:
    Czy ktoś dokonywał takiej kalibracji i mógłby się podzielić w pełni działającym kodem programu (chodzi tylko o klalibrację)?

    Nie wiem jak bardzo Ci się spieszy, ale mogę spróbować wygospodarować godzinkę, czy dwie i spróbować zrobić, chociaż trochę będzie bolało :-]

    Piotrek.
  • AM TechnologiesAM Technologies
  • Poziom 26  
    pitlab napisał:
    Mam podobny problem z ADuC814. Nie jestem pewien czy to na pewno to samo, ale pomiary rozmijają mi się z teorią.

    U mnie bez kalibracji jest w miarę do przyjęcia. Przy innych mikrokontrolerach tej serii (ADuC8xx) Analog podaje, że przetwornik jest fabrycznie skalibrowany (tzn. współczynniki są ładowane przy resecie) dla temperatury 25 stC i kalibracja jest wymagana, jeśli będziemy używać go w innej temperaturze.

    pitlab napisał:
    Metodologia pomiaru wygląda na poprawną, natomiast wzmacniacz operacyjny jest zddecydowanie za słaby do 12 bitowego przetwornika. On ma typowo 2mV offsetu (max 7mV), to daje błąd wskazań przetwornika odpowiednio ok 3 (12 dla max).

    Zgadza się, zastosowałem go tylko po to, by uzyskać małą rezystancję źródła napięcia dla wyeliminowania dodatkowego błędu. Multimetrem mierzyłem napięcie tuż na wejściu ADC.
    Poza tym napięcie niezrównoważenia jest do przeskoczenia - tyle ile się da można wyzerować potencjometrem (WO z zerowaniem), a resztę poprzez kalibrację systemu (błąd offsetu) - gdyby tylko działała... :)

    pitlab napisał:
    Kalibracja jest opisana w PDFie, więc trudno cos tu zepsuć.

    Też tak sądzę... :) Jak się w Googlach wpiszę nazwę tego mikrokontrolera, to na jednej z pierwszych stron można znaleźć opis implementacji filtru FIR dla tego procka i tam autor też przeprowadza kalibrację, ale wg mnie robi to troszkę źle. Ale i to spróbowałem z czystej ciekawości i oczywiście nie zadziałało.
    Jeszcze coś innego zauważyłem podczas tej kalibracji. Mianowicie po jej uruchomieniu powinno się sprawdzać zajętość przez 7 bit w ADCCON3 (pisze z pamięci). Jeśli u mnie po uruchomieniu kalibracji, jeszcze przed testowaniem tego bitu dołożę np. pętlę opóżniającą 100ms (na R0, R1, poprzez CALL) to kalibracja wypada jeszcze gorzej - tzn. jeszcze większe błędy. Nie wiem, czym jest to spowodowane (na NOP-ach jest ok), może procek wykorzystuje te rejestry przy obliczeniach tych współczynników...? Chociaż sądząc po czasie to chyba uśrednianie jest robione bardziej sprzętowo... pewnie nie przez przypadek wybrane są takie liczby uśrednianych pomiarów.

    pitlab napisał:
    Czy przetwornik masz podpięty bezpośrednio do wyjścia wzmacniacza czy przez rezystancję? Dokumentacja mojego kontrolera (ADC wygląda na ten sam) zaleca rezystancję mniejszą niż coś w okolicach 60 omów.

    Na wejściu jest wtórnik na wzmacniaczu operacyjnym (zakładam więc rezystancję źródła pomijalną, myślę, że <1 Ohm). Jak znajdę chwilkę to zdejmę jeszcze raz tą charakterystykę, dokładniej...

    pitlab napisał:
    Tak przy okazji czy próbowałeś bawić się WASP-em? Generalnie świetne narzędzie, ale czasami nie chce ruszyć. Nie mam pojęcia dlaczego.

    Niestety nie. A to dlatego, że na mojej płytce mam aktualnie wlutowany kwarc 16MHz, a ten program działa tylko na 11.059MHz - bez sensu, że nie można nic konfigurować (całe szczęście, że w WSD się da). A, że płytka wygląda bardzo ładnie narazie nie planuję przelutować kwarcu, choć kusi mnie mocno ten WASP... :)

    pitlab napisał:
    Nie bardzo rozumiem o jakie diody w zasilaniu chodzi. Czy możesz wskazać choćby stronę w PDF-ie? Zagięcie charakterystyki jest w okolicy 0,6V od Vref - może to będzie wskazówką?

    To nie to (mam nadzieję;), to diody zabezpieczające przed zbyt dużą różnicą napięć między AVDD a DVDD. Strona 73, rysunek 81.

    pitlab napisał:
    Czy Vref masz zewnętrzne, czy korzystasz z wewnętrznego?

    Z wewnętrznego. Kiedyś oglądałem to ciężko dostać coś taniego, co by wystarczało do przetwornika 12-bitowego (w lokalnych sklepach).

    pitlab napisał:
    Kiedyś robiłem pomiary. Statycznie w temperaturze pokojowej nie widać różnicy między wewn. i zewn., natomiast wewnętrzny ma słaby współczynnik temperaturowy, chyba rzędu 100 ppm i w lodówce wyniki strasznie pływały :-).

    No ale od czego jest pomiar temperatury? :) Jak się za bardzo zmieni to można zrobić "rekalibrację" przetwornika... jeśli kalibracja tylko działa. :)

    pitlab napisał:
    WASP jest rewelacyjnym narzędziem do szybkiej oceny stabilności. Ja znalazłem kilka błędów (a w zasadzie dziur) w projekcie właśnie dzięki niemu.

    Z tego co się domyślam, to jest to taki oscyloskop cyfrowy, tak? Ograniczony jednak mocno transferem poprzez RS-232 (chyba, że część danych buforuje...). Chyba jednak będę musiał wymienić ten kwarc... :)

    pitlab napisał:
    Nie wiem jak bardzo Ci się spieszy, ale mogę spróbować wygospodarować godzinkę, czy dwie i spróbować zrobić, chociaż trochę będzie bolało :-]

    Nie, nie śpieszy się. :) Będę wdzięczny, jeśli kiedyś spróbujesz zrobić coś takiego u siebie i napisać o rezultatach. Spokojnie poczekam tydzień, miesiąc...
  • Poziom 12  
    Cytat:
    Poza tym napięcie niezrównoważenia jest do przeskoczenia - tyle ile się da można wyzerować potencjometrem (WO z zerowaniem), a resztę poprzez kalibrację systemu (błąd offsetu) - gdyby tylko działała... :)

    Napięcie offsetu nie bardzo jest do przeskoczenia. :-)
    W momencie gdy sygnał zmienia kierunek (np. z narastającego na malejący) wtedy widać skok wyjścia wzmacniacza spowodowany zbyt dużym offsetem. Przynajmniej w jednej z moich aplikacji to było widać.
    Zerknij na ten obrazek:
    Kalibracja przetwornika A/C w ADuC841
    Tu jest klasyczny przypadek "luzów" wywołanych przełączaniem wzmacniacza (ten akurat ma zaledwie 12uV offsetu, ale bardzo duże wzmocnienie).
    Zwróć uwagę że skok wzmacniacza ma często różną wartość. Nie wyobrażam sobie kalibracji czegoś takiego.


    Cytat:
    Jeszcze coś innego zauważyłem podczas tej kalibracji. Mianowicie po jej uruchomieniu powinno się sprawdzać zajętość przez 7 bit w ADCCON3 (pisze z pamięci). Jeśli u mnie po uruchomieniu kalibracji, jeszcze przed testowaniem tego bitu dołożę np. pętlę opóżniającą 100ms (na R0, R1, poprzez CALL) to kalibracja wypada jeszcze gorzej - tzn. jeszcze większe błędy. Nie wiem, czym jest to spowodowane (na NOP-ach jest ok), może procek wykorzystuje te rejestry przy obliczeniach tych współczynników...? Chociaż sądząc po czasie to chyba uśrednianie jest robione bardziej sprzętowo... pewnie nie przez przypadek wybrane są takie liczby uśrednianych pomiarów.

    Nie mam pojęcia, rzeczywiście wątpię aby cokolwiek robił na rejestrach. Natomiast 100ms przy tak szybkim przetworniku to wieczność.


    Cytat:
    pitlab napisał:
    Tak przy okazji czy próbowałeś bawić się WASP-em? Generalnie świetne narzędzie, ale czasami nie chce ruszyć. Nie mam pojęcia dlaczego.

    Niestety nie. A to dlatego, że na mojej płytce mam aktualnie wlutowany kwarc 16MHz, a ten program działa tylko na 11.059MHz - bez sensu, że nie można nic konfigurować (całe szczęście, że w WSD się da). A, że płytka wygląda bardzo ładnie narazie nie planuję przelutować kwarcu, choć kusi mnie mocno ten WASP... :)

    Własnie ten rysunek był z WASPa. Akurat tym razem ruszył. ;-)
    Co do kwarca, to w 814 jest taktowany kwarcem zegarkowym. Z jednej strony dobrze bo uniwersalnie i można PLL-em zmieniać prędkość pracy całości. Z drugiej strony trudno pogonić transmisję asynchroniczną bo zegar nie odpowiedni. :-(


    Cytat:
    pitlab napisał:
    Nie bardzo rozumiem o jakie diody w zasilaniu chodzi.

    Strona 73, rysunek 81.

    Nigdy na to nie zwracałem uwagi a w dokumentacji 814 tego nie ma. Rzeczywiscie ciekawy i godny implementacji pomysł, tym bardziej że niedawno kupiłem sporo podwójnych diód w SOT23-4. Człowiek całe życie się uczy ;-)


    Cytat:
    pitlab napisał:
    Czy Vref masz zewnętrzne, czy korzystasz z wewnętrznego?

    Z wewnętrznego. Kiedyś oglądałem to ciężko dostać coś taniego, co by wystarczało do przetwornika 12-bitowego (w lokalnych sklepach).

    Niedawno kupiłem całą laskę REF192 Analog Devices: napięcie 2,5V, dokładność wstępna +-2mV, współczynnik temperaturowy 5ppm, pobór prądu 45uA, obudowa SO8. Potrzebuję sporo mniej więc jeżeli potrzebujesz nie więcej niż 50szt to mogę odstąpić po kosztach.

    Cytat:
    pitlab napisał:
    Kiedyś robiłem pomiary. Statycznie w temperaturze pokojowej nie widać różnicy między wewn. i zewn., natomiast wewnętrzny ma słaby współczynnik temperaturowy, chyba rzędu 100 ppm i w lodówce wyniki strasznie pływały :-).

    No ale od czego jest pomiar temperatury? :) Jak się za bardzo zmieni to można zrobić "rekalibrację" przetwornika... jeśli kalibracja tylko działa. :)

    W zasadzie tak, ale praktycznie łatwiej powiedzieć niż zrobić. Jeżeli urządzenie będzie pracowało w szerokim zakresie temperatur (a moje będzie) doszedłem do wniosku że łatwiej będzie ustabilizować Vref niż robić rekalibrację.

    Cytat:
    pitlab napisał:
    WASP jest rewelacyjnym narzędziem do szybkiej oceny stabilności. Ja znalazłem kilka błędów (a w zasadzie dziur) w projekcie właśnie dzięki niemu.

    Z tego co się domyślam, to jest to taki oscyloskop cyfrowy, tak? Ograniczony jednak mocno transferem poprzez RS-232 (chyba, że część danych buforuje...). Chyba jednak będę musiał wymienić ten kwarc... :)

    Dokładnie - taki softwareowy oscyloskop. Na zebranie 4k pomiarów - akurat tyle jest na obrazku trzeba poczekać ok. 6s ale efekty mówią same za siebie. Można oczywiście zbierać mniej danych. Jest jeszcze prosta statystyka i histogram zebranych danych.

    Cytat:
    pitlab napisał:
    Nie wiem jak bardzo Ci się spieszy, ale mogę spróbować wygospodarować godzinkę, czy dwie i spróbować zrobić, chociaż trochę będzie bolało :-]

    Nie, nie śpieszy się. :) Będę jednak wdzięczny, jeśli kiedyś spróbujesz zrobić coś takiego u siebie i napisać o rezultatach. Spokojnie poczekam tydzień, miesiąc...

    Postaram się zrobić jak najszybciej.

    Piotrek.
  • Poziom 12  
    Zrobiłem sobie przerwę i zdjąłem kilka charakterystyk z ADC. Zamieszczam obrazek z 2 charakterystykami zdjętymi po dwy kolejnych uruchomieniach kontrolera i charakterystykę bez włączonej kalibracji.

    Kalibracja przetwornika A/C w ADuC841

    W moim przypadku można powiedziec że kalibracja praktycznie nie działa. Zrobiłem jeszcze kilka uproszczonych pomiarów mierzac jedynie napięcia w końcach charakterystyki. Wyszły mi takie wartości błędów:
    0V => 6mV; 2,51V => 155,4mV
    0V => 6mV; 2,51V => 155,2mV
    0V => -149,4mV; 2,46V => 0,6mV
    0V => 6mV; 2,49V => 155,0mV

    Próbowałem przesunąć moment kalibracji trochę później od chwili startu, obawiając się że w momencie kalibracji Vref może nie być jeszcze ustalone, ale na razie nie widać większych postępów. Spróbuję przesunąć o kilka sekund może coś pomoże. Generalnie straszna kaszana, a już tyle się nawalczyłem ze "źle wskazującymi" czujnikami :|

    Przy okazji porównując Twoje i moje charakterystyki wychodzi na to że przetwornik ma jakies problemy z pomiarem w okolicy zera. Natomiast u mnie nie wystepuje problem z górnymi wartościami.

    Może warto napisać o tym do Analoga? Jak na razie nie znalazłem u nich żadnej informacji o takim stanie rzeczy a nie chce mi się wierzyć że światowy lider wypuścił taką kaszankę.
  • Poziom 25  
    pitlab - czy masz wyjście potencjometru odsprzężone kondensatorem do masy ??. Bo jeśli nie to warto by było zacząć od tego i na początek wyeliminować "mikrotrzaski-szumy" potencjometru a potem wyjąśnić temat nieliniowości A/C.
  • Pomocny post
    Poziom 12  
    morph13 napisał:
    pitlab - czy masz wyjście potencjometru odsprzężone kondensatorem do masy ??. Bo jeśli nie to warto by było zacząć od tego i na początek wyeliminować "mikrotrzaski-szumy" potencjometru a potem wyjąśnić temat nieliniowości A/C.


    Tak, na wejściu jest filtr RC: 10k i 100nF. Nie wiem o jakich szumach mówisz? Czy chodzi o to że charakterystyka nie jest idealną linią prostą? Tym specjalnie sie nie przejmuję. W najgorszym przypadku (na charakterystyce bez kalibracji) błąd nieliniowiści wynosi 2mV (2 bity). Te błędy wynikają raczej z zastosowania prymitywnego wzorca napięcia (Vcc), być może zbyt dużego potencjometru (100k). Jeżeli zamiast potencjometru siedzi docelowy czujnik (źródło o niskiej impedancji) jego wskazania są stabilne.

    Tak wiec IMO do wyjaśnienia pozostaje kwestia niedziałającej (lub źle opisanej) kalibracji.
  • Poziom 26  
    pinlab napisał:
    Napięcie offsetu nie bardzo jest do przeskoczenia. :-)
    W momencie gdy sygnał zmienia kierunek (np. z narastającego na malejący) wtedy widać skok wyjścia wzmacniacza spowodowany zbyt dużym offsetem. Przynajmniej w jednej z moich aplikacji to było widać.
    Ok, dzięki za informacje. Nie miałem jeszcze okazji bawić się przetwornikami 12-bitowymi (max. to 8-bit) i takowych problemów nie znam, ale mocno mnie zaskoczyły. Narazie niedowierzam... :)

    pinlab napisał:
    Zerknij na ten obrazek:
    Tu jest klasyczny przypadek "luzów" wywołanych przełączaniem wzmacniacza (ten akurat ma zaledwie 12uV offsetu, ale bardzo duże wzmocnienie).
    Zwróć uwagę że skok wzmacniacza ma często różną wartość. Nie wyobrażam sobie kalibracji czegoś takiego.

    Hmm, niewiele mogę z niego wywnioskować. :) Przedewszystkim barkuje opisu osi X (przedrostki) i sygnału "wejściowego", na który reaguje w ten sposób wzmacniacz. Wiem, że to skomplikowane i nie chodzi mi tutaj o to, byś zamieścił te przebiegi... Oczywiście jak rozumiem nie jest to wywołane żadnymi szumami, masami, itp.

    pinlab napisał:
    Co do kwarca, to w 814 jest taktowany kwarcem zegarkowym. Z jednej strony dobrze bo uniwersalnie i można PLL-em zmieniać prędkość pracy całości. Z drugiej strony trudno pogonić transmisję asynchroniczną bo zegar nie odpowiedni. :-(

    No i stabilność bardzo spada, a czasami się przydaje...

    pinlab napisał:
    Niedawno kupiłem całą laskę REF192 (...) Potrzebuję sporo mniej więc jeżeli potrzebujesz nie więcej niż 50szt to mogę odstąpić po kosztach.

    Dzięki, póki co jednak wykorzystuję wewnętrzne źródło odniesienia.

    pinlab napisał:
    W zasadzie tak, ale praktycznie łatwiej powiedzieć niż zrobić. Jeżeli urządzenie będzie pracowało w szerokim zakresie temperatur (a moje będzie) doszedłem do wniosku że łatwiej będzie ustabilizować Vref niż robić rekalibrację.

    Tym bardziej, że rekalibracja nie działa. ;)

    pinlab napisał:
    Może warto napisać o tym do Analoga? Jak na razie nie znalazłem u nich żadnej informacji o takim stanie rzeczy a nie chce mi się wierzyć że światowy lider wypuścił taką kaszankę.

    Dziwne jednak, że ten błąd jest powielany w kilku uC - bo jak rozumiem, Ty używasz ADuC814, ja ADuC841 i problemy są wręcz takie same.
    Szkoda też, że w przykładowych kodach źródłowych Analog nie przeprowadza kalibracji...


    Przed chwilą zrobiłem jeszcze raz serię pomiarów, tym razem jest ich więcej i nieco dokładniejsze. Wynik poniżej, celowo nie łączyłem kropek liniami:
    Kalibracja przetwornika A/C w ADuC841

    Błędy są mocno zależne od zakresu pomiarowego, ja na najwyższym używanym (2V) mam rozdzielczość 10mV, podczasz gdy przetwornik w uC nadal 600uV. Starałem się więc zaokrąglać do 10mV i dlatego błąd jest krotnością 10mV. Podobnie jest na innych zakresach. Nie wiem dokładnie jak mierzy miernik, i czy np. dla napięcia 2,106 wyświetla już 2,11 (tzn. ta granica leży na 0,5), czy inaczej, ale jeśli tak, to błąd 10mV na wykresie (z pomiarów) oznacza, że w rzeczywistości może mieć od 5 do 14mV... Tak czy inaczej uważam, że przy tych wyższych napięciach błąd jest zbyt duży.
    Używam miernika MY-63 (Mastech) i wg specyfikacji dokładność wynosi +/-0.5% odczytu +/- 1 cyfra (tzn. kilka lat temu tak mieć powinien;).

    ---

    Nadal się bawię i odczytałem wartości rejestrów w których zapisane są współczynniki kalibracji, ogólnie mam:
    Offset: 8143 (dec) = 01111111001111 (bin)
    Gain: 16383 (dec) = 11111111111111 (bin)
    Dla przypomnienia współczynniki są 14-bitowe (max. 16383 dec). W tym drugim przypadku (Gain) sytuacja taka, jakby coś było wyraźnie uszkodzone i wartość "dobija do granicy". Dla w/w współczynnika offsetu mam offset 150mV, mimo, że wg specyfikacji można osiągnąć max. +/-125mV. :) Gdyby wiedzieć skąd się biorą te 14-bitowe liczby...

    ---

    Zauważyłem, że jeśli np. kanał 0 zewrę do AGND i jego wykorzystam do kalibracji offsetu, a później go rozewrę i normalnie dokonuje pomiarów to kalibracja działa prawidłowo (wcześniej wydawało mi się, że w ten sposób też nie działa - tzw. kalibracja systemu). Wówczas współczynnik dla Offsetu wynosi: 8163 (dec) - czyli niewiele więcej niż w/w (a przy tamtym było offset aż 150mV). Być może bity nie określają tylko wartości współczynnika...
    Jeżeli zaś dokonuje normalnych pomiarów bez kalibracji, to z kanału AGND uzyskuje wartość napięcia 3.0mV, zaś z kanału Vref wartość 2499.3mV (oba stabilne). Nie wiem więc dlaczego po wybraniu kanału AGND kalibracja nie działa, zaś przy zwarciu kanału CH0 z AGND i użyciu jego do kalibracji - działa. No i jak na wykalibrowany przetwornik, to błedy blisko zera są duże, zbyt duże...
    Najgorsze jest, że wczoraj miałem jakieś podejrzenia, ale dziś ich już nie pamiętam... :( Dotyczyły ustawień w rejestrach...

    ---

    Ha! Wreszcie działa!
    Oczywiście błąd leżał po mojej stronie, a nie po stronie Analoga - czego można było się domyśleć. ;) Wynikał on ze złego czytania dokumentacji.
    Otóż, w PDFie dla ADuC841 na stronie 26 pisze:
    "This bit should always be written as 1 by the user when performing calibration."
    Dotyczy to bitu 2 (oznaczanego jako ReSerVeD) w rejestrze ADCCON3. I wszystko jasne - gdy przeprowadzamy kalibrację to bit ma być ustawiony, ale po zakończeniu kalibracji (obu) powinniśmy ten bit wyzerować. Ja zawsze go zostawiałem jako 1... gdyby jednak tak Analog chciał, to by napisali: "Reserved.This bit should always be written as 1.". :)

    Podsumowując: po kalibracji, a przed właściwymi pomiarami dokładamy instrukcję np.: 'MOV ADCCON3, #00h'.

    Jak znów znajdę chwilkę, to ściągnę charakterystykę po takiej kalibracji...
    Chętnie bym sobie kilknął na "Pomógł"... ;)

    Dziękuję wszystkim za pomoc. Chętnie jeszcze podyskutuje w tym temacie...
  • Poziom 12  
    Dykus napisał:
    pinlab napisał:
    Napięcie offsetu nie bardzo jest do przeskoczenia. :-)
    W momencie gdy sygnał zmienia kierunek (np. z narastającego na malejący) wtedy widać skok wyjścia wzmacniacza spowodowany zbyt dużym offsetem. Przynajmniej w jednej z moich aplikacji to było widać.
    Ok, dzięki za informacje. Nie miałem jeszcze okazji bawić się przetwornikami 12-bitowymi (max. to 8-bit) i takowych problemów nie znam, ale mocno mnie zaskoczyły. Narazie niedowierzam... :)


    Dobrze robisz że nie dowierzasz :-)
    Właśnie okazało się że błędy na rysunku są akurat innego typu. Zmieniłem wzmacniacz na lepszy (z 12uV offsetu na 1uV) i jest dokładnie to samo. Wpadło mi w rękę jakieś stare urządzenie z bylejakim wzmacniaczem (offset rzędu 1mV) i też jest to samo. To musi być jakiś błąd aplikacyjny, lub wynikjący ze źródła sygnału (czujnik cisnienia ze wzmacniaczem). Będę probówał to znaleźć.

    Dykus napisał:
    pinlab napisał:
    Tu jest klasyczny przypadek "luzów" wywołanych przełączaniem wzmacniacza [...]

    Hmm, niewiele mogę z niego wywnioskować. :) Przedewszystkim barkuje opisu osi X (przedrostki) i sygnału "wejściowego", na który reaguje w ten sposób wzmacniacz. Wiem, że to skomplikowane i nie chodzi mi tutaj o to, byś zamieścił te przebiegi... Oczywiście jak rozumiem nie jest to wywołane żadnymi szumami, masami, itp.

    Oś X to kolejne próbki w bliżej nieokreślonej funkcji czasu, prawdopodobnie wynikającej z przepływności stronienia danych idących UARTem prędkością 57,6k, czyli prawodopodobnie kolejne dane są póbkowane co 350us. Oś Y to wartości odzytane z ADC. Poprawiłem obrazek, tak aby wartości były widoczne.

    Dykus napisał:
    Nadal się bawię i odczytałem wartości rejestrów w których zapisane są współczynniki kalibracji, ogólnie mam:
    Offset: 8143 (dec) = 01111111001111 (bin)
    Gain: 16383 (dec) = 11111111111111 (bin)

    U mnie typowo jest:
    Offset = 8159
    Gain = 8224

    Dykus napisał:
    Ha! Wreszcie działa![...]
    Otóż, w PDFie dla ADuC841 na stronie 26 pisze:
    "This bit should always be written as 1 by the user when performing calibration."
    Dotyczy to bitu 2 (oznaczanego jako ReSerVeD) w rejestrze ADCCON3. I wszystko jasne - gdy przeprowadzamy kalibrację to bit ma być ustawiony, ale po zakończeniu kalibracji (obu) powinniśmy ten bit wyzerować. Ja zawsze go zostawiałem jako 1...


    Dopiero dzisiaj mogłem to przećwiczyć. U siebie miałem dokładnie to samo ;-)
    Na początku poprawiłem kod, wyznaczam pierwszą charakterystykę. Wychodzi w miarę liniowa z offsetem ok 12mV - lepiej ale bez rewelacji. Wyłączam i włączam zasilanie, zaczynam robić drugą charakterysyukę i na dzień dobry 150mV offsetu. Co jest grane?

    Dorobiłem funkcję aby można było ręcznie wyzwalać kalibrację. Po ręcznym wyzwoleniu błędy offsetu są praktycznie stałe i wynoszą ok -2mV. Tyle to pewnie błąd miernika.
    Zrobiłem kilka prób. Na początku kodu w inicjalizacji sprzetu miałem uruchamianie kalibracji. Włączałem urządzenie, mierzyłem ustawione wczesniej napięcie a potem ręcznie wyzwalałem kalibrację i jeszcze raz mierzyłem. Dla kolejnych 4 uruchomień błędy (offset+gain łącznie) były następujące:
    wynik po resecie; wynik po ręcznej kalibracji [mV]
    1) 1,78; -1,99
    2) 119,65; -2,18
    3) -133,20; -2,18
    4) 148,96; -2,18

    Wyciągam z tego wniosek, że kalibracja musi być uruchamiana na stabilnie pracującej elektronice a nie zaraz po starcie, gdzie coś jeszcze może pływać.


    Dykus napisał:
    Jak znów znajdę chwilkę, to ściągnę charakterystykę po takiej kalibracji...Chętnie bym sobie kilknął na "Pomógł"... ;)

    Mnie bardzo pomogłeś. Serdeczne dzięki.
    A charakterystyka po kalibracji wygląda teraz tak:
    Kalibracja przetwornika A/C w ADuC841
    Widać że sa nieznaczne błędy zarówno offsetu jak i wzmocnienia, ale to jest o dwa rzędy wielkości lepiej niż w czasie źle wykonanej kalbracji. W dodatku nie jestem pewien wzorca napięcia (chiński multimetr wbudowany w zestaw laboratoryjny firmowany rzez NDN).
    Na tym etapie można przyjąć że kalibracja działa. Spróbuje jeszcze uruchamiać ją z większym opoźnieniem po starcie a jeżel nie pomoże spróbuję wyrzucić kalibrację z inicjalizacji i do rejestrów ADCOFS i ADCGAIN wpisywać predefiniowane wartości.


    Dykus napisał:
    Dziękuję wszystkim za pomoc. Chętnie jeszcze podyskutuje w tym temacie...

    Ze swojej strony też nie zamykam tematu. Spróbuję wieczorkiem zrobić planowane usprawnienia i zobaczę co z tego wyjdzie.
  • Poziom 26  
    pitlab napisał:
    Oś X to kolejne próbki w bliżej nieokreślonej funkcji czasu, prawdopodobnie wynikającej z przepływności stronienia danych idących UARTem prędkością 57,6k, czyli prawodopodobnie kolejne dane są póbkowane co 350us. Oś Y to wartości odzytane z ADC. Poprawiłem obrazek, tak aby wartości były widoczne.

    W takim razie muszę z przykrością stwierdzić, że lichy ten program. :) Podstawowa sprawa to znane wartości na osi X i Y. Poza tym nie jest problemem przecież, aby zamiast słów uzyskiwanych z przetwornika na osi umieścić bezpośrednio napięcia... Nie wysilili się. ;)

    pitlab napisał:
    Dorobiłem funkcję aby można było ręcznie wyzwalać kalibrację. Po ręcznym wyzwoleniu błędy offsetu są praktycznie stałe i wynoszą ok -2mV. Tyle to pewnie błąd miernika.

    Pewnie tak. U mnie po kalibracji błąd zera (offset) jest na poziomie +/-1 LSB (a nawet +/- 0.5 LSB), co odpowiada +/- 600 uV.
    Mam przed przetwornikiem wtórnik na LM358 i gdy zewrę jego wejście to na wyjściu mam wg miernika 1.2mV - jest to suma wszystkich niedoskonałości wzmacniacza, zaś wg przetwornika jest 0.6mV i zmienia się czasami na 1.2mV (pomiar na granicy dwóch poziomów). Przyjmując więc pomiar miernikiem za wzorcowy, to błąd jest ≤1 LSB - zgodnie z dokumentacją.

    pitlab napisał:
    Wyciągam z tego wniosek, że kalibracja musi być uruchamiana na stabilnie pracującej elektronice a nie zaraz po starcie, gdzie coś jeszcze może pływać.

    Też mi się tak wydaje. :) Mamy więc kolejną istotną sprawę przy kalibracji ADC. :)
    Ja do uC mam podłączony standardowy wyświetlacz LCD i na samym początku mam procedury opóźniające (tymczasowo) 100ms (wymagane jest chyba 50ms dla LCD), po nich jest jeszcze inicjalizacja LCD (~10ms), a dopiero potem uruchamiam kalibrację, tak więc ten problem mnie zupełnie nie dotyczył. :)

    pitlab napisał:
    A charakterystyka po kalibracji wygląda teraz tak: (...)
    Widać że sa nieznaczne błędy zarówno offsetu jak i wzmocnienia, ale to jest o dwa rzędy wielkości lepiej niż w czasie źle wykonanej kalbracji.

    Wg mnie i tak jest to nieco za dużo. Raz, że to Analog Devices, a dwa, że - jak pisałeś, masz chiński multimetr. ;) Żartuję oczywiście. :)
    Swoją drogą, to chyba nie do końca taki "chiński multimetr", skoro potrafisz zmierzyć napięcie >2V z rozdzielczością lepszą niż 0.5mV (wnioskuję z wykresu)?
  • Poziom 12  
    Dykus napisał:
    W takim razie muszę z przykrością stwierdzić, że lichy ten program. :) Podstawowa sprawa to znane wartości na osi X i Y. Poza tym nie jest problemem przecież, aby zamiast słów uzyskiwanych z przetwornika na osi umieścić bezpośrednio napięcia... Nie wysilili się. ;)

    W zasadzie mogli by, chciaż tego mi nie brakuje, bo to wyświetla mój progam. Natomiast brakowało wizualizacji mi szybkiego przebiegu widzianego "okiem" ADC. Okazuje się że między tym co widzi oscyloskop a ADC jest trochę różnicy.


    Dykus napisał:
    pitlab napisał:
    A charakterystyka po kalibracji wygląda teraz tak: (...) Widać że sa nieznaczne błędy zarówno offsetu jak i wzmocnienia, ale to jest o dwa rzędy wielkości lepiej niż w czasie źle wykonanej kalbracji.

    Wg mnie i tak jest to nieco za dużo. Raz, że to Analog Devices, a dwa, że - jak pisałeś, masz chiński multimetr. ;) Żartuję oczywiście. :)
    Swoją drogą, to chyba nie do końca taki "chiński multimetr", skoro potrafisz zmierzyć napięcie >2V z rozdzielczością lepszą niż 0.5mV (wnioskuję z wykresu)?


    Multimetr (z całą pewnością wyprodukowany w PRC) mierzy z rozdzielczością 1 mV, dokładność to 0,8%, +-3 cyfry. Najmniejszy zakres to 4V stąd 0,8% daje dokładność 16mV. To że wykres ma większą rozdzielczość wynika z rozdzielczości obliczania błędu ;-)
    Tak więc wartość bezwzględna błędu mnie nie martwii, natomiast gdyby wyznaczyć linię trendu to najbardziej pasowała by mocno spłaszczona parabola, co może sugerować nieliniowość.
    Mam jeszcze jeden miernik, któremu znacznie mniej ufam, ale spróbuję doprowadzić go do stanu używalności i nim zmierzyć. Zobaczę czy wyniki będą powtarzalne.

    Z innych rzeczy.
    1) Odsunąłem w czasie kalibrację (kilka sek po starcie) i teraz nie widzę istotnej róznicy między kalibracją automatyczną (po resecie) a tą wyzwalaną ręcznie.
    2) Wyjaśniła się (przynajmniej cześciowo) sprawa tych dziwnych schodków na przebiegu. To jest wykres pierwszej pochodnej sygnału czujnika ciśnienia, otrzymany na wzmacniaczu pracującym w konfiguracji członu różniczkującego. Ponieważ czujnik ciśnienia mocno szumi, dodałem też elementy RC konfigurujące wzmacniacz jako człon całkujący. Tak więc realizuję funkcję różniczkowania z niewielkim całkowaniem, mającym odfiltrować wyższe częstotliwości. Nie do końca rozumiem dlaczego akurat tak wyglądają dane (na oscyloskopie przebieg jest trochę inny - nie ma tak stromych zboczy). W każdym bądź razie wyłączając całkowanie pozbywam się tych schodków. Muszę jeszcze poeksperymentować z jakością sygnału a w zasadzie z jego filtracją dolnoprzepustową, ale taką która będzie akceptowalna dla członu różniczkującego.