Elektroda.pl
Elektroda.pl
X

Search our partners

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

Mierzenie własnego zasilania, adc [m128]

AVRowiec 29 Apr 2010 23:28 2838 19
  • #1
    AVRowiec
    Level 18  
    Witam,
    Mam problem - niewątpliwie dość prosty do rozwiązania ;/

    Chcę zrobić układ pracujący na baterii który mierzy napięcie tej baterii.

    Jak dotąd sprawnie działa to co jest na rysunku pierwszym. Przerwanie ADC zwraca ładnie wyniki i miernik w zakresie 0-5V działa idealnie.
    Kiedy zmniejsze napięcie zasilania nic się nie zmienia mimo że ADC pracuje z wewnętrznym napięciem odniesienia 2.56V.

    Mierzenie własnego zasilania, adc [m128]

    Próbowałem różnych konfiguracji. Z kondensatorem przy Vref, dzielnikami na wejściu itp ale bez sukcesów.

    Przeczytałem mase forów na ten temat ale nie znalazłem nic o mierzeniu własnego napięcia zasilania.

    Mam nadzieje że ktoś coś doradzi..
  • Helpful post
    #2
    uuidgen
    Level 12  
    ustawiając aref na wewnętrzne robisz piękne zwarcie - w dokumentacji jest to wyraźnie napisane.

    prawidłowe rozwiązanie to zastosowanie wewnętrznego napięcia odniesienia (i NIE łączenie pinu aref do zasilania, najwyżej kondensator na nim) i zastosowania dzielnika napięcia np. 10kOhm/10kOhm do pomiaru - i uwzględnienie, że mierzysz połowę napięcia zasilania.
  • #3
    AVRowiec
    Level 18  
    Próbowałem z podłączony i odłączonym Aref i nie było widać zmian. Dzielnik na wejściu jest cały czas (potencjometr) ale mimo to nie wiem jak otrzymać prawidłowy wynik.
    Może mam błąd w programie? Bo przemnażanie przez 0.0195 jest bez sensu w sumie. Nie wiem przez jaką wartość mnożyć ADC. W DSie jest niby wzór

    ADC = (Vin * 256) / Vref

    co po przekształceniu daje

    Vin = (ADC * Vref) / 256 gdzie Vref = 2.56V

    Dobrze myśle?

    Dodano po 31 [minuty]:

    Dzięki uuidgen miałeś racje! Zrobiłem po tak jak napisałeś i działa. Na dzielniku mam połowę zasilania i trzeba to uwzględnić w kodzie.

    Vin = (ADC*2.56)/128; // wersja niezoptymalizowana :)

    BTW. Ten kondensator z Vrefa to dać do masy czy Vcc? 100n wystarczy? Akurat tego w DSie nie napisali..
  • Helpful post
    #4
    loocasm
    Level 15  
    Quote:
    AVCC is connected to the ADC through a passive switch. The internal 2.56V reference is generated
    from the internal bandgap reference (VBG) through an internal amplifier. In either case, the
    external AREF pin is directly connected to the ADC, and the reference voltage can be made
    more immune to noise by connecting a capacitor between the AREF pin and ground.

    Napisali :) Str. 239
    100n powinno wystarczyć, wszak ADC w ATmegach to nie mistrzostwo świata...
    Poza tym te wewnętrzne 2,56V chyba nigdy nie wynosi 2,56V w rzeczywistości...
  • #6
    Freddy
    Level 43  
    AVRowiec wrote:
    Próbowałem z podłączony i odłączonym Aref i nie było widać zmian. Dzielnik na wejściu jest cały czas (potencjometr) ale mimo to nie wiem jak otrzymać prawidłowy wynik.
    Może mam błąd w programie? Bo przemnażanie przez 0.0195 jest bez sensu w sumie. Nie wiem przez jaką wartość mnożyć ADC. W DSie jest niby wzór

    ADC = (Vin * 256) / Vref

    co po przekształceniu daje

    Vin = (ADC * Vref) / 256 gdzie Vref = 2.56V

    Dobrze myśle?

    Dodano po 31 [minuty]:

    Dzięki uuidgen miałeś racje! Zrobiłem po tak jak napisałeś i działa. Na dzielniku mam połowę zasilania i trzeba to uwzględnić w kodzie.

    Vin = (ADC*2.56)/128; // wersja niezoptymalizowana :)

    BTW. Ten kondensator z Vrefa to dać do masy czy Vcc? 100n wystarczy? Akurat tego w DSie nie napisali..


    Wzory masz na stronie 243 dokumentacji :
    ADC= Vin*1024 / Vref

    a wartości kondensatora i sposób podłączenia na stronie 213. Wystarczy sprawdzić, a nie pisać, że nie ma.
  • #7
    uuidgen
    Level 12  
    Freddy wrote:
    Wzory masz na stronie 243 dokumentacji :
    ADC= Vin*1024 / Vref
    Przy czym warto pamiętać, że wewnętrzne źródło odniesienia nie ma wartości 2.56V wziętej z kapelusza - ADC*5/2 daje wartość w mV. A użyty dzielnik napięcia usuwa to 2.
  • #8
    Freddy
    Level 43  
    uuidgen wrote:
    Freddy wrote:
    Wzory masz na stronie 243 dokumentacji :
    ADC= Vin*1024 / Vref
    Przy czym warto pamiętać, że wewnętrzne źródło odniesienia nie ma wartości 2.56V wziętej z kapelusza - ADC*5/2 daje wartość w mV. A użyty dzielnik napięcia usuwa to 2.

    Po pierwsze kolego dublujesz post który już był.
    Po drugie ten sam wzór służy również do obliczania, przy zewnętrznych precyzyjnych źródłach odniesienia, więc bzdury piszesz !
  • #9
    Klima
    Level 30  
    Przypominam Kolegom, że to napięcie 2.56 V może się wahać od 2.3V do 2.7V, zatem jakiekolwiek rozważania czegoś "na wzorach" mija się tu z celem, bo w programie i tak trzeba uwzględnić jakąś magiczną liczbę, która doprowadzi wynik ADC do użyteczności. Te 2.56 to taki marketingowy chwyt Atmela.
  • #10
    uuidgen
    Level 12  
    Freddy wrote:
    uuidgen wrote:
    Freddy wrote:
    Wzory masz na stronie 243 dokumentacji :
    ADC= Vin*1024 / Vref
    Przy czym warto pamiętać, że wewnętrzne źródło odniesienia nie ma wartości 2.56V wziętej z kapelusza - ADC*5/2 daje wartość w mV. A użyty dzielnik napięcia usuwa to 2.

    Po pierwsze kolego dublujesz post który już był.
    Zacytowałem fragment Twojej wypowiedzi do której dopisałem komentarz - gdzie tu dublowanie?

    Freddy wrote:
    Po drugie ten sam wzór służy również do obliczania, przy zewnętrznych precyzyjnych źródłach odniesienia, więc bzdury piszesz !
    Ty bzdury piszesz. Nie wypowiadałem się w żaden sposób o zewnętrznych źródłach odniesienia. Napisałem jedynie, że WEWNĘTRZNE źródło ma wartość ~2.56V aby się łatwo liczyło wynik - te procesory nie mają sprzętowego dzielenia nie mówiąc już o obsłudze liczb zmiennoprzecinkowych.

    Klima wrote:
    Przypominam Kolegom, że to napięcie 2.56 V może się wahać od 2.3V do 2.7V, zatem jakiekolwiek rozważania czegoś "na wzorach" mija się tu z celem, bo w programie i tak trzeba uwzględnić jakąś magiczną liczbę, która doprowadzi wynik ADC do użyteczności.
    A skąd weźmiesz tą magiczną liczbę skoro wartość na napięciu odniesienia zmienia się zarówno z zasilaniem jak i temperaturą?



    Co do dokładności - gdy interesuje nas precyzyjny odczyt to trzeba użyć dobrego napięcie odniesienia, ale też odpowiednich rezystorów (typowo używane mają precyzję +-5%), zapewnić odpowiednie filtrowanie, czy prowadzenie ścieżek.

    Zazwyczaj przyjęcie, że wewnętrzne źródło ma dokładnie 2.56V a nasz dzielnik napięcia ma stosunek dokładnie $$1 : (2^n-1)$$ jest wystarczające. A zwłaszcza w tym temacie, gdzie chodzi o wykrycie zasilania z baterii.
  • #11
    AVRowiec
    Level 18  
    Nie potrzebuje super precyzji. Dałem rezystory +/- 10% i mam odchył od miernika 0,02V. Nie wiem czy jest sens to korygować bo mam kilka mierników i każdy pokazuje co innego na drugim miejscu po przecinku.
    Nawet przy takim błędzie pomiar jest stosunkowo dokładny :)

    A może wie ktoś jak zrobić na tym pomiar prądu teraz? Chciałbym wiedzieć ile mA ciągnie układ... (zakrez 5-100mW)
  • #12
    uuidgen
    Level 12  
    Quote:
    A może wie ktoś jak zrobić na tym pomiar prądu teraz? Chciałbym wiedzieć ile mA ciągnie układ... (zakrez 5-100mW)
    ampery != waty

    mierzysz napięcie zasilania miernikiem
    szacujesz albo mierzysz miernikiem maksymalny prąd jaki może pobierać układ
    sprawdzasz w karcie katalogowej jakie musi być minimalne napięcie aby procesor pracował prawidlowo
    do $$r = {u \over i}$$ podstawiasz różnicę pomiędzy tym napięciem a napięciem zasilania oraz oszacowany prąd - wyliczasz maksymalną wartość rezystora jaką możesz użyć.
    albo jak nie obciążasz za mocno wyjść procesora to przyjmujesz 5 Ohm

    wpinasz zasilanie przez ten rezystor i mierzysz napięcie przed nim i za nim
    tym razem do wzoru podstawiasz opór i zmierzone napięcie - liczysz prąd
    mnożysz prąd * napięcie przed rezystorem - dostajesz moc
  • #13
    AVRowiec
    Level 18  
    pomyliłem się. w nawiasie miało być zakres do 100mA nie mW :)

    Szeregowe podłączanie opornika raczej odpada. Układ będzie pracował na baterii i musi ją wykorzystać do cna. Takie straty raczej odpadają.

    Widziałem rozwiązania na wzmacniaczu operacyjnym. Ale nie wczytywałem się w to jeszcze..
  • #14
    Dar.El
    Level 40  
    Witam
    W M128 jest już wzmacniacz operacyjny i możesz go wykorzystać do pomiaru prądu. Wewnętrzne napięcie referencyjne zmienia się około 1% po podgrzaniu z 25°C do 85°C. Tabelka jest na 348 stronie.
  • #15
    uuidgen
    Level 12  
    AVRowiec wrote:
    Szeregowe podłączanie opornika raczej odpada. Układ będzie pracował na baterii i musi ją wykorzystać do cna. Takie straty raczej odpadają.
    No to musisz to zrobić "hard way" - rezystor 0.1 Ohm 1%, po obu stronach dzielniki napięcia i wzmacniacze operacyjne (tylko daj takie co są 2 w jednej obudowie - łatwiej będzie wyregulować).

    Rezystora nie unikniesz - nawet przy prądach rzędu kilku amperów się je stosuje (tylko wtedy 10..15 mOhm).
  • #16
    Freddy
    Level 43  
    uuidgen :arrow: Kolego ja piszę bzdury, czyli nieprawdą jest, że ten sam wzór używany jest niezależnie od tego, jakie jest źródło odniesienia zewnętrzne, czy wewnętrzne ?
    Czytaj dokładnie posty, zanim coś odpiszesz.

    Dokładność przetwornika ADC to 1,5 LSB.
    Użycie wewnętrznego wzmacniacza zmniejsza dokładność pomiaru. !

    Do pomiaru prądu najlepsze są wzmacniacze tzw. current sense
  • #17
    Dar.El
    Level 40  
    Autorowi nie chodzi o dużą dokładność pomiaru. Precyzja pomiaru zależy od "najsłabszego ogniwa" a problematycznych miejsc przy pomiarze prądu jest dużo.
  • #18
    AVRowiec
    Level 18  
    Docelowo chciałbym mieć pomiar pojemności baterii :) ale to chyba poza zasięgiem tego co buduje. Będe sprawdzał napięcie akumulatora i uptime :) Tyle wystarczy. Anyway dziękuje za zainteresowanie tematem. Jak tylko ja bardziej zainteresuje się pomiarem prądu to napewno odezwę się po pomoc :) Dzięki wszystkim!
  • #19
    Freddy
    Level 43  
    Jeśli chodzi Ci o akumulator Li-Io, to są kostki które za Ciebie dokonują pomiaru jego pojemności.
  • #20
    asembler
    Level 32  
    Coś podobnego robie ale po wielu dyskusjach sam ze sobą doszedłem do wniosku ze o wile korzystniej jest dołaczyc dodatkową attiny13 która na biezaco bedzi e mierzyc parametry a dodatkowo w przypadku ładowania akumlulatorów procesor głowny pozostaje w uśpieniu. .Attiny13 ma praktycznie 5 lini do wykorzystania z tego jedną chcę uzyc do komunikacji a pozostałeł jako "harware monitor" nadrzednej jednostki. Jezli skłonisz sie do tego rozwiazania to ten temat jest bez sensu:-)