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

Mierzenie własnego zasilania, adc [m128]

AVRowiec 29 Kwi 2010 23:28 2886 19
  • #1 8018538
    AVRowiec
    Poziom 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..
  • Pomocny post
    #2 8018661
    uuidgen
    Poziom 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 8019607
    AVRowiec
    Poziom 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..
  • Pomocny post
    #4 8019692
    loocasm
    Poziom 15  
    Cytat:
    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...
  • #5 8019884
    AVRowiec
    Poziom 18  
    :) dzięki
  • #6 8019999
    Freddy
    Poziom 43  
    AVRowiec napisał:
    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 8021075
    uuidgen
    Poziom 12  
    Freddy napisał:
    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 8022315
    Freddy
    Poziom 43  
    uuidgen napisał:
    Freddy napisał:
    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 8022472
    Klima
    Poziom 31  
    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 8023147
    uuidgen
    Poziom 12  
    Freddy napisał:
    uuidgen napisał:
    Freddy napisał:
    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 napisał:
    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 napisał:
    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 8025005
    AVRowiec
    Poziom 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 8025039
    uuidgen
    Poziom 12  
    Cytat:
    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 8026223
    AVRowiec
    Poziom 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 8026852
    Dar.El
    Poziom 41  
    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 8027101
    uuidgen
    Poziom 12  
    AVRowiec napisał:
    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 8030698
    Freddy
    Poziom 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 8031044
    Dar.El
    Poziom 41  
    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 8031084
    AVRowiec
    Poziom 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 8031781
    Freddy
    Poziom 43  
    Jeśli chodzi Ci o akumulator Li-Io, to są kostki które za Ciebie dokonują pomiaru jego pojemności.
  • #20 8034116
    asembler
    Poziom 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:-)
REKLAMA