Przejdź do treści

Bezczujnikowy sterownik silnika BLDC na uC Freescale

Zaprojektowany bezczujnikowy sterownik silników BLDC jest integralną częścią większego projektu Stanowisko BLDC. Idea sterowania jest podobna jak w  przedstawionym wcześniej bezczujnikowym regulatorze BLDC na mikrokontrolerze AVR, jednak w tym wypadku wykorzystano moduł z mikrokontrolerem Freescale MC9S12A64 i zrezygnowano z minimalizacji wymiarów podczas projektowania PCB.

bldc_controller_top

Oprogramownie


Oprogramowanie mikrokontrolera zostało napisane w języku C. Wybrane środowisko pracy to Freescale Code Warrior V5.9.0 wraz z dodatkiem Processor Expert.

Program sterujący

Oprogramowanie działa w oparciu o maszynę stanów skończonych (FSM). Większość przejść między stanami zrealizowano za pomocą przerwań.

state_machine

Po uruchomieniu regulatora następuje inicjalizacja poszczególnych peryferiów mikrokontrolera, takich jak przetworniki analogowo-cyfrowe, timery, generatory sygnałów PWM, czy modułu I2C. Następnie uruchamiana jest procedura startowa, która w zaimplementowanej wersji działa na zasadzie wykonywania kolejnych komutacji, zmniejszając przy tym czasy między nimi. Po osiągnięciu odpowiedniej prędkości silnika sterowanie przełączane jest na bezczujnikowe. Dodatkowo, z pewnym opóźnieniem uruchamiany jest regulator PID, który odpowiada za osiągnięcie odpowiedniej prędkości obrotowej silnika. Aby zapewnić niezawodność działania, wykorzystany został moduł watchdoga, który resetuje mikrokontroler w przypadku zatrzymania działania silnika, lub przy zbyt niskiej jego prędkości obrotowej.

Obliczanie czasu kolejnej komutacji

W celu obliczenia czasu kolejnej komutacji wykonuje się cyklicznie pomiar napięcia na odpowiednim uzwojeniu silnika. Jeżeli wartość napięcia przekroczy połowę wartości zasilania, wtedy zatrzymuje się wykonywanie pomiarów napięcia, a czas kolejnej komutacji odmierzany jest przez odpowiedni timer i jest równy czasowi od poprzedniej komutacji do momentu przekroczenia połowy wartości napięcia zasilania. Po wykonaniu komutacji, dokonuje się uruchomienia timera opóźniającego pomiary napięć w celu zmniejszenia wpływu zakłóceń związanych z przełączaniem zasilanych faz silnika. Po upływie czasu aktywowane są przerwania w których wykonuje się pomiarów napięć i cykl zaczyna się od nowa.

Implementacja regulatora PID

Do osiągnięcia zadanej prędkości obrotowej przez silnik, wykorzystano regulator PID. Wyjściem regulatora jest wartość wypełnienia sygnału PWM sterującego kluczami. Natomiast wejściem jest wartość prędkości obrotowej silnika uzyskiwana na podstawie pomiaru sygnału kwadraturowego z enkodera magnetycznego AS5040. Dedykowana aplikacja komputerowa umożliwia zmianę nastaw regulatora PID. Wzór transmitancji regulatora jest następujący.

K_R(s) = K_p ( 1 + 1/(T_i s) + T_d s )
Pomiar prędkości obrotowej

Do pomiaru prędkości obrotowej wału silnika BLDC wykorzystano enkoder magnetyczny AS5040. W celu obliczenia prędkości obrotowej wymagana jest znajomość częstotliwości sygnału z wyjścia kwadraturowego. Zostanie ona obliczona z wykorzystaniem dwóch timerów. Zdecydowano się na metodę pomiaru w której jeden timer odmierza podstawę czasu, natomiast drugi zlicza impulsy wejściowe. Odpowiednie obliczenia pozwoliły uzyskać częstotliwość sygnału i jednocześnie prędkość obrotową. Długość podstawy czasu dobrana została tak, aby uzyskać kompromis między szybkością pomiaru i jego dokładnością.

Część sprzętowa


Układ został podzielony na podukłady, które opisane zostały w poszczególnych sekcjach. Część sprzętowa regulatora została zaprojektowana w taki sposób, aby współpracować z gotowym modułem mikrokontrolera MC9S12A64.

bldc_controller_v2_freescale_2
bldc_controller_v2_freescale_3

Układ zasilania i pomiaru prądu

Urządzenie wymaga dostarczenia stałego napięcia zasilania (DC) mieszczącego się w granicach od 8 do 15 V. W obwodzie zasilającym wykorzystano dwie dwukierunkowe diody zabezpieczające transil (TVS1, TVS2), których zadaniem jest tłumienie przepięć i wysokonapięciowych impulsów.

 

bldc_supply

Jako magazyn energii dla stabilizatora wykorzystano kondensatory elektrolityczne C1 i C2. Ich dodatkowym zadaniem jest również filtrowanie zakłóceń o niskich częstotliwościach. Warto zauważyć, że połączenie dwóch kondensatorów szeregowo zmniejsza wartość ESR (Equivalent Series Resistance), co pozytywnie wpływa na pasmo filtrowanych zakłóceń. Dodatkowo, zakłócenia o wysokich częstotliwościach filtrowane są przez kondensator ceramiczny C3. Na wyjściu stabilizatora zastosowano kondensator tantalowy C4 ze względu na wyższej jakości parametry, a szczególnie ze względu na mniejszą rezystancję szeregową ESR. Zastosowany stabilizator liniowy LDO (Low DropOut) pozwala uzyskać na wyjściu napięcie 5V, które zasila większość podzespołów urządzenia. Jego wydajność prądowa jest nadmiarowa i nawet przy obudowie o dużej rezystancji termicznej (SOT-89) nie powinien się nagrzewać. Dodatkowo, układ wyposażono w diodę sygnalizującą dostarczenie zasilania (D7). W celu pomiaru prądu pobieranego przez silnik wykorzystano rezystor pomiarowy R1 o rezystancji 3 mΩ w obudowie 2512, a także układ INA199A3 (U4), który jest wzmacniaczem pomiarowym przystosowanym do pomiarów prądu na dodatniej linii zasilania. Jego wzmocnienie napięciowe jest równe K_u = 200 [V/V]. Dodatkowo, wyjście wzmacniacza pomiarowego zostało zabezpieczone diodą Zenera (D8).

Rozdzielczość pomiaru pobieranego prądu

Wykorzystany przetwornik analogowo-cyfrowy działa w trybie 10 bitowym, a jego napięcie referencyjne wynosi V_REF = 5V.  Można łatwo obliczyć rozdzielczość mierzonego napięcia.

V_{RES} = V_{REF}/2^{10}  = 4,88~mV

Aby obliczyć rozdzielczość mierzonego prądu należy skorzystać z poniższego wzoru.

I_{RES} = V_{RES} * R / K = 8,13~mA

Otrzymana rozdzielczość wydaje się wystarczająca, aczkolwiek należy wziąć pod uwagę, że na dokładność pomiaru wpływ ma szereg czynników, takich jak niedokładność przetwornika A/C, niedokładność rezystora pomiarowego, niedokładność źródła napięcia odniesienia, niedokładność wzmacniacza pomiarowego, czy zakłócenia toru pomiarowego.

Układ źródła napięcia odniesienia

W celu zapewnienia stabilności wykonywanych pomiarów przez przetwornik analogowo-cyfrowy w który wyposażony jest mikrokontroler, zdecydowano się wykorzystać zewnętrzne źródło napięcia referencyjnego. Schemat widoczny na rysunku zaczerpnięto z noty katalogowej układu LM336D-5.0 i po modyfikacjach wartości niektórych elementów zdecydowano się wykorzystać w projektowanym urządzeniu. Dołączone elementy dyskretne pozwalają uzyskać większą stabilność temperaturową napięcia, a także regulować jego wartość w nieznacznym zakresie.  Dodatkowo, umożliwiono użytkownikowi wybór napięcia odniesienia dołączonego do mikrokontrolera. Widoczne na schemacie zworki (J1-J3) pozwalają wybrać odpowiednie napięcie. Jednocześnie tylko jedna zworka może być zwarta, aby uniknąć uszkodzenia urządzenia.

  • zwarta J1 – Napięcie stabilizatora 5V.
  • zwarta J2 – Napięcie zasilania silnika o odpowiednio zmniejszonej wartości za pomocą dzielnika napięciowego.
  • zwarta J3 – Napięcie 5V z układu LM336D-5.0.

bldc_controller_ref_volt_source

Złącza modułu z mikrokontrolerem MC9S12A64

W celu podłączenia modułu z mikrokontrolerem MC9S12A64 zastosowano odpowiednie złącza zgodne z modułem.

bldc_uc_connectors

Układ wejściowy analogowych torów pomiarowych

W celu dostosowania mierzonych napięć fazowych i napięcia zasilania silnika zdecydowano się na wykorzystanie układów składających się z dzielników napięciowych i filtrów dolnoprzepustowych RC. Wartości rezystorów dobrano tak, aby napięcia wyjściowe dzielników nie przekraczały poziomu 5V. Natomiast parametry filtrów dla napięć fazowych dobrano tak, aby odcinane były częstotliwości związane z sygnałem PWM sterującym tranzystorami w module wykonawczym, które wynoszą 20kHz.

bldc_sample_circuit

Rozdzielczość pomiarów

W celu obliczenia rozdzielczości pomiarów napięć wejściowych dzielników należy najpierw obliczyć rozdzielczość pomiaru dla przetwornika 10 bitowego.

V_{RES} = V_{REF} / 2^{10}  = 4,88 mV

Wykorzystując wzór na napięcie wyjściowe dzielnika U_wy = U_we * R_2 / (R_1 + R_2) można obliczyć rozdzielczość pomiaru na wejściu dzielnika.

V_{RES2} = V_{RES} * (R_1+R_2) / R_2

Przyjmując wartości rezystorów R_1 = 2,2k Ω i R_2 = 4,7k Ω otrzymujemy następującą wartość.

V_{RES2} = 0,00488 * (4700 + 2200) / 2200= 15 mV

Należy jednak jak w przypadku pomiaru prądu wziąć pod uwagę poszczególne niedokładności. W tym przypadku znaczny wpływ na wyniki pomiarów będą dodatkowo miały wartości rezystorów, które mają określoną tolerancję.

Układ wyjściowy – stopień mocy

Elementami wykonawczymi stopnia mocy są tranzystory unipolarne Mosfet z kanałem N (Q2, Q4, Q6) i kanałem P (Q1, Q3, Q5). Zastosowane modele zostały tak dobre, aby spełniać wymogi maksymalnego prądu na odpowiednim poziomie, niskiego ładunku bramki i wiele innych parametrów. Ze względu na ładunek bramek tranzystorów postanowiono wykorzystać odpowiednie drivery (U1, U2, U3). Charakteryzują się one tym, że jedno z wejść jest nieodwracające, a drugie odwracające, dzięki czemu można podawać zarówno na dolne jak i górne klucze sygnał PWM o takiej samej polaryzacji. Zasada działania układu jest następująca. Mikrokontroler generuje sześć niezależnych sygnałów PWM, które podawane są na wejścia driverów (U1, U2, U3). Nastomiast drivery przeładowują ładunki bramek tranzystorów umożliwiając odpowiednie wysterowanie silnika w zależności od wypełnienia sygnałów PWM. W celu zmniejszenia obciążenia diod pasożytniczych tranzystorów przez które przepływa prąd w fazie wyłączenia sterowania (obciążenie indukcyjne) zdecydowano się wykorzystać dodatkowe diody (D1 – D6). Rezystory R13 – R18 umieszczono, aby zabezpieczyć się przed występowaniem stanów nieokreślonych na wejściach układu, co mogłoby powodować zwarcia w układzie wyjściowym.

bldc_power_stage_circuit

 

Złącze jednostki pomiarowej parametrów pracy silnika BLDC

W celu komunikacji jednostki pomiarowej z regulatorem BLDC zdecydowano się wykorzystać złącze na którym wyprowadzono dwie linie interfejsu I2C. Ponadto linie: U_PHASE, V_PHASE i W_PHASE doprowadzone zostały do układu wejściowego toru pomiarowego. Sygnały te są napięciami na poszczególnych fazach trójfazowego silnika BLDC. Ponadto do złącza doprowadzony zostanie sygnał analogowy z sensora pomiaru prądu pobieranego przez silnik. Sygnał ten będzie mieścił się w przedziale 0-5V, aby umożliwić bezpośredni pomiar przetwornikiem ADC mikrokontrolera. Dodatkowo na złączu można zauważyć doprowadzony sygnał A_LSB_U, który jest wyjściem kwadraturowym z enkodera magnetycznego. Został on dołączony na wypadek, gdyby okazało się problematyczne sterowanie silnikiem na podstawie obrotów obliczonych z czasu między poszczególnymi komutacjami.

bldc_measure_unit

Protokół komunikacji z jednostką pomiarową


Do komunikacji regulatora z dedykowaną jednostką pomiarową wykorzystano magistralę I2C. W zaprojektowanym protokole komunikacji, regulator działa w trybie SLAVE, natomiast jednostka nadrzędna w trybie MASTER i jest odpowiedzialna za generowanie sygnału zegarowy na SCL, a także rozpoczynanie i kończenie komunikacji. Jednostka pomiarowa działa w trybie master, natomiast regulator jako slave.

Protokół komunikacji z jednostką pomiarową

W pierwszym przesłanym bajcie danych, zaraz po bajcie z adresem odbiornika znajduje się rozkaz. Dwa najstarsze bity są bitami kontrolnymi o wartościach wysokiego stanu logicznego (11). Kolejne 6 bitów określa rozkaz, który należy wykonać. Łatwo obliczyć, że w ten sposób możemy zakodować do 64 różnych rozkazów, co wydaje się być wartością zupełnie wystarczającą. Zaimplementowany protokół zakłada przesyłanie bardziej znaczących bajtów przed mniej znaczącymi (Big endian). W zależności od rozkazu następnie przesyłane są dwa bajty z danymi lub są pomijane. Dodatkowy bajt zawiera obliczoną sumę kontrolną.

Źródła


  • Arkadiusz Domoracki, Krzysztof Krykowski: Silniki BLDC – klasyczne metody sterowania. Zeszyty Problemowe – Maszyny Elektryczne Nr 72/2005
  • AVR444: Sensorless control of 3-phase BLDC motors based on tinyAVR and megaAVR devices [online]. http://www.atmel.com/Images/doc8012.pdf
  • Marek Kabała, Marek Wnuk. Moduł z mikrokontrolerem MC9S12A64 (lub MC9S12C32) [online]. http://rab.ict.pwr.wroc.pl/~mw/Proj/Micro/hc12/hc12a64.pdf
  • AVR221: Discrete PID controller [online]. http://www.atmel.com/images/doc2558.pdf
  • MC9S12DJ64 Data Sheet and Reference Manual. [online]. http://www.freescale.com

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.