Był sobie pewien zasilacz…

Był sobie pewien zasilacz…

To miała być ciekawa prezentacja. Niestety w ostatniej chwili okazało się, że… nie będę miał dostępu do gniazdka elektrycznego! Trzeba było na szybko złożyć jakiś zasilacz “bezprzewodowy”. Przetwornica step-down na MP2307, trzy akumulatory 18650, wyłącznik, prosty alarm stanu zasilania – wszystko połączone gorącym klejem. Zadziałało!

Po kilku tygodniach okazało się jednak, że tego “zasilacza” używam… dosłownie codziennie. Postanowiłem więc zamienić prowizorkę na coś trochę bardziej eleganckiego. Powstała wersja 2 – której budowę Wam zaprezentuję.

mcp2_202

Wersja pierwsza: prowizorka

Pierwsza wersja to niewiele więcej niż moduł przetwornicy z układem mp2307 podłączony do koszyczka z trzema akumulatorami 18650.

mp2307_03

Moduł przetwornicy wyposażono w wyświetlacz. Wyświetlacz pokazuje napięcie wyjściowe i natężenie pobieranego prądu. Za pomocą przycisków można zmienić napięcie wyjściowe. Wszystko dostarczane jest w plastikowej obudowie.

Przetwornicę przymocowałem gorącym klejem na spodzie koszyczka. Dodałem wyłącznik i niewielki układ monitorujący napięcie baterii.

mp2307_22

18650 to ogniwa typu Li-Ion. Pozyskuję je ze starych akumulatorów od laptopów. Polecam przeczytanie Ogniwa Li-ion.

Zbudowany układ miał jednak sporo wad. Najważniejszą z nich był kompletny brak ochrony mechanicznej akumulatorów. Brakowało jeszcze kilku funkcji. No i wygląd… dość… powiedzmy tymczasowy.

Więcej na temat tej “prowizorki” możecie dowiedzieć się z tekstu Zasilacz na szybko… opublikowanym na moim blogu uczymy.edu.pl. Tekst zawiera instrukcję kalibracji miernika napięcia.

Wersja 2.0

Mówią, że prowizorki trwają najdłużej. Ta akurat nie miała tyle szczęścia – głównie ze względu na klej użyty do łączenia elementów. Po pewnym czasie moduł przetwornicy odpadł od koszyka. Ale ze względu na użyteczność narzędzia – postanowiłem je zbudować porządnie.

mcp2_200

Wersja 2.0 to przede wszystkim:

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

Pełny tekst znajdziecie na moim blogu: MP2307 zasilacza na szybko, wersja 2. Zawiera on więcej szczegółów – tutaj przytaczam tylko skrót. Przeczytajcie również:

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 (więcej, gdy akumulatory są w pełni naładowane). 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 wersji 2.0 postanowiłem użyć 4 ogniwa tego typu (nominalnie 4×3.7=14.8v, maksymalnie 16.8v). Potrzebowałem do tego nowy koszyk:

lipo_00

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

Nowością będzie wyprowadzenie kabli 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ć moduł 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 (w stanie rozwartym masa) – a który wejściem na kontroler przetwornicy (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. W automatyce rozwiązuje się je 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 najłatwiej zrealizować za pomocą 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.

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_30

Bardziej 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

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 ok. 16.8v (4.2v x 4 ogniwa). Przetwornik analog/cyfra AtTiny85  mierzy napięcie do poziomu zasilania (Vcc, standardowo). 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:

latex_00

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. W ten sam sposób można zmierzyć napięcie na wyjściu przetwornicy.

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 wejściu analogowym służy komenda “analogRead()”. Polecenie to zwraca wartości z przedziału 0..1023, gdzie 0: 0v a 1023 – napięcie zasilania, tu: 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_RATIO). U mnie:

Pozostało samo wciskanie przycisków. Potrzeba jedynie zewrzeć do masy pin wyjściowy przycisku. Ś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:

Opcja 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 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 wyłączeniu Resetu przez 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.

hvsp_07

Program dla AtTiny85

Cały program wygląda tak:

Program ten zawiera wstawki z kodem dla Arduino UNO  -używałem go w czasie testowania.

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

Fusy ok, można je przeprogramować: wyłączymy dzielenie zegara przez 8 (bit CKDIV8) oraz reset (bit RSTDISBL)  – UWAGA: po tej operacji, bez HVSP, nie dacie już radę przeprogramować Waszego AtTiny:

Teraz już nie da radę przeprogramować czipa przez ISP. Ale za to pin 1 (reset) 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 jej budowy użyłem 4mm sklejki. Zacząłem od wycięcia formatek:

mcp2_00

W bokach wywierciłem otwory, które mają zapewnić wentylację pakietu. Boczki dokleiłem do podstawki, dodałem kilka wzmocnień pod pokrywkę. Następnie zbudowałem przepierzenie dla kabli:

mcp2_06

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

Na górnej pokrywce wyznaczyłem położenie wyświetlacza.  Przerysowałem rozmieszczenie otworów z oryginalnej obudowy i wyciąłem otwór pod wyświetlacz w pokrywce:

mcp2_03

mcp2_04

Podobnie wyciąłem otwory na kable w dolnej części pokrywki oraz w panelu czołowym:

mcp2_07

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

mcp2_09

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

Przetwornica 2.0

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

mcp2_12

Następnie do padów dolutował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_0

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

 mcp2_50

mcp2_51

Zastosowałem tu kostkę elektryczną. Podłączyłem do niej kabelki z pakietu oraz gniazda do ładowania pakietu.

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

mcp2_52

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

mcp2_16

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

mcp2_19

I zlutowana płytka z diodą sygnalizującą niski stan pakietu:

mcp2_72

mcp2_73

Integracja nie była łatwa…

mcp2_74

mcp2_75

W całkiem ostatnim kroku zamontowałem końcówki do kabli:

mcp2_76

Galeria

mcp2_203

mcp2_202

mcp2_201

Podsumowanie

Przedłużyło mi się trochę… Pomysł z zamianą przycisków na potencjometr znacznie skomplikował budowę zasilacza. Konieczne było przeprowadzenie wielu eksperymentów, jak i zbudowanie dodatkowych narzędzi (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.

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_1

Stary 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_3

Czas na szpachlę:

mcp2_100_2

Szpachli 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_101

Oczywiś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_102

I kilka innych…

Źródła

Ocena: 4.88/5 (głosów: 8)

Podobne posty

6 komentarzy do “Był sobie pewien zasilacz…

Odpowiedz

anuluj

Masz uwagi?