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

Sterowanie silnikiem BLDC

14 Gru 2015 23:17 2130 21
  • Poziom 20  
    Witam
    Czy ktoś posiada jakiś przystępny opis metod/algorytmów sterowania silnikiem BLDC ze sprzężeniem w postaci enkodera absolutnego? Chcę zrealizować takie sterowanie na uC STM32?
    Pozdrawiam
    A.T.
  • PCBway
  • PCBway
  • Poziom 20  
    W jaki sposób mogę wykorzystać sygnał z enkodera przy wyznaczaniu komutacji. Czy dobrze kombinuję, że w oparciu o informację z enkodera muszę wyznaczyć odpowiednią fazę komutacji, a później wykorzystując 3 osobne kanały sprzętowego PWMa podłączonego do np masowych gałęzi mostka zadawać sygnał PWM, który będzie umożliwiał regulację prędkości i momentu? Dobrze w ogóle myślę? W jaki sposób mogę odczytać położenie wirnika względem informacji z enkodera, muszę ustawić enkoder w jakiejś konkretnej pozycji i ją zapamiętać w programie(np. na początku procesu komutacji)? Dodam, że wykorzystuje magnetyczny enkoder z magnesem na osi wirnika, a steruję silnikiem z gimbala (22 magnesy stałe i 24 cewki).
    Pozdrawiam
    A.T.
  • Moderator Mikrokontrolery Projektowanie
    Enkodery tego typu charakteryzują się tym, że dokładnie określają położenie wirnika nawet wtedy, gdy odłączone jest zasilanie, a wirnik jest kręcony. Dlatego też można je stosować (pod warunkiem odpowiedniej rozdzielczości) do sterowania silnikiem gimbala.

    Twoje rozumowanie jest prawidłowe - musisz wyznaczyć wartości, przy których mają następować komutacje.

    Możesz podać jaki to konkretnie jest typ enkodera? Poszukamy dokumentacji.
  • Poziom 20  
    Enkoder AS5048A, obsługiwany poprzez SPI. Obsługę już wykonałem, działa poprawnie. Enkoder zamocowany na statorze, magnes na osi wirnika także. Na cały obrót przypada 8192 wartości.Tylko nie wiem jak wyznaczyć te obszary w których ma następować komutacja.
  • Moderator Mikrokontrolery Projektowanie
    Nie robiłem jeszcze gimbala (silniki leżą w szafie i czekają na swój czas) więc będę gdybał.

    Oznacz sobie stojan w ten sposób: http://mikrokontrolery.blogspot.com/2011/03/silnik-bldc-oznaczenie-faz.html

    Następnie dodaj enkoder (zaznacz na nim punkt zerowy) i ustal zwracane wartości względem zaznaczonych na obudowie miejsc (wskazywanych przez punkt zerowy) .

    Następnie obróć enkoder względem stojanu o połowę odcinka pomiędzy zaznaczonymi punktami w kierunku przeciwnym do ruchu zegara - to moim zdaniem powinno dać Ci punkty, w których nastąpić powinna komutacja przy obrocie w prawo. Podobnie należy wyznaczyć w lewo.

    Jednakże, gimbal musi być bardziej dokładny niż wynika to z konstrukcji silnika, więc zapewne sterowanie jest bardziej skomplikowane, czyli podobne do mikrokrokowego z silników krokowych. Jakby nie patrzeć, w tym wypadku BLDC pełni właśnie rolę silnika krokowego.

    Może ktoś kto zrobił gimbal pomoże?
  • Poziom 17  
    Witam,

    Nie znam dokładnie specyfikacji tego enkodera magnetycznego ale jeśli nie ma możliwości odczytania z niego pozycji absolutnej to przy każdym starcie zasilania będzie musiała nastąpić "kalibracja" punktów komutacji.

    Najprościej jest zasilić silnik na starcie sekwencją napięć stałych które spowodują ustawienie rotora w znanej pozycji i w odniesieniu do tej pozycji przełączać uzwojenia.

    Użycie enkodera wymusza bardzo częste sprawdzanie pozycji , im wyższa prędkość obrotowa, większa liczba par biegunów - tym musi być to robione częściej. Jeśli procek nie będzie odpowiednio szybko reagował na sygnały z enkodera nastąpi opóźnienie wykonania komutacji względem czasu w którym, powinna być ona zrobiona.

    W większości aplikacji wystarcza częstotliwość sprawdzania pozycji równa częstotliwości sygnału PWM.

    Pozycja może być sprawdzana np. w momencie przeładowania rejestrów PWM, algorytm musi przetransformować pozycję z enkodera na jeden z 6 sektorów komutacji.

    Jeśli enkoder ma być wykorzystany TYLKO do komutacji może kolega wyzerować go po ustawieniu rotora do znanej pozycji i co określoną liczbę impulsów z enkodera, która wynika z jego rozdzielczości, dokonywać przełączenia uzwojeń.
    Jeśli uC posiada moduł QEI wszytko można zrobić sprzętowo wykorzystując rejestry porównujące.

    Pozdrawiam,
    Marcin
  • Poziom 43  
    dondu napisał:
    Enkodery tego typu charakteryzują się tym, że dokładnie określają położenie wirnika nawet wtedy, gdy odłączone jest zasilanie, a wirnik jest kręcony. .

    Spotkałem się z opinią że enkoderem absolutnym jest enkoder dający na wyjściu dane absolutne. A nie absolutny "w budowie".
    W moim konkretnym przypadku chodziło o enkoder inkrementalny ze sterownikiem z baterią podtrzymującą zliczone impulsy.
    Ja się oczywiście nie zgadzałem z taką opinią, no ale kto by mnie tak słuchał.
    Dlatego trzeba uważać na takie określenie enkoderów.
    Do komutacji silnika (który może zostać obrócony również podczas przerwy w zasilaniu) należy zastosować prawdziwy enkoder absolutny, a nie jakieś cudo co jedynie udaje taki enkoder.
    No chyba żeby zerować pozycję przy starcie, wymuszając chwilowe zasilanie określonego uzwojenia.
  • Poziom 20  
    Dziękuję za wszystkie odpowiedzi. Jeżeli chodzi o enkoder to tak jak wcześniej mówiłem, jest to enkoder absolutny. Po odłączeniu zasilania i obróceniu wirnika on także zmienia wartość. Mnie chodzi o to jaki rodzaj komutacji zastosować oraz w jaki sposób mogę wykorzystać te dane o położeniu wirnika do procesu komutacji. Ogólnie ma to być sterownik gimbala, oznacza to, że sterowanie silnikiem musi być bardzo precyzyjne. Silnik jest do tego przystosowany, posiada aż 22 magnesy stałe. Bardzo proszę kogoś o pomoc w kwestii doboru odpowiedniego algorytmu sterowania pozycją wirnika oraz jakiegoś opisu tego algorytmu pomocnego w implementacji. Widziałem w gotowych sterownikach gimbali, że jedynym parametrem silnika jaki się podaje w programie jest właśnie liczba magnesów stałych (w moim przypadku 22), oraz że chyba wykorzystuje się komutację sinusoidalną aby zapewnić dokładne pozycjonowanie.
  • Pomocny post
    Poziom 43  
    A.T. napisał:
    Mnie chodzi o to jaki rodzaj komutacji zastosować oraz w jaki sposób mogę wykorzystać te dane o położeniu wirnika do procesu komutacji.

    Dość dziwne pytania. Przecież rodzaj komutacji jest jeden i sposób wykorzystania danych z enkodera też jest jeden (w komutacji).

    A.T. napisał:
    Ogólnie ma to być sterownik gimbala

    To w ogóle mnie dziwi. Bo w gimbalach stosuje się sterowanie bez enkoderów.
    Sterowanie synchroniczne. Enkoder można sobie dać ale sterowanie dalej powinno być synchroniczne więc taki enkoder się nie przyda.

    A.T. napisał:
    oznacza to, że sterowanie silnikiem musi być bardzo precyzyjne. Silnik jest do tego przystosowany, posiada aż 22 magnesy stałe.

    22 to akurat całe nic :D
    Do zwykłych zastosowań są silniki o dużo większej liczbie magnesów. Znajomi robili własny silnik i mieli chyba ze 36 magnesów (albo 38). Był to silnik do czegoś w rodzaju łódki, a nie żadnego gimbala.
    Ale to tylko tak piszę przy okazji.

    A.T. napisał:
    Bardzo proszę kogoś o pomoc w kwestii doboru odpowiedniego algorytmu sterowania pozycją wirnika oraz jakiegoś opisu tego algorytmu pomocnego w implementacji. Widziałem w gotowych sterownikach gimbali, że jedynym parametrem silnika jaki się podaje w programie jest właśnie liczba magnesów stałych (w moim przypadku 22), oraz że chyba wykorzystuje się komutację sinusoidalną aby zapewnić dokładne pozycjonowanie.

    No sterowanie sinusoidalne to faktycznie może być jedna z różnic w sterowaniu. Ja bym tego jednak nie nazwał rodzajem komutacji. Tylko rodzajem sterowania.
    Sama komutacja jest taka sama.
    No ale wracając do sterowania sinusoidalnego to trzeba wiedzieć że nie każdy silnik się do tego nadaje. Są silniki specjalnie konstruowane do tego żeby pracować na innych przebiegach. Głównie trapezowych. Taki silnik sterowany sinusoidalnie nie będzie pracował zbyt płynnie.
    To wszystko dotyczy jednak sterowania gdy silnik ma się w miarę szybko kręcić i działać bez bezpośredniego sterowania z zewnątrz. Tzn. sam się komutować, dostając tylko zasilanie.
    A w gimbalu wszystko jest odwrotnie. Obroty są zwykle bardzo małe. Sterowanie jest synchroniczne. Nie podaje się mocy ani obrotów docelowych, lecz pozycję.
    A do ustalenia pozycji wystarczy sterowanie synchroniczne.
    Enkoder nic tu nie daje. Owszem można dać ale do czegoś innego niż komutacja.
    Po prostu do ciągłego monitorowania pozycji.
    Do sterowania silnika wtedy dać sterowanie z regulatora PID. I przebieg sterujący automatycznie uzyskał by odpowiedni kształt. Każda nieliniowość przemieszczenia wirnika była by na bieżąco korygowana przez PIDa. Niezależnie czy silnik by chciał dostać sinusa czy trapeza.
  • Poziom 20  
    Dziękuję za odpowiedź:)
    Masz rację komutacja jest jedna, chodziło mi o różne rodzaje sterowania. Jeśli chodzi o sterowanie synchroniczne to, mógłbyś mniej więcej napisać co to jest, albo wrzucić jakiś odnośnik do przykładowego opisu. Z tego co udało mi się na chwilę obecną uzyskać to jest ustawianie pozycji tak jak mówisz bez enkodera. Na trzy kanały PWM wrzucam przebiegi sinusa przesunięte o 120 stopni względem siebie według takiego wzoru:
    kanał1 = amplituda * sin(pozycja + 0) + amplituda
    kanał2 = amplituda * sin(pozycja + 120) + amplituda
    kanał3 = amplituda * sin(pozycja + 240) + amplituda

    Pozycja to jest wartość z reg. PID, a amplituda świadczy o momencie na silniku oraz o przepływającym przez niego prądowi. No i tutaj jest właśnie problem, czy ten prąd musi ciągle płynąć nawet gdy nie ma zmiany pozycji? Trochę to bez sensu, akumulatory się rozładowują, a silnik się grzeje.

    Jeśli chodzi o niestosowanie enkoderów (lub innych czujników wyznaczających pozycję rotora względem statora) w sterownikach gimbala to się do końca z tym nie mogę zgodzić. Np. bardzo dobry dron DJI Phantom3 posiada nie dość, że czujniki Halla przy silnikach gimbala to jeszcze potencjometr na jego osi wyznaczający pozycję. I raczej na 100% czujniki Halla służą tam właśnie do komutacji. Są usytuowane identycznie jak w takich silnikach ze stacji dysków, dyskietek. Komercyjne projekty takie jak np. sterownik gimbala Alexmos 32 także posiadają możliwość dodania enkoderów. Autor twierdzi, że enkodery poprawiają proces komutacji, sterownik nie gubi niepotrzebnie kroków w komutacji. Pytanie tylko w jaki sposób one oddziałują w procesie komutacji, w którym miejscu tego procesu się je uwzględnia.
    Pozdrawiam
    A.T.
  • Pomocny post
    Poziom 43  
    A.T. napisał:
    No i tutaj jest właśnie problem, czy ten prąd musi ciągle płynąć nawet gdy nie ma zmiany pozycji? Trochę to bez sensu, akumulatory się rozładowują, a silnik się grzeje.

    Niby nie musi ciągle płynąć ale najprościej jest zrobić żeby płynął ciągle.

    A.T. napisał:
    Jeśli chodzi o niestosowanie enkoderów (lub innych czujników wyznaczających pozycję rotora względem statora) w sterownikach gimbala to się do końca z tym nie mogę zgodzić. Np. bardzo dobry dron DJI Phantom3 posiada nie dość, że czujniki Halla przy silnikach gimbala to jeszcze potencjometr na jego osi wyznaczający pozycję. I raczej na 100% czujniki Halla służą tam właśnie do komutacji. Są usytuowane identycznie jak w takich silnikach ze stacji dysków, dyskietek. Komercyjne projekty takie jak np. sterownik gimbala Alexmos 32 także posiadają możliwość dodania enkoderów. Autor twierdzi, że enkodery poprawiają proces komutacji, sterownik nie gubi niepotrzebnie kroków w komutacji. Pytanie tylko w jaki sposób one oddziałują w procesie komutacji, w którym miejscu tego procesu się je uwzględnia.

    No nie do końca one służą do komutacji.
    Komutacja jest procesem używanym gdy wirnik jest w ruchu.
    W pewnym uproszczeniu mówi się że wirnik po osiągnięciu pozycji docelowej (tam gdzie go ciągnie siła elektromotoryczna) powoduje przełączenie prądów w uzwojeniach (za pomocą komutatora). I ta pozycja docelowa się zmienia. I wirnik się porusza dalej. Pozycja docelowa mu ciągle ucieka, bo co raz osiągnie jedną to się ta pozycja robi nieaktualna i się w jej miejsce pojawia następna.
    Ale to jest wyjaśnienie uproszczone. Bo w rzeczywistości przełączanie nie występuje po osiągnięciu pozycji docelowej ale przed nią. Największy moment wirnik ma w połowie drogi do pozycji docelowej. Czyli gdy przesunięcie fazy wynosi 90°.
    I np. w klasycznym silniku trójfazowym BLDC gdzie jest 6 pozycji, każdy pełny cykl komutacji składa się z 6-ciu części. Cykl można uznać za 360°, przy czym nie chodzi o obrót wirnika o 360°, lecz o sam "obrót" cyklu komutacji. I w takim przypadku komutacji dokonuje się po osiągnięciu pozycji 60° przed pozycją docelową (w przypadku sterowania trapezoidalnego). Wcześniej jest dalej od pozycji docelowej: 120°. I wirnik jedzie od tych 120 do 60°, czyli w środku mija 90° gdzie ma największy moment. Daje to największą sprawność silnika.

    I teraz gimbal. Tu występuje zupełnie inna sytuacja.
    Silnik w ogóle nie ma być komutowany. Ani po osiągnięciu pozycji docelowej, ani też po osiągnięciu jakiejś innej gdzieś pomiędzy (np. tych 60° jak przy normalnym silniku).
    Silnik w gimbalu pracuje inaczej. On zwykle stoi. I tylko wykonuje delikatne ruchy korygujące w tył albo przód. Komutacja nic tutaj nie da bo silnik nie może przekraczać pozycji docelowej. On ma ją osiągać i się w niej zatrzymywać.
    Druga sprawa to położenie pracy. Jak pisałem wcześniej, zwykły silnik pracuje w okolicach przesunięcia fazy 90°, bo wtedy ma największy moment obrotowy.
    W gimbalu jest inaczej. Silnik stoi, i moment obrotowy jest potrzebny rzadko. Za to często jest potrzebny moment trzymający.
    Czyli silnik praktycznie ciągle ma być w pozycji 0°. Tu w ogóle nie ma jak wprowadzić komutacji bo skoro jesteśmy w 0° to gdzie miejsce na komutację?
    Komutacja na podstawie teraźniejszego położenia ma przewidzieć przyszłe. Czyli musi być jakieś przesunięcie. Musi być określony kierunek w którym się dąży.
    A gdy się siedzi ciągle na 0° to takiego kierunku nie ma, bo jesteśmy tam gdzie mamy być (nie ma przyszłego innego położenia).
    Taki silnik w gimbalu pracuje więc jak silnik krokowy.
    Moment obrotowy będzie potrzebny przy szybkich ruchach. Czasami gimbal takie ma wykonać. Tylko występuje tu nietypowa sytuacja: nim lepiej gimgal będzie kompensował szybkie (niechciane) ruchy, tym będzie mu lżej.
    Bo ten ruch jest ruchem pozornym. Jest to ruch wirnika względem stojana. Natomiast element który jest na wirniku (kamera) w rzeczywistości ma się nie przesunąć.
    W takim przypadku gimbal nawet podczas ruchów (wirnika względem stojana) będzie widział małe obciążenie momentem obrotowym. Ciągle więc nie potrzebuje pracować na dużym przesunięciu fazy. Może ciągle pracować w okolicach 0°.

    Można tutaj zaimplementować enkoder i na pewno polepszy to działanie. Ale taki enkoder nie będzie pracował jako komutator. Jedynie jako układ który pilnuje czy nie zgubiliśmy kroków. Można go użyć do ograniczenia maksymalnego przesunięcia fazy. Gdy z jakichś przyczyn silnik nie da rady skompensować ruchu i wirnik wyskoczy z synchronizmu względem stojana. Wtedy przesunięcie fazy wzrasta ponad 0°, a nawet ponad 90°. W takim przypadku (po minięciu 90°) siła ciągnąca wirnik (moment trzymający) nie tylko przestanie wzrastać, ale zacznie maleć.
    Więc w takim przypadku można wykorzystać enkoder. Żeby po osiągnięciu 90° przełączać uzwojenia aby przesunięcie fazy się już dalej nie zwiększało. Tylko to znowu nie była by taka normalna komutacja. Bo wysterowanie uzwojeń było by w kierunku ruchu wirnika. Czyli goniło by wirnik. A nie tak jak jest normalnie, gdzie to wirnik goni uzwojenia.

    Koniec końców, enkoder/komutator można zaimplementować, ale potrzebny jest algorytm nadrzędny który będzie wyłączał komutację dla kątów mniejszych niż 90°.
  • Poziom 20  
    Dziękuję za pomocną odpowiedź.
    Dużo mi wytłumaczyła:)
    A co powiesz na te sterowanie, które opisałem powyżej, które aktualnie stosuję. Jest ono poprawne dla sterowania silnikiem gimbala?
    Drugie pytanie, co gdyby wyznaczaniem kąta dla tych sinusów powyżej zajął się sam enkoder, a amplituda to właśnie by był sygnał wejściowy z regulatora PID pozycji, który odpowiadałby za dokładne pozycjonowanie i utrzymywanie pozycji zadanej wirnika? Czy takie rozwiązanie miałoby szanse sterować gimbalem?
    Spotkałeś się z jakimiś gotowymi rozwiązaniami w sieci Twojej propozycji implementacji enkodera, poprzez badanie i korygowanie przesunięcia fazy?
  • Poziom 43  
    Takie rozwiązanie o w zasadzie jak zwykłe serwo.
    Czyli w bezruchu pozostaje tylko w momencie jak nie dostaje zasilania.
    Ale wada taka że wtedy też nie ma momentu trzymającego.
    No ale zadziałać zadziała.
    I dodatkowo miało by zaletę w postawi zmniejszonego poboru prądu.
  • Poziom 20  
    A którą z metod uważasz za lepszą do sterownika gimbala. Dodam, że w tej, gdy silnik bldc jest jak serwo(wykorzystany enkoder) mam problemy z takim doborem nastaw, aby przy ruchach platformy gimbal nie pływał. To znaczy regulator tak jakby reaguje za późno i są zauważalne odchylenia. Tej metody bez enkoderów jeszcze nie próbowałem na gimbalu, jutro spróbuję. A czy jest ona poprawna (opisałem ją w przedostatniej mojej odpowiedzi)? Oraz czy mógłbyś coś więcej powiedzieć jak w praktyce wyznaczyć te przesunięcie fazy i jak przeciwdziałać narastaniu jego wartości powyżej 90° wykorzystując enkoder? Bardzo chciałbym takie zabezpieczenie dodać, jednak nie potrafię znaleźć żadnych informacji na ten temat.
  • Poziom 43  
    Takie sterowanie bez enkodera w sumie też powinno działać. Tyle że nie za dobrze jak zauważyłeś. Bo cały układ musi czekać aż narośnie sygnał z PIDa. A soją drogą to pozycja skąd pochodzi? Bo też powinna z PIDa jakiegoś.
    Wyznaczanie kąta z enkodera jest proste. W zasadzie to on wyznacza kąt sam z siebie.
    Po prostu musisz każdej pozycji przypisać kąt. Enkoder ma powiedzmy 1024 pozycje, a kątów masz np. 8640° (24 kroki po 360°). Czyli każda kolejna pozycja enkodera ma 8,4375° więcej jak poprzednia.
    A kąt ze sterowania masz łatwo. po prostu jest to to co wstawiasz do wzoru z sinusami.
  • Poziom 20  
    Czyli jak dobrze rozumiem wyjście z reg. PID, które odpowiednio przesuwam o 0, 120 i 240 i wstawiam do sinusów to jest te przesunięcie fazowe, które nie może w jednej iteracji pętli zmienić się o 90°? I do tego wykorzystuję enkoder porównując jego aktualny odczyt kąta z kątem z poprzedniej iteracji? Gdy >90 muszę zareagować? Jak? Np. ograniczając te sterowanie aby nie przekroczyło przyrostu 90°?
    Ogólnie mam jeszcze IMU i to kąt z niego jest wejściową wartością do tego regulatora.
  • Poziom 43  
    Z PIDa powinien wyjść kąt docelowy. Może być większy niż 90°. (w zasadzie to tu nie trzeba PIDa jak tak)
    Ale Ty go musisz porównywać z kątem z enkodera.
    Jeżeli różnica będzie większa niż 90° to przypisujesz wartość różniącą się o 90° (albo -90° jak różnica będzie ujemna).
  • Poziom 20  
    Dzięki za odpowiedź. A mam jeszcze pytanie, czy słyszałeś o metodzie sterowania FOC (Field oriented control) wykorzystującej SVPWM? Czy ona nadaje się się do sterowania silnikami w gimbalu?

    Dodano po 1 [godziny] 22 [minuty]:

    Czy dobrze zrozumiałem z tym enkoderem, gdy mam np. wartość wyjściową z PIDa = 100° to do sinusów wstawiam wartość 10°. A gdy z PIDa wychodzi np -120° to do sinusów wstawiam wartość -30°?
  • Specjalista - Mikrokontrolery
    Panowie,
    jak tak poczytałem to jestem przerażony.
    atom1477 skąd posiadasz takie informacje które przekazujesz tutaj publicznie na forum?
    Dlaczego proponujesz sterowanie (zresztą bardzo nieprawidłowe) silnikiem BLDC tak jak silnikiem krokowym? TAK SIĘ NIE STERUJE SILNIKIEM BLDC!!!
    Co z tego że napęd jest w gimbalu? Ludzie...
    Po to jest sterownik aby utrzymać zadaną prędkość czy też zadaną pozycję. Ale nie haratając prądem po uzwojeniach w pełnym zwarciu!!!
  • Poziom 43  
    Doszedłem do tych informacji dużo czytając o sterowaniu gimlabi.
    I to takich z wykorzystaniem silników w wykonaniu DIY, zanim się pojawiły gotowe silniki do kupienia. A przy takich silnikach było dokładnie wyjaśnione jak są sterowane i dlaczego.
    Takie silniki tylko z nazwy są silnikami BLDC (ludzie po prostu do ich wykonania wykorzystywali gotowe silniki BLDC). Można je nazwać BLDC, ale skoro pracują praktycznie na postoju to bardziej odpowiadają silnikom krokowym. Tak jak zwykłe silniki szczotkowe DC są silnikami DC, ale pracując na postoju niewiele mają dostrzegalnych cech silników DC, i są bardziej jak elektromagnesy. Bo jak wirnik się nie kręci to i nie wytwarza sił Back EMF. Czyli wirnik jedynie pobiera stały prąd i wytwarza postojowy moment obrotowy (mam na myśli moment chcący obrócić wirnik, a nie moment trzymający próbujący utrzymać wirnik na miejscu).
    Stąd podobieństwo silników w gimbalach, do silników krokowych.
    Takie sterowanie oczywiście ma wady, ale jednak jest najczęściej stosowane.
    Zwarcie o którym piszesz nie jest "pełne". Silniki do gimbali są przewijane na wyższe KV (wyższe napięcie a mniejszy prąd).
    Tak samo jak istnieją silniki krokowe do pracy bez choppera, do zasilania wprost z napięcia np. 12 czy 24V. Po prostu się podłącza uzwojenie wprost do zasilania, ale wcale to nie oznacza że robi się tam wtedy jakieś zwarcie.
    Mając enkodery oczywiście można zrobić sterownik o jakim piszesz: czyli taki który sam z siebie będzie utrzymywał odpowiednią pozycję, a silnik będzie pracował już jako normalny BLDC. Tylko że takie klasyczne sterowanie silnika BLDC nie pozwala uzyskać statycznego momentu trzymającego (chcącego utrzymać wirnik na swoim miejscu: czyli takiego jak w silniku krokowym). I dlatego to odradzałem, na rzecz sterowania jak silnika krokowego.
    Po prostu w gimbalu mimo że się stosuje silnik BLDC, to chce się uzyskać parametry jak przy silniku krokowym. Dlatego najprościej po prostu silnik BLDC wysterować jak silnik krokowy, choć to może nie do końca poprawnie technicznie (dla mnie będzie poprawne technicznie gdy się przerobi taki silnik na wyższe KV, czyli dostosuje się go do pracy przy stałym zasilaniu uzwojeń prądem stałym).
  • Specjalista - Mikrokontrolery
    Jeśli potrzebujesz moment trzymający pomimo, że nic nie wyprowadza silnika z równowagi (co jest bardzo dziwne) to stosujesz silnik krokowy i zapodajesz mu pracę mikrokrokową aby zapewnić płynność ruchu. I tylko wtedy pracujesz z jako takim momentem obrotowym.
    NIE MOŻNA (a właściwie to można tylko to jest niezgodne z zasadami, ze sztuką i takie tam) tak sterować silnikiem BLDC. Co w takim razie robisz, jak chcesz przesunąć silnik o minimalny kąt? Np o kąt 1 mrad? Zmieniasz argument sinusa o 1 mrad? przecież dla silnika np 12 polowego kąt względny zmieni się 6 mrad. Z kątem wyprzedzenia 6 mrad praktycznie nie masz momentu obrotowego (tzn marnujesz prąd na zwarcie w cewce i praktycznie cała moc elektryczna tracona jest w ciepło zamiast zamieniana na moment obrotowy silnika)!!!
    Dodatkowo, silnik pobiera prąd mimo że stoi w miejscu i nic nie wyprowadza go z równowagi. W gimbalu (a praktycznie w żadnej maszynie mobilnej) to niedopuszczalne. Tak sterować napędem elektrycznym to grzech i zbrodnia. Silnik w takim napędzie w pierwszej strefie regulacji ma pracować ze stałym wyprzedzeniem 90 stopni. Zmienia się tylko znak wyprzedzenia w zależności od kierunku obrotów. W tej strefie steruje się tylko i wyłącznie prądem i znakiem kąta wyprzedzenia. Regulacja musi być z bardzo dużą częstotliwością, wtedy silnik utrzymuje statycznie zadaną pozycję. Jeśli masz szybki regulator i dobre nastawy, dopóki moment zakłócający jest mniejszy niż moment obrotowy napędu, napęd nie zostanie w zauważalny sposób wyprowadzony z pozycji. Silnik pobiera tylko tyle prądu ile potrzeba aby utrzymać pozycję, nie marnuje prądu w ciepło.

    Budowałem sterowniki do do wieży obserwacyjnych, armat (sterujących uzbrojeniem) gdzie wymagane jest bardzo precyzyjne naprowadzanie a odrzut przy wystrzale powoduje potężne zakłócenia (nie podmuch wiatru czy uderzenie muchy w gimbalu).

    Takie herezje o sterowaniu silnikiem BLDC bez wyprzedzenia powstają jak ludzie zamiast dobierać sprzęt do potrzeby, dobierają metodę do sprzętu.

    Profesjonalne sterowniki napędów elektryczny nie dlatego są takie drogie, że ktoś sobie wymyślił ale dlatego, że wymagają potężnego sprzętu i bardzo dobrego oprogramowania. Dlatego w sterownikach nie siedzi mega8 tylko potężne procesory lub układy FPGA.