W ramach jednego z projektów wykonałem sterownik trójfazowego silnika bezszczotkowego prądu stałego (BLDC) w oparciu o mikrokontroler AVR Atmega8. W jednym z wcześniejszych wpisów można znaleźć podstawy teoretyczne sterowania silnikami BLDC bez stosowania zewnętrznych czujników.
Cechy sterownika
- Ustalanie położenia wału silnika na podstawie wstecznej SEM (wyeliminowanie czujników położenia wału).
- Procedura startowa umożliwiająca uruchomienie silnika jedynie przy niewielkim obciążeniu początkowym.
- Tryb pracy bez pętli sprzężenia zwrotnego.
- Tryb pracy z prędkościową pętlą sprzężenia zwrotnego – określanie prędkości obrotowej na podstawie obliczonego czasu między komutacjami.
- Kompatybilność z silnikami, których uzwojenia połączone są w gwiazdę.
- Stopień mocy zrealizowany w oparciu o tranzystory unipolarne MOSFET.
- Napięcie zasilania w zakresie od 8.4 V do 12.6 V w celu umożliwienia zasilania z akumulatora litowo-polimerowego (Li-Poly) składającego się z trzech ogniw.
- Maksymalny prąd ciągły poniżej 8A.
- Komunikacja z jednostką nadrzędną poprzez TWI (I2C).
- Zabezpieczenie ograniczające pobór prądu po przekroczeniu maksymalnej, dopuszczalnej wartości.
Obwód wejściowy z filtrem i stabilizatorem
W celu odfiltrowania części zakłóceń napięcia zasilającego wykorzystane zostały kondensatory elektrolityczne C1 i C2, a także kondensator ceramiczny C3. Zastosowano dwa kondensatory elektrolityczne ze względu na mniejszą rezystancję ESR (Equivalent Series Resistance) takiego połączenia, co wpływa na zwiększenie pasma odfiltrowywanych zakłóceń, a także ze względu na mniejszą wysokość dwóch kondensatorów od jednego o większej wartości. Jednak nadal kondensatory elektrolityczne są w stanie filtrować tylko tętnienia o niewielkiej częstotliwości, dlatego zastosowano kondensator ceramiczny C3, którego zadaniem jest eliminowanie zakłóceń o wysokiej częstotliwości, tzw. "szpilek napięciowych". Ponadto warto zaznaczyć, że kondensatory elektrolityczne działają również jako magazyn energii dla stabilizatora.
Stabilizator LM1117-5 charakteryzuje się maksymalnym VDO (Voltage Dropout) na poziomie 1,1 V przy pobieranym prądzie nie przekraczającym 100 mA (dane z noty katalogowej). Oszacowano, że prąd pobierany ze stabilizatora nie przekroczy tej wartości, więc minimalne napięcie zasilania układu można określić jako 6.1 V, jednak ze względu na spadki napięcia wejściowego spowodowane dynamiką obciążenia zaleca się stosowanie większego napięcia minimalnego, czyli 6.5 V. Wartość kondensatora tantalowego na wyjściu stabilizatora dobrano zgodnie z notą katalogową.
Sposób podłączenia mikrokontrolera Atmega8
Wykorzystano mikrokontroler Atmega8 ze względu na wcześniejsze doświadczenia związane z programowaniem mikrokontrolerów rodziny AVR, a także spełnienie przez ten model podstawowych założeń. Posiada on odpowiednią ilość portów I/O, dodatkowo udostępnia jedenaście kanałów przetwornika A/D.
ATmega jest też wyposażona w sześć kanałów PWM i interfejs I2C. Kolejnym istotnym na potrzeby aplikacji modułem mikrokontrolera jest sprzętowy generator czasów martwych (ang. dead time generator), który upraszcza implementację sterowania układem wykonawczym.
Ogólna zasada działania układu jest następująca. Podczas startu silnika procedura startowa powoduje, że podawane są na port D stany odpowiadające kolejnym sekwencjom sterowania. Po osiągnięciu odpowiedniej prędkości sterowanie przełączane jest na bezczujnikowe, czyli z pomiarem napięć na wolnej fazie. Wykorzystuje się tutaj fakt, że w każdym momencie zasilane są jedynie dwa uzwojenia silnika, natomiast na trzecim wolnym uzwojeniu indukuje się napięcie odpowiadające wartością położeniu wału silnika. Zgodnie z przedstawionymi w części teoretycznej przebiegami, charakterystyki napięć fazowych mają kształt trapezoidalny. Pomiędzy dwoma komutacjami szukamy punktu, w którym napięcie jest równe połowie napięcia zasilającego. Mierzymy czas od jednej komutacji do osiągnięcia tego punktu, a następnie wiedząc, że czas do przełączenia następnej sekwencji jest taki sam, obliczamy czas kolejnej komutacji.
Na schemacie z mikrokontrolerem można zauważyć, że do kanałów przetwornika ADC mikrokontrolera doprowadzone zostały trzy sygnały z każdej fazy zasilającej silnik, oznaczone zostały jako: U_ADC, V_ADC i W_ADC. Ponadto widzimy sygnał o nazwie SPEED_REF, który oznacza wartość zadaną prędkości w postaci analogowej, a także sygnał CURRENT wykorzystywany do pomiaru aktualnego poboru prądu. Nie wykorzystano zewnętrznego rezonatora kwarcowego ze względu na minimalizację elementów.
W sterowniku wykorzystano rozwiązanie zaczerpnięte z noty aplikacyjnej Atmel AVR444, polegające na podaniu napięcia zasilającego układ wykonawczy jako napięcia odniesienia do przetwornika ADC, oczywiście po dostosowaniu wartości przez dzielnik napięcia i odfiltrowaniu składowych o większych częstotliwościach. Eliminuje to potrzebę pomiaru napięcia zasilającego za przed każdym pomiarem napięcia fazowego, a także znacznie upraszcza obliczenia wykonywane przez mikrokontroler. Jednak w celu określenia prądu, czy napięcia określającego wartość zadaną należy zmierzyć jeszcze dodatkowo znane napięcie i wykonać odpowiednie obliczenia. Ze względu na brak potrzeby dużej dokładności stałego źródła napięcia, wykorzystano napięcie wprost ze stabilizatora. Jednak, aby zabezpieczyć się się przed sytuacją, gdy napięcie ze stabilizatora będzie większe od napięcia na AREF, wykorzystano dzielnik napięciowy. Dodatkowe pomiary nie obciążają mocno jednostki obliczeniowej, ponieważ nie są wykonywane z częstotliwością próbkowania wolnego uzwojenia.
Dzielniki napięć z filtrami dolnoprzepustowymi – część układu próbkującego
W celu uzyskania poprawnych pomiarów wartości indukowanej SEM w wolnym uzwojeniu zaprojektowano układ widoczny na poniższym rysunku. Składa się on z czterech dzielników napięć wraz z pasywnymi filtrami dolnoprzepustowymi. Warto zauważyć, że każdy z układów przy niskich częstotliwościach zachowuje się jak normalny dzielnik napięciowy, natomiast przy większych częstotliwościach sygnał jest tłumiony.
Wartości elementów zostały obliczone w taki sposób, aby napięcie wyjściowe nie przekraczało napięcia zasilania mikrokontrolera i pinu AVCC. Ponadto określono częstotliwość graniczną, dla której dobrano wartości kondensatorów.
Układ wykonawczy
Układ wykonawczy można podzielić na dwie części. Pierwsza odpowiada za odpowiednie wysterowanie drugiej części, w której znajdują się trzy półmostki.
Sterowanie trzyfazowym silnikiem BLDC wymaga podania w odpowiednim momencie sygnału o modulowanej szerokości impulsów (PWM) na odpowiedni tranzystor MOSFET znajdujący się w półmostkach. Ze względu na dostępność jedynie trzech sygnałów wyjściowych PWM w użytym mikrokontrolerze, wykorzystano sześć dwuwejściowych bramek AND. Na jedno z wejść każdej bramki podano sygnał PWM. Natomiast kolejne wejścia podłączono do cyfrowych wyjść mikrokontrolera. Takie rozwiązanie pozwala sterować półmostkami z wykorzystaniem tylko jednego sygnału PWM. Warto zaznaczyć, że w wybranej metodzie sterowania (bipolarnej) jednocześnie sygnał PWM podawany jest na dwa tranzystory mocy.
Jako bramki AND wykorzystano układy NC7WZ08 produkcji Fairchild Semiconductor, głównie ze względu na niewielkie gabaryty (obudowa 8-Lead US8, JEDEC MO-187), a także stosunkowo duży dopuszczalny prąd wyjściowy. Założenie odnośnie prądu wyjściowego jest na tyle istotne, ponieważ pojemność wejściowa tranzystorów mocy sprawia, że prądy sterujące przy większych częstotliwościach osiągają znaczne wartości.
Sterowanie górnymi kluczami półmostków wymaga wykorzystania dodatkowego układu bazującego na tranzystorach bipolarnych NPN. Dzięki niemu, stan wysoki na wyjściu danej bramki AND powoduje otwarcie klucza, natomiast stan niski zamknięcie, co upraszcza algorytm sterowania. Rezystory R12-R15 dodane zostały w celu ograniczenia prądów IBE i ICE poszczególnych tranzystorów. Warto zaznaczyć, że nie zdecydowano się na dedykowany sterownik tranzystorów mocy MOSFET ze względu na problem z dostępnością i założenie dotyczące minimalizacji rozmiarów urządzenia.
W układzie półmostków jako klucze wykorzystano tranzystory unipolarne firmy Vishay. W roli kluczy głównych znalazły się tranzystory Si4425DDY, natomiast jako klucze dolne użyto modelu Si4162DY.
Na schemacie można również zauważyć rezystor R18 włączony pomiędzy masą, a dolnymi kluczami. Służy on do pomiaru prądu pobieranego przez silnik. Na podstawie tej informacji istnieje możliwość zapobiegania uszkodzeniom urządzenia w przypadku, gdy obwody wyjściowe zostaną zwarte lub, gdy silnik pobiera zbyt duży prąd.
Podsumowanie
Aktualnie wartość zadana reprezentowana jest przez napięcie na odpowiednim wejściu o wartości z przedziału (0, 2V). Sterownik został przetestowany na kilku silnikach BLDC, w tym silniku z HDD. W obecnej wersji sterownika, zaobserwowano, że ma on problemy przy procedurze startowej, gdy ustalona, początkowa wartość zadana jest zbyt wysoka. Ponadto, dużo problemów sprawił układ próbkujący. Z jego powodu zmniejszono zakres dopuszczalnych napięć zasilania urządzenia, ponieważ nie udało się przeprowadzić poprawnie procedury startowej, gdy wartości mierzonego napięcia miały niewielką wartość.
W ramach dalszych prac nad regulatorem pozostają do rozwiązania poniższe kwestie.
- Programowy pomiar prądu pobieranego przez silnik i odpowiednie zabezpieczenie urządzenia. Na płytce umieszczono rezystor pomiarowy.
- Budowa nadrzędnej jednostki testowej. Wykorzystanie enkoderów magnetycznych do pomiaru prędkości obrotowej rotora i testowanie algorytmów sterowania.
- Rozwój algorytmów sterowania.
- Optymalizacja zużycia energii.