Skocz do zawartości
mareksoutys

Zasilacz impulsowy uC

Pomocna odpowiedź

Cześć,

Czy można zrobić zasilacz impulsowy z bezpośrednią regulacją PWM klucza i pomiarem ADC napięcia wyjściowego?

Gdyby użyć szybkiego STM32F4.

Pozdrawiam.

Udostępnij ten post


Link to post
Share on other sites
38 minut temu, mareksoutys napisał:

Czy można zrobić zasilacz impulsowy

Można.

38 minut temu, mareksoutys napisał:

Gdyby użyć szybkiego STM32F4

To będziesz mógł szybciej liczyć co tam sobie chcesz. Częstotliwość PWM nie jest bezpośrednio powiązana z szybkością procesora. W przypadku głupiej ATmegi możesz ją rozkręcić do 16MHz i mieć pełne 8-bitowe PWM na 62.5kHz (co jest zupełnie normalną częstotliwością dla zasilaczy tego typu) a możesz mieć 125kHz gdy zejdziesz do 7 bitów lub 250kHz przy 6 bitach rozdzielczości. To samo 250kHz na 8 bitach możesz dostać z małego, 8MHz ATtiny wyposażonego w wewnętrzny PLL rozkręcający timer do 64MHz. Na 80MHz ST32F4 oczywiście też się da 🙂

A chcesz to zrobić dla zabawy czy po coś? Bo wiesz, odkrycie Ameryki to to nie jest.. Jak konfiguracja przetwornicy DC/DC Cię interesuje? Wiesz coś w ogóle o projektowaniu takich układów?

Udostępnij ten post


Link to post
Share on other sites

Na pewno chciałbym zbudować taki układ żeby poszerzyć swoją wiedzę 🙂

Dotychczas zbudowałem kilka przetwornic, ale tylko sterowanych klasycznie. Teraz czas na czyste sterowanie cyfrowe 🙂

Co do budowy to na pewno obniżająca napięcie. Najlepiej buck.

Jak teoretycznie przeanalizowałem problem, to jedynym problemem w sterowaniu byłby ADC (stabilność i zakłócenia).

Czy dobrze zakładam?

I zapewne potrzeba specjalnego algorytmu sterującymi kluczami.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Nie bardzo rozumiem co ma na myśli pisząc "klasycznie". Czy to znaczy, że używałeś scalaków z półki i robiłeś wg gotowego schematu nie przejmując się warunkami stabilności, kształtem odpowiedzi impulsowej itd bo przecież producent już zadbał o optymalną kompensację pętli, czy jednak robiłeś własny kontroler, tyle że analogowy więc budowałeś konwerter, robiłeś wzmacniacz błędu, dodawałeś mu jakiś obwód kompensacji i bawiłeś się w pomiary stabilności. Jeśli to pierwsze, to masz wiele do nadrobienia. Ponieważ prawie na pewno zaczniesz od pętli ze sprzężeniem wyłącznie napięciowym (tzw. voltage mode), zacznij może od tego:

http://www.ti.com/lit/an/slva057/slva057.pdf

zwracając szczególną uwagę na różnicę sposobu pracy buck'a w trybach CCM i DCM.

Tu na pewno też coś ciekawego znajdziesz:

http://www.ti.com/lit/an/slva477b/slva477b.pdf

http://read.pudn.com/downloads157/ebook/697438/Buck_Converter_Design_Demystified.pdf

A tu jest coś o sposobach kompensacji pętli:

http://www.ti.com/lit/an/slva301/slva301.pdf

No niestety, tak to działa, ale jeśli sam już to zrobiłeś "analogowo", to wiele rzeczy juz rozumiesz i masz to za sobą. Wtedy w zasadzie przenosisz całą swoją wiedzę z pętli analogowej na cyfrowe przetwarzanie sygnałów i liczysz kompensację/filtry na procesorze. Oczywiście zawsze możesz zacząć od prostego sterowania histeretycznego, ale to słabe. Choć wiadomo, że stabilne i zawsze zadziała to jednak nie jest to to, co tygrysy lubia najbardziej. Na pewno żeby zbudować DCDC z procesorem (albo wg jakiegoś innego, ale własnego schematu) i przetestować działanie musisz zbudowac sobie stanowisko, od tego zacznij żebyś nie obudził się z ręką w nocniku. Nie wystarczy multimetr i pomiar napięcia, bo układ może się wzbudzać albo być poważnie niestabilny po zmianie stanu. Tak więc musisz mieć obciążenie zmieniane płynnie (żeby zbadać ch-ki statyczne) i skokowo, np. opornik dołączany okresowo jakims tranzystorem. Jeżeli obciążysz swoją przetwornicę prądem np. 0.1 Imax a co chwilę będziesz do niej podłączał (generator np. 2Hz na 555 i MOSFET) opornik ciągnący dodatkowe 0.8 Imax to na oscyloskopie (czy o nim wspomniałem?) zobaczysz jak zachowuje się Twoja pętla regulacji w czasie skoku obciążenia, a tam widać jak na dłoni ew. problemy.. Powinieneś też mieć raczej dobry dostęp do szerokiej gamy elementów, najlepeij w szufladzie żeby z każdą duperelą nie czekać tygodnia na paczkę. Warto posiadać dużo różnych dławików mocy - tak indukcyjnoiści jak i wielkości (w sensie ESR czy Imax), trochę kondensatorów low-ESR, jakieś diody Schottky no i oporniki mocy jako obciążenia. Wtedy zabawa jest ciekawsza, bo możesz sprawdzić wiele przypadków what-if i samodzielnie przekoanąc się, jak poszczególne elementy przetwornicy (indukcyjnośc, pojemności) wpływają na jej zachowanie.

Nie wiem co znaczy "specjalny algorytm sterujący kluczami". Musisz zapewnić stabilność pętli regulacji poprzez okresowe, bardzo częste wyznaczanie nowego współczynnika PWM - czy to jest wystarczająco specjalne? Plus dodatki typu "soft-start", reakcje na zwarcia (to będzie pięta achillesowa, bo nie masz dodatkowej pętli regulacji prądu tzw. current mode a wierz mi, na razie nie chcesz mieć), sterowanie przez UART, raportowanie stanu, ew. pomiary temperatur itd itp.

ADC ma mierzyć napięcie wyjściowe. Jeżeli uda się go zsynchronizować z przełączaniem PWM to super - pomyśl o tym, bo to ważne. A jeśli nie, to też się da tylko wprowadzisz filtrowanie a to oznacza, że pętla będzie sporo wolniejsza a to z kolei da dużo wolniejszą odpowiedź impulsową całości i zasilacz będzie "ospały". Oczywiście w sensie elektroniki a nie ludzi, mówimy o milisekundach a nie minutach. 

EDIT: Niketóre procesory mają wbudowane bloki PWM ze sprzętowymi wejściami reakcji na błędy (np. przeciążenia):

http://ww1.microchip.com/downloads/en/AppNotes/01468A.pdf

Tu jest trochę dla początkujących:

http://ww1.microchip.com/downloads/en/AppNotes/01114A.pdf

http://ww1.microchip.com/downloads/en/AppNotes/01207B.pdf

a tu nawet zrobiony kompletny konwerter do współpracy z baterią słoneczną (MPPT). To trochę co innego niż zwykły buck, ale przykład pokazuje, że właśnie w takich wypadkach - gdy potrzeba nietypowego algorytmu sterowania, przetwornica na procesorze sprawdza się nieźle:

http://ww1.microchip.com/downloads/en/AppNotes/00001521A.pdf

 

Edytowano przez marek1707
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Oczywiście mówiłem o sterowaniu analogowym. Nie mam jeszcze dużego doświadczenia, ale poczułem na własnej skórze ile czasu trzeba poświęcić aby dopracować w miarę stabilne działanie całości. I godziny spędzone przed oscyloskopem, aby dobrać odpowiednie wartości elementów 😉

Co chcesz powiedzieć przez "Jeżeli uda się go zsynchronizować z przełączaniem PWM to super"?

Pytam bo zakładam, że obliczenia trzeba będzie zrobić w przerwaniu, bo nie znam metody kontroli tylko przez peryferia ADC->PWM (z możliwością dodatkowych zmian, niezależnie od bezpośredniego sprzężenia ADC z TimeremPWM).

Udostępnij ten post


Link to post
Share on other sites

Chodzi o to, że większość szumu generowanego przez układ DCDC bierze się z przełączania prądów przez stopień wyjściowy czyli tranzystor i diodę. Jeśli będziesz wyzwalał start ADC w przypadkowych chwilach (w sensie braku synchronizacji z pracą timera od PWM), to musisz brać pod uwagę całość zakłóceń, łącznie z tętnieniami napięcia spowodowanymi narastaniem i opadaniem prądu w indukcyjności i kondensatorach wyjściowych. Musisz to odfiltrować tak analogowo jak i cyfrowo a to zawsze wprowadza opóźnienia. Jeśli uda się robić próbkowanie ADC zawsze w tym samym momencie cyklu PWM (np. zawsze na początku a najlepiej tam gdzie nic się nie przełącza czyli pod koniec bo możesz założyć, że masz wypełnienie powiedzmy do 90%) to wtedy odpada cała gama problemów. Ponieważ śmiecia jest mniej, masz mniej do filtrowania i pętla jest szybsza. Przy czym "w tym samym momencie" wcale nie oznacza, że w każdym cyklu. Robisz to tak często jak wyznaczyłeś sobie cykll pracy regulatora i jak często potrzebujesz sprzężenia od wyjścia. W AVR próbkowanie ADC rzędu kilkadziesiąt kHz jest problematyczne, ale STM32 mają dużo szybsze przetworniki i tam to kaszka z mleczkiem.

Oczywiście, że pomiar z ADC trzeba przeliczyć (i jeżeli już, to to właśnie nazwałbym "specjalnym algorytmem") na wypełnienie PWM uwzględniając upływ czasu rzeczywistego, bo przecież nie będzie to żadna prosta zalezność. W systemie analogowego kontrolera miałeś wzmacniacz z elementami kompensacji, który miał swoją ch-kę częstotliwościwą i fazową, opóźnienie grupowe itd. Tutaj musisz zrobić to samo, ale cyfrowo. Czyli liczysz filtry takie, by odpowiedź impulsowa układu była najlepsza możliwa w danych warunkach i z danymi elementami głównymi (dławik, kondensatory).

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Zapytam trochę o problem programowy związany z tematem:

Jak optymalnie wykorzystać działanie STM32 do takich celów? W tym momencie widzę to tak, że jeden z Timerów odlicza stały okres dla "programowego PWM" i w przerwaniu od niego uruchamiam ADC który po zakończeniu konwersji uruchamia przerwanie, w którym obliczam wartość szerokości impulsu dla PWM i tą wartość wpisuje do innego Timera (OPM) który odlicza tą wartość i zeruje sygnał PWM.

Czy w bardziej zaawansowany sposób wykorzystać możliwości STM32 czy powyższy pomysł jest OK?

PS: Przepraszam za takie pytanie, ale dopiero zaczynam poznawać możliwości tych mikrokontrolerów.

Udostępnij ten post


Link to post
Share on other sites

Robisz to dużo prościej:

Jakiś timer odpalasz w trybie PWM. Masz zapewne wtedy jakkiś rejestr do którego wpisujesz wypełnienie oraz (czasem) długość okresu. Czasem długość okresu ustawiasz bitami w jakimś rejestrze konfiguracyjnym. Timer taki zwykle umie zgłaszać przerwania w chwili gdy się przekręca z wartości maksymalnej na zero (lub odwrotnie, zależy w  którą stronę liczy). Jeżeli masz możliwość sprzętowego odpalenia konwersji ADC na sygnale przepełnienia tego timera, to super - robisz to. Wtedy zasadzasz się swoim ISR na przerwaniu od ADC (timer przestaje Cię obchodzić), gdzie czytasz wynik konwersji, liczysz co trzeba i wpisujesz nowe wypełnienie do timera. W przypadku gdy nie możesz (znaczy procesor tego nie umie) skonfigurować swojego ADC na automatyczną synchronizację z timerem, zapinasz się na przerwanie od timera. Tam w ISR startujesz "ręcznie" ADC i dalej tak samo.

Przede wszystkim PWM generuje się samo. Timer startuje impuls na początku i kończy gdy doliczy do wartości z rejestru wypełnienia. Ty wpisujesz nowe wypełnienia co okres lub dużo rzadziej. Przecież nie musisz liczyć pętli sprzężenia zwrotnego co10us (100kHz), bo to strasznie zamuli CPU a niczego nie zmieni, bo stałe filtra LC w przetwornicy są sporo dłuższe. Dopóki nie wpiszesz timerowi nowego wypełnienia, obowiązuje poprzednie. ADC może być wyzwalany co okres bo tak jest prościej, ale nie musisz korzystać z każdego wyniku. Możesz w ogóle nie brać pod uwagę każdej konwersji (tylko co którąś) albo np. zrobić proste uśrednianie za 4 czy 8 sampli i dopiero gdy masz ten wynik, możesz zapuszczać liczenie głównego filtra pętli. Wpisać nowe wypełnienie możesz kiedykolwiek, bo timery w trybie PWM mają (zwykle) buforowanie zmian, tj. nowe wypełnienie jest "zauważane" i tak dopiero na początku następnego cyklu. Bez tego móglbyś czasem dostawać nieprzyjemne szpile na wyjściu - sprawdź czy Twój timer w wybranym trybie to ma.

Może zanim zaczniesz pisać program powiedz co chcesz zrobić. Podaj jakieś parametry swojego układu, wielkości dławika (może konkretne typy?), kondensatorów, jaki tranzystor, jakie zasilanie, jakie prądy, jak zrobisz driver bramki czy tam bazy, jaką przyjmujesz częstotlwość itp itd. To wszystko i tak musisz ustalić zanim zaczniesz budować układ i tworzyć kod. W ogóle możesz zbudować całą przetwornicę na osobnej płytce (kond. wejściowy, klucz i jego driver, dioda, dławik, kond. wyjściowy) i tylko zostawić piny do podłączenia sygnału PWM z dowolnego procesora lub nawet generatora. Pierwsze włączenie to w ogóle może być przecież bez żadnej pętli regulacji. Programujesz piny I/O, timer i bez żadnego ADC ani sprzężenia zwrotnego ustawiasz np. 50%. Patrzysz czy wszystkie sygnały są OK a z DCDC wychodzi mniej więcej połowa tego co wchodzi - przecież do tego sprowadza się działanie modulatora PWM i filtra LC. Od tego zacznij: obciąż to prądem nominalnym, policz sprawność w różnych punktach (10%, 50%, 90% PWM), może z różnymi elementami, pochwal się, popatrz czy coś nie grzeje się za bardzo (albo chociaż zgodnie z założeniami), zmierz sondą prądową kształt prądu dławika itp. Przecież wprowadzenie algorytmu regulacji/kompensacji napięcia wyjściowego nie zmieni już niczego w sprawnościach i w samych elementach.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Bardzo dziękuję za zainteresowanie i inspirujące odpowiedzi.

W tym algorytmie w którym przedstawiłem chodziło mi o odpalenie ADC w momencie "ciszy prądowej" w zasilaczu. Możesz wytłumaczyć, w którym momencie zostaje uruchomiony PWM względem ADC w Twoim pomyśle?

Udostępnij ten post


Link to post
Share on other sites

To tylko prosty plan na początek. Sugeruję, by wykorzystać start okresu timera (bo tam na pewno umieją zgłaszać przerwanie) do odpalania ADC. A teraz już sam musisz rozważyć co Twój timer robi w tym czasie w wybranym trybie. W zależności od tego jaką polaryzację sygnału na pinie wybierzesz (w ustawieniach timera) oraz jaki driver wstawisz (odwracający czy nie) to będzie albo początek "aktywnego" impulsu PWM i przełączenie prądu z diody na klucz albo początek fazy "pasywnej" czyli moment przełączenia prądu z klucza na diodę. Przetworniki ADC nie łapią wejścia w zerowym czasie, ale potrzebują tzw. czasu akwizycji do naładowania swojego kondensatora sample/hold. Dopiero po tej zwłoce zaczynają konwersję. W prostych ADC ten czas jest bezpośrednio związany z taktowaniem przetwornika i trwa zawsze ileśtam jego zegarów. W tych co lepszych możesz tę długość programować a to oznacza, że w pewnym sensie możesz odsuwać się od chwili wyzwolenia. Możesz też użyć (czasem) timerów połączonych w łańcuchy i np. pierwszym robić PWM, ten wyzwala drugi pracujący w trybie one-shot, generujący stałe opóźnienie i dopiero tym wyzwalać ADC.

Generalnie może zacznij od poczytania Reference Manuala do wybranego procesora/rodziny, to po jakimś tygodniu (bo timerów jest zwykle kilka rodzajów i dobrze byłoby zrozumieć ich tryby działania - tych znów jest co najmniej kilka bazowych) zaczniemy mówić o konkretach.

Nie wiem co rozumiesz przez "ciszę prądową", bo dopóki pracujesz w CCM to takiej chwili (w sensie zerowego prądu) w układzie nie ma. No chyba, że od razu planujesz pracę (wyłącznie?) w DCM i wtedy z definicji masz taką "ciszę", ale wtedy optymalne sterowanie jest o wiele trudniejsze (czytaj: wzory stają się piętrowe a scalaki zmuszone małym obciążeniem do wejścia w CCM zwykle przechodzą wtedy do bardziej opłacalnych energetycznie, dwustanowych trybów burst opartych na histerezie lub do modulacji PFM).

Masz już jakieś załozenia co do parametrów przetwornicy i wartości elementów czy lepiej o to nie pytać?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Przez "ciszę prądową" rozumiem, bo mówię o ciągłym przepływie prądu CCM, momenty w których klucze są stabilne. A "chaosem prądowym" momenty przełączania tranzystorów 🙂 Chyba takie założenie jest poprawne?

Założenia i wartości elementów jeszcze nie mam, bo najpierw chciałem dopytać się czy droga sterowania za pomocą tylko uC ma sens.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Tak, na pewno pomiar w czasie przełączania jest złym pomysłem, ale:

  • Albo z góry zakładasz, że PWM jest ograniczone do jakiegoś zakresu (np. od 0 do 90%, albo od 10% do 100%) i wtedy masz od razu ograniczenie na zakres zmian napięć we/wy i/lub minimalnych obciążeń. To wcale nie jest głupie i dodatkowo powoduje, że wiesz gdzie zawsze w PWM będzie cisza - gdzieś na początku albo gdzieś na końcu okresu timera, zależy jak wygląda faza aktywnego impulsu PWM względem okresu.
  • Albo planujesz pełne 0..100% i wtedy masz świadomość, że kiedyś ADC trafi na przełączanie, bo "nie ma gdzie uciekać". Być może moment ten można zoptymalizować i ustawić tak, by np. zbocze zaczynało trafiać w pomiar przy bardzo małym wypełnieniu (<2%), bo wtedy spodziewamy się małych prądów i generalnie spokoju na wyjściu.

Niczego nie sugeruję. Przemyśl to.

1 godzinę temu, mareksoutys napisał:

najpierw chciałem dopytać się czy droga sterowania za pomocą tylko uC ma sens.

I jakie wnioski do tej pory?

Moim zdaniem edukacyjnie sens jest spory, bo dostajesz w swoim portfolio narzędzie do "czucia" tego typu projektów. W "normalnych" zasilaczach rozwiązanie z CPU+PWM trudno obronić z uwagi na niesamowicie szeroki wybór gotowych scalaków. Ani pod względem efektywności konwersji, ani powierzchni ani kosztu elementów i czasu (miesiąc? poświęcony na optymalizację pracy DCDC i zabezpieczenia) procek z tranzystorem nie wygra z chipem, który zespół niegłupich ludzi wycyzelował do konkretnego zastosowania. Natomiast gdy masz zrobić coś "dziwnego" i niech chcesz rozwiązań hybrydowych (gotowa przetwornica na scalaku, analogowo sterowana procesorem) to pomysł typu "direct drive" jest wart przemyślenia. Skomplikowane algorytmy np. ładowania jakichś dziwnych akumulatorów w warunkach ekstremalnych (-20°C), wyrafinowane MPPT do paneli solarnych, może jakaś optymalna przetwornica zasilana z różnych podejrzanych źródeł (Peltier/TEG + wiatraczek + USB np.) ładująca maksymalną mocą supercapa od 0V - to mogą być aplikacje na które projektanci w Texasie czy Analogu (jeszcze) nie wpadli albo są takie gotowce, tylko osobno. Niestety, fajne rozwiązania typowe dla dzisiejszych chipów DCDC typu current mode są trudne w robieniu samemu, bo układ od razu się rozbudowuje. Tam mogą sobie wyskalować kanał tranzystora jak chcą i zrobić na nim "bezstratny" pomiar prądu. Ty musisz wstawiać opornik szeregowy (albo kombinować z układem zastępczym swojego dławika oraz pilnować by nie zmienić typu w czasie produkcji) i dawać drogi wzmacniacz pomiarowy. Tam mogą zrobić konwerter na 1MHz biorący na własne potrzeby 10uA przy prądzie wyjściowym 1mA i jesteś ugotowany, bo procek z driverem i MOSFETem mierząc i generując PWM weźmie z 10 lub 100 razy więcej mocy.

No, ciekaw jestem Twojego zdania.

Edytowano przez marek1707
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Próbuję dokładnie analizować Twoje wypowiedzi i zastanawiam się co rozumiesz przez "układ od razu się rozbudowuje"? Jak bardzo?

Udostępnij ten post


Link to post
Share on other sites

Napisałem przecież:

54 minuty temu, marek1707 napisał:

Tam mogą sobie wyskalować kanał tranzystora jak chcą i zrobić na nim "bezstratny" pomiar prądu. Ty musisz wstawiać opornik szeregowy (albo kombinować z układem zastępczym swojego dławika oraz pilnować by nie zmienić typu w czasie produkcji) i dawać drogi wzmacniacz pomiarowy.

Chodzi o to, że bloki które w typowym, nowoczesnym scalaku DCDC są standardem, Ty  musisz budować "na piechotę". I wtedy podstawowy układzik złożony z dwóch kondensatorów, tranzystora, diody, dławika i procesora zaczyna puchnąć. Current mode kosztuje więcej mądrego softu (druga pętla regulacji - tego nie widać), ale i pomiar prądu w indukcyjności więc wzmacniacz pomiarowy mierzący na dużym potencjale wspólnym. Prostowanie synchroniczne (+8..10% do sprawności) to kolejny tranzystor i driver, ale także kolejny pomiar prądu. Zabezpieczenia to jakiś komparator i specjalny timer ze sprzętowym zatrzymywaniem, itd.. A jeśli to wszystko masz w 8-pinowym chipie DFN 2x2mm do którego wystarczy dospawać dławik i dwa kondensatory a którego zakłócenia są minimalne przez precyzyjnie kontrolowane prędkości załączania klucza (w odróżnieniu od siłowego przełączania zwykłym driverem jaki wstawiłeś na PWM), to mina rzednie,  prawda?

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Masz rację, że to dużo wiedzy i włożonej pracy. Ale ile to zdobytego doświadczenia...

W zasadzie największa misteria działania w takim układzie opiera się na sofcie (tak mi się wydaje). Możesz trochę podpowiedzieć, jak powinien wyglądać algorytm do sterowania takim CCM, bo sterowanie tylko na zasadzie histerezy z napięcia wyjściowego jest raczej słabą koncepcją 😉

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...