Elektroda.pl
Elektroda.pl
X
Metal Work Pneumatic
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

marcingebus 10 Lis 2018 13:16 663 30
  • #1 10 Lis 2018 13:16
    marcingebus
    Poziom 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.

    0 29
  • Metal Work Pneumatic
  • #2 10 Lis 2018 13:49
    kaczakat
    Poziom 24  

    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ł.

    0
  • #3 10 Lis 2018 14:23
    wo_k
    Poziom 10  

    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ć.

    0
  • Pomocny post
    #4 10 Lis 2018 14:38
    rb401
    Poziom 34  

    marcingebus napisał:
    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 napisał:
    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 ).

    0
  • #5 10 Lis 2018 14:45
    marcingebus
    Poziom 10  

    wo_k napisał:
    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.

    0
  • #7 10 Lis 2018 15:28
    marcingebus
    Poziom 10  

    rb401 napisał:
    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 napisał:
    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 napisał:

    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ę.

    0
  • #8 10 Lis 2018 15:43
    ekrzychoooo
    Poziom 14  

    Cytat:
    Dla każdego ten Offset wejściowy będzie taki, sam, czy dla każdego może być inny?

    Może być inny.
    Poczytaj w tym pdf FIGURE 2-21. Widać tam że dopiero od 1,5V charakterystyka jest liniowa.

    0
  • #9 10 Lis 2018 15:50
    marcingebus
    Poziom 10  

    ekrzychoooo napisał:
    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%?

    0
  • Metal Work Pneumatic
  • #10 10 Lis 2018 15:55
    ekrzychoooo
    Poziom 14  

    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.

    0
  • Pomocny post
    #11 10 Lis 2018 17:33
    shadow0013
    Poziom 34  

    Rozważ AD8628 offset przyzwoity, cena do przyjęcia. Na str. 19 schemat akurat jakiego szukasz.

    0
  • #12 10 Lis 2018 21:36
    marcingebus
    Poziom 10  

    shadow0013 napisał:
    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?

    0
  • Pomocny post
    #13 10 Lis 2018 22:13
    shadow0013
    Poziom 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).

    0
  • Pomocny post
    #14 10 Lis 2018 22:42
    ekrzychoooo
    Poziom 14  

    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

    0
  • #15 10 Lis 2018 23:02
    shadow0013
    Poziom 34  

    ekrzychoooo napisał:
    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.

    0
  • #16 11 Lis 2018 00:58
    marcingebus
    Poziom 10  

    shadow0013 napisał:
    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?

    0
  • #17 11 Lis 2018 08:47
    shadow0013
    Poziom 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.

    0
  • #18 11 Lis 2018 13:02
    marcingebus
    Poziom 10  

    ekrzychoooo napisał:
    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ę?

    0
  • Pomocny post
    #19 11 Lis 2018 13:23
    ekrzychoooo
    Poziom 14  

    marcingebus napisał:
    ekrzychoooo napisał:
    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.

    0
  • Pomocny post
    #20 11 Lis 2018 18:05
    danthe
    Poziom 29  

    Zwróć też uwagę, że w atmegach serii 48 - 328 masz wewnętrzne źródło napięcia odniesienia o wartości 1,1V.

    0
  • #21 11 Lis 2018 22:46
    marcingebus
    Poziom 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ć?

    0
  • #22 12 Lis 2018 07:05
    kaczakat
    Poziom 24  

    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.

    0
  • #24 12 Lis 2018 13:53
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • #25 12 Lis 2018 23:01
    ekrzychoooo
    Poziom 14  

    tmf napisał:
    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

    0
  • #26 13 Lis 2018 18:18
    tmf
    Moderator Mikrokontrolery Projektowanie

    @ekrzychoooo Tylko spójrz jeszcze na parametr - Internal voltage reference (VINT) - 1,0-1,2V, typ. 1,1V. Czyli mamy 1,1V+/-10%. Sporo.

    0
  • #27 13 Lis 2018 18:23
    ekrzychoooo
    Poziom 14  

    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.

    0
  • #28 13 Lis 2018 18:41
    tmf
    Moderator Mikrokontrolery Projektowanie

    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.

    0
  • Pomocny post
    #29 13 Lis 2018 19:10
    ekrzychoooo
    Poziom 14  

    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.

    0
  • #30 13 Lis 2018 19:21
    tmf
    Moderator Mikrokontrolery Projektowanie

    ekrzychoooo napisał:
    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.

    0