stabilnosc Uref w Atmega oraz dziwne pomysly odnosnie pomiaru...

Nov 26, 2006 12 Replies

Tak sobie kombinuje woltomierz + amperomierz + dodatki na avr, do zasilacza laboratoryjnego, i po przetestowaniu partii (~20szt) atmega16 w dil40 rozrzut Uref wewnetrznego (ktory mialby miec 2.56v) jest na poziomie 2.2v do 2.7v! Moze i jest stabilne to napiecie, ale nijak nie jest "rowne". Co dziwne - w tqfp rozrzut uref jest duzo mniejszy (na poziomie 2.45 - 2.60v), ale nadal jest to mocno krzywe... Z takim uref blad pomiaru bylby zdecydowanie zbyt duzy. Do bledow pomiaru dochodza jeszcze bledy np rezystancji w dzielniku napiecia, stad pomiar robi sie conajmniej marny. Kalibracja po prostu jest wymagana, po stronie cyfrowej przy 10bit przetworniku nie ma ona sensu, potencjometru tez bym chcial uniknac... I tak sobie wymyslilem - moze Uref wytwarzac z PWM 16bit ? Stabilnosc zegara (chocby nawet z RC wewnetrznego, ale raczej kwarc) jest dosc duza, rozdzielczosc 16bit daje dosc duze pole manewru, przy duzej czestotliwosci filtr nie musialby byc jakis okrutny... Uref moglbym wystrugac w zakresie 0 - Ucc (prawie)... Po pierwsze slyszalem ze ADC w avr nie lubi malych Uref (<2v) - czy to potwierdzone, bo np do pomiaru pradu bardzo by mi pasowalo Uref 1.023v :) Po drugie - kalibracja - poleganie na zasilaniu +5v idealnym i przyjecie ze np 0x00ff da mi 2.5v - to chyba nie najlepsze rozwiazanie. Zasilanie moze sie zmienic, byc niestabilne, filtr pwm tez nie bedzie idealny... Wymyslilem cos takiego:



- procesor ustawia (bo ma taka mozliwosc, np przekaznikiem) pomiar z nozki na ktorej jest Uref z jakiegos dobrego scalonego Uref np 5v i tak kombinuje z PWM by zmierzone na ADC napiecie bylo odpowiednie, np dla zakresu pomiarowego 0.00 - 40.95v pomiar 5.00v dalby wynik z ADC 0x007D (125). Jesli tak by bylo (i pomiar 0v bylby 0x0000 bo z tym tez bywa roznie w avr, czasem 0 daje 0x0001 albo 0x0002), to mamy skalibrowane.



Moze za bardzo kombinuje? moze da sie to zrobic prosciej jakos, bez dobrego Uref wsadzanego do ukladu, moze jednokrotna taka kalibracja i zapisanie wartosci PWM do eepromu wystarczy?


BartekK napisał(a):

Czytales datasheet? Strona 295 - internal voltage reference min 2,3V, max 2,7V, typical 2,56V. I wszystko jasne.

Nie prosciej dac zewnetrzne napiecie odniesienia?

Znowu datasheet sie klania - str. 295 - Reference Voltage - for single ended and differential conversion minimum 2,0V.

Ale jesli masz juz to Uref to po co kombinowac, nie prosciej je podlaczyc jako napiecie referencyjne do procka?

U¿ytkownik "BartekK" snipped-for-privacy@drut.org napisa³ w wiadomo¶ci news:ekc9ro$mr2$ snipped-for-privacy@atlantis.news.tpi.pl...

Ja to widzê na dwa sposoby.

  1. Program kalibracyjny. Wk³adamy procek zaprogramowany w uk³ad elektroniczny docelowy i program kalibracyjny podaje nam jak±¶ sta³±, która po wstawieniu do programu oryginalnego jest sta³± korekcji.
1' metoda mniej dok³adna: mierzymy Uref dla ka¿dego procesora i wstawiamy do programu.
  1. Kalibracja programowa - po wyzwoleniu procek przechodzi do kalibracji mierzy napiêcie zewnêtrzne i jak±¶ sta³± zapisuje do pamiêci nieulotnej.

T.M.F. napisał(a):

Czytalem, wiem. Co nie znaczy ze mi sie to podoba :) dlatego tez szukam innego rozwiazania. Niedawno mnie tu ktos zjechal "przeciez atmega ma bardzo dobre, stabilne, wewnetrzne, zawsze rowne 2.56v uref"...

Nie, bo raz potrzeba takie, a raz inne... A najwygodniej by bylo miec mozliwosc zmieniania - np (w uproszczeniu) miec Uref=4.095v dla pomiaru do 40.95v (z krokiem 0.01v), a gdy zmierzone napiecie jest <20v to przelaczyc Uref = 2.047v i mnozyc wynik x2, uzyskujac krok/rozdzielczosc

0.005v itd... A przy pomiarze pradu jeszcze inaczej...

Tez to widzialem, ale co to oznacza? Ponizej 2.0v wybuchnie, nie bedzie mierzyc, bedzie zle mierzyc... ?

Jak wyzej...

Desoft napisał(a):

Tak, tylko ze wszelka korekcja po stronie cyfrowej jest juz bezsensowna, przynajmniej przy rozdzielczosci 10bit wewnetrznego przetwornika. W tym caly sens manewrowania z Uref, by krok/rozdzielczosc pomiaru wychodzila "rowna" - tzn np. 1bit = 0.1v, bo co mi z pomiaru przy ktorym zmiana o jeden bit jest rowna 0.082456v ? Jak to wyswietlac? Zaokraglac? To co pare bitow wyjdzie przeskok o 0.2v zamiast o 0.1v...

BartekK napisał(a):

Rozwiazaniem jest pomiar wielokrotny i usrednianie wyniku. Jako zrodlo referencyjne proponuje LM431 (np.

formatting link
sie bardzo dobrze w takich zastosowaniach.

Pozdr AK

>

U¿ytkownik "BartekK" snipped-for-privacy@drut.org napisa³ w wiadomo¶ci news:ekcf6v$c57$ snipped-for-privacy@atlantis.news.tpi.pl...

jeden bit jest rowna 0.082456v ? Jak to wyswietlac? Zaokraglac? To co

Równa, to znaczy jaka? 0,1V przecie¿ procesory licz± w systemie dwójkowym. Raczej napiêcie odniesienia powinno wynosiæ 2,56V - by³oby "okr±g³e" tylko jak przenie¶æ to na dziesiêtny wy¶wietlacz?

S± dwie metody rozwi±zywania tego typu problemów: sprzêtowa (mo¿na siê nawet obyæ bez procesora) i programowa.

BartekK napisał(a):

No to podlacz pod stabilizowane 5V zasilajace uklad poprzez filtr.

Skoro potrzebujesz rozne to wewnetrzne Uref i tak ci nic nie daje. Poza tym okresl z jaka dokladnosci potrzebujesz dokonac pomiaru. ATMega umozliwia uzyskanie rozdzielczosci rzedu 2mV, Obnizajac Uref i tak wiekszej nie uzyskasz. Pomysl nad wykorzystaniem mozliwosci wzmocnienia sygnalu przez ATMege, masz o ile sie nie myle do wyboru 10 i 200x.

Pewnie bedzie mierzyc, niesadze zeby wybuchlo. Ale policzmy

2,0V/2^10=1,95mV. Poniewaz rozdzielczosc przetwornika jest na poziomie 2mV (gdzies o tym pisza w datasheet) to zmniejszajac napiecie odniesienia nic nie zyskujesz. A wrecz tracisz.

Desoft napisał(a):

Widze ze dalej nie rozumiesz problemu. Dla ulatwienia przyjmijmy przetwornik 2bitowy - 4 poziomy

11 = Umax = Uref 10 = 2/3*Uref 01 = 1/3*Uref 00 = 0 * Uref I teraz chcialoby sie wyswietlic zmierzone napiecie w postaci "dziesietnej" - powiedzmy na wyswietlaczu lcd tekstowym zeby byla duza dowolnosc. Napiecie wejsciowe (mierzone) dzielisz dzielnikiem rezystancyjnym - aby zakres napiec sie zmiescil (lub z lekkim zapasem, by krok byl wygodny do wyswietlenia) miedzy 0 a Uref. Powiedzmy ze chcemy mierzyc napiecia w okolicy 0-9v, czyli 0v, 3v, 6v i 9v. Ustawiamy w takim wypadku Uref na 3v, podzial na dzielniku rezystancyjnym /3, wynik (binarnie) mnozymy przez 3 i wyswietlamy i gotowe ? Niestety nasz dzielnik na opornikach nie jest idealny, oporniki maja jakas tam precyzje i wyszedl nam podzial /3.8 Jak to skompensujesz po stronie cyfrowej? Nijak, bo zmierzysz 9v/3.8 = 2,368v, co zalapie sie moze na wartosc binarna 10, a moze na 11? (zaleznie od histerezy komparacji napiecia w ADC). Ale wystarczyloby zmodyfikowac Uref dla tago nieidealnego dzielnika na 2.368v, i juz mamy skale i dokladnosc zachowana.

U¿ytkownik "BartekK" snipped-for-privacy@drut.org napisa³ w wiadomo¶ci news:ekcu0d$o2e$ snipped-for-privacy@nemesis.news.tpi.pl...

No chyba nic z tego nie rozumiem... i ile poka¿e wy¶wietlacz przy warto¶ci napiêcia wej¶ciowego 4,5V?

A stronie cyfrowej to dokładnie wisi -

Ja bym raczej porównał ADC do analogowego miernika wskazówkowego : pamiętasz tam zasadę działania ? tam był zakres, ilość działek na skali, z tego otrzymywało się ilość np. woltów na działkę i MNOŻYŁO przez ilość odczytanych działek już w głowie aby otrzymać odczyt w woltach... Przy kwantyzacji ADC masz podobnie : masz zakres przetwornika i ilość możliwych kombinacji bitów; reszta to już tylko matematyka; część 'głowy' przeniesiona do elektroniki.

2.368 < 3.0 więc 'załapie się' na 00.

Lepiej poczytaj o przetwornikach analogowo - cyfrowych i co one tak naprawdę mierzą.

el es

(no offence :)

BartekK napisał(a):

Napięcie odniesienia z marnego źródła Uref, które jest w procesorze, może się zmieniać w zależności od temperatury i samopoczucia procesora :) w dość szerokim zakresie, cytowano tu już odpowiedni fragment PDFa.

Najlepiej byłoby robić autokalibrację okresowo (np. co minutę) a jeżeli robisz rzadko szybkie pomiary to przed każdym pomiarem. Wystarczy, że zasilasz procesor z porządnego stabilizatora liniowego (dającego np. równe 5V) i możesz zmierzyć napięcie VBG wybierając VCC (twoje 5V) jako Uref. A wtedy szybkie wyliczenie poprawki i po problemie.

Nie ma sensu przejmować się "nierównymi" wynikami obliczeń. Wystarczy liczyć wszystko np. w uV na całkowitych liczbach 32-bitowych. A jeżeli poprawka do wprowadzenia wyjdzie na przykład 2,3845 to po prostu wykonaj operację (x * 23845) / 10000.

Przykładowe wyświetlenie napięcia podanego w uV do 3 cyfr po przecinku: printf_P (PSTR ("%lu,%03lu"), x / 1000000UL, (x / 1000UL) % 1000UL);

wiem co masz na mysli- chcesz miec calkowita ilosc kwantow dla rozdzielczosci pomiaru, np 1 kwant co 1mV nie tak prosto kwanty przetwornika nie sa przeciez idalnie rowne, co gorzej charakterystyka nie jest liniowa, gdzies i tak sie rozjedzie zapoznaj sie z takim czyms jak nieliniowosc rozniczkowa i calkowa przeliczanie po stronie cyfrowej ma jak najbardziej sens

jesli jednak sie uparles na zapodawanie Uref z PWma, to zrob tak: daj TL431 lub REF01, dajace 5V zasila z tego np HCT14 polaczone negator za negatorem. na wejscie daj wyjscie PWM, na wyjsci udaj filtr np 5 rzedu na 2 wzmacniaczach operacyjnych o F odciecia rzedu kilkuset Hz - na stronie TI jest filtercad czy cos pdoobnego do szybkiego liczenia filtrow. w ten sposob mozna zrealizowac bardzo dokladny przetwornik C/A o duzej liniowosci i rozdzielczosc i16bitow, pod warunkiem uzycia precyzyjnych wzmacniaczy i dobrze policzonego filtru. Stosuje to rozwiazanie wszedzie tam gdzie potrzeba mi precyzji i niskiego ksoztu a szybkosc nie jest krytyczna.

jednakze uwazam ze to samo osiagneisz robic po stronei cyfrowej i ew dodatkowo usredniajac wyniki.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required