- Dlaczego potrzebujemy testera pojemności baterii?
- Wymagane składniki
- Schemat obwodu testera pojemności baterii Arduino
- Program Arduino do pomiaru pojemności baterii
- Udoskonalenia dokładności
- Budowanie i testowanie obwodu
Wraz z pojawieniem się technologii nasze elektroniczne gadżety i urządzenia stają się coraz mniejsze i mają bardziej funkcjonalne i złożone aplikacje. Wraz ze wzrostem złożoności wzrosło również zapotrzebowanie na moc obwodu, a dążąc do tego, aby urządzenie było jak najmniejsze i jak najbardziej przenośne, potrzebujemy baterii, która może zapewnić wysoki prąd przez długi czas, a jednocześnie ważą znacznie mniej, aby urządzenie pozostało przenośne. Jeśli chcesz dowiedzieć się więcej o bateriach, możesz również przeczytać ten artykuł dotyczący podstawowych terminologii związanych z bateriami.
Spośród wielu różnych typów dostępnych akumulatorów, akumulatory kwasowo-ołowiowe, akumulatory Ni-Cd i akumulatory Ni-MH nie są odpowiednie, ponieważ albo ważą więcej, albo nie mogą zapewnić prądu wymaganego do naszego zastosowania, pozostawia nam to akumulatory litowo-jonowe który może zapewnić duży prąd przy zachowaniu niskiej wagi i niewielkich rozmiarów. Wcześniej zbudowaliśmy również ładowarkę 18650 i moduł wspomagający oraz system monitorowania baterii oparty na IoT, możesz je sprawdzić, jeśli jesteś zainteresowany.
Dlaczego potrzebujemy testera pojemności baterii?
Na rynku jest wielu sprzedawców baterii, którzy sprzedają tanie, knock off wersje baterii litowo-jonowych, twierdząc, że mają dziwaczne specyfikacje z bardzo niską ceną, co jest zbyt piękne, aby mogło być prawdziwe. Kupując te ogniwa albo w ogóle nie działają, albo jeśli działają, to pojemność ładowania lub przepływ prądu są tak niskie, że nie mogą w ogóle współpracować z aplikacją. Jak więc przetestować baterię litową, jeśli ogniwo nie jest jednym z tych tanich podróbek? Jedną z metod jest pomiar napięcia otwartego obwodu bez obciążenia i obciążenia, ale nie jest to wcale wiarygodne.
Więc mamy zamiar zbudować 18650 tester pojemność baterii dla Li-Ion 18650 komórki, która będzie odprowadzać całkowicie naładowanego 18650 komórkę przez rezystor podczas pomiaru prądu płynącego przez rezystor obliczyć jego pojemność. Jeśli nie uzyskasz deklarowanej pojemności akumulatora, gdy napięcie ogniwa mieści się w określonych granicach, oznacza to, że ogniwo jest wadliwe i nie należy go używać, ponieważ stan naładowania ogniwa wyczerpuje się w bardzo szybkim tempie pod obciążeniem, tworząc lokalna pętla prądowa, jeśli jest używana w pakiecie akumulatorów, powodując ogrzewanie i ewentualnie pożar. Przejdźmy więc od razu do tego.
Wymagane składniki
- Arduino Nano
- Wyświetlacz LCD 16 × 2 znaków
- LM741 OPAMP IC
- Rezystor 2,2 Ω, 5 W.
- 7805 Dodatni regulator napięcia IC
- Zasilanie 12V
- Potencjometr trymera 10kΩ
- Kondensator 0,47 uF
- Rezystor 33kΩ
- Złącze Jack Power Barrel Jack
- Zaciski śrubowe PCB
- Układ scalony Mosfet z kanałem N IRF540N
- Perfboard
- Zestaw do lutowania
- Radiatory
Schemat obwodu testera pojemności baterii Arduino
Pełny schemat obwodu testera pojemności akumulatora 18650 pokazano poniżej. Objaśnienie obwodu jest następujące:
Jednostka obliczeniowa i wyświetlająca:
Obwód ten jest dalej podzielony na dwie części, pierwsza to niskie zasilanie 5V dla Arduino Nano i alfanumeryczny ekran LCD 16 × 2 oraz ich połączenia do wyświetlania wyników pomiarów prądu i napięcia w czasie rzeczywistym. Układ zasilany jest z zasilacza 12V za pomocą SMPS lub można użyć akumulatora 12V, a maksymalny prąd wyniesie około 60-70mA do zasilania Arduino i ekranu LCD.
Aby obniżyć napięcie do 5 V, użyjemy liniowego regulatora napięcia, który może przyjmować do 35 V i potrzebuje co najmniej 7,5 V zasilania wejściowego, aby zapewnić regulowane zasilanie 5 V, a nadmierne napięcie jest rozpraszane jako ciepło, a zatem jeśli wejście napięcie LM7805 Regulator napięcia IC jest większe niż 12 V, rozważ dodanie radiatora, aby się nie uszkodził. Wyświetlacz LCD jest zasilany napięciem 5 V z 7805 i jest podłączony do Arduino i pracuje w trybie 4-bitowym. Dodaliśmy również potencjometr wycieraczki 10k Ω do sterowania kontrastem wyświetlacza LCD.
Obwód stałego prądu obciążenia:
Drugi to obwód obciążenia prądem stałym opartym na PWM , który powoduje, że prąd obciążenia przepływający przez rezystor jest przez nas kontrolowany i stały, tak że nie ma błędów wkradających się z powodu zmian prądu w czasie, gdy napięcie ogniwa spada. Składa się z układu scalonego OPAMP LM741 i tranzystora N-Channel MOSFET IRF540N, który kontroluje prąd przepływający przez MOSFET poprzez włączanie i wyłączanie MOSFET-u zgodnie z ustawionym przez nas poziomem napięcia.
Wzmacniacz operacyjny pracuje w trybie komparatora,więc w tym trybie. Wyjście wzmacniacza operacyjnego będzie wysokie, gdy napięcie na styku nieodwracającego wzmacniacza operacyjnego będzie wyższe niż na styku odwracającym. Podobnie, jeśli napięcie na styku odwracającym wzmacniacza operacyjnego jest wyższe niż na styku nieodwracającym, wyjście wzmacniacza operacyjnego zostanie obniżone. W danym obwodzie nieodwracający poziom napięcia pinu jest kontrolowany przez pin D9 PWM Arduino NANO, który przełącza się z częstotliwością 500 Hz, który następnie przechodzi przez dolnoprzepustowy filtr obwodu RC o wartości rezystancji 33 kΩ i kondensatora o pojemności 0,47 uF, aby zapewnić prawie stały sygnał DC na nieodwracającym pinie. Odwracający pin jest podłączony do rezystora obciążenia, który odczytuje napięcie na rezystorze i wspólny GND. Styk wyjściowy OPAMP jest podłączony do zacisku bramki tranzystora MOSFET, aby go włączyć lub wyłączyć.OPAMP spróbuje wyrównać napięcia na obu swoich zaciskach, przełączając podłączony MOSFET, aby prąd przepływający przez rezystor był proporcjonalny do wartości PWM ustawionej na pinie D9 NANO. W tym projekcie maksymalny prąd, który ograniczyłem, to 1,3 A, co jest rozsądne, ponieważ moje ogniwo ma 10 A jako maksymalny prąd znamionowy
Pomiar napięcia:
Maksymalne napięcie typowego w pełni naładowanego ogniwa Li-Ion wynosi od 4,1 V do 4,3 V, czyli mniej niż 5 V napięcie graniczne pinów wejścia analogowego Arduino Nano, które ma w nich rezystancję wewnętrzną większą niż 10 kΩ, dzięki czemu możemy bezpośrednio podłączyć Ogniwo do któregokolwiek z analogowych pinów wejściowych bez obawy o przepływający przez nie prąd. Tak więc w tym projekcie musimy zmierzyć napięcie ogniwa, abyśmy mogli określić, czy ogniwo znajduje się w odpowiednim zakresie napięcia roboczego i czy jest całkowicie rozładowane, czy nie.
Musimy również zmierzyć prąd przepływający przez rezystor, ponieważ nie możemy użyć bocznika prądowego, ponieważ złożoność obwodu wzrośnie, a rosnący opór na ścieżce obciążenia zmniejszy szybkość rozładowania ogniwa. Stosowanie mniejszych rezystorów bocznikowych będzie wymagało dodatkowego obwodu wzmacniacza, aby odczyt napięcia z niego był czytelny dla Arduino.
Więc bezpośrednio odczytujemy napięcie na rezystorze obciążenia, a następnie za pomocą prawa Ohma dzielimy napięcie uzyskane przez wartość rezystora obciążenia, aby uzyskać przepływający przez niego prąd. Ujemny zacisk rezystora jest podłączony bezpośrednio do GND, więc możemy spokojnie założyć, że napięcie, które odczytujemy na rezystorze, to spadek napięcia na rezystorze.
Program Arduino do pomiaru pojemności baterii
Teraz po sfinalizowaniu układu sprzętowego przechodzimy do programowania Arduino. Teraz, jeśli nie masz zainstalowanego Arduino IDE na swoim komputerze, co tutaj robisz! Wejdź na oficjalną stronę Arduino i pobierz i zainstaluj Arduino IDE lub możesz kodować w dowolnym innym edytorze, ale to temat na inny dzień, na razie trzymamy się Arduino IDE. Teraz używamy Arduino Nano, więc upewnij się, że wybrałeś płytę Arduino Nano, przechodząc do NARZĘDZIA> PŁYTY i wybierając tam ARDUINO NANO, teraz wybierz właściwy procesor, który ma twój nano, przechodząc do NARZĘDZIA> PROCESORa gdy już tam jesteś, wybierz również port, do którego jest podłączony Arduino na twoim komputerze. Używamy Arduino do sterowania podłączonym do niego alfanumerycznym wyświetlaczem LCD 16 × 2 oraz do pomiaru napięcia ogniwa i prądu przepływającego przez rezystor obciążenia, jak wyjaśniono w poprzedniej sekcji, zaczynamy nasz kod, deklarując pliki nagłówkowe do napędu 16 × 2 Alfanumeryczny ekran LCD. Możesz pominąć tę sekcję, aby uzyskać w pełni przygotowany i podany kod na końcu strony, ale nie wahaj się, kiedy dzielimy kod na małe sekcje i próbujemy wyjaśnić.
Po zdefiniowaniu pliku nagłówkowego przechodzimy do deklarowania zmiennych, których użyjemy w kodzie do obliczenia napięcia i prądu. Musimy również zdefiniować szpilki, których używamy do sterowania wyświetlaczem LCD, oraz szpilki, których użyjemy do wyjścia PWM i odczytać napięcia analogowe pochodzące z ogniwa i rezystora również w tej sekcji.
#zawierać
Przechodząc teraz do części konfiguracyjnej, jeśli chcesz, aby Arduino był cały czas podłączony do komputera i monitoruj postęp za pomocą monitora szeregowego i zainicjuj tutaj ekran LCD. Wyświetli również komunikat powitalny „Obwód testera pojemności akumulatora” na ekranie przez 3 sekundy.
void setup () {Serial.begin (9600); lcd.begin (16, 2); lcd.setCursor (0, 0); // Ustaw kursor na pierwszej kolumnie i pierwszym wierszu. lcd.print ("Pojemność baterii"); lcd.setCursor (0,1); lcd.print ("Obwód testera"); opóźnienie (3000); lcd.clear (); }
Teraz nie musimy deklarować pinu Arduino PWM jako wyjścia, ponieważ funkcja AnalogWrite, której będziemy używać w naszej głównej pętli, zajmuje się tą częścią. Musisz zdefiniować wartość PWM, która ma być zapisana na tym pinie w kodzie. Ostrożnie wybierz wartość PWM zgodnie z prądem rozładowania wymaganym w aplikacji. Zbyt duża wartość PWM spowoduje wysoki prąd przy dużym spadku napięcia w ogniwie Li-Ion, a zbyt niska wartość PWM spowoduje długi czas rozładowania ogniwa. W funkcji głównej pętli będziemy odczytywać napięcia na pinach A0 i A1, ponieważ Arduino ma na pokładzie 10-bitowy przetwornik ADC, dlatego powinniśmy uzyskać cyfrowe wartości wyjściowe z zakresu 0-1023, które będziemy musieli przeskalować z powrotem do Zakres 0-5V poprzez pomnożenie go przez 5,0 / 1023,0. Upewnij się, że poprawnie mierzysz napięcie między pinami 5 V i GND Arduino Nano za pomocą skalibrowanego woltomierza lub multimetru, ponieważ w większości przypadków regulowane napięcie nie jest dokładnie 5,0 V, a nawet niewielka różnica w tym napięciu odniesienia spowodowałaby pełzanie błędów w odczytach napięcia, więc zmierz prawidłowe napięcie i zamień 5,0 w mnożniku podanym powyżej.
Teraz, aby wyjaśnić logikę kodu, w sposób ciągły mierzymy napięcie ogniwa i jeśli napięcie ogniwa przekracza górną granicę określoną przez nas w kodzie, na wyświetlaczu LCD pojawia się komunikat o błędzie informujący, czy ogniwo jest przeładowany lub coś jest nie tak z połączeniem i zasilanie na styku bramki MOSFET jest zatrzymywane, aby żaden prąd nie mógł przepływać przez rezystor obciążenia. Ważne jest, aby najpierw w pełni naładować ogniwo przed podłączeniem go do płytki testera pojemności, aby można było obliczyć jego całkowitą pojemność.
analogWrite (MOSFET_Pin, PWM_VALUE); // odczytaj wejście na pinie analogowym 0: int sensorValue_voltage_Cell = analogRead (A0); // Zamień odczyt analogowy (z zakresu 0 - 1023) na napięcie (0 - 5V): float voltage = sensorValue_voltage_Cell * (5.08 / 1023.0); Serial.print ("NAPIĘCIE:"); Serial.println (napięcie); // Tutaj napięcie jest drukowane na Serial Monitor lcd.setCursor (0, 0); // Ustaw kursor na pierwszej kolumnie i pierwszym wierszu. lcd.print ("Napięcie:"); // Wydrukuj odczyt napięcia na ekranie lcd.print (napięcie); opóźnienie (100); int sensorValue_Shunt_Resistor = analogRead (A1); float voltage1 = sensorValue_Shunt_Resistor * (5.08 / 1023.0); prąd pływaka = napięcie1 / rezystor; Serial.print ("Bieżący:"); Serial.println (aktualny); lcd.setCursor (0, 1);// Ustaw kursor na pierwszej kolumnie i drugim wierszu (liczenie zaczyna się od 0!). lcd.print ("Bieżący:"); lcd.print (bieżący);
Teraz, jeśli napięcie ogniwa mieści się w górnej i dolnej granicy napięcia określonej przez nas, Nano odczyta wartość prądu metodą określoną powyżej i pomnoży ją przez czas, który upłynął podczas pomiarów i zapisze ją w zdefiniowanej wcześniej zmiennej pojemności w mAh. Przez cały ten czas wartości prądów i napięć w czasie rzeczywistym wyświetlane są na dołączonym ekranie LCD, a jeśli chcesz, możesz je również zobaczyć na monitorze szeregowym. Proces rozładowywania ogniwa będzie kontynuowany do momentu, gdy napięcie ogniwa spadnie poniżej dolnej granicy określonej przez nas w programie, po czym na ekranie LCD zostanie wyświetlona całkowita pojemność ogniwa i zatrzymanie przepływu prądu przez rezystor poprzez pociągnięcie bramki MOSFET pin nisko.
else if (voltage> BAT_LOW && voltage <BAT_HIGH) {// Sprawdź, czy napięcie baterii mieści się w bezpiecznym limicie millisPassed = millis () - previousMillis; mA = prąd * 1000,0; Pojemność = pojemność + (mA * (milisPassed / 3600000,0)); // 1 godzina = 3600000ms, aby przekonwertować na jednostki mAh previousMillis = millis (); opóźnienie (1000); lcd.clear (); }
Udoskonalenia dokładności
Jest to z pewnością wystarczająco dobry sposób odczytu napięcia i prądu, ale nie jest doskonały. Zależność między rzeczywistym napięciem a zmierzonym napięciem ADC nie jest liniowa i będzie to oznaczać pewien błąd w pomiarach napięć i prądów.
Jeśli chcesz zwiększyć dokładność wyniku, musisz wykreślić wartości ADC, które uzyskasz, stosując różne znane źródła napięcia na wykresie, a następnie wyznaczyć z niego równanie mnożnika, używając dowolnej metody. W ten sposób poprawi się dokładność i zbliżysz się do rzeczywistych wyników.
Ponadto tranzystor MOSFET, którego użyliśmy, nie jest tranzystorem MOSFET na poziomie logicznym, więc potrzebuje więcej niż 7 V, aby w pełni włączyć bieżący kanał, a jeśli zastosujemy bezpośrednio do niego 5 V, bieżące odczyty byłyby niedokładne. Ale możesz użyć tranzystora MOSFET z kanałem N IRL520N na poziomie logicznym, aby wyeliminować użycie zasilania 12 V i bezpośrednio pracować z poziomami logicznymi 5 V, które masz z Arduino.
Budowanie i testowanie obwodu
Teraz, gdy zaprojektowaliśmy i przetestowaliśmy różne sekcje naszego obwodu na płytce prototypowej i upewniwszy się, że wszystkie działają zgodnie z przeznaczeniem, używamy Perfboard do lutowania wszystkich komponentów razem, ponieważ jest to znacznie bardziej profesjonalna i niezawodna metoda testowania obwodu. Jeśli chcesz, możesz zaprojektować własną płytkę drukowaną na AutoCAD Eagle, EasyEDA lub Proteus ARES lub dowolnym innym oprogramowaniu. Arduino Nano, alfanumeryczny wyświetlacz LCD 16 × 2 i LM741 OPAMP są zamontowane na żeńskim Bergstik, aby można je było później ponownie wykorzystać.
Dostarczyłem zasilanie 12 V przez złącze DC Barrel Jack dla obwodu stałego prądu obciążenia, a następnie za pomocą LM7805 zapewniono 5 V dla Nano i ekranu LCD. Teraz włącz obwód i wyreguluj potencjometr trymera, aby ustawić poziom kontrastu ekranu LCD, powinieneś już zobaczyć komunikat powitalny na ekranie LCD, a następnie, jeśli poziom napięcia ogniwa mieści się w zakresie roboczym, to prąd - wyświetli się tam napięcie i prąd z akumulatora.
Jest to bardzo podstawowy test służący do obliczenia pojemności używanej komórki i można go ulepszyć, pobierając dane i przechowując je w pliku Excel w celu przetwarzania danych i wizualizacji metodami graficznymi. W dzisiejszym świecie opartym na danych ta krzywa rozładowania ogniwa może być wykorzystana do budowania dokładnych modeli predykcyjnych akumulatora w celu symulacji i zobaczenia odpowiedzi akumulatora w warunkach ładowania bez przeprowadzania testów w świecie rzeczywistym za pomocą oprogramowania takiego jak NI LabVIEW, MATLAB Simulink itp.. i czeka na Ciebie dużo więcej aplikacji. Pełne działanie tego projektu można znaleźć na poniższym filmie. Jeśli masz jakieś pytania dotyczące tego projektu, napisz je w sekcji komentarzy poniżej lub skorzystaj z naszego forum. Idź i baw się z tym, a jeśli chcesz, możemy Cię poprowadzić w sekcji komentarzy poniżej, jak przejść dalej. Do tego czasu Adios !!!