Bezczujnikowy regulator silnika BLDC w oparciu o mikrokontroler Freescale

Wrzesień 14, 2015
Wysłane przez Michał Drwięga

Zaprojektowany i wykonany bezczujnikowy regulator BLDC jest integralną częścią większego projektu Stanowisko BLDC. Idea sterowania i konstrukcji jest podobna jak w  przedstawionym wcześniej bezczujnikowym regulatorze BLDC, jednak w tym wypadku wykorzystano moduł z mikrokontrolerem Freescale MC9S12A64 i zrezygnowano z minimalizacji wymiarów podczas projektowania PCB (zmniejszając czas poświęcony na projektowanie i zyskując łatwość montażu elementów). Poniżej zamieszczono wizualizację regulatora.

 

bldc_controller_top

 

Oprogramownie


Oprogramowanie mikrokontrolera jest rozwijane w języku C. Wybrane środowisko pracy to Freescale Code Warrior V5.9.0 wraz z dodatkiem Processor Expert. W kolejnym podrozdziale przedstawiono ogólną zasadę działania programu, natomiast bardziej szczegółowe opisy można znaleźć w dokumentacji programu.

Główna idea programu

Utworzone oprogramowanie działa w oparciu o maszynę stanów skończonych przedstawioną na rysunku. Większość przejść między stanami zrealizowano za pomocą przerwań.

state_machine

 

Idea działania jest następująca. 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

W celu zapewnienia osiągnięcia zadanej prędkości obrotowej przez silnik, zaimplementowano dyskretny 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. Implementacja regulatora PID wzorowana była na opisie z noty aplikacyjnej AVR221 firmy Atmel. Dołączona aplikacja komputerowa umożliwia zmianę nastaw poszczególnych członów regulatora PID. Poniżej przedstawiono wzór transmitancji regulatora, w oparciu o który został zaimplementowany.

K_R(s) = K_p ( 1 + 1/(T_i s) + T_d s )

Pomiar prędkości obrotowej

Pomiar prędkości obrotowej wału silnika BLDC zrealizowano z wykorzystaniem enkodera magnetycznego 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 zostanie doświadczalnie tak, aby uzyskać zadowalający 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 dostarczonym modułem mikrokontrolera MC9S12A64. Na zdjęciach przedstawiono zmontowany regulator BLDC.

bldc_controller_v2_freescale_2

bldc_controller_v2_freescale_3

Układ zasilania i pomiaru prądu

W celu poprawnej pracy, urządzenie wymaga dostarczenia stałego napięcia zasilania (DC) mieszczącego się w granicach od 8 do 15 V. Schemat ideowy układu zasilania wraz z układem pomiaru pobieranego prądu przedstawiono na rysunku nr \ref{fig:supply_circuit}. 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. Napięcie znamionowe diod to 16V, a chwilowa moc strat osiąga poziom 600W.

 

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/210  = 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. Należy pamiętać, że 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. Na rysunku znajduje się schemat ideowy sygnałów doprowadzonych do złącz. Dokładna dokumentacja dołączanego modułu znajduje się w raporcie [4].

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 / 210  = 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ą


W celu 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. Rozkazy będą formułowane przez jednostkę pomiarową i przesyłane do regulatora.

 

Suma kontrolna

 

W celu weryfikowania poprawności transmisji zaimplementowano obliczanie prostej sumy kontrolnej. Algorytm zlicza liczbę wystąpień wysokich bitów w ciągu wysłanych bajtów. Metoda ta nie zapewnia dużej odporności na zakłócenia, ponieważ jest duże prawdopodobieństwo, że suma wysokich bitów niepoprawnego ciągu bajtów będzie równa sumie poprawnego. Aczkolwiek w tym przypadku sprawdziła się, a jej znaczną zaletą jest niewielka złożoność obliczeniowa.

 

Opis zaprojektowanego protokołu 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
  • Napęd z bezszczotkowym silnikiem prądu stałego (BLDC) [online]. http://www.ely.pg.gda.pl/kane/Dydaktyka/BLDC-instrukcja.pdf
  • 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
  • Tomasz Orłowski: Maszyna stanów skończonych dla programisty systemów wbudowanych. [online]. http://www.ep.com.pl/files/1436.pdf
  • UM10204 I2C-bus specification and user manual – NXP. [online]. http://www.nxp.com/documents/user\_manual/UM10204.pdf

 

Dodaj komentarz

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

  • Polski
  • English