Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

piątek, 25 marca 2011

Silnik BLDC: Sterownik z Back-EMF


Autor: Dondu

Artykuł z cyklu: Silnik BLDC: Spis treści

Silnik BLDC - sterowanie Back-EMF.
W poprzednim artykule zakręciliśmy silnikiem po raz pierwszy, ale zapewne nie udało Ci się osiągnąć przyzwoitych prędkości obrotowych, co wynika z faktu, iż nasz sterownik nie znał położenia wirnika względem uzwojeń silnika. Uniemożliwiało to przełączanie faz dokładnie w momentach, w których powinny być przełączone. Innymi słowy, sterownik nie potrafił zsynchronizować się z położeniem wirnika.

W niniejszym artykule uzupełnimy ten brak i pozyskamy wiedzę o położeniu wirnika wykorzystując metodę Back-EMF.


EMF vs Back-EMF

Na początek nieco teorii.

EMF (ang. ElectroMotive Force) to siła elektromotoryczna (pol. SEM), która w skrócie ujmując, powoduje przepływ prądu w obwodzie elektrycznym. Siła ta wyrażona jest różnicą potencjałów (napięciem), na zaciskach źródła prądu w czasie, gdy obwód jest otwarty, czyli nie płynie przez niego żaden prąd.

W przypadku silników, EMF powstaje w czasie oddziaływania pola magnetycznego na uzwojenia silnika podczas obrotu wirnika. Może to nastąpić np. gdy kręcimy wirnikiem za pomocą zewnętrznej siły (ręka, wiatrakiem, innym silnikiem, itp.).

EMF powstaje także w przypadku, gdy naładujemy cewkę (dławik), a następnie odłączymy napięcie. Wtedy zgromadzona w cewce energia zostaje zamieniona na EMF, o zwrocie przeciwnym do napięcia, którym "naładowaliśmy" cewkę. Zaobserwujesz to zjawisko na poniższym filmie:

... film tymczasowy ...


Zjawisko to czasami może być bardzo niewdzięczne: Elementy indukcyjne vs zakłócenia

Ponieważ wytworzony EMF ma odwrotną polaryzację niż napięcie zasilające uzwojenie silnika, stąd nazywane jest Back-EMF (pol. siła przeciw-elektromotoryczna). W języku angielskim można także spotkać określenie: Counter-EMF.

Dla potrzeb tego i następnych artykułów, sygnał Back-EMF pojedynczej fazy silnika oznaczać będziemy jako BEMF.

Skoro więc w uzwojeniu silnika w czasie jego pracy, występują przeciwne do siebie napięcia, to:

Efektywny prąd płynący przez uzwojenie danej fazy silnika jest zależny od różnicy potencjałów napięcia zasilającego to uzwojenie i wygenerowanego BEMF tej fazy.



gdzie:
I - efektywny prąd płynący w uzwojeniu,
U - napięcie sterujące silnikiem (zasilające uzwojenie fazy),
E - siła elektromotoryczna (BEMF),
R - rezystancja uzwojenia.


Zapamiętaj:
Im bardziej wzrastają obroty silnika, tym bardziej wzrasta BEMF poszczególnych faz, co powoduje, że różnica potencjałów w każdej fazie się zmniejsza, a to oznacza zmniejszenie płynącego w niej prądu, czego konsekwencją jest zaprzestanie zwiększania prędkości obrotowej.

Dochodzą do tego (zwiększające się wraz ze wzrostem prędkości obrotowej) opory mechaniczne.

W ten sposób dochodzi do ustabilizowania się prędkości obrotowej silnika, na pewnej nieprzekraczalnej granicy.

Poniżej film dość dokładnie omawiający, to zjawisko na przykładzie silnika (j. ang):



Dla nas istotne jest, że BEMF:
  • występuje tylko w trakcie kręcenia się silnika,
  • jest tym większe, im większa jest prędkość obrotowa silnika.





Jak wykorzystać BEMF do ustalenia położenia wirnika?

Skoro mamy dostępne zjawisko BEMF, to można je wykorzystać, do określenia położenia wirnika. Jednakże by to zrobić, musimy w jakiś sposób uzyskać ten sygnał z uzwojeń silnika BLDC.


Zobaczmy jaki sygnał BEMF generuje obracający się wirnik trójfazowego silnika BLDC napędzanego poprzez mechaniczne kręcenie jego osią (dla wszystkich 3 faz):

Sygnały Back-EMF trójfazowego silnika BLDC.

W przypadku mojego silnika, sygnał ma kształt sinusoidy. Jednakże w innych silnikach, kształt ten może być inny niż idealny sinusoidalny, ze względu na budowę silnika.

Jak widzisz fazy są przesunięte względem siebie o 120 stopni. Podłączając jedną fazę do sondy oscyloskopu, a drugą do jego masy, nawet ręczne zakręcenie silnikiem pozwoli Ci uzyskać na oscyloskopie obraz pojedynczego sygnału BEMF.

Omawiany w tym artykule sposób sterowania silnikiem BLDC, nazywany jest trapezoidalnym. Nazwa ta pochodzi od kształtu przebiegu na poszczególnych fazach silnika. Wzorcowym idealnym kształtem jest więc:


Sterowanie trapezoidalne silnika BLDC - idealne sygnał Back-EMF.

Czerwony przebieg ilustruje idealny sygnał sterujący fazą silnika (prąd).
Niebieski przebieg, to idealny kształt BEMF, dla tej fazy.

Powyższy wykres przedstawia jedną fazę dla algorytmu sterowania silnikiem BLDC sześcioma krokami (tak jak nasz sposób pokazany w poprzednim artykule) wraz z naniesionymi na osi odciętych (X) kątami. Dla silnika o krotności biegunów równej jeden są to faktycznie kąty obrotu silnika. Dla innych krotności są to kąty sygnałów, a nie faktycznego obrotu silnika. Więcej na ten temat pisałem w artykule: Oznaczenie faz silnika

Z sygnałów BEMF poszczególnych faz silnika musimy wyciągnąć użyteczną dla nas informację o położeniu wirnika względem stojana silnika. Jak to zrobić?

Z wykresu sygnału BEMF trzeba wybrać jakieś charakterystyczne punkty, które łatwo będzie przetworzyć uzyskując interesującą nas informację. Tymi punktami są miejsca przecięcia sygnału BEMF z osią X. Dla każdej fazy występują dwa takie punkty, które możesz zauważyć dla kątów 0 oraz 180 stopni. Punkty ten nazywamy w elektronice przejściem przez zero (ang. Zero Crossing).

Dla potrzeb niniejszego i następnych artykułów punkt przejścia przez zero oznaczać będziemy jako ZC.

Skoro na każdą fazę mamy dwa takie punkty oraz trzy fazy (przesunięte względem siebie o 120 stopni), to dla każdych 360 stopni mamy razem sześć punktów ZC.

Moglibyśmy więc ustalać położenie wirnika wykorzystując trzy kanały przetwornika ADC mierząc dla każdej fazy poziomy napięć poszczególnych BEMF i wyłapywać poszczególne punkty ZC, dla każdej fazy osobno.


Czy takie rozwiązanie jest optymalne?

Nie bardzo, ponieważ mikrokontroler musiałby dokonywać wielu pomiarów dla trzech faz, a program wyłapywać poszczególne punkty ZC na bazie porównania wyników poszczególnych pomiarów ADC. Przy dużej prędkości obrotowej silnika, taki sposób jego sterowania pochłonąłby sporo mocy obliczeniowej CPU.

Z drugiej strony, jeżeli mikrokontroler, ma odpowiednio szybki ADC i odpowiednio szybki zegar taktujący mikrokontroler (ATmega8 spełnia te wymagania) i nie ma dodatkowych newralgicznych zadań do realizacji poza komutacją silnika, to nic nie stoi na przeszkodzie, by tak właśnie rozwiązać problem wyłapywania położenia wirnika dla potrzeb komutacji.

W takim wypadku, należałoby pilnować kierunku narastania lub opadania sygnału BEMF oraz ustalić poziomy napięć dla punktu ZC. W tym artykule nie będziemy jednak zajmować się takim sposobem sterowania, ale możesz spróbować zrealizować je we własnym zakresie - fajne ćwiczenie :-)


Jest jakieś inne rozwiązanie? 

Jest i takie właśnie zastosujemy, ponieważ zależy nam na odciążeniu mikokontrolera, gdyż w dalszych artykułach tego cyklu będziemy mu implementować dodatkowe funkcjonalności, poza samym komutowaniem faz.

W tym celu z trzech sygnałów BEMF utworzymy dodatkowy czwarty sygnał, będący sumą BEMF wszystkich faz. Nazwiemy go:
Dla potrzeb tego i następnych artykułów, zsumowany sygnał BEMF wszystkich trzech faz oznaczać będziemy jako SumBEMF.

Sumowanie sygnałów BEMF, można zrobić za pomocą 3 rezystorów zgodnie z układem naszego symulatora silnika, o którym pisałem w jednym z poprzednich artykułów tego cyklu: Podłączamy silnik i testujemy

Testowy układ sumujący sygnały Back-EMF, dla trójfazowego silnika BLDC.


Jaki przebieg SumBEMF uzyskamy:

Zsumowany sygnał Back-EMF trzech faz silnika BLDC dla wypełnienia sygnału PWM przy Duty Cycle = 100%.


Powyższy oscylogram wygląda bardzo interesująco. Niestety sygnał ten wygląda tak ładnie, tylko dla 100% wypełnienia sygnałów sterujących fazami (PWM 255/255). My jednak będziemy używać sygnału PWM do sterowania prędkością obrotową silnika. W tym wypadku sygnały BEMF także będą w sobie zawierały nasz sygnał sterujący:

Zsumowany sygnał Back-EMF trzech faz silnika BLDC dla wypełnienia sygnału PWM przy Duty Cycle = 85%.


Ponieważ sygnał PWM, to jedna wielka "sieczka" (w zależności od częstotliwości i wypełnienia), stąd moglibyśmy nieprawidłowo wykrywać punkty ZC. Co możemy z tym fantem zrobić?


Wygładzamy sygnały

Trzeba więc jakoś pozbyć się tego problemu i wygładzić nasze przebiegi BEMF i SumBEMF. W tym celu zastosujemy proste dolnoprzepustowe filtry RC. W rezultacie nasz układ filtrująco-sumujący wyglądać będzie następująco:

Układ sumujący sygnały Back-EMF, dla trójfazowego silnika BLDC.


Jak widzisz schemat dzieli się na dwa moduły. Pierwszy to zestaw trzech filtrów RC, pozwalających uzyskać sygnały BEMF z poszczególnych faz silnika. Drugim jest układ sumujący sygnały BEMF poszczególnych faz tworząc jeden sygnał SumBEMF.

Poniżej przykład rzeczywistego sygnału sterującego jedną z faz silnika wraz z opadającym i narastającym zboczem BEMF oraz odpowiadającego mu sygnału BEMF w miejscach zaznaczonych etykietami (dla każdej fazy osobno) na powyższym schemacie:

Sygnał Back-EMF jednej fazy wraz z jego odpowiednikiem po filtracji filtrem dolnoprzepustowym.


A tak wygląda rzeczywisty przebieg sygnału BEMF jednej z faz oraz zsumowanego sygnału SumBEMF wszystkich faz:

Filtrowany sygnał Back-EMF jednej fazy wraz z zsumowanym Back-EMF wszystkich trzech faz silnika BLDC.


Zauważ, że otrzymany sumaryczny sygnał SumBEMF ma (zgodnie z naszymi oczekiwaniami) częstotliwość trzy razy większą niż częstotliwość sygnału BEMF pojedynczej fazy.

Mamy więc już dostępne cztery wygładzone sygnały:
  • BEMF dla każdej fazy osobno (razem trzy),
  • jeden wspólny SumBEMF, będący sumą BEMF wszystkich trzech faz.


Jak wykorzystać tak uzyskane sygnały?

Na oscyloskopie nałożymy na siebie sygnały BEMF fazy W oraz SumBEMF w ten sposób, że ustawiamy oscyloskop na składowa zmienną (AC) oraz wyrównujemy ich przebiegi w pionie tak, by w momencie, gdy nie ma na nich żadnego sygnału, pokrywały się wzajemnie oraz z linią podziałki podstawy czasu. Można do tego celu wykorzystać przełącznik uziemienia sondy, który posiada większość oscyloskopów lub po prostu sondami dotknąć punktu masy na panelu oscyloskopu.

Po ustawieniu oscyloskopu podłączamy jedną sondę do BEMF fazy W, a drugą do SumBEMF. Otrzymamy następujący obraz:

Punkty przejścia przez zero (ZC) na przykładzie jednej fazy oraz zsumowanego BackEMF trzech faz silnika BLDC.

Na oscylogramie widać, że sygnał BEMF przecina sygnał SumBEMF dwa razy na 360 stopni. Miejsca te są dla nas punktami ZC (zaznaczone na czerwono). W tych momentach powinniśmy zmienić komutację na następną zgodnie z tabelą komutacji.

Na oscylogramie widać także pozostałe punkty ZC, ale generowane dla pozostałych dwóch faz, których nie widać na tym oscylogramie (mam jedynie dwukanałowy oscyloskop). Dlatego na każde 360 stopni zauważysz sześć punktów ZC, co jest zgodne z naszymi oczekiwaniami.

Zauważamy, że oba sygnały są symetryczne względem poziomu zera, co jest zgodne z omawianym wcześniej rysunkiem, pokazującym idealny sygnał BEMF.

Możemy więc na podstawie wykorzystania wyłącznie sygnału SumBEMF (przy pewnej dozie szczęścia - utrzymanie synchronizacji) uzyskać wystarczającą informację do określenia  momentów komutacji faz silnika. Jednakże w czasie prób szybko okazałoby się, że w czasie pracy silnika, następuje utrata synchronizacji przełączania faz z faktycznym położeniem silnika, stąd nadal nie będziemy nim poprawnie kręcić.

Dlaczego? Wprawdzie znamy już moment kiedy SumBEMF przechodzi przez zero, ale nie znamy faktycznego położenia wirnika. Nawet jeżeli uda nam się trafić we właściwe położenie wirnika nie oznacza to, że synchronizacja nam się utrzyma cały czas, w szczególności przy zmieniających się warunkach obciążenia silnika.


Jak ustalić faktyczne położenie wirnika?

Wystarczy porównać moment wystąpienia punktu ZC z sygnałem BEMF odpowiedniej fazy. Tutaj z pomocą przyjdzie nam mikrokontroler ATmega8, a właściwie jego prosty i zarazem bardzo nam potrzebny komparator analogowy.

Jeżeli nie znasz sposobu działania komparatora analogowego mikrokontrolera ATmega8, to wstrzymaj się z czytaniem dalszej części tego artykułu i zapoznaj się z nim w kursie mikrokontrolerów AVR: Komparator analogowy mikrokontrolera AVR


Komparator mikrokontrolera ATmega8, który używamy w niniejszym cyklu artykułów, ma istotną dla nas możliwość przyłączania wejścia odwracającego (-) do jednego z kanałów wejściowych przetwornika analogowo-cyfrowego (ADC).

Komparator skonfigurujemy więc tak:

ATmega8 komparator analogowy - konfiguracja dla zewnętrznych kanałów ADC.


a poszczególne sygnały BEMF przełączać będziemy multiplekserem ADC:


ATmega8 - Przetwornik analogowo-cyfrowy (ADC) jako multiplekser sygnałów komparatora.


Mamy silnik trójfazowy, więc skorzystamy z trzech kanałów od ADC0 do ADC2 i podłączymy do nich uzyskane sygnały BEMF poszczególnych faz. Nasz układ pomiarowy wyglądać będzie więc następująco:


ATmega8 - Układ pomiarowy sygnałów Back-EMF trójfazowego silnika BLDC.


W ten sposób, będziemy mogli za pomocą komparatora porównywać sygnał SumBEMF z sygnałem BEMF fazy wybranej za pomocą multipleksera kanałów ADC.

Jeżeli nie znasz zasady działania multipleksera ADC, wstrzymaj się z czytaniem tego artykułu i zapoznaj się z multiplekserem na bazie artykułu: ADC - Przełączanie kanałów


Jak to ma działać?

Komparator będzie porównywał sygnał SumBEMF, z kolejnymi sygnałami BEMF poszczególnych faz.
Gdy komparator wykryje moment, w którym następuje jedno z dwóch zdarzeń (dokładny moment zaistnienia faktu):
  • napięcie SumBEMF przekroczy wartość napięcia BEMF badanej fazy,
  • napięcie SumBEMF spadnie poniżej wartości napięcia BEMF badanej fazy,
to komparator wygeneruje sygnał przerwania.

Innymi słowy, komparator porównując sygnał BEMF danej fazy z SumBEMF, wyłapie nam każdy punkt ZC (przejścia przez zero) danej fazy.


Skąd wiemy, który kanał (fazę) w danym momencie ma sprawdzać komparator?

Sygnał BEMF mierzymy na fazie, która w danym momencie nie uczestniczy w zasilaniu silnika. A ponieważ, dokładnie wiemy, jakie w danym momencie fazy są zasilane stąd wiemy także, którą fazę powinniśmy ustawić komparatorowi do porównywania z SumBEMF.

Dla przypomnienia, tabelka komutacji faz wyglądać będzie następująco:

FazaKrok 1Krok 2Krok 3Krok 4Krok 5Krok 6
U++NC--NC
V-NC++NC-
WNC--NC++
NC - niepodłączony (Not Connected)

Reasumując, w kolejnych krokach powinniśmy podawać komparatorowi na wejście odwracające (-) sygnał BEMF tej fazy, która w powyższej tabelce jest zaznaczona jako NC. Proste? Mam nadzieję :-)


Zauważ, że wykorzystanie komparatora w minimalnym zakresie obciąża CPU mikrokontroler, przez co CPU nie musi uczestniczyć w ciągłym zlecaniu pomiarów ADC i programowego porównywania wyników, w dodatku dla wszystkich trzech faz. Cała praca CPU będzie się ograniczać, do ustawienia komparatora i wybrania odpowiedniego w danym momencie kanału ADC (sygnału BEMF fazy) w celu ich porównania przez komparator.

Daje nam to dodatkowe plusy, pozwalając np.:
  • minimalizować zużycie energii przez sterownik (mikrokontroler) zmniejszając częstotliwość jego taktowania i/lub usypiając na czas pomiędzy komutacjami (ważne np. w robotach zasilanych z akumulatorów),
  • wykorzystać mikrokontroler do innych zadań, niż tylko samo sterowanie silnika.
Tak, tak - spokojnie można usypiać mikrokontroler przynajmniej do trybu IDLE, choć można pokusić się o nieco więcej :-)


Przerwanie komparatora

Uściślijmy więc, co oznaczać będzie przerwanie z komparatora:

Wystąpienie przerwania z komparatora będzie oznaczało, że dla wybranej przez nas fazy, nastąpiło wykrycie punktu ZC.

W naszym przykładzie, będzie to dla nas sygnał, że należy dokonać komutacji następnego kroku i oczywiście także zmienić kanał ADC na odpowiedni, by komparator czekał na ZC z następnej fazy.





Start silnika

W przypadku silników DC, aby silnik ruszył wystarczy podłączyć źródło zasilania do komutatora. W silnikach BLDC, sterowanie odbywa się poprzez komutację faz, zależną od położenia silnika. Jednakże przy wykorzystaniu metody Back-EMF, w momencie gdy silnik się nie kręci, nie mamy informacji o tym, w jakim położeniu jest wirnik w stosunku do stojana. Dlatego też nie wiemy, od której komutacji należy zacząć uruchamianie silnika.

Wiedza o położeniu wirnika w momencie uruchamiania silnika jest bardzo istotna ponieważ, gdy zaczniemy od niewłaściwej komutacji silnik na początku może zacząć obracać się w niewłaściwym kierunku. W skrajnym przypadku może to wręcz uniemożliwić start silnika.

Dodatkowo przy małych prędkościach obrotowych wprawdzie sygnał BEMF występuje, ale jest zbyt słaby (płaski), by móc na jego podstawie określić punkty ZC.

Jak z tego wybrniemy?

Skoro nie wiemy, w jakim położeniu jest wirnik w stosunku do stojana, to możemy wymusić na nim, aby ustawił się w pozycji, od której chcemy zacząć jego kręcenie. By to osiągnąć wystarczy, że na jakiś czas włączymy odpowiednie klucze górny i dolny dla jednego wybranego kroku z tabeli komutacji.

Wirnik zareaguje i ustawi się w tej pozycji. Niestety, w zależności od bezwładności wirnika i przymocowanych do niego elementów, będzie miał on tendencję do oscylowania przez jakiś czas wokół pozycji, w której chcemy go ustawić. Zjawisko to możesz zobaczyć na filmie, który zamieszczam pod koniec niniejszego artykułu.

Podczas pozycjonowania wirnika, które może trwać nawet kilka sekund należy uważać, by nadmiernym prądem nie uszkodzić uzwojenia silnika.

Dlatego sugeruję, byś podczas pozycjonowania silnika regulował prąd za pomocą PWM.

Gdy już ruszymy silnik z miejsca w określonym kierunku, będziemy musieli nim kręcić "na ślepo" (czytaj: bez wiedzy o położeniu wirnika) do momentu, w którym sygnał BEMF osiągnie wystarczający poziom, by można z niego wyłapać punkty ZC. Dlatego należy to uwzględnić w algorytmie sterującym silnikiem.

Zwracam Twoją uwagę na to, że ta część dot. pozycjonowania oraz "kręcenia na ślepo", w dużej mierze warunkowana jest bezwładnością wirnika wraz z przymocowanymi do niego elementami. Dlatego warunki pracy tej części programu mogą wymagać dostosowania do parametrów oraz bezwładności Twojego silnika.

W poniższym przykładzie programu, znajdziesz proste algorytmy pozycjonowania wirnika oraz startu silnika. Bardziej wyrafinowane metody omówimy w osobnym artykule.




Schemat sterownika

Schemat naszego sterownika, dla metody sterowania za pomocą BEMF, powinien wyglądać następująco:

Schemat sterownika trójfazowego silnika BLDC z wykorzystaniem Back-EMF.
Rys. Schemat sterownika silnika BLDC z Back-EMF
wersja: 1826x1031 

Jest to modyfikacja schematu z poprzednich artykułów. Jeżeli czegoś nie rozumiesz przeczytaj je.

W powyższym schemacie dodaliśmy moduł Back-EMF, łącząc go z wyjściami sterującymi fazami oraz pinami mikrokontrolera (AN0, ADC0-ADC2).

Ponieważ będziemy używać części analogowej mikorkontrolera, a konkretnie zarówno komparatora jak i przetwornika ADC, stąd dobrze jest zastosować dławik L1. Jeżeli nie masz dławika możesz go spróbować zastąpić rezystorem o wartości nie większej niż 10Ω.




Program 

Ponieważ program sterownika w stosunku do tego z poprzedniego artykułu znacznie się rozrasta, nie umieszczam go w tekście artykułu, ale możesz go pobrać w całości tutaj: Kompletny projekt AVR Studio 4

Znajdziesz tam pliki biblioteki BLDC (bldc.c oraz bldc.h) oraz plik main.c. Jak zwykle pliki są bogato komentowane więc nie powinieneś mieć problemu ze zrozumieniem zasady działania programu.

Z istotnych rzeczy powinieneś zauważyć, że dodałem funkcje obsługi przerwania komparatora oraz startu silnika. Dodane zostały też dodatkowe zmienne oraz definicje w pliku bldc.h.

Wprowadziłem także zmienną bldc_tryb_pracy przechowującą aktualny tryb pracy sterownika. Są dwa tryby:
  • TRYB_START
  • TRYB_PRACA

TRYB_START to tryb, w którym sterownik zajmuje się uruchomieniem silnika. TRYB_PRACA to tryb, w którym silnik kręci się korzystając z przerwań generowanych przez sygnały BackEMF.


Start silnika

Procedura startu składa się z pięciu kroków.

Krok 1 Ustawienie wirnika w pozycji początkowej.
Krok 2 Ruszenie silnika z miejsca.
Krok 3 Zwiększenie prędkości silnika by uzyskać sygnały BackEMF.
Krok 4 Stabilizacja obrotów i zliczanie impulsów z BackEMF (zliczanie przerwań). W momencie, gdy wykryta zostanie odpowiednia ilość przerwań, następuje przełączenie na TRYB_PRACA, a rolę komutacji przejmuje funkcja przerwania z komparatora.  
Krok 5 To zabezpieczenie sprawdzające, czy nastąpiło przełączenia na TRYB_PRACA (szczegółowy opis znajdziesz w kodzie programu).


Poniżej film pokazujący działanie powyższego programu sterującego silnikiem oraz pomiar prędkości obrotomierzem. Na początku możesz zaobserwować moment pozycjonowania wirnika i towarzyszące mu oscylacje. Na wirniku zamontowane są 4 dyski stąd jego bezwładność jest spora.

... film tymczasowy ...





Podsumowanie

Metoda sterowania silnikiem z wykorzystaniem Back-EMF do ustalania położenia wirnika oraz momentu komutacji silnika, pozwala na osiąganie przyzwoitych rezultatów w zakresie sterowania silnikiem BLDC. Mnie udało się powyższym programem i silnikiem z 4 dyskami, rozkręcić je do 5500rpm, co możesz zauważyć na filmie powyżej. Silnik pochodzi z dysku o mniej więcej takiej maksymalnej ilości obrotów (brak oznaczenia na obudowie).

Wykorzystanie sprzętowego komparatora oraz trzech kanałów ADC, znacząco upraszcza część programową sterownika BLDC oraz pozwala na odciążenie mikrokontrolera.

Wadą tej metody jest na pewno trudniejsze sterowanie przy bardzo małych prędkościach obrotowych (brak sygnału BEMF o odpowiednim poziomie), co także utrudnia moment startu. Dlatego na przykład dla robota, który używa do napędu silników BLDC zastosowanie tej metody nie jest wskazane.

Niewątpliwą zaletą jest natomiast mały koszt elementów dodatkowych, co w niektórych przypadkach ma istotne znaczenie.  Metoda ta z powodzeniem może być stosowana w projektach amatorskich, a nawet niektórych komercyjnych, dając równie dobre efekty jak wykorzystanie Hallotron'ów.


Artykuł z cyklu:Silnik BLDC: Spis treści

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

38 komentarzy:

  1. Witam
    Właśnie pochłonąłem (bo na dokładne czytanie nie miałem czasu:)) cały cykl - GENIALNY w prostocie wytłumaczenia wszystkich interesujących mnie zagadnien, dzięki:D:D!!
    Zaraz biorę się za wczytywanie w każde słowo, ale już teraz urodziło się jedno pytanie - w instrukcjach do modelarskich regulatorów prędkości (tzw. reglach) często przewija się słowo "timing", którego wartość ma wpływ na pracę regla. Do czego go można odnieść - do ilości ramion na statorze, ilości magnesów, kątów pomiędzy ramionami??.. W zasadzie żaden z latających kolegów nie zna odpowiedzi, ale sądzimy że ma to jakiś wpływ na pracę regla..

    OdpowiedzUsuń
  2. Witaj.
    Nie znam żargonu modelarskiego, ale sądzę, że chodzi o regulację momentu (kąta) komutacji faz względem faktycznego położenia wirnika. To wpływa na parametry uzyskane z silnika, a przede wszystkim na pobór prądu. Będzie o tym zjawisku mowa w jednym z następnych artykułów.

    OdpowiedzUsuń
  3. Witam,
    W poprzednim artykule było pokazane ze na niepracującym uzwojeniu przy zasileniu pozostałych 12V jest 6V, czy to nie zaszkodzi mikrokontrolerowi?

    OdpowiedzUsuń
    Odpowiedzi
    1. Witaj.
      Zauważ, że z uzwojeń sygnał podawany jest do mikrokontrolera, przez rezystorowe dzielniki napięcia.

      Usuń
  4. Witam. Bardzo szczegółowe artykuły, sporo pracy to kosztuje (coś o tym wiem heh) ale przynajmniej wszystko jest jasne ;-) Kiedy ciąg dalszy ?? Ostatnio interesuję się pojazdami elektrycznymi (jeden niedawno zakupiłem i użytkuje na chińskich drogach) i za kilka miesięcy pewnie wezmę się zabudowę. Wypadało zatem rozjaśnić sobie zasadę sterowania BLDC itp. w czym dużą pomocą służą Twoje artykuły. Mnie jako elektronikowi jest łatwo to ogarnąć ale myślę, że i inni nie powinni mieć problemu bo wyłożyłeś sprawę bardzo klarownie. Chętnie służę pomocą w razie jakby nie było czasu czegoś opisać itp ;-) Pozdrawiam.

    OdpowiedzUsuń
    Odpowiedzi
    1. Witaj.

      Rozumiem, że nie zatrzymałeś się tylko na lekturze tego artykułu i kliknąłeś spis treści cyklu o silnikach BLDC, który jest na początku tego artykułu?

      Usuń
    2. Zgadza się przeczytałem chyba całość ;-)

      Usuń
  5. OK :-)

    Dziękuję za chęć pomocy, jednak w przypadku cyklu artykułów, piszę je tylko osobiście, by jednolicie prezentować każdy odcinek według własnego planu podziału zagadnień i stylu.

    Niestety jak już pisałem w jednym z komentarzy, BLDC muszą poczekać do końca pierwszej części dot robotów. W drugiej części będę używał silników BLDC i wtedy zajmiemy się tym tematem dalej.

    Ale nic nie stoi na przeszkodzie, byś napisał własny artykuł: Stały konkurs na artykuł miesiąca

    W ten sposób możesz przyczynić się do postępów w temacie BLDC, a przy okazji wygrać nagrodę :-)

    OdpowiedzUsuń
  6. Witam, zmontowałem Pański układ oraz wykorzystałem napisany przez Pana program bez żadnych modyfikacji. Dysponuję podobny silniczkiem (też z dysku). Silnik kręci się jednak po zakończeniu fazy startu nie przełącza się na tryb pracy ( tak jakby nie uC nie zliczał przerwań z komparatora albo tych przerwań nie ma). Probowałem róznych modyfikacji fazy startu jednak nic nie pomogło. Co może być przyczyną takiego zachowania uC?

    OdpowiedzUsuń
    Odpowiedzi
    1. Witaj.

      Przyczyn może być wiele. Najlepiej byłoby, gdybyś założył temat na naszym forum, i dokładnie opisał problem, pokazał program, schemat i zdjęcia. Im więcej danych tym łatwiej będzie znaleźć przyczynę. Gdybyś mógł zrobić filmik razem z dźwiękiem pracującego silnika, także byłby to pewien wskaźnik. Ja będę dostępny na forum jutro po południu, więc jeżeli nikt wcześniej Ci nie pomoże to postaramy się znaleźć przyczynę.

      Usuń
    2. Tak jak Pan prosił umieściłem wątek wraz z filmikiem na forum. Jak znajdzie Pan chwile czasu proszę o analize problemu.

      Usuń
  7. Przede wszystkim wielkie dzięki, dla autora, za ogromną ilość zdobytej przeze mnie praktycznej! Seria artykułów po prostu świetna! Nie mogę niestety rozgryźć dla czego przy dzielniku napięcia do BEMF są użyte rezystory 4k7 i 10K. przy zasilaniu 12V (pomijając chwilową składową) daje to 8.14V na wejście do mikro-kontrolera. Czy nie powinno być to dla niego szkodliwe? (w datasheet atmegi znalazłem że max każdego wejścia to 6V)

    OdpowiedzUsuń
    Odpowiedzi
    1. Cieszę się, że ten cykl się przydaje :)

      Co do rezystorów, to w trakcie pisania następnego artykułu z tego cyklu (uprzedzam od razu pytania, że nie wiem kiedy to nastąpi) sprawdzę i dopiszę poziomy napięć, jakie faktycznie występują ponieważ na oscylogramach ich nie zaznaczyłem.

      Dobrze, że zwróciłeś na to uwagę. Jeżeli masz oscyloskop i możesz mierzyć, a nawet udostępnić oscylogramy, to byłoby fajnie :-)

      Usuń
  8. Rezystory powinny byc zamienione miejscami 4.7k z 10k, co da nam sygnal bemf na poziomie 3.8V. Mysle, ze to czeski blad nic wiecej.

    OdpowiedzUsuń
  9. Witam, zrobiłem na podstawie materiałów dostępnych na stronie program strownika pod ATMega644p+mostek STM L6234. Niestety, mam kłopot z powtarzalnoscią badania(kręcenia się silnika) problem szerzej opisałem na forum by nie zaśmiecać wiadomości. Prosiłbym o pomoc.
    http://www.elektroda.pl/rtvforum/topic2665549.html

    OdpowiedzUsuń
  10. Witam, zrobiłem Pana układ i wgrałem program prawie bez modyfikacji. Wszystko działa bardzo dobrze nawet na silnikach modelarskich dużej mocy, oczywiście po zmianie tranzystorów.

    Jedyny problem jaki napotkałem to ,,trzaski,, które powstaja przy przełączeniu pierwszej komutacji ,, U_TR_G_ON //włącz tranzystor górny U ,,.

    Przebieg z portu timera OC1A dla małych prędkości wyglada tak ze pierwszy impuls jest bardzo szeroki a nastepne juz normalnie z dobrą wartoscia ,,PWM_akt,,

    Co powoduje ten nagły wzrost wypełnienia tego pierwszego impulsu?

    OdpowiedzUsuń
    Odpowiedzi
    1. http://oi57.tinypic.com/vy2yav.jpg

      Impuls pojawia sie tylko dla tego kanału ale nie za każdym razem lecz systematycznie. Powoduje to nagły wzrost mocy i charakterystyczne ,trzaski,.
      Chwile wczesniej wyłaczany jest przebieg sterowany drugim kanałem ,B, tego samego timera. Moze to ma jakis wpływ ze ,gubi, jakąś synchonizacje. Ktos spotkał sie z podobną sytuacja?

      Usuń
  11. Witam,
    można prosić o przebieg BEMF z silnika w trakcie pracy z podłączonym zasilaniem? Mój przebieg ma straszne zakłócenia i znacznie odbiega od prawidłowego.

    OdpowiedzUsuń
  12. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  13. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  14. Takie spostrzeżenie: sygnał sumBEMF oscyluje wokół pewnej wartości. Domniemywam, że wokół masy. Dlaczego zatem komparatorem porównujemy wartości sumBEMF oraz badanej fazy, skoro do wykrycia przejścia przez zero wystarczy nam porównywać sumBEMF i masę. Wystarczy wtedy użycie jednego sygnału zamiast 4.

    OdpowiedzUsuń
    Odpowiedzi
    1. Z kilku powodów. Po pierwsze potrzebna nam jest informacja o położeniu rotora. Stąd 3 przewody - dzięki temu wiemy z jakim położeniem związana jest komutacja. Poza tym masa też będzie pływać, ze względu na znaczny pobór prądu przez silnik. W efekcie lepiej jest porównywać BEMF z sumBEMF niż z masą układu, która zazwyczaj będzie miała nieco inny potencjał.

      Usuń
    2. To jeszcze drugie pytanie. Sygnały BackEMF poszczególnych faz jak i BackEMF sumy są sygnałami przemiennymi, dlaczego w takim razie są one podawane bezpośrednio na komparator ATmegi, skoro on wymaga napięcia wejściowego z zakresu 0-5, a w naszym sprzężeniu będą też napięcia ujemne

      Usuń
    3. Nigdy nie będą ujemne. Jedno napięcie będzie ujemne względem drugiego, ale zawsze oba będą dodatnie względem masy układu (w pewnym uproszczeniu). W efekcie wszystko będzie działać ok.

      Usuń
  15. Proszę o wytłumaczenie co kombinujecie Domyślam się że chodzi o uruchomienie silnika trzy fazowego

    OdpowiedzUsuń
    Odpowiedzi
    1. ???
      Ten artykuł jest częścią cyklu o BLDC, a link do spisu treści cyklu jest na początku artykułu.

      Usuń
  16. Witam. Czy zamiast korzystania z obrotomierza, nie można wykorzystać jakoś wiedzy na temat położenia wirnika do pomiaru prędkości?

    OdpowiedzUsuń
  17. Witam, czy istnieje możliwość wysłania kompletnego projektu AVR Studio 4? Link umieszczony w artykule jest już nieaktualny stąd moje pytanie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Tak - proszę do mnie napisać PW na elektroda.pl.

      Usuń
  18. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  19. Witam,
    Chciał bym się bliżej przyjrzeć sterowaniu Back-EMF.
    Ponieważ linki w artykule nie działają, to jeśli jest taka możliwość bardzo proszę o wysłanie mi kompletnego projektu.
    Napisałem już do autora na portalu elektroda.pl (nick dearta)
    Marek

    OdpowiedzUsuń
  20. Witam. Czy jest możliwość wysłania kompletnego projektu? Link wygasł i nie można już go pobrać.

    OdpowiedzUsuń
  21. Witam,
    Czy można prosić o określenie zasady działania zabezpieczenia z kroku 5 czyli sprawdzenia przełączenia w TRYB_PRACA. Lub podanie fragmentu kodu.

    OdpowiedzUsuń
  22. Widać, że ten tekst wymagał ogromu pracy. Jednak miło widzieć, że Twój wysiłek się opłacił, bo komentujący są bardzo zainteresowani tematem. Powodzenia w tworzeniu kolejnych artykułów.

    OdpowiedzUsuń
  23. mój silnik napędzany impulsami działa tak przedstawiam na tym filmie
    https://www.youtube.com/watch?v=gslSxQDnKJ8&lc=z22ni5e5nqr4dbfkcacdp432aw4vo32eofztujr2mllw03c010c

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.