Bezczujnikowy regulator silników BLDC na mikrokontrolerze AVR

Lipiec 20, 2015
Wysłane przez Michał Drwięga

W ramach jednego z projektów studenckich (w roku 2012) wykonałem regulator trójfazowego silnika BLDC w oparciu o mikrokontroler AVR Atmega8. W jednym z wcześniejszych wpisów umieściłem podstawy teoretyczne odnośnie sterowania silnikami BLDC bez stosowania zewnętrznych czujników, natomiast poniżej znajduje się opis projektu.

Założenia dotyczące projektu regulatora

  • 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.
  • Sterowanie prędkościowe.
  • Implementacja trybu pracy bez pętli sprzężenia zwrotnego.
  • Implementacja trybu pracy z zamkniętą pętla sterowania – obliczanie 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. Minimalne napięcie ogniwa Li-Poly wynosi 2,7 V, natomiast maksymalne 4,2 V.
  • Ciągły prąd maksymalny na poziomie 8A.
  • Komunikacja z jednostką nadrzędną poprzez TWI (I2C).
  • Zabezpieczenie ograniczające pobór prądu po przekroczeniu maksymalnej, dopuszczalnej wartości.
WIzualizacja regulatora
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 na wyjściu stabilizatora dobrano zgodnie z notą katalogową, a wybór kondensatora tantalowego spowodowany został jego bardziej odpowiednimi parametrami.

Obwód wejściowy z filtrem i stablizatorem
Obwód wejściowy z filtrem i stablizatorem
Sposób podłączenia mikrokontrolera Atmega8

Zdecydowano się na 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.

Warto również wspomnieć o wyposażeniu modelu w sześć kanałów PWM i udostępnieniu obsługi interfejsu I2C poprzez moduł USI (Universal Serial Interface). Ważnym modułem tego mikrokontrolera jest sprzętowy generator czasów martwych (ang. dead time generator), który znacznie upraszcza implementację sterowania układem wykonawczym.

Podłączenie mikrokontrolera ATmega 8
Podłączenie mikrokontrolera ATmega 8

Ogólna zasada działania układu, bez zagłębiania się w szczegóły programowe 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. ATmega taktowana jest wewnętrznym oscylatorem RC o częstotliwości 8 MHz.

Warto zauważyć, że wykorzystano ciekawe rozwiązanie zaczerpnięte z opracowania firmy 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.

Część układu próbkującego - filtry dolnoprzepustowe z dzielnikami napięć
Część układu próbkującego – filtry dolnoprzepustowe z dzielnikami napięć

 

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.

Schemat układu wykonawczego
Schemat układu wykonawczego

 

W przedstawionym rozwiązaniu, 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. Wybór podyktowany był możliwością zamówienie wymienionych tranzystorów jako próbki, a także niewielkie wymiary (obudowa 8-Lead, SOIC, JEDEC MS-012) i wysokiej jakości parametry.

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

Nie wszystkie podstawowe założenia dotyczące projektu zostały spełnione. Do tej pory nie zrealizowano pomiaru prądu pobieranego przez silnik. Aktualnie wartość zadana reprezentowana jest przez napięcie na odpowiednim wejściu o wartości z przedziału (0, 2V). Przeprowadzono liczne testy na kilku prototypach. Testy przeprowadzane były między innymi na silniku trójfazowym BLDC uzyskanym z dysku twardego. Pobór prądu przez taki silnik stoi na poziomie poniżej 1A, jednak pozwala on przetestować różne metody sterowania.

Wykryto kilka niepokojących zjawisk w obecnej wersji regulatora. Po pierwsze zaobserwowano, że regulator ma problemy przy procedurze startowej, gdy ustalona, początkowa wartość zadana na jest zbyt wysoka. Ponadto, bardzo 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ść.

Biorąc pod uwagę fakt, że docelowym przeznaczeniem regulatora jest maszyna latająca, można stwierdzić, że wymaga on jeszcze wiele pracy. Zdecydowanie należy poprawić niezawodność rozwiązania, a także zmniejszyć straty mocy wynikające ze stosunkowo niewielkiej optymalizacji programowej.

Zakłada się dalszy rozwój prac nad regulatorem BLDC. Poniżej przedstawiono zadania do rozwiązania.

  • Programowy pomiar prądu pobieranego przez silnik i odpowiednie zabezpieczenie urządzenia. Warto dodać, że 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.

bldc_controller_v1_1_700px

bldc_controller_v1_2_700px

Tagi: , , ,

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

  • Polski
  • English