Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Pomiar prądu na boczniku ADC/Arduino - jaki wzmacniacz operacyjny dla 10mV

marcingebus 10 Nov 2018 13:16 3306 30
Automation24.pl
  • #1
    marcingebus
    Level 10  
    Chcę sobie zrobić urządzenie, które będzie zbierało charakterystykę napięciową podczas ładowania i rozładowywania akumulatorów w ładowarkach/rozładowywarkach a przy okazji zliczało także pojemność akumulatora więc konieczny jest także pomiar prądu. Napięcie na Arduino wiem jak zmierzyć z pomocą wbudowanego ADC. Robiłem doświadczenia jakiś czas temu i przy boczniku 0,1om i prądzie np. 500mA, napięcie na nim, to 50mV. Ale jeśli prąd ładowania jest 300mA, to już mi napięcie spada do 30mV.
    Granicą rozdzielczości 10-bitowego przetwornika ADC wbudowany w Arduino wynosi około 4.9mV (5V/2^10). Można mierzyć zewnętrznymi przetworniki 12bit, ale polepszamy rozdzielczość do około 1.22mV (4,9mV/4), dla przetworników 16bit niby mamy 7,6uV, co już jest fajne, ale taka kość to minimum 20zł w górę i zajęte więcej portów na Arduino. Chciałbym równocześnie badać kilka/naście akumulatorów 18650, to zaczyna rosnąć cena. Myślałem o zastosowaniu jakiegoś wzmacniacza operacyjnego, których ceny się zaczynają od złotówki, co jest fajne. Planowałem wzmocnić te 10mV do wyższej wartości i wówczas mierzyć 10-bitowym wbudowanym ADC w arduino.

    Miałem jakieś OPAmpy, kupione kiedy TL061, 071, 081 - ale jak doczytałem notę katalogową, to minimalne zasilanie +-5V, więc trochę mało w porównaniu, co mam dla Arduino, mogę jakieś złotówkowe przetwornice StepUP od MyFriendów, ale po co komplikować układ. Mam też MCP 6004, on ma zasilanie od 1.8 do 7V niesymetryczne, co już jest fajne. No i dochodzimy do sedna sprawy. W nocie podano, że jest "Input Offset Voltage wynosi od -4.5mV do +4.5mV. Czy ja dobrze myślę, że to podstawowy parametr, na który powinienem zwracać uwagę przy takim pomiarze?
    Tutaj nota katalogowe: 4.9mv/4
    Czy taki offset można jakoś zmierzyć, ustawić na mniejszy, inaczej mówiąc jakoś wyregulować/zmniejszyć o rząd wielkości, albo 2 rzędy wielkości, albo czy po zmierzeniu dla tego konkretnego egzemplarza, on jest stały i mogę do programowo przeliczyć w arduino, aby znając go dokładnie się go pozbyć?

    Może ktoś rozwinąć myśl, jak sobie poradzić z tym Offsetem?

    Spędziłem też chyba pół nocy wczoraj, aby przejrzeć noty katalogowe chyba z 50 wzmacniaczy operacyjnych, które mają w sklepie BNS na tysiącleciu w K-cach i wytypowałem kilka sztuk o zasilaniu do 5V, które ten offset mają niewielki i nie kosztują 50zł/szt. Wytypowałem:

    - OP177 GP (ma offset na poziomie 20-60uV) - 8zł/szt
    - OP277 PA (offset +-50uV) - 8zł/szt
    Są jeszcze inne, ale po 23zł/szt 50zł/szt itp...

    Z grubsza przeglądałem w obudowie przewlekanej, aby było łatwiejsze lutowanie.

    A może doradzicie jak szukać wzmacniacza operacyjnego, nie przeglądając tysiąca not katalogowych, aby znaleść taki, który można zasilać 5V i mógł mierzyć w miarę dokładnie kilka mV?

    P.S.
    Mam jeszcze jedną sztukę w układzie, który kiedyś zrobiłem OPA340 PA, który ma niby offset 500uV, więc lepiej niż inne posiadane.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Automation24.pl
  • #2
    kaczakat
    Level 34  
    Po pierwsze to nie najlepszy dział, bo nikt z elektroników może tu nie zajrzeć, a problem jest bardziej związany z elektroniką niż Arduino. Zbuduj układ na jakimkolwiek wzmacniaczu do testów, a który można zasilać z 5V, przecież nie jest Ci potrzebne napięcie symetryczne. Jak Ci nie będzie pasował to szukaj innego. Jak np. użyjesz LM358 i zasilisz go z +15/-15 to wyjście będzie mogło być w tym zakresie, jak z GND i 5V to tylko w tym zakresie. Raczej bardziej bym się martwił tą częścią układu, do której ten OPAMP będzie podłączony - np. tu powinien być element do "wyzerowania" ofsetu danego egz. jaki by tam nie był.
  • #3
    wo_k
    Level 12  
    Po co tak kombinujesz? Przy założeniu że prąd ładowania/rozładowania jest stały wystarczy mierzyć napięcie akumulatora i czas. Resztę można wyliczyć.
  • Automation24.pl
  • Helpful post
    #4
    rb401
    Level 38  
    marcingebus wrote:
    Może ktoś rozwinąć myśl, jak sobie poradzić z tym Offsetem?


    Sama wartość offsetu nie jest tak krytyczna, jak jego dryft od różnych czynników (np. od temperatury, co uwzględniane jest w dokumentacjach wzmacniaczy).
    Stałą wartość offsetu można łatwo zlikwidować w układzie na drodze analogowej (potencjometr) lub programowej (stała kalibracyjna), tak że to nie problem.


    marcingebus wrote:
    A może doradzicie jak szukać wzmacniacza operacyjnego, nie przeglądając tysiąca not katalogowych, aby znaleść taki, który można zasilać 5V i mógł mierzyć w miarę dokładnie kilka mV?



    Jeśli chodzi o to specyficzne zastosowanie, to raczej zamiast robić na piechotę, warto sięgnąć po znane gotowe rozwiązanie problemu jakim jest ogólnie mówiąc INA219 (czy też INA209 lub inny podobny, uwzględniając ich specyfikę).
    Tym bardziej jeśli już masz jakąś biegłość w Arduino, to nie powinieneś mieć kłopotów z oprogramowaniem przy stosowaniu tych układów.
    Są gotowe moduły z tymi układami, są przykłady i biblioteki na Arduino a parametry wychodzą takie jakich w samym układzie ADC Arduino plus nawet dobry wzmacniacz operacyjny, nigdy nie uzyskasz (np. rozdzielczość pomiaru napięcia na boczniku 10µV ).
  • #5
    marcingebus
    Level 10  
    wo_k wrote:
    Po co tak kombinujesz? Przy założeniu że prąd ładowania/rozładowania jest stały wystarczy mierzyć napięcie akumulatora i czas. Resztę można wyliczyć.
    Po pierwsze celem jest zbadanie poprawności operacji jakie wykonuje ładowarka/rozładowywarka. Poleganie na tym, że działa dobrze, jest z gruntu złe jeśli chcemy sprawdzić czy działa dobrze. ;-) Po drugie mam rozładowywarkę ZB2L3, która ma obciążenie rezystancyjne i prąd maleje wraz z malejącym napięciem. Zamiast się bawić w jakieś całkowanie, łatwiej liczyć pojemność zamiast w Ah, to w Wh, które nie zależy (uogółniając) od napięcia.
  • #7
    marcingebus
    Level 10  
    rb401 wrote:
    Jeśli chodzi o to specyficzne zastosowanie, to raczej zamiast robić na piechotę, warto sięgnąć po znane gotowe rozwiązanie problemu jakim jest ogólnie mówiąc INA219 (czy też INA209 lub inny podobny, uwzględniając ich specyfikę).

    Już raz robiłem podejście do zadania, jakiś rok temu i nawet kupiłem jedną sztukę modułu u majfrendów. Ale sądziłem, że złotówkowy OPA, załatwi temat, a 4xOPA w jednej obudowie obsłużą 4 akumulatorki za przysłowiową złotówkę, ale patrząc teraz na cenę gotowego modułu na Ali, widzę, że to chyba jednak najlepsze rozwiązanie... bo w OPA z małym ofsetem są w tej samej lub wyższej cenie.

    Liczyłem też na rozwiązanie problemu z pomocą OPA, zakładając, że jak już nabiorę wprawy w programowaniu Arduino, to może pokuszę się o jakiś oscyloskop więcej niż jednokanałowy, który sam zbuduję. Majfrendy mają tanie oscyloskopy, takie miniaturki, ale wszystkie one są jednokanałowe.

    rb401 wrote:
    Sama wartość offsetu nie jest tak krytyczna, jak jego dryft od różnych czynników (np. od temperatury, co uwzględniane jest w dokumentacjach wzmacniaczy).
    Stałą wartość offsetu można łatwo zlikwidować w układzie na drodze analogowej (potencjometr) lub programowej (stała kalibracyjna), tak że to nie problem.


    W nocie katalogowej dla MCP6004: http://ww1.microchip.com/downloads/en/DeviceDoc/21733j.pdf na stronie 5 PDFa, znalazłem schemat, do testowania egzemplarza (Figure 1-1). Czy ja dobrze rozumiem, że należy sobie posiadany egzemplarz, do takiego układu wmontować i można pomierzyć rzeczywiste wartości wymienionych tam parametrów? Czy dla mnie nie wystarczyło by zbadać Offset na wejściu, to znaczy dobrać typowy układ (układ na stronie 1) jakiś dokładny voltomierz na wyjściu i tak dodawać z zasilacza labolatoryjnego poprzez jakiś duży dzielnik, jakieś malutkie napięcie, aby doprowadzić, aby wyjście podawało zero?

    Później najłatwiej w Arduino, sobie pomiar pomniejszę o/powiększę o tą wartość napięcia pomiar będzie w miarę dokładny?

    A co z kolejnymi OPA w tej samej kości? Dla każdego ten Offset wejściowy będzie taki, sam, czy dla każdego może być inny?

    Dodano po 2 [minuty]:

    ekrzychoooo wrote:

    Jak już się wczoraj poddałem w przeglądaniu not katalgowych BNS, to widziałem twój filmik, ten pierwszy i oczywiście zasubskrybowałem kanał. ;-) Obejrzę kolejne i na pewno będą łapki w górę.
  • #9
    marcingebus
    Level 10  
    ekrzychoooo wrote:
    BQ500100 pomiar prądu arduino #3

    W tym filmie stosujesz jakieś rozwiązanie, że zaczynasz pomiar od jakiejś wartości. Nie kumam tego. Stosujesz jakiś narzędzie, do automatycznego podawania napięcia i odczyty z mierników na Pececie. Trochę to skomplikowane jak na czas, który mogę na to dziś poświęcić. Czy możesz w 2 żołnierskich słowach napisać jaki prąd przy oporniku bocznikującym 0,1om mierzysz i wychodzą błędy mniejsze niż 1%?
  • #10
    ekrzychoooo
    Level 17  
    Steruje tam zasilaczem Rigol. Czyli ten sam program zwiększa napięcie a tym samym prąd płynący poprzez 0,1R i odczytuję wskazania z mierników.
    W filmie #1 był problem na początku zakresu pomiarowego bo obydwa wejścia pomiarowe powinny mieć jakieś napięcie wspólne. Gdyby to był faktycznie akumulator to ten problem nie wystąpi.
  • Helpful post
    #11
    shadow0013
    Level 34  
    Rozważ AD8628 offset przyzwoity, cena do przyjęcia. Na str. 19 schemat akurat jakiego szukasz.
  • #12
    marcingebus
    Level 10  
    shadow0013 wrote:
    Rozważ AD8628 offset przyzwoity, cena do przyjęcia. Na str. 19 schemat akurat jakiego szukasz.

    Wydaje się, że zarąbisty w sensie parametrów. A gdzie takie cuda kupujecie? Na TME jest tylko 8629 i 8630.

    A jak działa to autozerowanie?
  • Helpful post
    #13
    shadow0013
    Level 34  
    Wpisz na googlach AD8628 sklep - tam znajdziesz tvsat.com.pl - cena 4,28PLN .
    Ze względu na małą obudowę - używam z adapterem na DIP8 (do płytki stykowej).
  • Helpful post
    #14
    ekrzychoooo
    Level 17  
    Może INA199. PDF
    Przykładowy schemat:
    Pomiar prądu na boczniku ADC/Arduino - jaki wzmacniacz operacyjny dla 10mVINA199.PNG Download (18.25 kB)
    i płytka według tego schematu
    Pomiar prądu na boczniku ADC/Arduino - jaki wzmacniacz operacyjny dla 10mVPCB-INA1..2.jpg Download (3.65 MB)
    Na płytce jest wersja INA199A2 czyli ten ze wzmocnieniem 100.
    Rezystor pomiarowy 15mohm firmy VIKING (lrp12ftdrr015)
    Napięcie odniesienia LM431.
    Jak by co to mam trochę tych płytek. :D
  • #15
    shadow0013
    Level 34  
    ekrzychoooo wrote:
    Jak by co to mam trochę tych płytek.

    Nad czym się zastanawiasz? Masz płytki podłącz i zobacz co z tego wyjdzie - mankamenty może da się usunąć programowo.
  • #16
    marcingebus
    Level 10  
    shadow0013 wrote:
    Ze względu na małą obudowę - używam z adapterem na DIP8 (do płytki stykowej).

    Masz na myśli taką płytkę do której lutujesz układ:
    https://www.google.pl/search?q=adapter+dip8
    Czy może ta bardziej wymyślna (wydaje się, że tam można włożyć i wyciągnąć układ. Masz z tym jakieś doświadczenia?
  • #17
    shadow0013
    Level 34  
    Kawałek płytki, nóżki i układ jest lutowany do tej płytki. Zobacz też (niestety ostatnio zdrożały) ads1110, całkiem ładnie działają po I2C.
  • #18
    marcingebus
    Level 10  
    ekrzychoooo wrote:
    Na płytce jest wersja INA199A2 czyli ten ze wzmocnieniem 100.
    Rezystor pomiarowy 15mohm firmy VIKING (lrp12ftdrr015)
    Napięcie odniesienia LM431.
    Jak by co to mam trochę tych płytek.

    Ile za płytkę?
  • Helpful post
    #19
    ekrzychoooo
    Level 17  
    marcingebus wrote:
    ekrzychoooo wrote:
    Na płytce jest wersja INA199A2 czyli ten ze wzmocnieniem 100.
    Rezystor pomiarowy 15mohm firmy VIKING (lrp12ftdrr015)
    Napięcie odniesienia LM431.
    Jak by co to mam trochę tych płytek.

    Ile za płytkę?

    7zł.
    Napięcie na wyjściu U = a*I + b
    Parametr a i b mogę zmierzyć indywidualnie dla każdej płytki.
  • Helpful post
    #20
    danthe
    Level 30  
    Zwróć też uwagę, że w atmegach serii 48 - 328 masz wewnętrzne źródło napięcia odniesienia o wartości 1,1V.
  • #21
    marcingebus
    Level 10  
    Czy Arduino UNO, Mini, Nano mają tak małe napięcie odniesienia? Wówczas 1023 będzie przy napięciu 1.1V? Wówczas teoretyczna rozdzielczość wyniesie 1mV?

    A gdzieś mi się obiło o uszy, że w Atmegach (nie wiem jak się to przekłada na Arduino, skoro Arduino też na Atmegach, jest takie coś jak pomiar napięcia różnicowego, ale nigdzie nie natrafiłem na żaden przykłada jak to zrealizować. Możecie naprowadzić?
  • #22
    kaczakat
    Level 34  
    Napięcie odniesienia możesz sobie zdefiniować funkcją analogReference(), domyślnie jest VCC, które z kolei jest domyślnie 5V, a na płytkach 3.3V jest oczywiście 3.3V. Stare Atmegi miały wewnętrzne napięcie odniesienia 2,56V i takie jest jeszcze dostępne w Arduino MEGA, ta w sumie ma 4 opcje tej funkcji. Nowsze mogą być zasilane już od 1.8V więc i napięcie odniesienia obniżono do 1.1V. Można sobie też wziąć zewnętrzne i podpiąć pod pin Vref. Można o tym poczytać tu: https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/.
    Strasznie komplikujesz to zadanie. Jeśli masz zakres prądu od 0-1A to wystarczy wziąć rezystor R1 2W i masz zakres pomiarowy z zapasem, 1mA to około 1 z odczytu ADC na wewnętrznym odniesieniu 1.1V. Jeśli to za mało to można kupić zewnętrzny ADC na I2C, też mają swoje wewnętrzne źródło odniesienia, 16bit za 6zł: ADS1115. 4 kanały i łatwo znaleźć gotowca/bibliotekę, bo Adafruit ma takie również w ofercie. Można też użyć MCP3422 18bit, wewnętrzne źródło 2.048 z dokładnością 0,05%, startowałby z pomiarem na tym R1/2W od 2A i już na 14bitach (można sobie definiować ile ma być) można robić odczyty z precyzją 0,1mA, a przy 16bitach excel przechodzi mi już na notację naukową i nie chce mi się przeliczać.
    Atmega328 ma komparator analogowy, podpinasz pod piny AIN0 i AIN1 (piny 6 i 7 Arduino UNO), nie mam pomysłu jakby to miało pomóc w tym projekcie.
    Gdybyś chciał mierzyć ile zjada Atmega sama sobie to wtedy najlepiej byłoby mierzyć ujemne napięcie i tu OPAMP byłby konieczny. Chyba że ten 1W-2W na rezystorze bardzo przeszkadza. Pewnie można mierzyć napięcie przy ładowaniu z jednej strony rezystora, a przy rozładowaniu z drugiej, tak by wiedzieć jaka jest moc tego czego chcesz.
  • #24
    tmf
    Moderator of Microcontroller designs
    Samo zwiększenie rozdzielczości ADC niewiele rozwiązuje - jakkolwiek teoretycznie dla 16-bitowego ADC można zejść do mikrowoltów, to szumy cie zabiją. Zrobienie PCB i w ogóle zaprojektowanie układu pod pomiar takich napięć to sztuka sama w sobie. Dlatego, o ile to możliwe, lepiej zwiększyć wartość rezystora pomiarowego i mierzyć po prostu wyższe napięcia. Poza tym można zastosować oversampling - ponieważ pomiar prądu nie musi się odbywać tysiące razy na sekundę, więc spokojnie można kosztem pasma pomiarowego zwiększyć rozdzielczość. Kolejna sprawa to źródło referencyjne - te z ATMega kompletnie się nie nadaje, wystarczy rzucić okiem na katalogowy rozrzut napięć. Więc potrzebna jest zewnętrzna referencja.
    Kolejna sprawa - ewentualny opamp. To dobry pomysł, jeśli chcemy ograniczyć wartość rezystora pomiarowego. Tylko zamiast kombinować z super stabilnymi opampami, można wykorzystać fakt, że mamy MCU, który programowo skompensuje niedoskonałości opampa. Wystarczy użyć multipleksera analogowego i mieć możliwość podłączenia do wejścia pomiarowego napięcia referencyjnego (lub prądu referencyjnego do bocznika). Skoro wiemy jaką referencję podłączyliśmy to i ofset i błąd wzmocnienia można programowo skompensować. A to daje łatwo możliwość wykorzystania mikrokontrolerów z wbudowanym wzmacniaczem przed ADC (multiplekser analogowy to każdy ma). Przy okazji można wykorzystać multiplekser analogowy do pomiaru parametrów kilku ogniw na raz - w końcu ani napięcie, ani prąd nie zmieniają się w tym układzie bardzo szybko.
  • #25
    ekrzychoooo
    Level 17  
    tmf wrote:
    Kolejna sprawa to źródło referencyjne - te z ATMega kompletnie się nie nadaje, wystarczy rzucić okiem na katalogowy rozrzut napięć. Więc potrzebna jest zewnętrzna referencja.

    Tak patrzę na wykresy
    Pomiar prądu na boczniku ADC/Arduino - jaki wzmacniacz operacyjny dla 10mVatmega168b..gap.png Download (84.37 kB)
    i chyba nie jest tak źle. Jakieś 3mv / 20stopni -> 0,01%/K
  • #26
    tmf
    Moderator of Microcontroller designs
    @ekrzychoooo Tylko spójrz jeszcze na parametr - Internal voltage reference (VINT) - 1,0-1,2V, typ. 1,1V. Czyli mamy 1,1V+/-10%. Sporo.
  • #27
    ekrzychoooo
    Level 17  
    No ale to są różnice między kolejnymi sztukami.
    Dla konkretnej sztuki to wahania są tylko jak pokazują wykresy od temperatury.
    A konkretne urządzenie pomiarowe i tak wypadało by kalibrować.
    Inaczej mówiąc to nie są precyzyjne wzorce napięcia tylko precyzyjne źródła napięcia.
  • #28
    tmf
    Moderator of Microcontroller designs
    Będziesz się bawił w kalibrację pojedynczych sztuk, mogąc za parę złotych kupić referencję o dokładności rzędu ppm? Pewnie, że można. Pytanie tylko jaka jest długookresowa stabilność tej wbudowanej referencji.
  • #30
    tmf
    Moderator of Microcontroller designs
    ekrzychoooo wrote:
    tmf napisał:
    Będziesz się bawił w kalibrację pojedynczych sztuk,

    chyba tak bo przy okazji skoryguję niedokładności rezystora pomiarowego, niedokładności wzmocnienia i ofsetu wzmacniaczy.


    Ale ciągle pomijasz zmienność tych parametrów w czasie. IMHO prościej umieścić jeden element o możliwie stałych parametrach i względem niego kalibrować resztę układu, niż brać pod uwagę parametry szeregu elementów i je jednorazowo kalibrować. Tym bardziej, że elementy użyte do budowy takiego układu z autokalibracją mogą mieć o wiele gorsze parametry, a co za tym idzie, być tańsze. Samo np. napięcie niezrównoważenia wzmacniacza może się zmieniać dla tanich i prostych układów w szerokich granicach, np. w funkcji temperatury, a tego jednorazowa kalibracja już nie załatwi.