MP2307: zasilacz na szybko: wersja 2

Pamp2307_22miętacie zasilacz na szybko? Potrzebowałem „na wczoraj” bezprzewodowego zasilacza. Pojemnik na trzy akumulatory 18650, ciekawy układ monitorowania ich napięcia oraz regulowana przetwornica – wszystko połączone sznurkiem i gorącym klejem.mcp2_60

Co ciekawe, okazało się, że to… bardzo pożyteczne narzędzie! Już po kilku dniach wykorzystywałem je dosłownie co chwilę. postanowiłem więc zrobić to trochę porządniej – i powstała wersja 2.0:

Wersja 2.0 to przede wszystkim:

  • Inne zasilanie: 4 akumulatory 18650 zamiast trzech plus dodatkowe gniazdo do ładowania pakietu,
  • Odcinanie napięcia wejściowego i wyjściowego,
  • Potencjometr do sterowania napięciem wyjściowym (zamiast przycisków),
  • Porządna obudowa mieszcząca kable.

Zanim zaczniecie…

Przeczytajcie:

Zasilanie 2.0

W poprzedniej wersji zasilanie pochodziło z 3 akumulatorów 18650. Takie akumulatory mają nominalne napięcie 3.7v. Trzy połączone szeregowo dają około 11.1v. Niestety sama przetwornica pobierała nieco z napięcia, z urządzenia mogłem maksymalne uzyskać 10.4v. To trochę mało dla niektórych zastosowań.

W praktyce, w pełni naładowane 18650 daje nawet 4.2v, więc trzy to 12.6v. Niestety napięcie na akumulatorach LiIon stosunkowo szybko spada!

W wersji 2.0 postanowiłem więc użyć 4 ogniwa tego typu (nominalnie 4×3.7=14.8v, maksymalnie 16.8v). Potrzebowałem do tego nowy koszyk:

Redox beta rozładowuje koszyk z 4-ma szeregowo połączonymi ogniwami li-ion 18650
Redox beta rozładowuje koszyk z 4-ma szeregowo połączonymi ogniwami li-ion 18650

Podobnie jak poprzednio – zasilanie przetwornicy będzie włączane za pomocą dodatkowego przełącznika umieszczonego na obudowie.

Nowością będzie wyprowadzenie zestawu akumulatorów na zewnętrzne gniazdo. Nie po to, żeby z niego coś zasilać – ale żeby naładować baterie za pomocą zewnętrznej ładowarki. Wybrałem standardowe gniazdo dc 2.1 mm. Ponieważ moja ładowarka (redox beta) nie miała takiego wyjścia, musiałem sobie zmajstrować przejściówkę z gniazda T do wtyku dc 2.1mm.

mcp2_10b

Przyciski 2.0 (czyli potencjometr)

W oryginalnej przetwornicy napięcie wyjściowe ustawia się za pomocą dwóch przycisków. Każde kliknięcie podnosi lub obniża napięcie na wyjściu o 0.04v. Przyciski można też przytrzymać – wtedy wartości zmieniają się szybciej. Postanowiłem zamienić je na potencjometr.

Niestety na płytce nie znalazłem żadnego miejsca, które pozwoliłby mi się podpiąć pod kontroler i wymusić zmianę wartości napięcia. Pozostało więc trochę oszukać urządzonko i zamiast mechanicznie – wciskać przyciski elektrycznie.

Już po pierwszym sprawdzeniu okazało się, że gdy rozwarte, styki przycisków są w stanie niskim (masa) oraz ok. 3.2v. Po wciśnięciu przycisku – stan zmienia się na niski. W ten sposób wiedziałem już, który przycisk jest wyjściem z kontrolera przetwornicy (w stanie rozwartym masa) – a który wejściem (w stanie rozwartym ten z napięciem). Po drugie widziałem już, że sprowadzenie do masy pinu podpiętego do wejścia kontrolera powinno zadziałać tak samo, jakbym go wcisnął „mechanicznie”.

Pozostała kwestia sterowania. Chciałem mieć potencjometr. Przekręcenie go w jedną stronę miało zwiększać napięcie wyjściowe; w drugą – je zmniejszać. Ponieważ mogę jedynie „wciskać” przyciski –  układ sterowania potrzebuje informacji zwrotnej. Muszę mierzyć zmiany napięcia wyjściowego w reakcji na zmianę pozycji potencjometru. Algorytm jest prosty:

  • Zmieniam nastawę potencjometru,
  • Przeliczam nastawę na pożądane napięcie wyjściowe. Do obliczeń potrzebne jest maksymalne napięcie, jakie może uzyskać przetwornica przy aktualnym stanie baterii,
  • Mierzę napięcie na wyjściu przetwornicy,
  • Obliczam różnicę między nastawą i napięciem wyjściowym,
  • „Wciskam” odpowiedni przycisk aż do momentu, kiedy napięcie wyjściowe osiągnie to nastawione.

To typowe zadanie sterowania ze sprzężeniem zwrotnym, które w automatyce rozwiązuje się np. za pomocą regulatora PID. Z zestawu proporcjonalno- całkująco- różniczkujący wykorzystam tylko pierwszy człon – powinien wystarczyć.

Oczywiście podobne zadania wymagają kontrolera. Miejsca miałem jedynie na coś niewielkiego. Policzmy:

  • 1 wejście analogowe do mierzenia napięcia baterii,
  • 1 wejście analogowe do mierzenia napięcia wyjściowego,
  • 1 wejście analogowe do mierzenia wskazań potencjometru,
  • 1 wyjście cyfrowe do „wciskania” przycisku podnoszącego napięcie wyjściowe,
  • 1 wyjście cyfrowe do „wciskania” przyciski obniżającego napięcie wyjściowe,

…brzmi jak… AtTiny85.

attiny85_pins
UNO R3

Zanim przesiadłem się na AtTiny85, wypróbowałem wszystko na Arduino UNO. Dużo łatwiej rozwija się na nim prototypy, do debuggowania można użyć np. komunikacji szeregowej (wbudowana w Arduino IDE konsola).

mcp2_30Bardziej zaawansowani czytelnicy – zamiast prostych logów na konsoli – mogą użyć np. pakietu matplotlib. Umożliwia on wizualizację zmian parametrów – co bardzo pomoże w eksperymentowaniu z nastawami regulatora.

mcp2_31Żeby użyć tej biblioteki, w kodzie Arduino umieściłem instrukcje typu:

Kod do kreślenia, zapiszcie go w pliku np. arduGraph_mp.py

Zakładając, że macie zainstalowane matplotlib, pod linux wystarczy:

AtTiny85

O programowaniu AtTiny pisałem: Programowanie AtTiny85 z Arduino. Po przetestowaniu algorytmu na UNO, przyszedł czas na przesiadkę na docelowe AtTiny85. Piny przyporządkowałem następująco:

  • A1 (fizyczny pin 7): pomiar wskazań potencjometru,
  • A3 (pin 2): pomiar napięcia baterii,
  • A2 (pin 3): pomiar napięcia wyjściowego,
  • D0 (pin 5): „wciskanie” przycisku podnoszącego napięcie wyjściowe,
  • D1 (pin 6): „wciskanie” przycisku obniżającego napięcie wyjściowe.

Wybór pinów był podyktowany sposobem organizacji płytki.

Do pomiarów napięć baterii i wyjściowego z przetwornicy konieczny będzie dzielnik napięcia. Maksymalne napięcie baterii będzie wynosiło do 16.8v (4.2v x 4 ogniwa – mniej-więcej). Przetwornik analog/cyfra AtTiny85 toleruje maksymalnie napięcie do zasilania (Vcc). Ja zasilam AtTiny napięciem 3.3v (przetwornica pololu reg04b). Konieczne jest więc podzielenie napięcia z baterii tak, żeby nie przekroczyło 3.3v. Wystarczy więc dzielnik z rezystorów np. 10k i 47k. Napięcie na przetworniku będzie wynosiło:

{U_{wy}} = {U_{we} \cdot {{R_3} \over {R_2+R_3}}}

 

{U_{wy}} = {U_{we} \cdot {{R_5} \over {R_5+R_4}}}

Zastosowanie kombinacji rezystorów 10k i 47k podzieli napięcie wejściowe Uwe=17v do niemal Uwy=3v – co jest w zupełności bezpieczne dla AtTiny zasilanego 3.3v (rezystor 10kΩ idzie do masy).

Z drugiej strony, po obliczeniu napięcia Uwy na AtTiny, trzeba je z powrotem przemnożyć, żeby uzyskać napięcie w mierzonym punkcie, tzn:

{U_{we}} = {U_{wy} \cdot {{R_2 + R_3} \over {R_3}}}

W ten sam sposób można zmierzyć napięcie na wyjściu przetwornicy.

Pamiętajcie również, że rezystory mają pewną tolerancję, np. 5%. Żeby dokładniej obliczyć napięcie, warto zmierzyć ich prawdziwą rezystancję za pomocą multimetru.

Napięcie na potencjometrze mierzymy podłączając jego środkowy pin do przetwornika a/c AtTiny. Skrajne piny potencjometru podłączamy do masy i zasilania 5v.

Do odczytania napięcia na pinie służy komenda „analogRead()”. polecenie to zwraca wartości z przedziału 0..1023, gdzie 0: 0v a 1023 – napięcie zasilania 3.3v (w domyślnym przypadku, można zmienić funkcją „analogReference()”).

Na podstawie wartości „analogRead()” napięcie na pinie kontrolera można obliczyć w następujący ten sposób:

Jeszcze lepiej stworzyć do tego funkcję:

W ostatnim kroku, żeby uzyskać prawdziwe napięcie, wynik trzeba przemnożyć przez wartość dzielnika napięcia (DIVIDER_RATION). U mnie:

Pozostało samo wciskanie przycisków. Potrzeba jedynie obniżyć napięcie na pinie wchodzącym na przycisk do masy. Świetny post na ten temat znajdziecie tutaj: Trigger Buttons with Arduino. Do podłączenia wystarczy jedna dioda 1n4148. Zabezpieczy port AtTiny przed napięciem przechodzącym przez przycisk w razie jego przypadkowego wciśnięcia gdy port kontrolera ustawiony jest jako wyjście.

Żeby wcisnąć przycisk:

Żeby go „puścić”:

Ot i cała magia:

attiny_schem_2

Monitorowanie napięcia baterii – v2.0

Skoro i tak mierzę napięcie baterii (do wyskalowania potencjometru) łatwo też wykryć moment, w którym napięcie pakietu spadnie poniżej niebezpiecznego poziomu 12v. W takim momencie można by zapalić diodę, albo uruchomić buzzer. Policzyliście jednak piny AtTiny?

Niestety wykorzystałem wszystkie… No prawie:)

Opcje:

Przedstawiony poprzednio układ monitorowania napięcia baterii (konieczny w przypadku Li-Ion/Li-Po!) trzeba trochę przerobić na potrzeby 4 baterii. Teraz zamiast przy 9 – alarm powinien uruchomić się przy 12v. Wymaga to wymiany rezystora R3 na 1.2kΩ. Lepiej wymienić ten rezystor na potencjometr montażowy 10kΩ. W ten sposób będzie można dokładniej wyregulować poziom alarmu.

lvwOpcja 2 jest bardziej skomplikowana (i ciekawsza:)). Pin Reset AtTiny85 można wykorzystać do uruchomienia LED sygnalizującej niski poziom napięcia pakietu. ALE: w normalnej konfiguracji ustawienie tego pinu (PB5/D5) w stan niski… zresetuje kontroler. A tego nie chcemy. Pin ten można przeprogramować na normalny port wejściowo – wyjściowy zmieniając ustawienia fuse-bitów (generalnie wyłączając resetowanie). Ale wtedy… nie da radę przeprogramować AtTiny85 poprzez ISP. Programowanie AtTiny przez ISP wymaga działającego resetu – ba, do ponownej zmiany fusów reset też jest potrzebny. Innymi słowy: po zaprogramowaniu AtTiny i zmianie fusów – nie będziecie mogli już zmienić programu na kontrolerze. Chyba, że… zbudujecie programator HVSP (High Voltage Serial Programmer):)

Sposób na zbudowanie HVSP  opisałem tutaj: HVSP dla AtTiny85.

Program dla AtTiny85

Cały program wygląda tak:

Teraz zaprogramujcie AtTiny poprzez Arduino IDE. Za pomocą programatora na Arduino możecie sprawdzić fusy:

Fusy ok, można je przeprogramować: wyłączymy dzielenie zegara przez 8 (bit CKDIV8) oraz reset (bit RSTDISBL):

Teraz już nie da radę przeprogramować czipa przez ICSP. Ale za to pin 1 można używać jako normalny port!

Za pomocą HVSP można przywrócić fusy do stanu, który będzie umożliwiał ponowne zaprogramowanie AtTiny85.

Obudowa 2.0

I tu była największa zmiana. Postanowiłem włożyć wszystko do porządnej, drewnianej obudowy.

Do budowy użyłem 4mm sklejki. Zacząłem od wycięcia formatek:

mcp2_00W bokach wywierciłem otwory, które mają zapewnić wentylację pakietu:

mcp2_01Boczki dokleiłem do podstawki, dodałem kilka wzmocnień pod pokrywkę:

mcp2_05Następnie dodałem przepierzenie dla kabli:

mcp2_06Przez otwory przepierzenia przejdą kable z przetwornicy. Będę je chował w przedniej części obudowy. Podzieliłem ją na dwie części tak, żeby „upchnięte” w nich kable zasilania i masy się nie zetknęły:

mcp_0aNa górnej pokrywce musiałem wyznaczyć położenie wyświetlacza.  Przerysowałem rozmieszczenie otworów z oryginalnej obudowy:

mcp2_02Plan jest taki, żeby przetwornica była podwieszona pod pokrywką.

mcp2_10Teraz wyciąłem otwór pod wyświetlacz w pokrywce. Najpierw nawierciłem otwory na obwodzie:

mcp2_03Pozostała zabawa pilnikiem i papierem ściernym:mcp2_04Podobnie wyciąłem otwory na kable w dolnej części pokrywki oraz w panelu czołowym:

mcp2_07Składa się to mniej więcej tak:

mcp2_08Teraz wyciąłem otwory na przełączniki:

mcp2_09Lewy przełącznik ma włączać zasilanie przetwornicy. Prawy – uruchamiać wyjście.

Czas na mocowanie pokrywki. Musi być zdejmowana, żebym miał dostęp do serwisowania urządzenia. W tym celu nawierciłem otwory na śrubki fi 2mm przechodzące przez pokrywkę i belki wzmacniające. Nakrętki wkleiłem na distal. Powinien wytrzymać.

Pozostało wywiercenie w górnej pokrywie otworu na potencjometr, w tylnej ściance otworu na wtyk do ładowania pakietu oraz malowanie lakierobejcą.

Przetwornica 2.0

mcp2_11Przetwornica musiała być trochę przerobiona. Zacząłem od wylutowania terminali:

mcp2_12Do padów przylutowałem kable:

mcp2_13a

Składamy wszystko razem

Montaż wszystkiego okazał się nie taki trywialny. Zacząłem od przelutowania kabelków z koszyka na znacznie grubsze:

mcp2_50_0Umieściłem w obudowie koszyk na baterie i połączeniu go z wtykiem zasilającym.

mcp2_50mcp2_51Zastosowałem tu kostkę elektryczną. Podłączyłem do niej kabelki z pakietu oraz do wtyku ładującego.

W górną pokrywkę włożyłem przełączniki i przylutowałem do nich pierwsze kabelki.

mcp2_52Pod otwór na wyświetlacz podłożyłem kawałek przezroczystej pleksi:

mcp2_15 mcp2_14Teraz podłożyłem wyświetlacz i przylutowałem resztę kabli między przetwornicą i wyłącznikami oraz do wyjścia:

mcp2_16I połączyłem z resztę w obudowie:

mcp2_18Do zamontowania potencjometru najpierw musiałem dopasować płytkę PCB. Niewiele tu miejsca…

mcp2_19Lutujemy:

mcp2_70Przetwornica:

mcp2_71I reszta połaczeń:

mcp2_72Na górze znalazło się jeszcze miejsce na LED – tą, która będzie sygnalizowała niski stan baterii.

mcp2_73Integracja nie była łatwa…

mcp2_74mcp2_75W całkiem ostatnim kroku zamontowałem końcówki do kabli.

mcp2_76

Galeria

mcp2_203 mcp2_202 mcp2_201 mcp2_200

Dla tych, co się zniechęcają…

Nie zawsze wszystko idzie dobrze… Są taki dni, w które lepiej nie zaczynać roboty – o czym niestety dowiadujemy się zazwyczaj zbyt późno:) Ale gdy idzie źle – nie zniechęcajcie się! Osobiście wyznaję zasadę: lepiej coś skończyć – a potem poprawić, niż ciągle poprawiać, ale nigdy nie skończyć…

Przykłady? Cóż w relacji wszystko wyglądało naprawdę gładko…

Podczas robienia otworów w pokrywce po prostu źle obliczyłem miejsce wiercenia. Nie było wyboru – musiałem kawałek dalej zrobić nowe otwory.

mcp2_100_1Stary otwór zakołkowałem wykałaczką (i wikolem):

mcp2_100_0Ściąłem wykałaczkę, wyszlifowałem – a potem szlifierką zrobiłem wgłębienie na wykałaczce i wokół niej:

mcp2_100_3Teraz przyszedł czas na szpachlę:

mcp2_100_2Szpachli należy pozwolić porządnie wyschnąć. Później można ją zeszlifować. Po kłopocie.

Dodając kable do wyjścia z przetwornicy zapomniałem, że będę ich potrzebował trzech. Do tego jednego dołączyłem segment kostki elektrycznej. Z drugiej strony wyprowadziłem trzy kable:

mcp2_101Oczywiście, że wymierzyłem pudełko tak, żeby wszedł do niego koszyk na baterie. Wszystko dokładnie spasowałem. Niestety po włożeniu koszyka do obudowy (co nie poszło łatwo) okazało się… że ogniwa rozepchały ścianki koszyka i ostatnie z nich ledwo wepchnąłem. Nie było rady – trzeba było podszlifować ściankę wewnętrzną:

mcp2_102I kilka innych…

Podsumowanie

Przedłużyło mi się trochę… Pomysł z zamianą przycisków na potencjometr znacznie wydłużył czas wykonania zasilacza. Konieczne było przeprowadzenie wielu eksperymentów, jak i zbudowanie nowych narzędzi (jak HVSP). W końcu wcale nie jestem pewien, czy nie lepiej było zbudować taką przetwornicą od podstaw i samemu sterować wyświetlaczem. Mimo wszystko sądzę, że…

Opłacało się!

Nauczyłem się naprawdę wiele:) No i bardzo poręczne narzędzie mi się udało.

Materiały

  • Przetwornica mp2307,
  • Koszyk na 4 akumulatory 18650, z akumulatorami,
  • Przejściówka do ładowania: wtyk 2.1mm zasilający i gniazdo T (Redox) – dla ładowarki Redox Beta
  • Przełączniki kołyskowe okrągłe,
  • Kostka elektryczna,
  • ATtiny85 z podstawką, jakaś przetwornica, która go zasili – ja użyłem pololu reg4b/3.3v
  • Potencjometr 10k,
  • Rezystory 10k, 47k,
  • Diody 1n4748,
  • Kawałek płytki PCB, wystarczy jednostronna,
  • Śrubki fi2mm/10mm,
  • Kable połączeniowe.

Źródła

Dodaj komentarz