Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sterownik silnika BLDC - grzejące się MOSFETY

pawgo2606 24 May 2012 18:17 9734 26
Automation24
  • #1
    pawgo2606
    Level 10  
    Tak jak w temacie. Zrobiłem sterownik na podstawie danych znalezionych w Internecie:
    http://www.ulrichradig.de/home/index.php/avr/brushless-motor-controller

    Na tej podstawie zrobiłem następujący schemat na ATmedze32:
    Sterownik silnika BLDC - grzejące się MOSFETY

    Jednak mam problem ze sterowaniem...

    Jeżeli prąd jest w granicach 2A to MOSFETY się nie grzeją, jeżeli wzrośnie to robią się bardzo gorące... spłynęły mi raz. Proszę o pomoc.
    Poniżej zamieszczam kod źródłowy.

    Code: cpp
    Log in, to see the code


    Proszę o pomoc.

    Tu podaję datascheet MOSFETÓW:
    Link
    Link

    Mosfety IRF5305 taktowane są poprzez PWM o zmiennym wypełnieniu i częstotliwości około 16kHz, natomiast IRF1205 pracują na załącz i wyłącz.
    Przełączanie poszczególnych zaworów odbywa się poprzez pomiar BACK-emf.
    Proszę o pomoc i jeżeli będą jeszcze jakieś pytania to piszcie.
  • Automation24
  • #2
    janbernat
    Level 38  
    Te dolne też spłynęły?
    16 khz daje 62.5us- a sterowanie takie sobie.
    Rozładowanie bramki górnego mosfeta (włączanie) będzie aż za dobre- opornik w szereg by się przydał.
    Ale ładowanie (wyłączanie) będzie dość wolne.
    No i chcesz do dolnych mosfetów pociągnąć 150mA z procesora- i tak Ci się nie uda.
    Oporność kanału mosfetów w procesorze wynosi ok. 40ohm.
    Tak że pociągniesz 68mA- a procesor tego nie lubi- za dużo.
    Kondensatory przy zasilaniu mosfetów 100nF- to tylko jako dodatek.
    Tam powinny być z 1000uF.
    O prowadzeniu zasilania- wiesz jak to zrobić mam nadzieję.
    Wytłumaczenie fizyczne jest myślę takie- napięcie na przewodach zasilających siada- może nie stale- tylko w czasie trwania impulsu.
    Napięcie Ugs górnych tranzystorów już nie jest 12V ale dużo mniej.
    Tranzystor zbliża się do zakresu pracy aktywnej albo nawet w ten zakres wchodzi.
    Zaczyna gwałtownie wzrastać oporność kanału no i temperatura.
  • #3
    pawgo2606
    Level 10  
    Spłynęły z czerwonej warstwy(1205)... Czyli radzisz wymienić kondensatory na większe i wstawić, zwiększyć częstotliwość wysterowania PWM, w szereg wstawię 22 omy?



    Płytka wygląda następująco:
    Sterownik silnika BLDC - grzejące się MOSFETY



    Strona czerwona to 1205, a zauważyłem że grzeją się najpierw 5305.

    Jaki byś zaproponował schemat wysterowania tych mosfetów aby było dobrze??
  • #4
    nibbit
    Level 20  
    Na pierwszy rzut oka nie widzę, ale czy aby na pewno masz rozwiązaną sprawę dead timów? Zwykłe ATMega mają kanały PWM z obsługą deadtime?
  • Automation24
  • #5
    pawgo2606
    Level 10  
    Wrzuciłem kod i opóźnienia realizuję w ten sposób:
    Code: cpp
    Log in, to see the code


    Dodano po 1 [godziny] 47 [minuty]:

    Na chwilę obecną bedę miał taki układ obsługi mosfetów:

    Sterownik silnika BLDC - grzejące się MOSFETY

    Czy tak może pozostać??
  • #6
    nibbit
    Level 20  
    Zupełnie o coś innego chodzi. Zerknij na to:
    http://www.atmel.com/Images/doc8192.pdf

    Jak słusznie Janbernat zauważył czasy wł i wył tych tranzystorów są (i będą) różne. Oznacza to tyle, że przez chwilę oba tranzystory są włączone co powoduje, że płynie duży prąd i się grzeją. Im większym prądem je wysterujesz + brak deadtimów tym szybciej się uszkodzą. To moja hipoteza ;]

    No i te deadtime'y konfigurujesz na taki czas (można to dobrać nawet eksperymentalnie) aż tranzystor zdąży się wyłączyć przed włączeniem drugiego z pary komplementarnej.
  • #7
    pawgo2606
    Level 10  
    No dobrze, ale w nocie ATmega32 nie znalazłem nic na ten temat. A czy analizowaliście kod, który wrzuciłem?? Bo tam mam wstawione opóźnienia więc powinno być ok..
  • #8
    nibbit
    Level 20  
    Tyle o ile. W każdym razie to co masz w pętli głównej to nie rozumiem co ma robić. Komutację masz napisaną w przerwaniu od komparatora a potem tak jakby drugi raz w pętli głównej. I to opóźnienie też nie za bardzo wiem czemu by miało służyć tym bardziej że tam już przecież silnik pracuje w zamkniętej pętli.
  • #9
    pawgo2606
    Level 10  
    W pętli głównej realizuję zmianę kolejnych faz i zmiennej phase. W przerwaniu realizuję pomiar wstecznej siły motorycznej, która pozwala na przełączanie faz a porównanie od komparatora zależne jest od zmiennej phase. Tak więc pętla główna zmienia mi kolejne stany, przechodzi po przerwania i w momencie wykrycia przez komparator danego zbocza wraca mi do pętli głównej.
  • #10
    janbernat
    Level 38  
    Kodu nie sprawdzałem ale skoro działa przy 2A a przy 3A już nie to zakładam że kod jest dobry.
    Przecież tylko PWM ma większe wypełnienie ale częstotliwość- czyli ilość przełączeń- jest taka sama.
    Zmienia się tylko średni pobór prądu- teoretycznie prąd maksymalny jest taki sam.
    Ale- jest takie coś jak indukcyjność uzwojeń.
    Może przy małym wypełnieniu prąd nie osiąga pełnej wartości ze względu na stałą RL.
  • #11
    pawgo2606
    Level 10  
    Dalej mam problem z układem, czy ktoś może mi doradzić jak dobrać rezystory pomiędzy GS?? bo mam tu wartości 270 i 1,8k. Po zmianie rezystorów z 1,8 na 18k dla mosfetów IRFR1205 silnik zaczął mi procować płynnie ale dalej się grzeją mosfety... Dodatkowo dla IRFR1205 wyrzuciłem rezystory R=33 na wejściu (G).
  • #12
    Freddy
    Level 43  
    pawgo2606 wrote:
    Dalej mam problem z układem, czy ktoś może mi doradzić jak dobrać rezystory pomiędzy GS?? bo mam tu wartości 270 i 1,8k. Po zmianie rezystorów z 1,8 na 18k dla mosfetów IRFR1205 silnik zaczął mi procować płynnie ale dalej się grzeją mosfety... Dodatkowo dla IRFR1205 wyrzuciłem rezystory R=33 na wejściu (G).

    Zerknij na inne zamieszczone rozwiązania i podglądnij co sie tam robi.
    Zamieszczałem takie artykuły na forum.
  • #13
    Ch.M.
    Level 27  
    Witaj,
    Nic dziwnego, że mosfety z kanałem P grzeją się mocniej/wcześniej: mają 3x większe RdsOn od tych z kanałem N.
    Swoją droga trzeba było zbudować mostki H tylko na mosfetach N.

    Co do rezystorów 33R to można je zostawić.

    Bez oscyloskopu to raczej się nie obędzie przy tuningu tego mostka :)
    Zakładam, że przez pewien czas przewodzą oba mosfety na raz stąd grzanie. Po-manipuluj wartością dead-time.

    Zmieniłbym jeszcze zasilanie pinu AVCC na filtrowane przez jakiś dławik i pojemność. Inne piny Vcc tez nie bez powodu nie są zwarte wewnętrznie... oczywiście te poprawki niewiele wnoszą, tylko poprawność inżynierską obwodów :)


    Do kolegi poniżej: DSPice nic nie wniosą nowego są też AVR z dedykowanymi peryferiami do obsługi BLDC.

    Pozdrawiam
  • #15
    Anonymous
    Anonymous  
  • #16
    nibbit
    Level 20  
    albertb wrote:
    Zamiast przerzucać się że dsPic mają wszystko, lub że AVR-y też są z dedykowanymi peryferiami do BLDC proponuję podać o jakie MCU wam chodzi i co dzięki nim zyskujemy w temacie. Wtedy zamiast flame'a będzie można coś ciekawego się dowiedzieć. Chyba, że tylko o flame'a chodziło?

    Albert


    A informacja, że gdy PWM nie ma zaimplementowanych deadtimeów to tranzystory będą przez chwilę jednocześnie otwarte nie jest istotna? Procesor nie ma tu znaczenia. W nocie którą wcześniej podałem jest to narysowane i opisane.
  • #17
    Udios
    Level 12  
    Witam
    to dziwne że przy 3 amperach tak się grzeją tranzystory. Są te same co w regulatorze BL-Ctrl V1.2, regulator podobny to będziesz mógł sobie porównać schemat.
    https://www.mikrocontroller.com/index.php?main_page=product_info&cPath=76&products_id=209&zenid=abdd09851f299c3dda647332a535b7e6
    a tu sprzedawca podaje prąd 12A w impulsie 25A

    Jeżeli masz sprawdzony wsad programu z strony z której wziąłeś schemat to nie mam pojęcia co może być, ale jeżeli sam robiłeś program do sterowania to trzeba było by sprawdzić 2 powody z których mogą się grzać tranzystory.
    1. czy czasem nie załączają się przez jakiś moment razem górny i dolny tranzystor - powodując przepływ prądu zwarciowego
    2. co wydaje mi się bardziej prawdopodobne może coś być nie tak z sprzężeniem zwrotnym i komutacją. Czytałem gdzieś ostatnio że silniki BLDC nie mogą być sterowane jak zwykłe silniki krokowe, a ich komutacja musi powstać na podstawie sygnału zwrotnego w odpowiednim momencie położenia, inaczej się grzeją.
    Akurat jestem na etapie początkowym zbierania części do quadrocoptera. I właśni z tego powodu nie chcąc sie wgryzać w wektorowe sterowanie silników czy jakie to tam jest zamówiłem sobie płytki od regulatora BL-Ctrl V1.2 i wykorzystam ich gotowy program.

    Janbernat może mieć rację z większym kondensatorem przy zasilaniu tranzystorów. W BL-Ctrl V1.2 jest dodawany R9.

    Nie wiem czy Ci się przyda ale umieszczam strony które sobie zapamiętałem gdy szukałem coś o sterownikach BLDC.

    https://www.elektroda.pl/rtvforum/topic1488939.html
    https://www.elektroda.pl/rtvforum/topic2268725.html#10771233
    http://www.jetcontrol.de/Bastelstube/1n1p.html

    Pozdrawiam
  • #18
    Anonymous
    Anonymous  
  • #19
    pawgo2606
    Level 10  
    No właśnie na podstawie tego robiłem sterownik a program był przerabiany i sprawdziłem przejścia kolejnych faz więc nie mam pojęcia co jest nie tak... A i dodam jeszcze, że strasznie mi sieje na płytce i mosfety nie są wysterowane czystym prostokątem więc może i to ma wpływ... Sprawdzałem na płytce stykowej sterowanie tymi mosfetami i wszystko jest ok...

    A czy ktoś przeanalizował mój program??

    Chodzi mi o to czy tą komendą: ACSR&=~0x08; wył przerwania a ACSR|=0x08; włączam przerwania od komparatora.

    A takimi ustawieniami:
    Code: cpp
    Log in, to see the code

    prawidłowo ustawiam PWM, komparator i przetwornik ADC mikrokontrolera ATmega32??
  • #20
    Anonymous
    Anonymous  
  • #21
    nibbit
    Level 20  
    Szczerze mówiąc to ja zerknąłem na kod do tego miejsca i przestałem ;]. To intrygujące zero chyba najlepiej żeby sam autor wyjaśnił czemu służy. Po nazwie obstawiam że chodzi o przejścia przez zero no ale sposób zapisu i niezrobienie tego na maszynie stanów woła o pomstę do nieba.

    I drugie co mi nie pasuje. Mi się wydaje czy w 2 miejscach robisz komutację?

    Naprawdę najlepiej będzie jak poprzeglądasz noty różnych producentów i poanalizujesz ich kody bo jeśli ten kod będzie miał działać to tylko na słowo honoru. Bardzo fajnie opisywał sterowanie bezczujnikowe microchip ale znajdziesz też u TI, Atmela.

    No i po raz kolejny, rozumiesz problem deadtime'ów? Obawiam się, że nie zrobisz tego w przyzwoicie działający sposób na tym procku.

    Ps.
    No masz rację Albert. Tutaj właściwie każdy procesor który ma PWM z obsługą deadtime i ADC lub komparatorem da radę ;].
  • #22
    pawgo2606
    Level 10  
    Chodzi tu o to, że zmienna ta uzależnia przechodzenie do kolejnych stanów i raz jest używana w przerwaniu od timera0, który sprawdza czy silnik się kręci, od przerwania komparatora i wreszcie w pętli głównej, gdy silnik się kręci i na wejściu komparatora mamy informację o zboczu opadającym bądź narastającym siły BackEMF.
    Ogólnie schemat pracy przedstawia się następująco:
    Sprawdzenie wartości wypełnienia PWM (zmienna Buf).
    To można pominąć:
    Code: cpp
    Log in, to see the code

    Dalej jest warunek jeżeli zero rózne od 0 i speed większe od wartości minimalnej to wchodzimy do obsługi faz silnika.
    Generacja przerwania od timera0 i od komparatora.
    Komparator sprawdza wsteczną siłę SEM i w momencie wykrycia danego zbocza przełącza na koleją fazę. Timer odpowiada za wykrywanie czy silnik pracuje. Trochę tu pogmatwane jest z tymi zmiennymi.
    To ogólny zarys działania programu.
    Pomiar Back-EMF realizowany jest poprzez komparator i 3 wejścia przetwornika ADC.
  • #23
    janbernat
    Level 38  
    A ja radzę ten drugi schemat sterowania zanalizować krok po kroku.
    Krok po kroku- co będzie w momencie wysterowania tranzystora T1- którędy
    ma wypłynąć ładunek dodatni z bramki mosfeta.
    I odwrotnie- T1 odcięty.
    Bo to chyba będzie działać źle.
  • #24
    pawgo2606
    Level 10  
    Zostaję przy pierwotnym układzie sterowania.
  • #25
    Anonymous
    Anonymous  
  • #26
    pawgo2606
    Level 10  
    Znalazłem taki kod ze strony:
    http://www.ulrichradig.de/home/index.php/avr/brushless-motor-controller
    Code: cpp
    Log in, to see the code


    Tylko muszę to przerzucić na ATmege32.

    Nie jestem pewien tylko rejestrów dotyczących komparatora i przetwornika ADC bo pwm wziąłbym ze swojego programu.
    Czy ktoś mógłby mi pomóc??
    Obecnie stanąłem na takiej wersji:
    Code: cpp
    Log in, to see the code
    [/code]
  • #27
    pryk_u
    Level 2  
    Witam Wszystkich,

    Chciałbym się doczepić do tematu, ponieważ też chodzi o sterownik BLDC, który odrazu wyjaśnię nie koniecznie musi być zrobiony w rzeczywistości, ale żeby był sensowny projekt tego sterownika na Atmega88. Zrobiłem pierwszą przymiarkę i chciałem was zapytać czy taki układ, którego zdjęcia umiesciłem poniżej ma prawo działać? Przy projektowaniu przyjąłem założenia: parametry silnika są na obrazku poniżej, silnik ma być sterowany bipolarnie, częstotliwość PWM 5kHz, zadawanie wartości prądu do regulatora PI przez układ TL431A, nie jestem pewien ale prądy fazowe i tym samym prąd przekształtnika mogę chyba wyliczyć z pomiarów z tego obwodu do tworzenia sztucznego zera, to te porty zamazane nad stabilizatorem 78L05. Swoją drogę jak zrobić żeby można to wszystko z jednego zasilacza zasilać: silnik, mikrokontroler i układy pośredniczące jak np. sterowniki mosfetów. Starałem się to tak podpiąć żeby była możliwość ustalania czasu przewodzenia tranzystorów, na podstawie sygnałów z czujników halla 4,5,6 obok wyprowadzeń na silnik, jak i również z pomiaru trzeciej harmonicznej z punktu sztucznego zera. W rzeczywistości buduje mały sterownik na tranzystorach bipolarnych na silniczek od dysku twardego w celach dydaktycznych. Proszę o jakąś recenzje układu i uwagi co gdzie trzeba poprawić. Sterownik silnika BLDC - grzejące się MOSFETY Sterownik silnika BLDC - grzejące się MOSFETY