Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[ATmega][ATtiny] - ADC - różnica przy pomierze różnicowym

mirekk36 15 May 2010 14:59 4952 26
Altium Designer Computer Controls
  • #1
    mirekk36
    Level 42  
    Witam,

    Czy ktoś mógłby potwierdzić lub zaprzeczyć moje spostrzeżenia na temat pomiarów różnicowych dokonywanych w prockach ATmega oraz ATtiny.

    Bawię się tym teraz ostro i z not jakby wynika, że w ATmegach pomiar napięcia różnicowego odbywa się tylko z rozdzielczością 9bit

    natomiast w ATtiny np ATtiny26 z rozdzielczością 10bit

    tyle że w ATtiny napięcie Vneg nie może być mniejsze niż Vpos

    z kolei w ATmegach Vneg może być mniejsze niż Vpos ale i tak Vneg nie może być niższe niż GND.

    czy to się zgadza????

    Pytam, bo chcąc sobie zrobić prosty amperomierz od 0 do 5A na ATtiny bez żadnego wzmacniacza operacyjnego tylko na dzielniku i boczniku 0R1 - prawie ładnie mi to wychodzi gdy korzystam z odpowiedniego dzielnika i GAINx20

    Ale na ATmegach już jest o wiele gorzej uzyskać takie efekty bo tak mi się wydaje, że przez to ograniczenie rozdzielczości do 9bitów - strasznie też rośnie nieliniowość pomiaru obojętnie przy jakim wzmocnieniu.

    Tzn też wychodzi na atmegach amperomierz ale jak skalibruję powiedzmy dla 100mA to już przy prądzie 200mA jest widoczna różnica w pomiarze porównując do dobrego multimeru. A w ATtiny jest w miarę powiedzmy OK.

    Czy słusznie więc doczytałem noty PDF, czy wyciągam słuszne wnioski? czy gdzieś jeszcze totalnie źle myślę ????
  • Altium Designer Computer Controls
  • Helpful post
    #2
    trol.six
    Level 31  
    Ja pisze od dawna na forum, że pomiar na atmegach mam bardzo nieliniowy i bez wzmocnienia. Możliwe że to kwestia serii produkcyjnej po prostu. Atmel nie gwarantuje tutaj oszałamiającej dokładności. Myśle że kwestia egzemplarzy. Nie sądze by każda atmega czy attiny, miał dokładnie taki sam błąd ADC.
  • #3
    mirekk36
    Level 42  
    trol.six --> no ale w przypadku ATtiny to już nie jest aż tak strasznie jeśli chodzi o błąd ADC, bo w sumie bardzo prosto się to programowo kalibruje. Tzn mam na myśli kalibrację do wewn. źródła odniesienia.

    No atmel nie gwarantuje bo jeśli słuszne jest to czego ja się dopatrzyłem w notach to dla ATmeg 9bit a dla ATtiny10bit. I w przypadku tych drugich to już jest sporo lepiej chyba.

    Chodzi mi właśnie o to czy ktoś też tak doświadczalnie porównywał to pomiędzy megami i attiny.
  • Altium Designer Computer Controls
  • #4
    janbernat
    Level 38  
    W zasadzie to na str.97 dla ATTiny26 i na str.251 dla ATMega88 masz porównanie.
    Pomiar różnicowy w ATmega jest programowy a ATTiny26- sprzętowy.
    Tak więc w ATMega tracisz jeden bit a w ATTiny26- nie.
    Jeśli robisz to sam a nie z jakichś bibliotek z sieci to chyba widać- to powinno być inne ustawianie ADMUX.
    W ATiny26 str.104.
    A to że w ATiny26 napięcie Vneg nie może być większe niż V pos- to też można w trakcie działania zmienić programowo.
    No i ATtiny861.
  • #5
    mirekk36
    Level 42  
    janbernat --> robię to w końcu całkowicie od początku do końca sam - muszę to raz a dobrze rozgryźć bo ten temat zawsze zostawiałem na koniec ;)

    Ale nie za bardzo widzę w opisach - skąd wynika to, że pomiar różnicowy jest w ATmega programowy a w ATtiny sprzętowy???? możesz mnie na to jeszcze jakoś naprowadzić w nocie? bo siedzę po uszy w notach od wczoraj i już mi się wszystko plącze ;)

    Tak w ogóle to ATmega88 itp nie ma pomiaru różnicowego - to zdaje sie dopiero od ATmega16

    ADMUX owszem ustawia się inaczej bo różne wzmocnienia ale z tego nie wynika ta rozdzielczość tylko z opisu i wzoru

    (Vpos-Vneg)*GAIN*1024 / AVREF

    tak jest dla ATtiny - widać 1024

    a poniżej dla ATmega

    (Vpos-Vneg)*GAIN*512 / AVREF

    no ale widzę teraz np z PDFa ATtiny861 , że ten np może mieć i ma domyślnie 10bit ale ma też w dodatkowym rejestrze ADCSRB bit o nazwie BIN, dzięki któremu można właśnie przestawić pomiar różnicowy na hmmm bipolarny czyli dokładnie taki jak w ATmega i wtedy traci się jeden bit i we wzorze już mamy 512

    Czyli wynika z tego, że ATmegi mają na sztywno bipolarny pomiar różnicowy i stąd ten spadek rozdzielczości o 1bit. Szkoda, że nie mają tego bitu BIN ;)
  • Helpful post
    #6
    janbernat
    Level 38  
    No to po kolei.
    W ATtiny26 w masz schemat przetwornika ADC na str.97 i tabelkę na str.104.
    Na górze tabelki masz które wejścia ustawiasz jako positive a które jako nagative.
    No i Gain- wzmocnienie może być 1 albo 20.
    No i dalej-ATMega8, 88 nie ma sprzętowego pomiaru różnicowego.
    ATMega16- ma, ale nie gwarantują tego w obudowie DIP- tylko w TQFP.
    No i porównaj budowę przetwornika na str.97 dla ATTiny26 i na str.251 dla ATMega88.
    Nie ma bloku NEG INPUT MUX, Gain Amplifier i Singlended/ negative selection.
    No i nie mam w domu ATtiny26 żeby to sprawdzić- ale na Twoje nieszczęście w Bascomie.
    P.S.
    Na Twoje nieszczęście- nie mam w domu ATtiny26.
    Na Twoje szczęście- nie zrobię tego ustawiając rejestry w Bascomie- no bo nie mam procesora.
  • Helpful post
    #7
    Dar.El
    Level 40  
    Witam
    Czy wykonujesz programowe zerowanie ? Trzeba oba wejścia podłączyć do masy i wartość zmierzoną odejmować potem od wyniku.
  • #8
    mirekk36
    Level 42  
    Dar.El --> tak, tak - oczywiście w tym celu najpiew ustawiałem MUX tak, żeby sprawdzić ofset. Ale jak mówię - pomimo to na ATmedze mam dużą nieliniowość dla pomiaru różnicowego w zakresie 0 - 500mV.

    Być może istotną rolę odgrywa w takim przypadku GAIN ERROR , ale nie wiem za bardzo jak w prosty sposób się go programowo pozbyć - no i może jest on jakiś szczególnie duży dla procka w obudowie DIP bo na ATmega32 DIP to chciałem koniecznie przetestować.

    Tak czy inaczej naet pomimo takiej nieliniowości to i tak fajnie działa ten pomiar różnicowy. Nie wiem czy pamiętasz Dar.El jaki kiedyś dawno temu pytałem cię tu na elektrodzie o obliczenie wzmacniacza operacyjnego, żeby wykrywać przeciążenie silnika DC. Podałeś i działało to dobrze - ale w tamtm czasie jeszcze nie byłem na tym etapie znajomości ADC w procku - bo teraz spokojnie bez WO można sobie to zrobić właśnie na samym procku - coś pięknego.

    janbernat --> jak pisałem, dla mnie na szczęście ATtiny działa bardzo przyzwoicie i wykonanie na nim prostego ale w miarę dokładnego woltomierza a amperomierza powiedzmy od 0 do 5A - wychodzi.
  • Helpful post
    #9
    _Robak_
    Level 33  
    Troszkę tych rodzajów błędów w ADC jest, możesz poczytać trochę tutaj http://www.maxim-ic.com/app-notes/index.mvp/id/748/ . Poza tym najlepiej w przetwornikach wbudowanych na czas pomiaru usypiać procesor, druga sprawa to że w DIPie dokładność jest mniejsza, z tego co pamiętam to ch-ki podane w datenblacie są gwarantowane dla obudów TQFP, tyle że to dawno czytałem i trzeba by to potwierdzić.
  • Helpful post
    #10
    Dar.El
    Level 40  
    Jeszcze może to być błąd prowadzenia masy. Przy pomiarze małych napięć dochodzą spadki spowodowane przepływem prądu zasilającego i inne problemy. Przyjrzyj się połączeniom i pomyśl czy nie płynie przez bocznik jakiś "lewy" prąd.
  • #11
    mirekk36
    Level 42  
    Dar.El wrote:
    Jeszcze może to być błąd prowadzenia masy. Przy pomiarze małych napięć dochodzą spadki spowodowane przepływem prądu zasilającego i inne problemy. Przyjrzyj się połączeniom i pomyśl czy nie płynie przez bocznik jakiś "lewy" prąd.


    Kurczę o tym nie pomyślałem - na razie testuję to na płytce stykowej jeśli chodzi o ATtiny26 oraz na gotowej płytce testowej jeśli chodzi o ATmega32. Ale same połączenia do bocznika to istny pająk na razie i może to rzeczywiście też wpływa na te moje dziwne błędne pomiary, zniekształcenia i nieliniowość. Chyba będę musiał zrobić jakąś płyteczkę gdzie normalnie przylutuję ten rezystor 0R1 i jakoś po ludzku poprowadzę masę - bo w tej chwili to wszystko wisi na kabelkach stykowych itp.

    Dodano po 1 [godziny] 34 [minuty]:

    Zdecydowanie dobra uwaga Dar.El ;) nawet jak na pająku zrobiłem w miarę porządek i odłączyłem dziwne odejścia od masy - tzn co nieco na ile dało radę uporządkowałem to już się zdecydowanie poprawiły efekty.
  • #12
    janbernat
    Level 38  
    [ATmega][ATtiny] - ADC - różnica przy pomierze różnicowym
    Masz pewnie taki układ.
    To działa jak potencjometr z dołączonymi w szereg opornikami- wcale nie takimi małymi przy wartości opornika 100mOhm.
    P.S.
    W ATMega32 przy ADC róznicowym przy wzmocnieniu x10 będziesz miał 8bit.
    str.201.
  • #13
    mirekk36
    Level 42  
    no to ciekawe o tych opornościach ścieżek ale generalnie mój układ pomiarowy wygląda tak:

    [ATmega][ATtiny] - ADC - różnica przy pomierze różnicowym

    nóżka rezystora R1 jest praktycznie zwarta z nóżką R3 czyli tu po drodze nie ma ścieżki
  • #14
    janbernat
    Level 38  
    Mirek- ale jak tak jest naprawdę to przez Twój opornik pomiarowy wcale nie płynie prąd.
    Wraca z masy odbiornika(wyjścia) do tej prawej masy i przez masę z lewej strony wraca do źródła.
    No te masy są połączone przez jakieś ścieżki- więc nie idealne.
    Bo jakby były idealne to na oporniku pomiarowym byłoby 0V.
    No i to nie jest pomiar różnicowy.
  • #16
    janbernat
    Level 38  
    A z 0 wejścia?
    No bo ten prąd gdzieś musi z odbiornika wpływać- chyba do 0 zasilania- czyli wejścia.
    Którąś masę chyba podłączasz do procesora.
    P.S.
    Dobrze- już widzę.
    Prąd wraca przez opornik do DWÓCH mas- jeśli schemat oddaje rzeczywistość.
    To wszystko wina przewodów i ścieżek.
    P.S 2
    To tak:
    Lewa strona opornika pomiarowego powinna iść do drugiego ADC i do 0 źródła zasilania.
    A broń Boże z masą mikroprocesora.
    A prawa ma zostać jak jest.
    I wtedy programowo- mierzysz z lewej, mierzysz z prawej- odejmujesz.
    Masz dwa x10bit- co daje przy dwóch przetwornikach 9bit.
    No bo 1 bit tracisz- w przybliżeniu.
  • #17
    mirekk36
    Level 42  
    No jak na razie nie zrobiłem jeszcze płytczeki, jednak po poście Dar.El poprawiłem co nieco połączenia i sporo problemów odpadło.

    Okazało się też, że moja największa nieliniowość bierze się jednak z błędu o nazwie "GAIN ERROR" .... wymyśliłem sobie jednak jak to programowo korygować i znowu jeszcze lepszy wynik.

    Tylko przy projektowaniu płytki będzie trzeba pokombinować.

    Aha - czym można sobie najlepiej potestować tzn zasymulować obciążenie ???? Najlepiej z możliwością w jakiś płynny sposób żeby było mniej więcej od 0 do 5A

    eeech bawię się na razie z podłączaniem co popadnie pod ręką w tym kilku silniczków DC, które zatrzymuję ręką ;) żeby wymusić duży pobór prądu. Tylko że już na obydwu kciukach mam plastry i łapy pocharatane hyhyhyy
  • Helpful post
    #18
    janbernat
    Level 38  
    Żarówka z samochodu na 12V.
    45W/12V=3.75A
    I ten Gain error nie różni się w rezultacie od złego poprowadzenia mas.
  • #20
    janbernat
    Level 38  
    No to jeszcze silnik od wycieraczek z samochodu- ale ten po przekładni może połamać palce.
    I w dalszym ciągu powtarzam:
    "To tak:
    Lewa strona opornika pomiarowego powinna iść do drugiego ADC i do 0 źródła zasilania.
    A broń Boże z masą mikroprocesora.
    A prawa ma zostać jak jest.
    I wtedy programowo- mierzysz z lewej, mierzysz z prawej- odejmujesz.
    Masz dwa x10bit- co daje przy dwóch przetwornikach 9bit.
    No bo 1 bit tracisz- w przybliżeniu."
  • #21
    mirekk36
    Level 42  
    janbernat wrote:
    No to jeszcze silnik od wycieraczek z samochodu- ale ten po przekładni może połamać palce.


    hyhyhyhy no no, to podziękuję za zabawy z takim silniczkiem ;)


    janbernat wrote:
    I w dalszym ciągu powtarzam:
    "To tak:
    Lewa strona opornika pomiarowego powinna iść do drugiego ADC i do 0 źródła zasilania.
    A broń Boże z masą mikroprocesora.
    A prawa ma zostać jak jest.
    I wtedy programowo- mierzysz z lewej, mierzysz z prawej- odejmujesz.
    Masz dwa x10bit- co daje przy dwóch przetwornikach 9bit.
    No bo 1 bit tracisz- w przybliżeniu."


    Ale z tym to się nie zgodzę - tzn wolę to robić za pomocą pomiaru różnicowego ADC. Pisałem że bawię się tym na procku ATmega32 oraz ATtiny26. Obydwa umożliwiają pomiary różnicowe. Z tym, że ATmega ma od razu tylko 9bitów i to tylko dla połowy zakresu, dlatego w jej przypadku wejście Vneg przetwornika podłączam właśnie do masy gdzie wpięty jest bocznik natomiast wejście Vpos do jego drugiej nogi. To działa - tyle że z powodu ograniczenia rozdzielczości i połowy zakresu wyniki na ATmega są dużo gorsze. A wykorzystując wzmocnienie x200 też niewiele można poprawić chociaż działa.

    Podobnie podłączam wejścia różnicowe Vpos oraz Vneg w ATtiny - tyle że tam mam już ładnie rozdzielczość 10bit dla całego zakresu pomiarowego co przy wyborze wzmocnienia x20 daje całkiem fajne rezultaty - tylko programowo trzeba korygować niektóre błędy ale to już nie taki problem.
  • Helpful post
    #22
    janbernat
    Level 38  
    No dobrze- spójrz na str.201 dla ATMega32.
    Dla wzmocnienia x1 i x10 masz rozdzielczość 8bit.
    Dla x200 rozdzielczość 7bit.
    A z różnicowym się zgodzę- ale wejście nie do gnd procesora ale do prawej strony opornika R3.
    I wcale nie zanegowany- na przewodach od odbiornika masz tez dodatni potencjał.
    Bo od odbiornika GND trochę spadł do prawej strony opornika pomiarowego.
    Tylko niższy niż z lewej strony opornika.
    Czyli prawa strona nie tak jak jest-odszczekuję moje poprzednie głupoty- tylko doprowadzenie do ADC- ale nie jako Vneg ale też jako Vpos.
    Tylko niższy. I wtedy pomiar na dwóch wejściach do ADC.
    P.S.
    Znalazłem płytkę z ATMega32.
    I oporniki 0.047Ohm.
    Tak że wszystko jest na dobrej drodze.
    :D
  • #23
    mirekk36
    Level 42  
    janbernat ---> ooo kurczę aleś mi teraz ćwieka zabił z tą rozdzielczością na stronie 201 ;) ..... że też ja to przeoczyłem - to od początku byłoby wszystko jaśniejsze, a tak to męczyłem się z tym programowo aż namacałem. Teraz już mi działa nawet na GAIN = 200 pomiar prądu w ATmega32. (oczywiście wymaga to ciut więcej gimnastyki w kodzie niż na ATtiny26 - ale działa - tylko muszę jeszcze właśnie sprawdzić dla obciążeń pomiędzy 2 a 5A z tymi żarówami samochodowymi itp)

    Ale z tego wynika, że procki ATtiny mają zdecydowanie lepszej jakości przetworniki ADC. Tam nie ma nic wspomnianego o tym, że pomiar różnicowy ze wzmocnieniem x20 ma mniejszą rozdzielczość ---- chyba, że znowu nie widzę czegoś. Wyniki działania kodu na ATtiny są o wiele bardziej precyzyjne i łatwiej korygować błędy ADC programowo.

    Jak na razie obydwa mierniki zarówno na ATmega32 jak i na ATtiny26 działają zgodnie z multimerem w zakresie 10mV do ok 1,5A (oczywiście na ATmega32 są odchyłki nieco większe powiedzmy w zakresie 10mV - no ale to do prostego miernika i tak spokojnie wystarcza)
  • #24
    Dar.El
    Level 40  
    Chcesz zrobić jednoczesny pomiar prądu i napięcia na jednym uP?. Zasilanie uP będzie oddzielone galwanicznie od mierzonego?.
  • #25
    mirekk36
    Level 42  
    No zasilanie uC chcę oczywiście dać całkowicie oddzielne, z odrębnego całkowicie zasilacza sieciowego-->mostek-->stabilizator +5V

    Tylko kurka wodna teraz mi się jakieś cyrki dzieją - ale fakt że przedtem coś nie słuchałem może was uważnie i miałem masę doprowadzanego napięcia połączoną z masą uC. Jakoś to działało dla jednego zasilacza +12V ale jak podłączałem inny to już kicha ;) .... teraz odizolowałem masy całkowicie i na razie chcę mierzyć tylko wejściami różnicowymi na ATtiny26 - ale cyrk polega na tym, że ADC odczytuje jakieś głupoty co chwilę się cały licznik przekręca gdzieś od 600-700 do 0 w dół i w ogóle nie reaguje na to co ma na wejściach - a jak mierzę na wejściach multimerem to są ładne napięcia w zależności od podłączonego obciążenia. No chyba że jakoś przetwornik w tym procku w końcu usmażyłem czy jak?

    chyba pójdę już na dzisiaj spać ;)
  • #26
    Dar.El
    Level 40  
    Połącz masy, zasilania uP i napięcia mierzonego, tak aby pomiar napięcia był jak najdokładniejszy.
  • #27
    mirekk36
    Level 42  
    Dar.El --> zrobiłem to w końcu tak jak zostało pokazane pod koniec tego tematu:

    https://www.elektroda.pl/rtvforum/topic1669170.html

    i teraz działa. Czyli właśnie połączyłem masy tak jak piszesz.