Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Silnik BLDC - oznaczenie faz silnika

aplov 22 Sty 2016 16:28 56787 27
  • #1 22 Sty 2016 16:28
    aplov
    Poziom 6  

    Witam.
    Na samym wstępie dodam, iż jestem początkującym w dziecinie programowanie i w ogóle elektroniki.

    Rozebrałem ostatnio napęd DVD, wyciągając z niego silnik BLCD i napotkałem problem przy oznaczaniu faz.
    Korzystając z PORADNIK zauważyłem, że zamieszczony tam silnik posiada 3 przewody i każdy z nich odpowiada 1 fazie.

    Natomiast ja posiadam takich przewodów 4, przy takiej samej liczbie uzwojeń( 9 ).
    I stąd moje pytanie: Jak mogę oznaczyć te fazy.

    0 27
  • Pomocny post
    #2 22 Sty 2016 17:27
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zapewne jest to zwykły silnik 3-fazowy, lecz z wyprowadzonym punktem wspólnym uzwojeń co ułatwia detekcję bezsensorową. Zmierz opory pomiędzy wejściami - opór do punktu wspólnego powinien być o połowę mniejszy niż pomiędzy pozostałymi wejściami silnika.

    0
  • #3 22 Sty 2016 18:18
    aplov
    Poziom 6  

    Po dokonaniu pomiarów doszedłem do wniosku, że najprawdopodobniej 1 z przewodów jest tym wspólnym wyprowadzeniem.
    Lecz nie mam pewności gdyż pomiary wahały się przeciętny opór to około 3-4 Ω, a przy połączaniu z 1 przewodem był prawie zawsze niższy, a czasami równy z pozostałymi.

    0
  • Pomocny post
    #4 22 Sty 2016 18:51
    tmf
    Moderator Mikrokontrolery Projektowanie
  • #7 24 Sty 2016 00:48
    aplov
    Poziom 6  

    Tak po za tym mam jeszcze jedno pytanie, w jaki sposób mogę poprzez atmege 8 zasilić ten silnik napięciem wyższym od 5v ?
    Szukałem trochę informacji na ten temat i dowiedziałem się, że mogę to zrobić za pomocą przekaźników, ale czy jest to jedyna możliwość ?

    0
  • Pomocny post
    #8 24 Sty 2016 10:01
    tronics
    Poziom 36  

    Oczywiście, że nie, albo dedykowany driver, albo tranzystory.

    0
  • Pomocny post
    #9 24 Sty 2016 11:11
    tmf
    Moderator Mikrokontrolery Projektowanie

    aplov napisał:
    Tak po za tym mam jeszcze jedno pytanie, w jaki sposób mogę poprzez atmege 8 zasilić ten silnik napięciem wyższym od 5v ?
    Szukałem trochę informacji na ten temat i dowiedziałem się, że mogę to zrobić za pomocą przekaźników, ale czy jest to jedyna możliwość ?


    Przekaźniki to akurat odpadają. Poczytaj:
    http://mikrokontrolery.blogspot.com/2011/03/silnik-bldc-spis-tresci.html

    0
  • #10 08 Lut 2016 21:07
    aplov
    Poziom 6  

    Podłączyłem silnik tranzystorami MOSFET:
    - IRF9540 [Dokumentacja]
    - CDZ44N [Dokumentacja]


    Przełączam je następującymi krokami:
    Silnik BLDC - oznaczenie faz silnikaBez tyt...png Download (6.38 kB)

    Mój problem jest następujący: silnik kręci się do momentu gdy czas
    miedzy kolejnymi krokami będzie większy niż 5 ms, a gdy zejdę poniżej tą wartość, wirnik stoi w miejscu i wibruje.

    Myślę, że jest to spowodowane zbyt wolnymi obrotami wirnika
    przez co, sam wirnik nie nadąża za polem magnetycznym, ale pewności nie mam.

    W jaki sposób mogę uporać się z tym problemem ?

    0
  • Pomocny post
    #11 09 Lut 2016 02:16
    excray
    Poziom 39  

    Zwiększyć prąd na cewkach czyli zapewne zwiększyć napięcie. Po drugie stosować rozpędzanie.

    0
  • #12 09 Lut 2016 08:44
    tmf
    Moderator Mikrokontrolery Projektowanie

    aplov napisał:

    Mój problem jest następujący: silnik kręci się do momentu gdy czas
    miedzy kolejnymi krokami będzie większy niż 5 ms, a gdy zejdę poniżej tą wartość, wirnik stoi w miejscu i wibruje.

    Myślę, że jest to spowodowane zbyt wolnymi obrotami wirnika
    przez co, sam wirnik nie nadąża za polem magnetycznym, ale pewności nie mam.

    W jaki sposób mogę uporać się z tym problemem ?


    Można próbować zwiększyć prąd silnika, ale zapewne problem związany jest ze złym czasem komutacji. Czyli w niewłaściwych momentach (rotor nie osiągnął jeszcze, lub jest już za punktem komutacji).

    0
  • #13 09 Lut 2016 09:35
    aplov
    Poziom 6  

    tmf napisał:


    Można próbować zwiększyć prąd silnika, ale zapewne problem związany jest ze złym czasem komutacji. Czyli w niewłaściwych momentach (rotor nie osiągnął jeszcze, lub jest już za punktem komutacji).


    Zapewne tak. Niestety nie posiadam czujników halla aby badać położenie wirnika, mam same tranzystory

    0
  • Pomocny post
    #14 09 Lut 2016 09:52
    excray
    Poziom 39  

    Jeśli robisz to tylko dla zabawy to możesz zrobić rozpędzanie - startujesz z małej prędkości i nie za szybko programowo ją zwiększasz. W ten sposób rozpędzałem silniki od HDD do 12000 obr/min. Niemniej jeśli silnik straci z jakiegokolwiek powodu synchroniczność to musisz rozpoczynać od nowa.

    0
  • #15 09 Lut 2016 16:06
    aplov
    Poziom 6  

    Wszystko działa jak należy, ale tranzystory straszliwie się grzeją, po krótkim czasie pracy zaczynają parzyć. To normalne czy błąd w konstrukcji ?

    0
  • #16 09 Lut 2016 18:22
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zapewne kolejny błąd w konstrukcji - pomiędzy przełączeniem górnego i dolnego tranzystora mostka musi być pewien dead time, inaczej przez chwile przewodzą oba i rosną straty. Przydałby ci się oscyloskop, żeby podglądnąć co się dzieje. Ew. można wykorzystać do tego ADC mikrokontrolera i wyrzucać wyniki pomiaru prądu mostka, synchronizowane jego przełączaniem. Mniej więcej zobaczysz co się dzieje.

    0
  • #17 09 Lut 2016 18:40
    aplov
    Poziom 6  

    Ok, czyli jeśli mam taki kod do obracania wirnikiem:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To powinienem np w kroku 1 zrobić takie cos:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czy stosować opóźnienia wtedy gdy zmieniane są tranzystory należące do tej samej bramki ?

    0
  • #18 09 Lut 2016 18:53
    tmf
    Moderator Mikrokontrolery Projektowanie

    Tak, opóźnienie należy zastosować pomiędzy przełączeniem górnego i dolnego tranzystora tego samego półmostka. Przy czym niekoniecznie wyniesie ono 1 us - trzeba policzyć jak długo przełącza się tranzystor (a to m.in. zależy od wydajności drivera sterującego bramką). Poza tym twój kod nie zapewnia synchronizacji komutacji z położeniem rotora - cokolwiek nie zrobisz, już przy stosunkowo niewielkiej prędkości obrotowej zerwie synchronizację. Kolejna sprawa - sterowanie półmostkami należy zrobić w maksymalnym stopniu sprzętowo - a więc timery, PWM, sprzętowa inwersja fazy i dead-time (jeśli w procku jest). Kod, który pokazałeś może być co najwyżej demonstracją, że ogólnie to działa - mam nadzieję, że zdajesz sobie z tego sprawę.

    0
  • #19 09 Lut 2016 21:56
    aplov
    Poziom 6  

    Korzystam z prostej funkcji startu gdzie stopniowo zwiększam wypełnienie PWM oraz zmniejszam czas miedzy kolejnymi krokami, ale nie potrafię poradzić sobie z tym dead-time'em. Szukam jakiś poradników na ten temat, ale wszystko co znalazłem było anglojęzyczne, a mój angielski jest dość słaby jeśli chodzi o takie sprawy.

    Udało mi się zmniejszyć czas miedzy kolejnymi krokami do 220 us przy 185/255 wypełnieniu PWM, ale niżej gubi już synchronizacje.

    0
  • #20 18 Lut 2016 04:08
    aplov
    Poziom 6  

    Próbuje poradzić sobie z tym dead-time'em ale nie mam pojęcia, które z 6 kroków powinny mieć opóźnienia i gdzie te opóźnienia umieścić.
    Jeśli ktoś wie jak to zrobić prosiłbym o pomoc albo chociaż o podanie jakiegoś polskojęzycznego poradnika poradzenia sobie z owym problemem.

    0
  • #21 18 Lut 2016 10:30
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przede wszystkim musisz wykrywać moment komutacji - bez tego całe sterowanie jest bez sensu, bo przy byle obciążeniu silnik straci synchronizację. A dead-time należy wstawiać pomiędzy przełączeniem górny-dolny tranzystor tego samego półmostka. Niestety bez angielskiego ani rusz.

    0
  • #22 18 Mar 2016 19:19
    aplov
    Poziom 6  

    Mam pytanie dotyczące klucza przełączającego.

    Poniżej jest schemat ze strony http://mikrokontrolery.blogspot.com
    Silnik BLDC - oznaczenie faz silnikasilnik-BLD...rtosci.gif Download (10.93 kB)
    Pytanie dotyczy zaznaczonego fragmentu.
    Gdy tranzystor Q1 dostarcza na fazę X napięcie to, to napięcie jest dostarczane na przewód fazy X oraz na tranzystor Q2.
    I to powoduję grzanie się tranzystora Q2 mimo, że jest on zamknięty.

    W jaki sposób mogę podłączyć te 2 tranzystory Q1 i Q2 aby nie nagrzewały sie wzajemnie ? Chyba, że ja źle coś rozumiem i nagrzewanie się ich jest powodem czegoś innego ??

    0
  • Pomocny post
    #23 18 Mar 2016 23:42
    dondu
    Moderator Mikrokontrolery Projektowanie

    Nie chodzi o podłączenie, tylko o sterowanie. Wyłączenie tranzystora nieco trwa, stąd jeśli dokładnie w tym samym momencie włączysz Q1, a wyłączysz Q2, to zależnie od użytych tranzystorów przez ułamek sekundy powodują one zwarcie zasilania do masy. Od tego są specjalne mikrokontrolery z timerami z dead-time lub sterowanie programowe, które można zrobić dowolnie.

    Innym problemem grzania się tranzystorów jest niepełne ich otwarcie przez co mają sporą rezystancję, a ta w połączeniu z przepływającym przez nie prądem powoduje wydzielanie ciepła.

    0
  • #24 19 Mar 2016 00:28
    aplov
    Poziom 6  

    Dziękuje za cenne informacje, ale mam jeszcze jedno pytanie, czy prawidłowym będzie zastosowanie w miejsce tranzystora Q3, takiego samego jak Q2 ?

    0
  • Pomocny post
    #25 23 Mar 2016 06:25
    emarcus
    Poziom 34  

    aplov napisał:
    .... czy prawidłowym będzie zastosowanie w miejsce tranzystora Q3, takiego samego jak Q2 ?

    Jeżeli masz na myśli zamiast BJT służący jako 'level shifter' dla tranzystora mocy P-Mosfet, zastosowac tranzystor N- mosfet, to takie rozwiązanie nie jest błędne; - lecz generuje następne pytanie: co chcesz przez to osiągnąc?

    Przeglądnij Notę katalogową:
    https://www.infineon.com/dgdl/Infineon%20-%20...l.pdf?fileId=db3a304341e0aed001420380cc13101b
    gdzie takie zastosowanie jest możliwe. Rysunek dolny (Figure 3.1, lub Figure 3.3).

    Rozumiem że ten temat to tylko experyment, mający na celu uruchomienie 3-fazowego silnika BLDC, bez regulacji obrotów, i bez konkretnego zastosowania tego silnika z uwagi na jego kiepskie parametry (relatywnie niskie obroty i raczej niski moment obrotowy) w fabrycznym wykonaniu.
    Na początek (eh, poczatek już masz za sobą) możesz przeglądnąc w miarę prosty sposób na ten silnik; - dwa warianty zasilania:
    http://www.instructables.com/id/Run-A-CDROM-Brushless-Motor-With-Arduino/
    oraz druga częśc:
    http://www.instructables.com/id/Arduino-CDROM-BLDC-Motor-Driver-Enhanced-Performan/

    Jeżeli jednak zechciałbyś zastosowac ten silnik w jakimś bardziej użytkowym projekcie (na przykład w modelarstwie lotniczym), to wymagałoby to pewnych przeróbek tego silnika, począwszy od zmiany typy uzwojenia z gwiazdy na trókąt, a kończąc na kompletnym przezwojeniu go do wymaganego zakresu obrotów i możliwie wysokiego momentu obrotowego .
    Naturalnie cały projekt możesz (należałoby) rozszerzyc o ESC (Electronic Speed Controller) ....
    Dużo informacji znajdziesz tu: (kilkaset postów przez hobbystów RC)
    http://www.rcgroups.com/forums/showthread.php?threadid=127606
    W dalszych częściach dyskusji tego tematu znajdziesz schemat z omówieniem dla regulatora prędkości, jak również linki do innych miejsc w int. tematycznie związanych .

    e marcus

    0
  • #26 23 Mar 2016 14:27
    aplov
    Poziom 6  

    Po ciężkich próbach udało się uruchomić silnik sterując tylko wypełnieniem PWM, co prawda silnik potrzebował sporej ilości RPM aby uC wychwytywał Back-EMF.
    Prędkość próbowałem kontrolować przez ADC skalując jego wartość z 0-1023 do 0-255, mnożąc otrzymaną wartość z ADC przez 255/1023.
    Niestety pomysł był zły albo ja coś pochrzaniłem w kodzie, stawiam na to 2 ponieważ podobnym sposobem sterowałem sinik DC(działało);

    Dziękuje e marcus za przydatne informacje na pewno skorzystam :)

    Również dziękuje za pomoc pozostałym użytkownikom.

    0
  • Pomocny post
    #27 25 Mar 2016 05:26
    emarcus
    Poziom 34  

    aplov napisał:

    Prędkość próbowałem kontrolować przez ADC skalując jego wartość z 0-1023 do 0-255, mnożąc otrzymaną wartość z ADC przez 255/1023.


    Prościej i z dostateczną dokładnością jest: otrzymana wartośc z ADC podzielic przez 4....(?)

    e marcus

    0
  • #28 29 Maj 2016 11:39
    aplov
    Poziom 6  

    emarcus napisał:

    Prościej i z dostateczną dokładnością jest: otrzymana wartośc z ADC podzielic przez 4....(?)
    e marcus


    Zamieniłem to na przesunięcie bitowe i jest ok.

    Sterownik działa OK, ale jeśli chce wykonać pomiar za pomocą ADC aby ustalić wartość PWM występuję pewien problem...Nie można używać ADC i komparatora jednocześnie więc:

    -Wyłączam komparator
    -Włączam ADC
    -Ustawiam kanał pomiaru
    -Wykonuje pomiar
    -Wyłączam ADC
    -Włączam komparator

    Robi to następująca funkcja:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Funkcję tą wywołuje pod koniec 6 kroku silnika. Po wywołaniu tej funkcji komparator nie działa poprawnie bo nie generuje przerwań z BEMF.

    EDIT.
    Uporałem się z problemem. Zapomniałem pod koniec ustawić kanał MUX'a na 1 faze.

    0