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

Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino

marcingebus 28 Feb 2017 01:51 2772 19
Optex
  • #1
    marcingebus
    Level 10  
    Na wstępie informuję, że pisałem pracę dyplomową w C 20 lat temu, a Arduino kupiłem 3 tygodnie temu. Poświeciłem HelloWorld/LED, wgrałem ze dwa gotowce.

    ALE DO RZECZY:
    Mam około 30akumulatorów 18650 "polaptopowych". Mierzyłem ich pojemność :
    - ładowarką everActive LC2100
    - TP4056 z zabezpieczeniem (aby samoczynnie zakończyć proces rozładowanie) + przetwornica StepUP z USB ->5V + miernik Keweisi USB 3.0 (Amperomierz, Voltomierz, Watomierz, Licznik Rozładowania) + opornik 15om.

    Druga wersja daje około 0.333A prądu rozładowania dla stałego napięcia 5V, ale ponieważ napięcie na samym akumulatorze maleje, to tam rozładowanie zaczyna się pewno 0.41A, a kończy coś ponad 0.55A.

    Wyniki pomiaru pojemności są znacząco inne. Inny jest sposób rozładowania, miernik mierzy co innego, bo dopiero po przetwornicy Step-UP itd..

    CELEM MOICH POMIARÓW JEST: określenie jakości/przydatności akumulatorów, do MOICH zastosowań. Nie potrzebuję nikomu udowadniać ile akumulatorek ma pojemności, ani wyliczać pojemność wg. norm. Aczkolwiek często normy, to mądra rzecz. Znacząco różne wyniki tych pomiarów (ładowarna/miernik US) skłoniły mnie aby przyjrzeć się bliżej zagadnieniu i postawiłem sobie zadanie, aby zestawić instalacje, które wykreśli charakterystyki rozładowania akumulatorów adekwatną do moich zastosowań.

    Moje zastosowania, to zasilanie elementów nagłośnienia przystosowanych fabrycznie do pracy z Baterii/Akumulatorów:
    1. Pobór prądu przez urządzenia bez przetwornic StepUP - moc urządzenia zależna od napięcia.
    2. Pobór prądu przez odbiornik, który ma wbudowaną przetwornicę i sobie podbija/obniża napięcie do stałej wartości.

    Pkt. 1 Na początku rozładowania jest większe napięcie i urządzenie pobiera większy prąd. W miarę rozładowywania akumulatora, maleje napięcie i tym samym maleje adekwatnie prąd. Podłączamy stałe rezystancyjne obciążenie bez regulacji prądu i zbieramy dane o napięciu w czasie.

    Pkt. 2 Urządzenie pobiera stałą moc z akumulatora, więc przy wyższym napięciu pobiera mniejszy prąd, a w miarę słabnięcia napięcia prąd jest coraz większy. (miernik Keweisi USB 3.0, ma pomiar Wh, obok Ah, co jest fajne). Tutaj zbieramy dane o napięciu w czasie oraz prąd rozłądowania - jak rośnie.

    -----------------------------------------------------------------
    Wymyśliłem, że zaprzęgnę do pracy Arduino Uno, albo Nucleo F-446RE, albo Arduino mini Pro (dwa pierwsze mam o trzecim myślę, do jeszcze innego zastosowania), które będzie mierzyło bezpośrednio na swoich portach Analogowych napięcie akumulatora (po dzielniku 2:1) oraz napięcie na boczniku, który wpinam w szereg (mam bocznik PCB 20A/200mV 1%). Co określony interwał czasowy (próbowałem wczoraj co 10s) uC odczytuję napięcia i zapisuję gdzieś.

    MAM PROBLEM Z ZAPISEM:
    Używałem, jako pierwszej dostępnej mi metody rejestracji odczytanych danych Terminala z Logowaniem. Niestety Realterm zachowuje się jak elektron: gdy na niego patrzę, to zapisuje dane. Gdy odejdę, to w tajemniczy sposób wchodzi w Pauzę i przerywa zapis. Próbowałem też Terminal v1.93e by Br@y, wygląda zachęcająco, ale też mi się dwa razy zwiesił.

    Wiem, że można zapisywać na kartę pamięci, można przez sieć (mam moduł WiFi), ale wszystko wymaga walki. Pewno ją przeprowadzę, ale poradźcie mi która walka będzie łatwiejsza czy Poprzez Wifi i zapisywanie na PCecie (ale wymagać to będzie dodatkowego agenta na Pececie), czy karta SD, nie taka straszna i dam radę?

    A może jest jakiś dobry program terminala, który działa niezawodnie?

    Co generalnie myślicie o takim pomyśle na analizowanie stanu akumulatorów?

    NUcelo F446 ma 512kB Flesh
    Arduino Mini Pro i Uno mają po 32kB Flesh

    Może jak się skompresuje, to może da się jakoś prosto zapisywać pomiary do jakiejś pamięci nieulotnej uC i dane dobie odczytać jakoś później, albo dopiero po podłączeniu terminala do uC?
    ---------------------------------------------------------------------
    Urządzenie/instalacja generalnie przyda mi się także do zobrazowania stanu działania ładowarki. Będę mógł sprawdzić jak działa ładowarka, jakim prądem/napięciem ładuje, kiedy kończy kiedy zaczyna etc...
    ---------------------------------------------------------------------
    Na razie bocznik i styki pomiarowe podłączyłem do ogniwa, które było w ładowarce (NC2100). Odczyty (gdy napięcia z bocznika oraz z Akumulatora) były średnio stabilne, to znaczy miały duże rozbieżności. Nie wiem z jaką częstotliwością próbkował Nucleo (do tego etapu jeszcze nie doszedłem), bo na nim robiłem odczyty, ale odczyt w pętli: pomiar + printf wyników z prędkością 115200, nie dawało żadnej sinusoidy (pętla np. dla 100 pomiarów bez żadnego "delay" w pętli. Wyglądało, to (w XLS) raczej jako przypadkowy szum o szpilkach +- 20..50% od wartości średniej. Uśrednienie 100 odczytów dawało stabilne powtarzalne co 10s odczyty.

    CZY "Szum", wynikał z zakłóceń i powinienem podpiąć jakiś kondensatorem przy nóżce Nucleo, czy tam jest rzeczywiści jakieś napięcie zmienne, a próbkowanie mam za słabe aby pokazać, że to sinusoida. A może ta ładowarka ładuje akumulatorami z pomocą impulsów, a np. ładowarka ma za słaby kondensator na wyjściu i dlatego takie śmieci?

    Mój system operacyjny na PC, to Windows 10 (mam też linuxa, ale nie mogę się przełączyć na linuxa na kilka godzin, bo na Windzie pracuję).
    Nie włączyłem w świadomy sposób oporników podciągających do nóżek, ale przy takim podłączenium chyba nie są one potrzebne.

    --------------------------
    TRZECI PROBLEM
    Podpinam tak:
    GND do styku bocznika z ładowarką,
    A0 - do styku bocznika z akumulatorem (gdy jest ładowany jest tutaj plus),
    A1 - do plusa akumulatora (tutaj zawsze jest plus) - jak napisałem wcześniej na uC puszczam po dzielniku z dwu rezystorów 10kom każdy.

    Gdy ładowarka jest w trybie ładowania na A0 i A1 mam napięcia dodatnie, czyli prawidłowe. Natmiast gdy ładowarka z automaty wchodzi w tryb rozładowania aku, to prąd płynie w drugą stronę i na boczniku mam napięcie odwrotnie spolaryzowane i bez obrócenie bocznikao 180stopnie na uC idą napięcie poniżej GND i pokazuje chyba śmieci. Jak obrócę bocznik (piny w uC), to zaczyna pokazywać prawidłowo.

    Jakieś pomysły jak w prosty sposób zmieniać polaryzację z automatu (zmiana polaryzacji sterowana prze uC).

    Proszę także o ogólne uwagi, czy nie wyważam otwartych drzwi.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Optex
  • Helpful post
    #2
    Anonymous
    Anonymous  
  • Optex
  • #3
    marcingebus
    Level 10  
    Piotrus_999 wrote:
    Jak chcesz naprawdę je zbadać do pożycz od kogoś ładowarkę pulsar (Polska produkcja wg mnie najlepszy tego typu produkt na świecie, generalnie klasa sama w sobie) i zbadaj dokładnie pod założone przez siebie parametry.

    Ładowarka rzeczywiście nieczego sobie. Ale rejestracja prądów i napięcia na akumulatorze przyda mi się jeszcze do dwu rzeczy:
    - sprawdzenie czy naprawdę odbiorniki mają taki charakter rozładowania gdy mój przyrząd do pomiarów do niego podłączę,
    - mogę sprawdzić działanie ładowarki.
    Zakupiłem 6 używanych , częściowo uszkodzonych ładowarek pod aku 18650 po 7zł/szt. Potraktowałem to jako zakup koszyków z zasilaczami (może częściowo sprawnymi - jeszcze nie testowane), do których wpakuję w skrajnym przypadku TP4056, które kosztują groszę. No ale może by mi się udało uruchomić te ładowarki na elektronice która w nich jest, i fajnie byłoby co jakiś czas sprawdzić czy rzeczywiście ładuje jak powinna i na jakich napięciach kończy ładowanie.

    To jak najprościej rejestrować dane z portów Analogowych?
    Dlaczego na aku jest szum?
    I inne pytania zawarte wyżej.. :-)
  • Helpful post
    #4
    Mad Bekon
    Level 23  
    Jeśli masz problem z polaryzacją bocznika, może powinieneś uznać za punkt odniesienia, połowę twojego napięcia referencyjnego.
    I tak np, jeśli twoje napięcie referencyjne to 5V, generujesz sobie stabilne 2,5V i pomiar wpinasz między to 2,5V a wejscie analogowe.
    Co ponizej ma minus, co powyzej, plus. To jedna z opcji.
  • #5
    rb401
    Level 38  
    marcingebus wrote:
    To jak najprościej rejestrować dane z portów Analogowych?


    Do tego co potrzebujesz najlepszy byłby układ INA219 (lub podobne np. INA226).
    Bez kłopotu zmierzy Ci dwukierunkowo prąd i napięcie o wiele dokładniej niż przez arduinowe ADC a przede wszystkim bez problemów, dzielników itp. . Jedynie co, to dobierasz bocznik, który jest "pływający" na dodatniej szynie. Tak że układowo nic nie komplikuje, z masami itp. .
    Są nawet gotowe moduliki do Arduino plus biblioteki do Arduino i Nucleo (mbed) oraz liczne opisy stosowania w internecie.
    Co do rejestracji to chyba karta SD jest wygodnym rozwiązaniem, szczególnie dla Nucleo (bo nie trzeba przesuwać napięć).
  • #6
    marcingebus
    Level 10  
    Mad Bekon wrote:
    Jeśli masz problem z polaryzacją bocznika, może powinieneś uznać za punkt odniesienia, połowę twojego napięcia referencyjnego.

    rb401 wrote:
    Do tego co potrzebujesz najlepszy byłby układ INA219 (lub podobne np. INA226).

    Zamówiłem sobie INA226, do pomiaru akumulatorów będzie dobry, ale gdybym chciał mierzyć coś szybszego, to obawiam się, że F446RE ma szybszy przetwornik niż INA226. Dlatego walczę, aby odczytać to bez INA226.
    1. Podniosłem masę do 2.5V na dzielniku 2x1k.
    2. Napięcie z 18650 odczytuję po dzielniku 2:1 na 2x10k, aby się zmieścić w napięciu zasilania.
    3. Zasilane z USB z kompa, ładowarka to LC2100.
    4. Bocznik ma opis R020, więc zakładam, że to 2mOm.

    Napięcie zasilania mój miernik pokazuje jako 4.69V
    Na boczniku pokazuje jakieś 4.8mV (miernik marketowy za 18zł, więc może jest napięcie 1mV), dla problemu to nie istotne.
    Na całym aku jest napięcie 3.95V

    Pomiary gdy odepnę piny pomiarowe od Nucleo (A0 i A1) - oba odpięte to pokazują względem masy Arduino odpowiednio:
    A0: 2.35V
    A1: 4.30V

    Więc mniej więcej, to co powinny, ale jak podepnę do arduino, to na A1 pojawia się:
    3.65V

    Jakieś rezysotry PullUP zmieniają mi pomiar.
    Chciałem w miarę dużymi rezystancjami robić dzielniki, aby nie wpływały na rozpływ prądu na ładowanym akumulatorze.

    Co polecacie:
    1. Dać inne dzielniki (na mniejszych rezystorach, aby działanie tych PullUpów mieściło się w granicy błędu? - Jakie?
    2. Wyłączyć PullUPy - Jak?

    P.S.
    Rezystory dałem przypadkowe, bo takie miałem pod ręką.

    Jeszcze jedno:
    --------------------------------------------
    Code: c
    Log in, to see the code

    --------------------------------------------
    Odczyty A0 są na poziomie 0.7109
    A1 = 1.000

    Czyżbym miał na wejściu tylko pomiar 0V....3.3V?


    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino
  • Helpful post
    #7
    rb401
    Level 38  
    marcingebus wrote:
    Czyżbym miał na wejściu tylko pomiar 0V....3.3V?


    Nucleo to nie Arduino i faktycznie pełny zakres ADC to 0-3,3V.
    Dlatego też dziwnie wygląda Twoja sztuczna masa na 2,5V.

    A nawet jeśli dasz tam 3,3V/2 (ze względu na dwukierunkowy pomiar prądu), to pomiar napięcia ogniwa musisz skorygować, najlepiej łącząc tą masę (układu ogniwa) do A2 i mierząc to napięcie każdorazowo razem z A0 i A1.
    To Ci da możliwość w pełni dokładnego (pomijając dokładność ADC w Nucleo) wyznaczenia napięcia ogniwa (bo dodajesz tu rzeczywiste odczytane napięcie do napięcia z dzielnika a nawet opcjonalnie odejmujesz spadek na boczniku) oraz o wiele większą dokładność pomiaru spadku napięcia na boczniku, szczególnie małych napięć (bo masz dokładnie zmierzone dwa jego końce).

    marcingebus wrote:
    Dlatego walczę, aby odczytać to bez INA226.


    INA daje jednak ogromną wygodę w stosowaniu i dokładność lepszą niż korzystanie z ADC Nucleo. Tak że pomimo tego że można oczywiście też na piechotę zrobić na gołym Nucleo to i tak, moim zdaniem, warto wejść w tą kość.
  • #8
    marcingebus
    Level 10  
    rb401 wrote:
    A nawet jeśli dasz tam 3,3V/2

    Dziękuję za powyższe uwagi. Słuszne i zostaną zastosowane. Ale nie rozwiązuje, to mojego podstawowego problemu, że rezystory podciągające (znajdujące się na pokładzie Nucleo, albo w samym STM32, wprowadzają zaburzenie do dzielnika. Muszę je uwzględnić w podziałce dzielnika, albo wyłączyć. Głowa mnie boli od studiowania GPIO_init..... może ktoś ma jakiś przykład? Jak powiązać A1 z numerem GPIO? Pytań masę..... Please jakiś prosty przykład.
  • #9
    rb401
    Level 38  
    marcingebus wrote:
    Muszę je uwzględnić w podziałce dzielnika, albo wyłączyć. Głowa mnie boli od studiowania GPIO_init..... może ktoś ma jakiś przykład?


    Spróbuj może w mbed online, bo to trywialne będzie i będziesz miał sensowny rezultat najszybciej.
    Również dobrze jest skorzystać z CubeMX bo jak tam ustawisz że chcesz ADC na jakimś pinie, to całe ustawienie Cube zrobi kompletnie i poprawnie.
    Tyle że chyba Ty jesteś fanem SPL a nie HAL.
  • #10
    Anonymous
    Anonymous  
  • #11
    marcingebus
    Level 10  
    Piszecie do mnie w obcym języku, ale trza go poznać. :-) Dotychczasowe próby robiłem w Mbed.
  • #12
    rb401
    Level 38  
    marcingebus wrote:
    Piszecie do mnie w obcym języku, ale trza go poznać. :-)


    Wybacz bo mi się coś pokręciło.
    Tu wyżej dałeś fragment programu w mbed (na pierwszy rzut oka pomyliło mi się z Arduino). A później wymieniasz nazwę funcji z SPL. To mnie nieco zdezorientowało.

    Nie wiem co masz na myśli z tym włączonym pullupem przy ADC. Czy to dotyczy tego programiku pisanego dla mbed?
    Jeśli tak, to mogę sprawdzić, bo mam tu pod ręką tą płytkę. W mbed niestety różne rzeczy są możliwe bo wciąż intensywnie "ulepszają" i nie raz nie dwa zdarza się że coś zepsują co wcześniej działało.
  • #13
    marcingebus
    Level 10  
    rb401 wrote:
    Nie wiem co masz na myśli z tym włączonym pullupem przy ADC. Czy to dotyczy tego programiku pisanego dla mbed?


    Chyba piszę głupoty z tym PullUp, bo PullUp dotyczy chyba tylko wejść cyfrowych, a nie analgowych.

    Problemem było to, że A1 pokazywał zawsze 1.000. Wnioskowałem, że coś skopane, zacząłem się doszukiwać, że jakieś oporniki włączane w STM32 zmieniaja parametry dzielników. W tym przekonaniu umocnił mnie fakt, że jak odpiąłem pin pomiarowy od A1 z Nucleo, to na pinie było napięcie 4.3V, a jak go zapiąłem do Nucleo to spadało do 3.6V. Sądziłem, że spadek napięcia, to wynik rezystorów. Ubzdurałem sobie, że to rezystory PullUp/Down.

    Teraz sądzę, że przyczyną jest t iż podaję za wysokie napięcie na wejście 4.3 (a maks to 3.3V) a na wejściu jest zabezpieczenie w postaci diody (może?), które zwiera sygnał do zasilania i napięcie nam spada. Poprawie jutro dzielnik, pomiaru napięcia całości, aby nie przekraczało 3.3V, przepnę, aby wirtualna masa była na poziomie niższym niż obecnie (mogę napięciem na dzielni, albo rezystorami, coś sobie dobiorę) i jest nadzieja na życie na Marsie.

    Jutro się okaże czy sprawę rozkminiłem. Jak to się jutro uda, to zostaje zapis na kartę, albo przez Wifi gdzieś w sieć i mamy charakterystyki. :-)
  • Helpful post
    #14
    rb401
    Level 38  
    marcingebus wrote:
    Chyba piszę głupoty z tym PullUp, bo PullUp dotyczy chyba tylko wejść cyfrowych, a nie analgowych.


    Aaaa... no to ok. Fałszywy alarm.
    Bo już akurat zrobiłem test na tym Nucleo co Ty i zmierzyłem prądy na wejściach i żadnego pullupa nie wyczułem.

    marcingebus wrote:
    Problemem było to, że A1 pokazywał zawsze 1.000


    Przyczyna jest prosta. funkcja AnalogIn.read() zwraca liczbę od 0,0 do 1,0, gdzie 1,0 to pełny zakres przetwornika, przy konkretnym napięciu odniesienia.
    Akurat w Nucleo, wartość 1,0 to w rzeczywistości napięcie 3,3V a dokładniej mówiąc, napięcie jego zasilania (minus jeden bit ale to szczegół).
    Jeśli dałeś 2,5V z dzielnika "sztucznej masy" plus połowę napięcia ogniwa, to już było grubo powyżej 3,3V i stąd taki wynik. Czyli używając funkcji read() w mbed lub wyników z jej użyciem, chcąc mieć napięcie w woltach musisz wynik pomnożyć razy 3,3.

    A co do układu, który narysowałeś.
    Jeśli dodatkowy dzielnik zasilisz z 3,3V a nie z 5V, to na przykład w kanale od pomiaru prądu(A0), przy zerowym prądzie ogniwa dostaniesz wartość read() około 0,5 odpowiadającą 1,65V (zależną od precyzji tych dwóch oporników). Z tego też wynika zakres napięć obsługiwany przez ADC na boczniku pomiarowym, wynoszący +/- 1,65V. Czyli powinno wystarczyć bez problemu.

    Za to w torze pomiaru napięcia masz stałe napięcie 1,65V z dzielnika pomocniczego, plus połowę napięcia ogniwa (dzielnik 10k/10k). Jak nietrudno wyliczyć zakresu ADC przy tak założonym dzielniku, starczy tylko do napięcia ogniwa 3,3V a wyżej ten kanał (funkcja read() ) pokaże Ci permanentne 1,0.

    Czyli moja sugestia, dać na kanale A1 dzielnik np. 1:3 co da ci możliwość pomiaru napięcia ogniwa do ok. 4,95V co chyba jest w sam raz.
    A druga sugestia to co już pisałem, użycie trzeciego kanału ADC czyli np. A2 do pomiaru tego pomocniczego napięcia, tej sztucznej masy. Co prawda teoretycznie można by użyć stałej w programie ale w praktyce ten dodatkowy pomiar da większą dokładność (szczególnie prądu) i niezależność od różnych czynników.
    Tak że w rezultacie w programie wystąpią tylko dwie stałe zależne od Twojego układu (doboru elementów), czyli podział dzielnika od napięcia ogniwa i wartość bocznika pomiaru prądu.

    Tak dla porządku to jest jeszcze kwestia tej stałej 3,3 (czyli stosunku rezultatu funkcji read() do rzeczywistego napięcia w woltach na pinie), która tak na prawdę ma pewien rozrzut między egzemplarzami nucleo bo to napięcie stabilizatora na płytce zasilającego mikrokontroler. Ale to raczej już niuans.
  • #15
    marcingebus
    Level 10  
    Podłączyłem tak:
    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino
    Zamiast ładowarki jest latarka, która pobiera prąd:
    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino
    Obsługuje to program jak niżej:
    ----------------------------------------------------
    Code: c
    Log in, to see the code

    ----------------------------------------------------------------------------------
    Bez obciążenia (latarka wyłączona), program wyrzuca takie coś:
    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino

    A po włączeniu latarki takie coś:
    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino

    I teraz kluczowe pytania: dlaczego odczyty nie są stabilne tylko pływają???? Może jakoś zwiększyć częstotliwość próbkowania, taktowania może całego układu zmienić na większą????
    Latarka na amperomierzu pokazuje poboru około 1.4A.

    Mogę liczyć z tych wartości średnią, ale jakieś w mirę powtarzalne wyniki są dopiero gdy będzie to jakieś 1000 próbek. Nawet przy 100 próbkach jest rozrzut. Czy ten przetwornik A/C jest taki kiepski? Jakieś śmieci mi się indukują? Może zmniejszyć rezystację dzielnika, aby popłynęły większe prądy, to będzie stabilniej????

    -------------------------
    Jeszcze errata na boczniku, teraz się przyjrzałem, że tam są dwa oporniki równoległe, więc rezystancja bocznika, to 10mOM a nie jak na schemacie 20mOM. Program zatem źle pokazuje prąd, bo wartości powinny być 2x większe. Może bocznik zmienić na taki o większej rezystancji. Ale znowu nie chciałbym aby za bardzo zakłócał pracę ładowarki i rozładowarki (graniczne wartości wyłączenia ładowania i rozładowania).
  • #17
    Anonymous
    Anonymous  
  • #18
    marcingebus
    Level 10  
    Mad Bekon wrote:
    A podglądałeś przebieg prądu na oscyloskopie?
    Miernik którym go mierzysz, zapewne wylicza wartość średnią, czy Twój układ to robi?


    Sprawa się rypła. Odpaliłem stary oscyloskop gdy prąd pobiera latarka i wyszło szydło z worka. Na ładowarce sprawa ma się podobnie. Górna kreska, to z innego kanału. Taka rozmazana piła, to własnie napięcie mierzone na boczniku, czyli prąd.

    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino

    Wydaje mi się zatem, że wszystko się dobrze mierzy i trzeba brać wartość średnią np. z tysiąca próbek, bo wartości są wówczas w miarę powtarzalne.

    Dla potomnych znalazłem opis na przykładzie innego Nucleo, jeszcze nie sprawdzałem wszystkiego co tam pisze, ale "na sucho" wygląda ciekawie.
    http://forbot.pl/blog/artykuly/programowanie/kurs-stm32-6-pomiar-napiecia-przetwornik-adc-id8462
  • Helpful post
    #19
    rb401
    Level 38  
    marcingebus wrote:
    Wydaje mi się zatem, że wszystko się dobrze mierzy i trzeba brać wartość średnią np. z tysiąca próbek, bo wartości są wówczas w miarę powtarzalne.


    Przyjrzałem się bliżej Twojej koncepcji a nawet zrobiłem praktyczne testy na Twoim programie i takim samym Nucleo. Powiem szczerze, jest fatalnie.
    I to nawet nie chodzi o te fluktuacje odczytów, bo jest w tej sprawie możliwych jeszcze kilka ruchów od strony programowej jak i układowej.
    Ale co by nie robić to i tak wydaje mi się że istnieje duży problem w głównym założeniu.
    Chodzi o to że założyłeś z jednej strony mały spadek napięcia na boczniku (10mV/A) a z drugiej strony idziesz w kierunku prostego rozwiązania bez dodatkowych elementów aktywnych.
    I efektem jest to że rozdzielczość zakresu prądowego to ledwo 12,5 wartości z przetwornika na amper.
    Przy tych fluktuacjach to powoduje że dane z jednokrotnego pomiaru są kompletnie do niczego. Zresztą u Ciebie tez widac jak w wersji bez obciążenia też "prądy" latają tam i z powrotem.
    Ale nawet uśrednianie (choć zaczyna coś być widać) daje wartości bardzo zgrubne, pływające o ok. 10% od wartości oczekiwanej. Próbowałem też uśredniać z 1000 wartości, i jest (może) lepiej, ale też jest bardzo kiepsko bo też mocno pływa.
    Tu przykład:

    Charakterystka rozładowania oraz ładowania akumulatorów 18650 z pomocą Arduino

    kolumna iavg0 to średnia ze 100 a iavg1 z 1000 próbek, przy rzeczywistym napięciu bocznika 6,5mV. Niby w tym fragmencie ta z 1000 wygląda lepsza bo bliższa prawdy ale za chwilę potrafi odjechać w górę czy w dół gdzieś o 0.1A i nie wiadomo dlaczego.


    Zero prądu (czyli zwarte ze sobą A0 i A1) ma u mnie wyraźny pływający offset sięgający chwilami 100mA raczej częściej dodatni (co by świadczyło o jakimś błędzie systematycznym), przy obydwu wielkościach bufora uśrednienia.
    Pomimo tego że zrobiłem układ próbny w czystszej formie i dodałem filtrację i polepszyłem nieco programową obsługę ADC w mbed, szczerze mówiąc, czarno widzę pomiar prądu w ten sposób przy tych założeniach.
    Dlatego myślę że bez co najmniej wzmocnienia napięcia bocznika jakimś wzmacniaczem operacyjnym, ten układ, a konkretnie pomiar prądu ma raczej tylko wartość wskaźnika, czy płynie w tą czy w tamtą stronę.
  • #20
    marcingebus
    Level 10  
    rb401 wrote:
    Dlatego myślę że bez co najmniej wzmocnienia napięcia bocznika jakimś wzmacniaczem operacyjnym, ten układ, a konkretnie pomiar prądu ma raczej tylko wartość wskaźnika, czy płynie w tą czy w tamtą stronę.


    Niestety muszę przyznać rację. Wczoraj widząc problem, z pomiarem tak małego prądu (napięcia na boczniku), wylutowałem jeden z rezystorów bocznika, aby podnieść na nim napięcie. Ale po bliższych przyjrzeniu się słabym Multimetrem (marketowym), zauważyłem także, że spadek na przewodach do bocznika (10+10cm) jest tego samego rzędu, co na samym boczniku już odchudzonym. A przewody są chyba 0.75mm2, albo 0.5 na pewno. Zastanowię się wieczorem nad wzmacniaczem operacyjny, choć nie chciałem się bawić w dodatkowe układy, które mogą być nieliniowe, wymagać dodatkowych elementów pasywnych, zasilania itd.... Po południu sobie odbiorę oporniki na bocznik 0.1om 4 szt i przemyślę, czy zwiększyć napięcie na boczniku i jak będą wychodzić pomiary.

    Głównym celem jest charakterystyka rozładowania, czyli z grubsza pomiar napięcia, prąd przy okazji.

    Dziękuję RB401.