Witam kolegów
Od jakiegoś czasu zbierałem się aby podzielić się z Wami moją konstrukcją. Dopiero konkurs zmotywował mnie do uporządkowania materiałów. Prezentowane urządzenie jest prototypem będącym w ciągłym rozwoju, więc proszę o wyrozumiałość w ocenach
Motywacja
Na przestrzeni lat rosła liczba zgromadzonych w domu akumulatorów i przez to zrodziła się u mnie chęć pomierzenia ich parametrów i oceny stanu. Dlatego postanowiłem wykonać urządzenie które umożliwi pomiar ich pojemności i rezystancji wewnętrznej. Samo rozładowywanie akumulatorów pozornie nie wydaje się zbyt skomplikowane, ale i tu można się natknąć na wiele ciekawych problemów i tematów do zgłębienia. Obecnie spełnia moje oczekiwania i dobrze realizuje swoje zadania. Ktoś mógłby powiedzieć "po co coś takiego robić, można kupić gotowe", ale czy w "gotowym" można dorabiać chwilowe zachcianki kapryśnego konstruktora? "Przydało by się jeszcze mierzyć rezystancję wewnętrzną" - dopisuję rezystancję, "przydało by się mierzyć Powerbanki" - dopisuję
itd.
Funkcje
Do czego to służy o co obecnie umożliwia:
- Pomiar pojemności akumulatorów i zgromadzonej energii
- Pomiar pojemności power banków USB 5V
- Pomiar rezystancji wewnętrznej ogniwa (i styków
)
- Wybór prądu rozładowywania 0.5A, 0.95A, 1.4A
- Obsługiwane typy akumulatorów NiCd, NiMh, LiIon, LiPoly
- Obsługiwane rozmiary AAA, AA, 18650
- Zabezpieczenie przed odwrotną polaryzacją podłączenia ogniwa (plus sygnalizacja odwrotnej polaryzacji dla ogniw litowych)
- Zasilanie zewnętrzne przez port miniUSB
Sprzęt
Założeniem było wykorzystać jak najwięcej z posiadanych elementów.
Urządzenie korzysta z regulowanego źródła prądowego opartego na tranzystorze Q1 i wzmacniaczu operacyjnym U1B. Początkowo planowałem sterować prąd rozładowania z DAC, ale niestety zastosowana przeze mnie rodzina mikrokontrolerów ATMEGA48/88/168 takiego nie posiada (mam takich sporo w szufladzie) a nie chciałem dokładać kolejnego układu scalonego. Potem przez chwilę zastanawiałem się nad konstrukcja DAC opartego na PWM, ale obawiałem się stabilności napięcia i przez to prądu rozładowywania. Więc ostatecznie poprzestałem na trzech poziomach prądu wybieranych wyjściami mikrokontrolera, doszedłem do wniosku że i tak nie potrzebuję więcej prądów do wyboru.
Pomiar prądu realizowany jest na rezystorze R2 (0R1 1%). Z napięcia na tym rezystorze korzysta U1B źródła prądowego jako feedbacku do stabilizacji prądu.
Wzmacniacz U1A dopasowuje napięcie z R2 do zakresu wejściowego ADC mikrokontrolera.
Zastosowany początkowo procesor to ATMega48 z rodziny AVR. Jednak od wersji softu w której dodałem komunikację serial i archiwizację danych pomiarowych firmware przestał się mieścić w 4KB więc wymieniłem na ATmega88. Kontrolery te posiadają wbudowany przetwornik ADC o rozdzielczości 10bit. Jako napięcie odniesienia wykorzystałem wbudowane w procesor Vref o wartości ok. 1.1V. Nie chciałem komplikować układu przez dokładanie zewnętrznego napięcia odniesienia. Napięcie wewnętrzne Vref należy pomierzyć na testpoincie W7 i wprowadzić do kodu programu jako stałą z dokładnością czterech cyfr po przecinku. W przyszłości planuję dodać możliwość wprowadzania tego napięcia poprzez menu serwisowego via serial.
Wszystkie rezystory w części analogowej mają tolerancję 1%. Blok ADC zasilany jest poprzez indukcyjność 10uH i osobną linię. Jednak zbytne odszumianie zasilania ADC w przypadku oversamplingu nie jest zalecane, ponieważ metoda ta nie zadziała gdy kolejne uśredniane pomiary będą zbyt powtarzalne. Konieczna jest tu pewna losowość (szczegóły w nocie ATMELa), dlatego zrezygnowałem z pomiarów w trybie noise reduction mode. Masy analogowa i cyfrowa są odseparowane i połączone w jednym punkcie na płytce.
Zastosowałem wzmacniacz operacyjny typu rail-to-rail TLC2272CP (na schemacie jest inny bo nie miałem biblioteki a LM ma taki sam układ wyprowadzeń) ze względu na niewielkie wartości napięć z rezystora pomiarowego i pojedyncze zasilanie wzmacniacza.
Jak widzicie na schemacie dodany jest drugi procesor ATTINY45 pełniący funkcję konwertera serial-USB. Urządzenie ma udostępniać menu przez port USB. Zbierana jest historia pomiarów napięcia ogniwa co 90s i przez serial ma się dać pobrać profil rozładowywania. Konwerter ten bazuje na projekcie CDC232 http://www.recursion.jp/prose/avrcdc/cdc-232.html . Wykorzystywałem ten konwerter w przeszłości jako tami zamiennik FTDI i działał bez zarzutu. Niestety okazało się, że od jakiegoś czasu nie jest wspierany przez nowe systemy operacyjne. Bazował on na pewnej niezgodności z standardem USB i zostało to już naprawione w kernelu którego używam ( szczegóły problemu tutaj https://github.com/digistump/DigistumpArduino/issues/16 ). Nie polecam używać tego konwertera w nowych konstrukcjach. W kolejnej wersji urządzenia wykorzystam CP2102 lub FTDI.
Procesor napędzany generatorem kwarcowym 7,68MHz (akurat nie miałem w zbiorach rezonatora o tej częstotliwości) z której łatwo uzyskałem potrzebne taktowanie 1s w programie. Stabilna podstawa czasu jest istotna ze względu na to, że pomiary są całkowane w czasie. Zasilanie przez port miniUSB, który służy również do komunikacji. Cóż więcej, chyba schemat sam się tłumaczy
Chłodzenie
Zastosowany radiator jest wystarczający. Choć przy testach ogniw litowych przy obciążeniu 1.4A nagrzewa się do ponad 60 °C. Jest odczuwalnie gorący ale nie niebezpiecznie. Poniżej jak to wygląda w podczerwieni.
Software
Program w jezyku C w środowisku Eclipse z wtyczką dla AVR. Generalnie program bazuje na maszynie stanów i kolejce zdarzeń. Soft pisałem wieczorami, stopniowo dodając kolejne funkcjonalności i udoskonalenia.
Wszystkie obliczenia realizowane są w arytmetyce stałoprzecinkowej z dokładnością przekraczającą dokładność zastosowanych elementów i jakość kalibracji (nie chciałem dodawać biblioteki zmiennoprzecinowej przy 4kB flashu).
Rozdzielczość ADC 10bit to trochę mało zwłaszcza, że korzystam ze stałego dzielnika napięcia, tego samego dla ogniw o napięciach rzędu 4V jak i dla ogniw o napięciach 1,2V. Ogniwa niklowe korzystały by jedynie z około 1/4 zakresu przetwarzania ADC co ograniczyło by rozdzielczość do 200-250 poziomów. Z tego powodu wykorzystałem oversampling. ATMEL opisał metodę programowego rozszerzenia rozdzielczości ADC w nocie http://www.atmel.com/images/doc8003.pdf
Udało mi się rozszerzyć rozdzielczość kwantyzacji do 13 bit, co dało rozdzielczość napięciową ok. 0,7mV.
Obsługa
W układzie wykorzystałem standardowy wyświetlacz LCD 2x16 znaków, bo taki akurat miałem. Do obsługi służą dwa przyciski SELECT i OK. Pomiar nie wystartuje jeżeli napięcie akumulatora będzie się różniło o 10% od napięcia pełnego naładowania dla wybranego typu akumulatora. Zapobiega to pomiarom nie w pełni naładowanych akumulatorów. Poniżej wszystkie możliwe stany wyświetlacza.
Ostatnio dodałem funkcję mierzenia pojemności powerbanków. Niestety w obudowie nie nie zostało za wiele miejsca i nie udało mi się zmieścić gniazda USB, więc wykonałem adapter umożliwiający pomiar. Na zdjęciach wynik pomiaru i tabliczka znamionowa markowego powerbanku (istotna pojemność dla 5V).

Dokładność
Zastosowane elementy o tolerancji 1%, przetwornik oversamplowany z 10 na 13bit i multimetr którego użyłem do kalibracji Vref o klasie 0.5 dla VDC, pozwalają ocenić dokładność urządzenia na nie gorszą niż 2-3%.
Nie robiłem niestety porównań testów ogniw z innymi fabrycznymi urządzeniami tego typu.
Porównywałem za to wyniki dwóch moich pomiarów powerbanku z pomiarem uzyskanym kilka miesięcy temu pożyczonym fabrycznym testerem i wyniki były bardzo podobne (moje pomiary: 3.481 i 3.492 Ah, urządzenie kontrolne 3.482Ah). Wygląda to ciekawie, sporo lepiej od szacowanej powyżej dokładności.
Urządzenie kontrolne na zdjęciu poniżej, producent deklaruje parametry:
Resolution: 0.0001V 0.0001A
Error: +/- less than 0.2% upto 2A, less than 1% upto 5A.
Koszty
Trudno mi oszacować koszty, większość części pochodziła z lokalnego "magazynu" w przedpokoju a reszta z pobliskiego Wektonu. Co musiałem dokupić to większość pasywnych części smd, obudowę i radiator. Kwarce, półprzewodniki i wyświetlacz miałem.
Podsumowanie
Urządzenie spełnia swoje zadanie i realizuje je dokładnie tak jak chciałem a co najważniejsze dało mi mnóstwo frajdy z projektowania i rozbudowywania programu.
Oczywiście to nie koniec. Co planuję wprowadzić w kolejnych wersjach:
- Dodanie gniazda do pomiarów power banków na płytkę (obecnie działa w formie przystawki)
- Obsługa po USB serial. Będzie menu i pobieranie charakterystyki rozładowywania
- Konfiguracja profili rozładowywania dla różnych typów ogniw i kalibracja Vref z menu (obecnie parametry są hardkodowane)
- Bootloader żeby programować przez USB-serial bez użycia programatora
- Chodzi mi po głowie żeby w kolejnej wersji sprzętowej dodać funkcje ładowania akumulatorów, bo głupio tak po pomiarze wyjmować puste ogniwo i ładować na czymś innym
- Dodanie możliwości sterowania zewnętrznym obciążeniem, do testowania akumulatorów ołowiowych 12V
- Zmiana konwertera usb-serial na sprzętowy
Projekt płytki zamieszczam raczej poglądowo, jest to pierwsza wykonana wersja urządzenia i jest dużo do poprawy/zmiany więc nie zalecam klonowania.
O autorze
Elektroniką zajmuję się amatorsko od ok. 20 lat. Można powiedzieć, że jestem zaawansowanym amatorem. Zawodowo zajmowałem się przez większość życia automatyką i elektrotechniką przemysłową. A ostatnimi czasy programowaniem dla telekomunikacji.
Od jakiegoś czasu zbierałem się aby podzielić się z Wami moją konstrukcją. Dopiero konkurs zmotywował mnie do uporządkowania materiałów. Prezentowane urządzenie jest prototypem będącym w ciągłym rozwoju, więc proszę o wyrozumiałość w ocenach
Motywacja
Na przestrzeni lat rosła liczba zgromadzonych w domu akumulatorów i przez to zrodziła się u mnie chęć pomierzenia ich parametrów i oceny stanu. Dlatego postanowiłem wykonać urządzenie które umożliwi pomiar ich pojemności i rezystancji wewnętrznej. Samo rozładowywanie akumulatorów pozornie nie wydaje się zbyt skomplikowane, ale i tu można się natknąć na wiele ciekawych problemów i tematów do zgłębienia. Obecnie spełnia moje oczekiwania i dobrze realizuje swoje zadania. Ktoś mógłby powiedzieć "po co coś takiego robić, można kupić gotowe", ale czy w "gotowym" można dorabiać chwilowe zachcianki kapryśnego konstruktora? "Przydało by się jeszcze mierzyć rezystancję wewnętrzną" - dopisuję rezystancję, "przydało by się mierzyć Powerbanki" - dopisuję
Funkcje
Do czego to służy o co obecnie umożliwia:
- Pomiar pojemności akumulatorów i zgromadzonej energii
- Pomiar pojemności power banków USB 5V
- Pomiar rezystancji wewnętrznej ogniwa (i styków
- Wybór prądu rozładowywania 0.5A, 0.95A, 1.4A
- Obsługiwane typy akumulatorów NiCd, NiMh, LiIon, LiPoly
- Obsługiwane rozmiary AAA, AA, 18650
- Zabezpieczenie przed odwrotną polaryzacją podłączenia ogniwa (plus sygnalizacja odwrotnej polaryzacji dla ogniw litowych)
- Zasilanie zewnętrzne przez port miniUSB
Sprzęt
Założeniem było wykorzystać jak najwięcej z posiadanych elementów.
Urządzenie korzysta z regulowanego źródła prądowego opartego na tranzystorze Q1 i wzmacniaczu operacyjnym U1B. Początkowo planowałem sterować prąd rozładowania z DAC, ale niestety zastosowana przeze mnie rodzina mikrokontrolerów ATMEGA48/88/168 takiego nie posiada (mam takich sporo w szufladzie) a nie chciałem dokładać kolejnego układu scalonego. Potem przez chwilę zastanawiałem się nad konstrukcja DAC opartego na PWM, ale obawiałem się stabilności napięcia i przez to prądu rozładowywania. Więc ostatecznie poprzestałem na trzech poziomach prądu wybieranych wyjściami mikrokontrolera, doszedłem do wniosku że i tak nie potrzebuję więcej prądów do wyboru.
Pomiar prądu realizowany jest na rezystorze R2 (0R1 1%). Z napięcia na tym rezystorze korzysta U1B źródła prądowego jako feedbacku do stabilizacji prądu.
Wzmacniacz U1A dopasowuje napięcie z R2 do zakresu wejściowego ADC mikrokontrolera.
Zastosowany początkowo procesor to ATMega48 z rodziny AVR. Jednak od wersji softu w której dodałem komunikację serial i archiwizację danych pomiarowych firmware przestał się mieścić w 4KB więc wymieniłem na ATmega88. Kontrolery te posiadają wbudowany przetwornik ADC o rozdzielczości 10bit. Jako napięcie odniesienia wykorzystałem wbudowane w procesor Vref o wartości ok. 1.1V. Nie chciałem komplikować układu przez dokładanie zewnętrznego napięcia odniesienia. Napięcie wewnętrzne Vref należy pomierzyć na testpoincie W7 i wprowadzić do kodu programu jako stałą z dokładnością czterech cyfr po przecinku. W przyszłości planuję dodać możliwość wprowadzania tego napięcia poprzez menu serwisowego via serial.
Wszystkie rezystory w części analogowej mają tolerancję 1%. Blok ADC zasilany jest poprzez indukcyjność 10uH i osobną linię. Jednak zbytne odszumianie zasilania ADC w przypadku oversamplingu nie jest zalecane, ponieważ metoda ta nie zadziała gdy kolejne uśredniane pomiary będą zbyt powtarzalne. Konieczna jest tu pewna losowość (szczegóły w nocie ATMELa), dlatego zrezygnowałem z pomiarów w trybie noise reduction mode. Masy analogowa i cyfrowa są odseparowane i połączone w jednym punkcie na płytce.
Zastosowałem wzmacniacz operacyjny typu rail-to-rail TLC2272CP (na schemacie jest inny bo nie miałem biblioteki a LM ma taki sam układ wyprowadzeń) ze względu na niewielkie wartości napięć z rezystora pomiarowego i pojedyncze zasilanie wzmacniacza.
Jak widzicie na schemacie dodany jest drugi procesor ATTINY45 pełniący funkcję konwertera serial-USB. Urządzenie ma udostępniać menu przez port USB. Zbierana jest historia pomiarów napięcia ogniwa co 90s i przez serial ma się dać pobrać profil rozładowywania. Konwerter ten bazuje na projekcie CDC232 http://www.recursion.jp/prose/avrcdc/cdc-232.html . Wykorzystywałem ten konwerter w przeszłości jako tami zamiennik FTDI i działał bez zarzutu. Niestety okazało się, że od jakiegoś czasu nie jest wspierany przez nowe systemy operacyjne. Bazował on na pewnej niezgodności z standardem USB i zostało to już naprawione w kernelu którego używam ( szczegóły problemu tutaj https://github.com/digistump/DigistumpArduino/issues/16 ). Nie polecam używać tego konwertera w nowych konstrukcjach. W kolejnej wersji urządzenia wykorzystam CP2102 lub FTDI.
Procesor napędzany generatorem kwarcowym 7,68MHz (akurat nie miałem w zbiorach rezonatora o tej częstotliwości) z której łatwo uzyskałem potrzebne taktowanie 1s w programie. Stabilna podstawa czasu jest istotna ze względu na to, że pomiary są całkowane w czasie. Zasilanie przez port miniUSB, który służy również do komunikacji. Cóż więcej, chyba schemat sam się tłumaczy
Chłodzenie
Zastosowany radiator jest wystarczający. Choć przy testach ogniw litowych przy obciążeniu 1.4A nagrzewa się do ponad 60 °C. Jest odczuwalnie gorący ale nie niebezpiecznie. Poniżej jak to wygląda w podczerwieni.
Software
Program w jezyku C w środowisku Eclipse z wtyczką dla AVR. Generalnie program bazuje na maszynie stanów i kolejce zdarzeń. Soft pisałem wieczorami, stopniowo dodając kolejne funkcjonalności i udoskonalenia.
Wszystkie obliczenia realizowane są w arytmetyce stałoprzecinkowej z dokładnością przekraczającą dokładność zastosowanych elementów i jakość kalibracji (nie chciałem dodawać biblioteki zmiennoprzecinowej przy 4kB flashu).
Rozdzielczość ADC 10bit to trochę mało zwłaszcza, że korzystam ze stałego dzielnika napięcia, tego samego dla ogniw o napięciach rzędu 4V jak i dla ogniw o napięciach 1,2V. Ogniwa niklowe korzystały by jedynie z około 1/4 zakresu przetwarzania ADC co ograniczyło by rozdzielczość do 200-250 poziomów. Z tego powodu wykorzystałem oversampling. ATMEL opisał metodę programowego rozszerzenia rozdzielczości ADC w nocie http://www.atmel.com/images/doc8003.pdf
Udało mi się rozszerzyć rozdzielczość kwantyzacji do 13 bit, co dało rozdzielczość napięciową ok. 0,7mV.
Obsługa
W układzie wykorzystałem standardowy wyświetlacz LCD 2x16 znaków, bo taki akurat miałem. Do obsługi służą dwa przyciski SELECT i OK. Pomiar nie wystartuje jeżeli napięcie akumulatora będzie się różniło o 10% od napięcia pełnego naładowania dla wybranego typu akumulatora. Zapobiega to pomiarom nie w pełni naładowanych akumulatorów. Poniżej wszystkie możliwe stany wyświetlacza.
Ostatnio dodałem funkcję mierzenia pojemności powerbanków. Niestety w obudowie nie nie zostało za wiele miejsca i nie udało mi się zmieścić gniazda USB, więc wykonałem adapter umożliwiający pomiar. Na zdjęciach wynik pomiaru i tabliczka znamionowa markowego powerbanku (istotna pojemność dla 5V).
Dokładność
Zastosowane elementy o tolerancji 1%, przetwornik oversamplowany z 10 na 13bit i multimetr którego użyłem do kalibracji Vref o klasie 0.5 dla VDC, pozwalają ocenić dokładność urządzenia na nie gorszą niż 2-3%.
Nie robiłem niestety porównań testów ogniw z innymi fabrycznymi urządzeniami tego typu.
Porównywałem za to wyniki dwóch moich pomiarów powerbanku z pomiarem uzyskanym kilka miesięcy temu pożyczonym fabrycznym testerem i wyniki były bardzo podobne (moje pomiary: 3.481 i 3.492 Ah, urządzenie kontrolne 3.482Ah). Wygląda to ciekawie, sporo lepiej od szacowanej powyżej dokładności.
Urządzenie kontrolne na zdjęciu poniżej, producent deklaruje parametry:
Resolution: 0.0001V 0.0001A
Error: +/- less than 0.2% upto 2A, less than 1% upto 5A.
Koszty
Trudno mi oszacować koszty, większość części pochodziła z lokalnego "magazynu" w przedpokoju a reszta z pobliskiego Wektonu. Co musiałem dokupić to większość pasywnych części smd, obudowę i radiator. Kwarce, półprzewodniki i wyświetlacz miałem.
Podsumowanie
Urządzenie spełnia swoje zadanie i realizuje je dokładnie tak jak chciałem a co najważniejsze dało mi mnóstwo frajdy z projektowania i rozbudowywania programu.
Oczywiście to nie koniec. Co planuję wprowadzić w kolejnych wersjach:
- Dodanie gniazda do pomiarów power banków na płytkę (obecnie działa w formie przystawki)
- Obsługa po USB serial. Będzie menu i pobieranie charakterystyki rozładowywania
- Konfiguracja profili rozładowywania dla różnych typów ogniw i kalibracja Vref z menu (obecnie parametry są hardkodowane)
- Bootloader żeby programować przez USB-serial bez użycia programatora
- Chodzi mi po głowie żeby w kolejnej wersji sprzętowej dodać funkcje ładowania akumulatorów, bo głupio tak po pomiarze wyjmować puste ogniwo i ładować na czymś innym
- Dodanie możliwości sterowania zewnętrznym obciążeniem, do testowania akumulatorów ołowiowych 12V
- Zmiana konwertera usb-serial na sprzętowy
Projekt płytki zamieszczam raczej poglądowo, jest to pierwsza wykonana wersja urządzenia i jest dużo do poprawy/zmiany więc nie zalecam klonowania.
O autorze
Elektroniką zajmuję się amatorsko od ok. 20 lat. Można powiedzieć, że jestem zaawansowanym amatorem. Zawodowo zajmowałem się przez większość życia automatyką i elektrotechniką przemysłową. A ostatnimi czasy programowaniem dla telekomunikacji.
Fajne? Ranking DIY