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

XMEGA - ADC pływa bardzo przy zamianie temperatury

Marek_Gorecki 14 Wrz 2016 11:53 1920 29
REKLAMA
  • #1 15930581
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    WItam,

    Mam problem z przetwornikiem ADC w procesorze XMEGA.
    Wiem, że pojawiły sie na forum krytyczne uwagi dotyczące tego przetwornika w tych procesorach, ale nie wierzę że jest aż tak źle jak u mnie.
    Musi to być mój bład , nie wierzę że ATMEL mógł coś takiego wypuścić na rynek.

    Mój procesor to ATXMEGA32E5.

    Na wejście PA7 ( wejście ADC nr 15) - doprowadzam napięcie ze żródła napięcia stabilizowanego TL431 poprzez dzielnik rezystancyjny wykonany na precyzyjnych rezystorach.
    Procesor pobiera napięcie referencyjne z tego źródła referencyjnego.


    W temperaturze 53C, napięcie na wejściu procesora wynosi 1.2547V - wynik w ADC wynosi 2228.

    A po ochłodzeniu do 15 stopni mam 2243 - przy napieciu 1.2556V.

    Czyli napięcie mi się zmieniło o 0,0009V czyli o 0.07% a wynik mi skoczył aż o 0.66%.

    Zatem bład tego przetwornika wynosi aż 0.6% !!!.

    Czyli mogę się spodziewać przy zmianie temperartury o około 40 stopni skoku o ponad 24 jednostki !

    I jeszcze jedno - skoki wskazań przetwornika pojawiają się nie równo.
    Najszybciej reaguje procesor na zmiane temperatury w okolicach 20 stopni.

    Mam nadzieję, że wina błedu leży po mojej stronie, bo płytke wykonałem , projekt napisałem pod właśnie ten procesor i nie chciałbym zmieniać na coś innego.

    Uprzedzę stwierdzenia co do płytki.
    Wszystkie kwestie (kondensatory, dławiki, żródła referencyjne, masy analogowej i cyfrowej) są wykonane prawidłowo.
    Procesor podczas pomiaru nic innego nie wykonuje, tylko po pomiarze wysyła wynik do PC.

    KOnfiguracja ADC wygląda następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Wejście pomiarowe mam zdefiniowane tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A pomiar odbywa się w takiej funkcji:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15930611
    simon71

    Poziom 20  
    Posty: 272
    Pomógł: 37
    Ocena: 32
    Sprawdź o ile zmienia się napięcie na TL431 wraz z temperaturą. Bo tego nie uwzględniasz w swojej analizie. A skoro TL431 jest źródłem referencyjnym dla ADC, to może to mieć znaczenie.
    Konto firmowe:
    SENSIM
    610A, Skrzyszów, 33-156 | Strona WWW: https://sensim.pl
  • #3 15930624
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    W temp około 50 stopni napięcie referencyjne to 2.511
    A w temp 17 stopni to 2.513.
    A więc dryft jest minimalny.

    Dzielnik rezystancyjny idealnie dzieli przez dwa.
    I tu jest kolejna ciekawostka, otóż, jeśli nawet napięcie referencyjne pływa minimalnie i w ten sam sposób (proporcjonalnie) płynie napięcie na wejściu to tego już sie nie da wytłumaczyć.
  • #4 15930657
    Konto nie istnieje
    Konto nie istnieje  
  • #5 15930679
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    Zrobiłem jeszcze inny eksperyment.
    Zródło napięcia referencyjnego wraz z dzielnikiem podłaczyłem na zewnątrz płytki.
    A więc teraz w tych miejscach nie ma dryftu.
    Otrzymałem takie wyniki:

    Temperatura 59C - 2227
    Temperatura 15C - 2243

    Skoro napięcia teraz nie mają wpływu na wynik, to czy te wyniki są zgodne z dokumantacją?
    Jeśli tak - to jaki jest sens 12 bitowej rozdzielczości?

    Może jednak to wina softu ?

    Nie ukrywam że to załamka dla mnie.
    Płytka wycackana , soft prawie skończony .
    Zmiana procesora nie wchodzi w rachubę .
  • REKLAMA
  • #6 15930765
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Pokaż schemat i wartości rezystorów w tym dzielniku. Żródło referencyjne musi mieć określoną impedancję, jeśli jest zbyt wysoka to pojawi się problem. Kolejna sprawa - czym mierzyłeś napięcie? Tanim miernikiem, który uśrednia wartość z długiego odcinka czasu? Patrzałeś np. oscvloskopem, czy tam nie ma jakis śmieci? Moze coś się indukuje na doprowadzeniach. Kolejna sprawa, to jaka jest impedancja źródła sygnału mierzonego? Jakie jest taktowanie ADC? W komentarzu masz napisane, że 7,813 kHz. Niecałe 8 kHz to zdecydowanie za nisko. Poza tym możesz poprawić liniowość kalibrując ADC wartością kalibracyjną z sygnatury procesora.
  • #7 15930811
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    Cieszę się, że Panie Tomku Pan się odezwał.

    Dzielnik rezystancyjny zrobiony jest na 2 precyzyjnych rezystorach 22k.
    Specjalnie rezystory te zakupiłem w TME i mają one stabilnośc na poziomie 20pm.
    Chociaż gdy one by nawet nico płyneły, to powinny raczej płynąc w tym samym kierunku, a podział powienien być 1/2.

    jeśli chodzi o miernik, to mierzyłem miernikiem Metex M4650.
    Pomiary robię już od kilku tygodni i niestety wyraźnie widać że wskazania pływają, zawsze w tym samym kierunku.

    I jeszcze jedno - zrobiłem eksperyment w którym źródło referencyjne i dzielnik nie podlegało zmianom temperatury.
    Wynik minimalnie się poprawił, ale w dalszym ciągu daleko było do ideału.

    Równolegle do źródła mam kondensator 4u7.
  • #8 15930817
    Konto nie istnieje
    Konto nie istnieje  
  • #9 15930823
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    Te wyniki mam w pętli.
    Wynik powstaje z uśrednienia 16 próbek.
    Są one stałe w czasie i w miarę stabilne +-1 (przy stałej temperaturze).
    Zmiany od temperatury są szczególnie wyraźne w okolicach 20C.

    Dodano po 8 [minuty]:

    XMEGA - ADC pływa bardzo przy zamianie temperatury

    Wiem że źródło jest narysowane śmiesznie bo jako tranzystor, ale to z lenistwa, nie chciało mi się tworzyc nowego elementu.
    W każdym razie napięcie na nim jest 2.5V i jest stabilne.

    I jeszcze jedno - próbowałem bez kondensatora na wejściu ADC, ale jest bez róznicy.

    Dodano po 7 [minuty]:

    Niestety, ale to wina chyba przetwornika.
    Zrobiłem kolejny test, ogrzałem pręt stalowy do temp około 60C i nim dotknełem do obudowy procesora.
    Wynik wyraźnie się zmienił o ponad 10 jednostek.

    Miałem nadzieję że po chwili coś sie "skoryguje", ale niestety nie zuważyłem tego.
  • #10 15930874
    freebsd
    Poziom 42  
    Posty: 6790
    Pomógł: 766
    Ocena: 2025
    Marek_Gorecki napisał:
    Nie ukrywam że to załamka dla mnie.
    Płytka wycackana , soft prawie skończony .
    Zmiana procesora nie wchodzi w rachubę .
    Zamknij procesor w termostacie - tak jak wymagające stabilnej pracy kwarce.
  • #11 15930878
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #12 15930891
    freebsd
    Poziom 42  
    Posty: 6790
    Pomógł: 766
    Ocena: 2025
    Inna propozycja: wyznacz błąd w funkcji temperatury i dodaj pomiar temperatury do układu.

    Dodano po 7 [minuty]:

    Czytałeś ten dokument:
    Załączniki:
    • Atmel-8032-Using-the-Atmel-AVR-XMEGA-ADC_Application-Note_AVR1300.pdf (878.09 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #13 15931098
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    @Marek_Gorecki Jak rozumiem na AREF podajesz 2,5V ze źródła referencyjnego, a na PA7 podajesz to samo napięcie tylko puszczone przez dzielnik 1:1? Kilka uwag:
    1. Przede wszystkim rezystory 22k to zdecydowanie za dużo. ADC jest typu S&H i w czasie pomiaru musi się naładować kondensator pomiarowy. Policz jaka będzie impedancja dla wybranej częstotliwości próbkowania.
    2. Druga sprawa - pomiar twoim Metexem jest obarczony błędem 0,05%, a o tyle mniej więcej zmienia ci się np. źródła referencyjnego. Problem w tym, że ta zmiana jest porównywalna z błędem miernika, więc nie możesz jej zmierzyć w sposób wiarygodny.
    3. Wczytaj dane kalibracyjne do ADC - poinny one poprawić liniowość i ofset przetwornika. Są one w sygnaturze produkcyjnej procesora i trzeba je wczytać do rejestru CALL.
    4. Zmień tryb pomiaru. Tryby signle ended bez znaku odnoszone są do wirtualnej masy tworzonej z napięcia referencyjnego. W efekcie będą pływać termicznie, co najpewniej obserwujesz. Wejdź w tryb ze znakiem, lub różnicowy i tam sprawdź ponownie pomiary.

    Dodano po 6 [minuty]:

    Piotrus_999 napisał:
    Marek_Gorecki napisał:
    Wynik powstaje z uśrednienia 16 próbek.


    czyli niestety to nie problem rezystancji wejściowej.


    Ciągle może to byc problem impedancji wejściowej - nawet jeśli na wejście podajesz DC, to kondensator układu S&H ładuje się tylko w krótkich interwałach czasowych. A temperatura wpływa na upływność...

    Piotrus_999 napisał:
    Niestety jedyną zaleta Xmeg są ksiązki kolegi tmf (są naprawdę bardzo dobre, szkoda że nie ma nic o ARM-ach jego autorstwa - niewątpliwie taka pozycja by się przydała)


    Dziękuję za miłe słowa. Ale nie jest tak źle z ADC w XMEGA. Atmel popełnił błąd wypuszczając lata temu na rynek wersję "beta" tych procków. One (chodzi głównie o XMEGA128A1) miały istotnie skopany ADC i tak powstały mity. W kolejnych XMEGAch i XMEGA128A1U Atmel usunął błędy ADC i obecnie nie ma z nimi problemów. Poza problemem z dobrym zrozumieniem jak one działają - niestety Atmel wprowadził dużo różnych trybów pracy ADC i wiele osób nie rozumie pewnych niuansów z tym związanych. Stąd wynikają problemy. Tu obstawiam, że problemem jest tryb singleended bez znaku, który głównie jest pomyślany do pomiarów w których napięcie może być nieco poniżej GND, w celu precyzyjnego wykrycia przejścia przez zero. W tym trybie lekko pływa offset (bo masa jest generowana sztucznie) i albo trzeba z tym żyć, albo kompensować to dodatkowym pomiarem wewnętrznej masy względem VRef.
  • Pomocny post
    #14 15931326
    tronics
    Poziom 38  
    Posty: 5035
    Pomógł: 358
    Ocena: 838
    @tmf - nie wiem czy taka kompensacja wewnętrzna będzie wystarczająca... kiedyś oglądałem review xmegi i odnośnie ADC było wytłumaczone wszystko o co większość użytkowników się rzucała. Niemniej smutny wniosek był taki, że efektywna rozdzielczość spada w tym momencie do ~10bit (bez oversamplingu) i dodatkowo najpewniej dla trybu unsigned single ended jest po prostu jeden pin poświęcić i zewrzeć do masy żeby skompensować ten offset obliczeniowo. Nie wiem jakie były problemy z ADC w A1, podejrzewam że chodzi o bogate erraty ;) Te erraty w E5 też są i wiele problemów jest nie do rozwiązania, a Atmel sugeruje pisać program by "nie dopuścić do powstania takich warunków". Same old, same old...
  • Pomocny post
    #15 15931518
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    @tronics Podałbyś źródło tych rewelacji? Zacznijmy od tego, że kompensacja nie wymaga żadnego dodatkowego pinu, gdyż podanie masy odbywa się programowo, poprzez odpowiednią konfigurację multipleksera. Z kolei w trybie signed mamy 11-bitową rozdzielczość (dokładniej 11 bitów + znak). W E5 mamy decymację i oversampling sprzętowy więc kosztem max próbkowania można dodatkowe bity wyciągnąć. Errata do E5 jest króciutka, tylko jeden błąd dotyczy ADC - a konkretniej sprzętowej korekcji offsetu. W starych rewizjach A1 ADC był po prostu skopany i tyle. Tyle, że to dotyczy początkowych rewizji A1, których na rynku nie ma od wielu lat. Więc nie twórzmy mitologii.
  • #16 15931620
    michalko12
    Specjalista - Mikrokontrolery
    Posty: 3394
    Pomógł: 462
    Ocena: 321
    Zrób eksperyment i spróbuj usypiać procesor na czas konwersji. Teoretycznie nie powinno to mieć żadnego wpływu, ale spróbować można.
  • Pomocny post
    #17 15931636
    jnk0le
    Poziom 18  
    Posty: 172
    Pomógł: 33
    Ocena: 31
    Zacznij też od kalibracji i zamiany rezystorów na np. 2,2k

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #18 15931666
    tronics
    Poziom 38  
    Posty: 5035
    Pomógł: 358
    Ocena: 838
    @tmf - odnośnie podpięcia zewnętrznie do GND to masz przecież w notce AVR1300:
    Cytat:
    Unsigned Mode
    In unsigned mode the conversion result from the ADC is:
    TOP
    V
    VV RES
    REF
    INP * Δ+ =
    VINP is the single ended input and ΔV = VREF x 0.05. TOP is the top value given by the configured resolution. For 12-bit
    mode TOP is 4096 and 8-bit mode TOP is 256.
    The positive offset given by ΔV is typically 0.05*VREF. This typically corresponds to a measurement result of
    approximately 200 when the input pin is connected to ground. In order to measure this offset accurately the ADC should be configured as it will be used in the application (i.e. voltages, speed and other settings) and the input pin should be connected externally to ground.
    This offset is not compensated for automatically, and the software needs to subtract the measured offset from the conversion results.
    With 12-bit resolution the range from GND to VREF – ΔV will be from approximately 200 to +4095 (0x00C8 - 0x0FFF).
    zatem proszę bez tego typu sarkastycznego wstępu wypowiedzi. Umknęło mi to wideo, ale jak znajdę to z pewnością dam znać. Co do errat to w E5 jest krótka, a jaka treściwa... 3/4 wpisów "no workaround" albo "no workaround but you should not use it this way" :)
    Cytat:
    W E5 mamy decymację i oversampling sprzętowy więc kosztem max próbkowania można dodatkowe bity wyciągnąć

    Dlatego podkreśliłem BEZ OVERSAMPLINGU :P
  • #19 15931669
    Konto nie istnieje
    Konto nie istnieje  
  • #20 15931786
    michalko12
    Specjalista - Mikrokontrolery
    Posty: 3394
    Pomógł: 462
    Ocena: 321
    Piotrus_999 napisał:
    No wiesz od tego się nie schłodzi :) Nie takie moce

    Nie chodzi o moce, tylko o poziom uszlachetniania ADC przez resztę bebechów w zależności od temp.
  • #21 15931825
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    Dziękuję za sugestie.
    Jeśli chodzi o sprawę Metexa, którym mierzę napięcie to wydaje mi się że jest on drugorzędny.
    Przecież głównie chodzi o to że wynik z ADC pływa, a zmierzyłem napięcie tylko kontrolnie.
    Zresztą jeśli nawet Metex ma błąd to mało jest prawdopodne że on pokazuje stabilne napięcie zasilania i to zawsze.
    Pomiarów wykonałem już mnóstwo, nad tym problemem siedzę już około 2 tygodnie.
    Jesli chodzi o wysoką impedancję źródła sygnału , to niestety też to próbowałem.
    Miałem przez moment rezystory 4k7 i nie było lepiej.
    Nawet dałem wzmacniacz operacyjny bezpośrednio na wejściu jako wtórnik emiterowy i nic.
    Spróbuje zrobić inne sugestie co pisze TMF i dam znać.
    Mam nadzieję że uda się coś poprawić.
  • #22 15931840
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    tronics napisał:
    @tmf - odnośnie podpięcia zewnętrznie do GND to masz przecież w notce AVR1300:
    Cytat:
    Unsigned Mode
    In unsigned mode the conversion result from the ADC is:
    TOP
    V
    VV RES
    REF
    INP * Δ+ =
    VINP is the single ended input and ΔV = VREF x 0.05. TOP is the top value given by the configured resolution. For 12-bit
    mode TOP is 4096 and 8-bit mode TOP is 256.
    The positive offset given by ΔV is typically 0.05*VREF. This typically corresponds to a measurement result of
    approximately 200 when the input pin is connected to ground. In order to measure this offset accurately the ADC should be configured as it will be used in the application (i.e. voltages, speed and other settings) and the input pin should be connected externally to ground.
    This offset is not compensated for automatically, and the software needs to subtract the measured offset from the conversion results.
    With 12-bit resolution the range from GND to VREF – ΔV will be from approximately 200 to +4095 (0x00C8 - 0x0FFF).
    zatem proszę bez tego typu sarkastycznego wstępu wypowiedzi. Umknęło mi to wideo, ale jak znajdę to z pewnością dam znać.


    Bazując na innych, bez własnych przemyśleń daleko w programowaniu się nie zajdzie. Prosta matematyka wystarczy, aby sobie poradzić i do zmierzenia offsetu, wbrew temu co twierdzi nota Atmela, wcale żaden dodatkowy pin IO podłączony do GND nie jest potrzebny. Potraktuj to jako wyzwanie, jeśli nie dasz rady to chętnie ci ten trick wyjaśnię.

    tronics napisał:
    Co do errat to w E5 jest krótka, a jaka treściwa... 3/4 wpisów "no workaround" albo "no workaround but you should not use it this way" :)
    Cytat:
    W E5 mamy decymację i oversampling sprzętowy więc kosztem max próbkowania można dodatkowe bity wyciągnąć

    Dlatego podkreśliłem BEZ OVERSAMPLINGU :P


    Bajki. Errata:
    DAC: AREF on PD0 is not available for the DAC
    - ADC: Offset correction fails in unsigned mode
    - EEPROM write and Flash write operations fails under 2.0V
    - TWI Master or slave remembering data
    - TWI SM bus level one Master or slave remembering data
    - Temperature Sensor not calibrated
    - Automatic port override on PORT C
    - Sext timer is not implemented in slave mode

    ADC dotyczy jeden, nieistotny bąd - offset można korygować programowo, kwestia jednego odejmowania. Kolejne błędy nie są związane z ADC, z czego trzy są nieistotne, nawet jeśli nie mają obejścia (błąd z kalibracją sensora temperatury występuje tylko w starszych seriach). Pozostałe błędy nie mają zazwyczaj znaczenia.
  • #23 15931846
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    freebsd napisał:
    Inna propozycja: wyznacz błąd w funkcji temperatury i dodaj pomiar temperatury do układu.

    :


    No , ale bez przesady.
    Mam każdą płytkę "kalibrować"?
    Owszem, akurat tu mam termometr na płytce, ale co mają powiedzieć inni, gdy nie mają termometru?

    Dodano po 2 [minuty]:

    Tmf - mam gorącą prośbę.
    Czy mógłbyś mi podpowiedzieć co mam zmienić w kodzie moim?
    Przyznaje się, że już mi ręce opadają.
    Mam wszystkie inne piny z portu A zwarte do masy, więc chyba łatwo to zrobić.
  • Pomocny post
    #24 15931871
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    @Marek_Gorecki Po prostu przełącz ADC na tryb różnicowy. Wtedy znika offset i wynik nie powinien już pływać z temperaturą. Jeśli to pomoże, a będzie ci zależało na 12-bitowej rozdzielczości, to dalej pomyślimy co z tym zrobić.
  • REKLAMA
  • #25 15932140
    Marek_Gorecki
    Poziom 16  
    Posty: 494
    Pomógł: 2
    Ocena: 30
    tmf napisał:
    @Marek_Gorecki Po prostu przełącz ADC na tryb różnicowy. Wtedy znika offset i wynik nie powinien już pływać z temperaturą. Jeśli to pomoże, a będzie ci zależało na 12-bitowej rozdzielczości, to dalej pomyślimy co z tym zrobić.


    Tylko Panie Tomku nie wiem jak to zrobić.
    Czy może Pan mi powiedzieć jak to zrobić?
    Byłbym bardzo wdzięczny.

    Taki kod podpowiada mi wizard Codevision:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #26 15933179
    tronics
    Poziom 38  
    Posty: 5035
    Pomógł: 358
    Ocena: 838
    tmf napisał:
    @tronics Podałbyś źródło tych rewelacji? Zacznijmy od tego, że kompensacja nie wymaga żadnego dodatkowego pinu, gdyż podanie masy odbywa się programowo, poprzez odpowiednią konfigurację multipleksera.

    Nie widzę w konfiguracji dla trybu unsigned single ended możliwości podłączenia INTGND (bo jak rozumiem o to koledze chodziło). Biorąc pod uwagę, że czy intgnd czy padground jest dostępne, ale w trybie różnicowym to nie bardzo widzę sensu odnoszenia tego do trybu gdzie jest zupełnie coś innego podłączone do stopnia wejściowego. Matematyka? Może założenie, że to jest rzeczywiście dokładnie 0,05xVref i jest to stała wartość (zgodnie z notką 205 dla potencjału GND), niezmienna względem temperatury. Hmm, szczerze pod tym kątem nie sprawdzałem i nie omieszkam w najbliższym czasie sprawdzić, aczkolwiek akurat teraz tego czasu nie mam. Niemniej sam nie opierałbym się na takich założeniach.
    Cytat:
    Bazując na innych, bez własnych przemyśleń daleko w programowaniu się nie zajdzie.

    Dziwne byłoby gdybym nie bazował na notach producenta układu, który wykorzystuję. Atmel ma więcej za uszami niż się Tobie wydaje, ale akurat tego typu detalami dzielić się nie mogę.
  • #27 15933181
    Kwarcu
    Poziom 13  
    Posty: 78
    Pomógł: 5
    Ocena: 66
    Zobacz na charakterystyki ADC z noty katalogowej (DATASHEET str. 115, Figure 37-46). Wg noty najmniejszy dryft temperaturowy ADC zapewnia tryb single-ended, signed mode. Tylko niestety tracisz 1 bit rozdzielczości.
  • #28 15933209
    Konto nie istnieje
    Konto nie istnieje  
  • #29 15933290
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    tronics napisał:
    tmf napisał:
    @tronics Podałbyś źródło tych rewelacji? Zacznijmy od tego, że kompensacja nie wymaga żadnego dodatkowego pinu, gdyż podanie masy odbywa się programowo, poprzez odpowiednią konfigurację multipleksera.

    Nie widzę w konfiguracji dla trybu unsigned single ended możliwości podłączenia INTGND (bo jak rozumiem o to koledze chodziło). Biorąc pod uwagę, że czy intgnd czy padground jest dostępne, ale w trybie różnicowym to nie bardzo widzę sensu odnoszenia tego do trybu gdzie jest zupełnie coś innego podłączone do stopnia wejściowego. Matematyka? Może założenie, że to jest rzeczywiście dokładnie 0,05xVref i jest to stała wartość (zgodnie z notką 205 dla potencjału GND), niezmienna względem temperatury. Hmm, szczerze pod tym kątem nie sprawdzałem i nie omieszkam w najbliższym czasie sprawdzić, aczkolwiek akurat teraz tego czasu nie mam. Niemniej sam nie opierałbym się na takich założeniach.


    Gdyby przyjąć, że jest to dokładnie 0,05VRef, to nie byłoby dryfu i nic nie trzebaby liczyć. To teraz pomyślmy - w trybie singleended mierzysz wartość z pinu względem wirtualnej masy równej mniej więcej -0,05VRef. W trybie różnicowym mierzysz napięcie z tego samego pinu względem innego lub masy układu (zewnętrznej lub wewnętrznej wybranej programowo). To teraz pomyślmy co otrzymamy, jeśli odejmiemy od siebie oba wyniki pomiaru - ano otrzymamy wartość naszego napięcia -0,05VRef, nieprawdaż? Ponieważ wartość ta dla stałej temperatury jest stała, to możemy ją użyć do kompensacji dryfu w trybie singleended. Czyli jak widzisz, aby zmierzyć w tym trybie offset nie musimy wcale zwierać zewnętrznego pinu do masy. BTW, pin możemy też programowo zewrzeć z masą - wystarczy ustawić go jako wyjście w stanie niskim i na taki pin ustawić multiplekser ADC. Oczywiście pin ten nie powinien być zewnętrznie połączony, chyba, że przez rezystor. Co daje nam dodatkową możliwość bezpośredniego pomiaru offsetu.

    tronics napisał:
    Cytat:
    Bazując na innych, bez własnych przemyśleń daleko w programowaniu się nie zajdzie.

    Dziwne byłoby gdybym nie bazował na notach producenta układu, który wykorzystuję. Atmel ma więcej za uszami niż się Tobie wydaje, ale akurat tego typu detalami dzielić się nie mogę.


    Producent tak skomplikowanego układu jakim jest MCU nie jest w stanie przewidzieć wszystkich knifów jakie można wykorzystać. Czasami zbyt pochopnie pisze, że się czegoś nie da :) IMHO mikrokontrolery to nie zabawki dla ludzi, którzy mówią "nie da się".
  • #30 15934006
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Użytkownik zgłasza problem z przetwornikiem ADC w procesorze XMEGA (model ATXMEGA32E5), który wykazuje znaczne odchylenia wyników pomiarów w zależności od temperatury. Przy pomiarze napięcia referencyjnego z TL431, użytkownik zauważa, że zmiana temperatury o 40 stopni skutkuje skokiem wyniku ADC o 24 jednostki, co wskazuje na błąd rzędu 0.6%. Użytkownicy forum sugerują różne przyczyny problemu, w tym wpływ napięcia referencyjnego, impedancję dzielnika rezystancyjnego oraz kalibrację ADC. Proponowane są także zmiany w konfiguracji ADC, takie jak przełączenie na tryb różnicowy oraz kalibracja wartości offsetu. Użytkownik wykonuje eksperymenty, aby zminimalizować wpływ temperatury na wyniki, ale nadal doświadcza problemów z dokładnością pomiarów.
Wygenerowane przez model językowy.
REKLAMA