Jeszcze inny tester pojemności baterii: 6 kroków
Jeszcze inny tester pojemności baterii: 6 kroków
Anonim
Jeszcze inny tester pojemności baterii
Jeszcze inny tester pojemności baterii
Jeszcze inny tester pojemności baterii
Jeszcze inny tester pojemności baterii

Dlaczego jeszcze jeden tester pojemności?

Przeczytałem wiele różnych instrukcji budowania testerów, ale żadna z nich nie pasuje do moich potrzeb. Chciałem móc testować także więcej niż pojedyncze ogniwa NiCd/NiMH czy Lion. Chciałem móc przetestować akumulator do elektronarzędzi bez wcześniejszego zabierania go na części. Postanowiłem więc przyjrzeć się bliżej tej sprawie i zaprojektować własną. Jedno prowadzi do drugiego i w końcu postanowiłem sam napisać instrukcję. Postanowiłem również nie wdawać się we wszystkie szczegóły dotyczące tego, jak faktycznie zbudować tester, ponieważ każdy może zdecydować o pewnych wyborach, takich jak rozmiar rezystora, czy płytka drukowana jest potrzebna lub czy wystarczy Veroboard, a także jest mnóstwo instrukcji, jak to zrobić zainstaluj orła lub jak zrobić płytkę drukowaną. Innymi słowy skoncentruję się na schematach i kodzie oraz jak skalibrować tester.

Krok 1: Historia - wersja 1

Historia - wersja 1
Historia - wersja 1

Powyżej jest pierwsza wersja z dodaną obsługą wejścia powyżej 10V (R12&R17&Q11&Q12).

Pierwsza wersja została mniej więcej zaczerpnięta z instrukcji deba168 (niestety nie mogę znaleźć jego instrukcji, aby podać link). Wprowadzono tylko kilka drobnych zmian. W tej wersji miałem jeden rezystor obciążenia 10 omów sterowany przez mosfet. Przyniosło to jednak pewne problemy. Podczas testowania jednego ogniwa NiCd lub NiMH potrzebny czas można było łatwo zmierzyć w godzinach, jeśli nie dniach. Bateria 1500mAh zajęła ponad 12 godzin (prąd wynosił tylko 120mA). Z drugiej strony, pierwsza wersja mogła testować tylko akumulatory poniżej 10V. Całkowicie naładowany akumulator 9,6 V może w rzeczywistości mieć napięcie do 11,2 V, czego nie można było przetestować ze względu na limit 10 V. Trzeba było coś zrobić. Najpierw dodałem tylko kilka mosfetów i rezystorów, aby dzielniki napięcia mogły pozwolić na więcej niż 10V. Ale to z drugiej strony wywołało kolejny problem. W pełni naładowany akumulator 14,4 V może mieć nawet 16,8 V, co przy rezystorze 10 omów oznacza prąd 1,68 A i oczywiście rozpraszanie mocy z rezystora obciążenia prawie 30 W. Tak więc przy niskim napięciu zbyt długi czas testu, a przy wysokim napięciu zbyt wysoki prąd. Oczywiście nie było to odpowiednie rozwiązanie i potrzebny był dalszy rozwój.

Krok 2: Wersja 2

Zależało mi na rozwiązaniu, w którym prąd utrzymywałby się w pewnych granicach niezależnie od napięcia baterii. Jednym z rozwiązań byłoby użycie PWM i tylko jednego rezystora, ale wolałem mieć rozwiązanie bez prądu pulsującego lub mieć potrzebę rozpraszania ciepła mosfet. W ten sposób stworzyłem rozwiązanie z 10 gniazdami napięciowymi, każdy o szerokości 2V, używając 10 rezystorów 3.3ohm i mosfet dla każdego rezystora.

Krok 3: Tak to się skończyło

Tak to się skończyło
Tak to się skończyło

Komentarze na temat obwodu Można by argumentować, że spadek napięcia na mosfecie jest znikomy, ponieważ rezystancja mosfeta jest tak niska, ale wybór mosfetu pozostawiłem czytelnikowi i dlatego rezystancja może przekroczyć nawet 1 om tam, gdzie zaczyna materiał. W wersji pierwszej wybranie właściwego mosfeta wyeliminowałoby potrzebę pomiaru dolnego punktu, ale w wersji 2 zdecydowałem się mierzyć napięcie tylko na jednym rezystorze, co sprawia, że ważne jest, aby faktycznie mieć dwa punkty pomiarowe. A powodem wyboru była prostota w okablowaniu Veroboard. Dodaje to pewien błąd dokładności, ponieważ zmierzone napięcie na jednym rezystorze jest znacznie mniejsze niż zmierzone na wszystkich rezystorach. Przy wyborze komponentów zdecydowałem się wykorzystać to, co już miałem pod ręką lub to, co mogłem łatwo uzyskać. Doprowadziło to do następującego BOM:

  • Arduino Pro Mini 5V !WAŻNE! Użyłem wersji 5V i wszystko na niej bazuje
  • Wyświetlacz OLED 128x64 I2C
  • Rezystory 10 x 5W 3,3 Ohm
  • 3 x 2n7000 mosfetów
  • 10 x mosfety IRFZ34N
  • Rezystory 6 x 10 kOhm
  • Rezystory 2 x 5 kOhm
  • Kondensator 16V 680uF
  • 1 stary wentylator procesora

Nie dodałem następujących na schematach

  • rezystory pullup na liniach I2C, które zauważyłem ustabilizowały wyświetlacz
  • linie energetyczne
  • kondensator w linii 5V, który również stabilizował wyświetlacz

Podczas testów zauważyłem, że rezystory obciążające nagrzewają się, zwłaszcza jeśli wszystkie są używane. Temperatura wzrosła do ponad 100 stopni Celsjusza (czyli ponad 212 stopni Fahrenheita) i jeśli cały system ma być zamknięty w skrzynce, należy zapewnić jakieś chłodzenie. Rezystory, których użyłem to 3,3 omów / 5 W, a maksymalny prąd powinien występować przy około 2 V na rezystor, co daje 2 V / 3,3 = 0,61 A, co daje 1,21 W. Skończyło się na dodaniu do pudełka prostego wentylatora. Głównie dlatego, że zdarzyło mi się mieć w pobliżu jakiś stary wentylator procesora.

Schematyczna funkcjonalność

Jest to dość proste i oczywiste. Testowany akumulator jest podłączony do szeregu rezystorów i masy. Punktami pomiaru napięcia są złącze akumulatora i pierwszy rezystor. Dzielniki napięcia służą następnie do obniżenia napięcia do poziomu, który lepiej odpowiada Arduino. Jedno wyjście cyfrowe służy do wyboru zakresu dzielników 10V lub 20V. Każdy rezystor w obciążeniu może być indywidualnie uziemiony za pomocą mosfetów, które są sterowane bezpośrednio przez Arduino. I wreszcie wyświetlacz jest podłączony do pinów Arduino I2C. Niewiele do powiedzenia o schemacie J

Krok 4: Kodeks

Kod
Kod

Powyżej można zobaczyć przybliżoną funkcjonalność kodu. Przyjrzyjmy się zatem bliżej kodowi (w załączeniu pliki arduino ino). Istnieje szereg funkcji, a następnie główna pętla.

Główna pętla

Gdy pomiar jest gotowy, wyświetlane są wyniki i na tym kończy się wykonanie. Jeżeli pomiar nie został jeszcze wykonany, najpierw sprawdzany jest jaki typ akumulatora jest wybrany, a następnie napięcie na wejściu. Jeśli napięcie przekracza 0,1V, musi być podłączony przynajmniej jakiś rodzaj akumulatora. W takim przypadku wywoływany jest podprogram, który próbuje określić, ile ogniw znajduje się w baterii, aby zdecydować, jak przeprowadzić test. Liczba komórek to mniej więcej informacja, którą można by lepiej wykorzystać, ale w tej wersji jest ona raportowana tylko przez interfejs szeregowy. Jeśli wszystko jest w porządku, rozpoczyna się proces rozładowania i przy każdej rundzie głównej pętli obliczana jest pojemność akumulatora. Na końcu głównej pętli wyświetlacz wypełniany jest znanymi wartościami.

Procedura pokazywania wyników

Funkcja showResults po prostu ustawia linie, które mają być pokazane na wyświetlaczu, a także ciąg znaków, który ma być wysłany do interfejsu szeregowego.

Procedura pomiaru napięć

Na początku funkcji mierzone jest napięcie Vcc Arduino. Niezbędna jest możliwość obliczenia napięć mierzonych za pomocą wejść analogowych. Następnie napięcie baterii jest mierzone za pomocą zakresu 20 V, aby móc zdecydować, którego zakresu użyć. Następnie obliczane jest zarówno napięcie akumulatora, jak i napięcie rezystora. Pomiary napięcia baterii wykorzystują klasę DividerInput, która ma metody odczytu i napięcia, aby uzyskać surowy odczyt lub obliczone napięcie danego wejścia analogowego.

Procedura wyboru używanych wartości

W funkcji selectUsedValues odgadywana jest liczba ogniw, a górna i dolna granica baterii jest ustawiana do użycia w procedurze rozładowania. Również pomiar jest oznaczony jako rozpoczęty. Granice dla tej procedury są ustawione na początku jako zmienne globalne. Chociaż mogą być stałe i mogą być również zdefiniowane w procedurze, ponieważ nie są używane globalnie. Ale hej, zawsze można coś poprawić:)

Procedura obliczania pojemności baterii

Funkcja rozładowania zajmuje się faktycznym zliczaniem pojemności akumulatora. Jako parametry pobiera dolne i górne granice napięć testowanego akumulatora. Wysoka wartość nie jest używana w tej wersji, ale niska wartość jest używana do decydowania, kiedy zatrzymać testowanie. Na początku funkcji ilość rezystorów do użycia określa się za pomocą utworzonej w tym celu funkcji. Funkcja zwraca numer rezystora i jednocześnie uruchamia rozładowanie i zeruje licznik. Następnie napięcia są mierzone i wykorzystywane wraz ze znaną wartością rezystora do obliczenia prądu. Teraz, gdy znamy napięcie i prąd oraz czas jaki minął od ostatniego pomiaru, możemy obliczyć pojemność. Pod koniec procesu rozładowywania napięcie akumulatora jest porównywane z dolnym limitem i jeśli spadnie poniżej limitu faza rozładowania zatrzymuje się, mosfety są zamykane, a pomiar jest oznaczany jako gotowy.

Procedura znajdowania liczby rezystorów do użycia

W funkcji selectNumOfResistors dokonuje się prostego porównania napięcia z zadanymi wartościami i na tej podstawie decyduje o liczbie użytych rezystorów. Właściwy mosfet jest otwierany, aby pominąć niektóre rezystory. Szczeliny napięciowe są dobrane tak, aby maksymalny prąd w dowolnym momencie podczas rozładowywania pozostawał nieco powyżej 600mA (2V/3.3Ohm=606mA). Funkcja zwraca liczbę użytych rezystorów. Ponieważ wentylator jest napędzany z tej samej linii co pierwszy mosfet, musi być zawsze otwierany podczas rozładowania.

Krok 5: Kalibracja miernika

Kalibracja miernika
Kalibracja miernika

Aby skalibrować miernik stworzyłem kolejną aplikację (w załączeniu). Używa tego samego sprzętu. Na początku wszystkie wartości dzielnika korekcji są ustawione na 1000.

const int divCorrectionB10V = 1000; // mnożnik korekcji dzielnika w zakresie 10V const int divCorrectionR10V = 1000; // mnożnik korekcji dzielnika w zakresie 10V const int divCorrectionB20V = 1000; // mnożnik korekcji dzielnika w zakresie 20V const int divCorrectionR20V = 1000; // mnożnik korekcji dzielnika w zakresie 20V

w funkcji readVcc() wynikowe napięcie Vcc zależy od ustawienia wartości w ostatnim wierszu funkcji przed powrotem. Zwykle można znaleźć w Internecie wartość 1126400L do wykorzystania w obliczeniach. Zauważyłem, że wynik nie był prawidłowy.

Proces kalibracji:

  1. Załaduj aplikację pomiarową do Arduino.
  2. Możesz zobaczyć w Arduino (i na wyjściu szeregowym i czy wentylator się obraca), czy obciążenie jest włączone. Jeśli tak, przekręć przełącznik wyboru typu baterii.
  3. Dostosuj wartość w readuVCC(), aby uzyskać poprawny wynik. Weź wartość, jaką daje funkcja (która jest w miliwoltach) i podziel przez nią długą wartość. Otrzymasz surową wartość referencji wewnętrznej. Teraz zmierz za pomocą multimetru rzeczywiste napięcie zasilania w miliwoltach i pomnóż je przez poprzednio obliczoną wartość, a otrzymasz nową skorygowaną długą wartość. W moim przypadku funkcja zwróciła 5288mV, gdy rzeczywisty Vcc wynosił 5,14V. Obliczam 1126400/5288*5140=1094874, które dostroiłem na próbę. Umieść nową wartość w kodzie i prześlij ją ponownie do Arduino.
  4. Regulacja wartości korekcji dzielnika rezystora wejścia analogowego odbywa się za pomocą regulowanego źródła zasilania, które jest używane do zasilania wejścia miernika. Najprościej jest użyć napięć od 1V do 20V z krokiem 1V i zapisać wyniki w arkuszu kalkulacyjnym. W arkuszu kalkulacyjnym brana jest średnia. Skorygowane wartości są obliczane według następującego wzoru: „wartość_surowa*zakres*Vcc/Vin”, gdzie wartość_surowa jest wartością w 10VdivB, 10VdivR, 20VdivB lub 20VdivR w zależności od tego, która korekcja ma być obliczona.

Zobacz arkusz kalkulacyjny, jak to dla mnie wyglądało. Średnie są obliczane tylko z wartości, które mają znajdować się w zakresie, a następnie te wartości są ustawiane w aktualnej aplikacji miernika.

Lubię to

const int divCorrectionB10V = 998; // korekcja dzielnika dzielnik w zakresie 10V const int divCorrectionR10V = 1022; // korekcja dzielnika dzielnik w zakresie 10V const int divCorrectionB20V = 1044; // korekcja dzielnika dzielnik w zakresie 20V const int divCorrectionR20V = 1045; // dzielnik korekcji dzielnika w zakresie 20V

Regulację wartości rezystora można wykonać poprzez podanie napięcia na wejście (tj. 2V), przełączenie przełącznika typu bat (aby włączyć obciążenie) i pomiar prądu wchodzącego i napięcia na pierwszym rezystorze oraz podzielenie napięcia z prądem. U mnie 2V dało 607mA co daje 2/0.607=3,2948 ohm co zaokrągliłem do 3,295 ohm. Więc teraz kalibracja jest zakończona.

Krok 6: Ostatnia UWAGA

Tutaj jedna ważna uwaga. Konieczne jest, aby wszystkie połączenia od akumulatora do rezystorów były w doskonałym stanie. Miałem jedno złe połączenie i zastanawiałem się, dlaczego uzyskałem 0,3 V mniej wolta w siatce rezystora niż na akumulatorze. Oznaczało to, że proces pomiaru zakończył się niemal natychmiast z ogniwami NiCd 1,2V, ponieważ dolna granica 0,95V została szybko osiągnięta.

Zalecana: