Sterownik silnika krokowego Aleksander Koreń 133109 20 czerwca 2007
1 Cel projektu Celem projektu było zaprojektowanie mikroprocesorowego sterownika silnika krokowego umożliwiajacego regulację prędkości obrotowej. Sterownik ten miał komunikować sie z komputerem poprzez interfejs RS232. 2 Budowa silnika krokowego Silnikiem krokowym wykorzystywanym w projekcie był silnik o zmiennej reluktancji (VR). Zjawisko reluktancji jest analogiczne do zjawiska rezystancji wystepuj acego przy przepływie pradu elektrycznego, lecz odnosi sie ono do strumienia magnetycznego. Prad przepływajacy przez uzwojenie powoduje powstanie linii sił pola magnetycznego, które skupiaja sie w obszarach o najmniejszej reluktancji. Siła ta powoduje ustawianie sie ruchomego rdzenia dokładnie wzdłuż linii pola magnetycznego. Obrócenie ruchomego elementu rdzenia zwieksza reluktancje obwodu, powoduje to powstanie momentu obrotowego starajacego sie obrócić rdzeń do pozycji poczatkowej. Ilustruje to poniższy rysunek. Rysunek 1: Powstawanie reluktancyjnego momentu obrotowego Silniki reluktancyjne posiadaja wirnik wykonany z miekkiej stali z nacietymi zebami. Przepływ pradu przez pare uzwojeń powoduje ustawienie sie zebów wirnika 1
naprzeciw zasilanych uzwojeń. Nie ma w tym przypadku znaczenia kierunek przepływu pradu, a jedynie jego wartość (jest to tak zwane sterowanie unipolarne, w przeciwieństwie do bipolarnego). Obrót wirnika osiagamy zasilajac kolejno sasiaduj ace ze soba uzwojenia. Rysunek 2: Budowa silnika o zmiennej reluktancji Silnik wykorzystany w projekcie posiada 3 pary uzwojeń. Końcówki zasilajace te uzwojenia wyprowadzone sa na zewnatrz za pomoca wtyczki zawierajacej 6 przewodów (kolory kabli : czarny, czerwony, niebieski, zielony, żółty, brazowy). Przewody te parami (czarny i czerwony, niebieski i zielony, żółty i brazowy) stanowia wejścia i wyjścia poszczególnych par uzwojeń. Wspomniana końcówka jest podłaczana do wyprowadzeń sterownika oznaczonych na schemacie jako X3-1 do X3-6. Nie ma tutaj znaczenia sposób podłaczenia (czarny kabel do X3-1 lub X3-6) gdyż unipolarna metoda sterowania silnikiem nie jest wrażliwa na kierunek pradu przepływajacego przez uzwojenia. 2
3 Budowa i zasada działania sterownika Sterownik został oparty na mikrokontrolerze Atmega16. Sygnał sterujacy z mikrokontrolera zostaje podany na stopień mocy ULN2803. Mikrokontroler obsługuje również komunikacje z komputerem za pomoca interfejsu RS232 (poprzez układ MAX232). Sterowanie obrotami silnika polega na sekwencyjnym podawaniu stanu wysokiego na kolejne wyjścia portu mikrokontrolera (PD4, PD5, PD6). Sygnał ten doprowadzony do wejść układu ULN2803 powoduje zwieranie wyjść tego układu do masy, a tym samym przepływ pradu przez kolejne uzwojenia silnika. Maksymalny prad, jaki możemy uzyskać z jednego wyjścia to ok. 500 ma, a wiec wyjścia te zostały połaczone równolegle parami, aby zwiekszyć nateżenie przepływajacego pradu. Silnik sterowany jest w trybie półkrokowym tzn. zasilane jest jedno uzwojenie lub dwa sasiednie, dzieki czemu uzyskujemy dwa razy wiecej stabilnych położeń niż przy sterowaniu pełnokrokowym (a tym samym płynniejszy ruch przy małych predkościach obrotowych). Sekwencja sterujaca wyglada nastepuj aco : krok uzwojenie 1 uzwojenie 2 uzwojenie 3 1 + - - 2 + + - 3 - + - 4 - + + 5 - - + 6 + - + gdzie : + zasilanie uzwojenia - brak zasilania uzwojenia Komunikacja z komputerem odbywa sie poprzez interfejs RS232 za pośrednictwem układu MAX232. Parametry transmisji wynosza : predkość 9600, brak kontroli parzystości, 1 bit stopu. Użytkownik ma możliwość przesyłania z komputera do mikroprocesora liczby która odpowiada określonej predkości obrotowej silnika. Komunikacja ta jest jednokierunkowa, sygnały przesyłane sa jedynie z komputera do układu. 3
Rysunek 3: Schemat sterownika 4
4 Oprogramowanie mikrokontrolera Program pisany był w j ezyku C z wykorzystaniem środowiska AVR Studio 3.56 wraz z kompilatorem AVRgcc. // Sterowanie predkoscia obrotowa silnika krokowego // za pomoca sygnalow przesylanych przez lacze RS-232 #include <c:\avrgcc\avr\include/io.h> #include <c:\avrgcc\avr\include/progmem.h> #include <c:\avrgcc\avr\include/stdlib.h> #include <c:\avrgcc\avr\include/interrupt.h> #define F_CPU 8000000ul //częstotliwosc zegara w Hz #define UART_BAUD 9600ul //predkosc transmisji #define UART_CONST (F_CPU/(16ul*UART_BAUD)-1) #define UZWOJENIE1_OFF PORTD &= 0xBF #define UZWOJENIE1_ON PORTD = 0x40 #define UZWOJENIE2_OFF PORTD &= 0xDF #define UZWOJENIE2_ON PORTD = 0x20 #define UZWOJENIE3_OFF PORTD &= 0xEF #define UZWOJENIE3_ON PORTD = 0x10 //sterowanie 1. uzwojeniem silnika //sterowanie 2. uzwojeniem silnika //sterowanie 3. uzwojeniem silnika // Funkcja opozniajaca void waitms(unsigned char x) unsigned char a, b; for( ; x > 0; --x) for(b = 10; b > 0; --b) for(a = 100; a > 0; --a) asm("nop"); 5
// Procedura wykonujaca 1 obrot silnika, tryb pracy polkrokowy void obrot1(unsigned char czas) UZWOJENIE1_ON; UZWOJENIE3_OFF; UZWOJENIE2_ON; UZWOJENIE1_OFF; UZWOJENIE3_ON; UZWOJENIE2_OFF; // _UCR_ #define _UCR_ #endif #define _UCR_ #endif #define _UCR_ #endif // _USR_ #define _USR_ #endif #define _USR_ UCR UCSRB UCSR0B USR UCSRA UCR UCSRB UCSR0B USR UCSRA 6
#endif #define _USR_ #endif UCSR0A UCSR0A // Inicjalizacja portu szeregowego void UART_init(void) UBRRH = 0x00; UBRRL = (unsigned char)uart_const; UCSRB = (1<<RXCIE) (1<<RXEN) (1<<TXEN); // predkosc transmisji int main( void ) UART_init(); // program glowny // inicjalizacja portu szeregowego // konfiguracja portow I/O DDRD = 0xFE; PORTD = 0x01; unsigned char predkosc = 50; while(1) if (UDR!=0) predkosc=udr; UDR=0; obrot1(predkosc); return 0; 7
5 Komunikacja z komputerem Komunikacje sterownika z komputerem zapewnia program napisany w Qt. Umożliwia on przesyłanie do sterownika poprzez interfejs RS232 liczby która odpowiada określonej predkości obrotowej silnika krokowego. Liczba ta jest interpretowana jako wartość opóźnienia w ms pomiedy poszczególnymi krokami w sekwencji sterujacej silnikiem. Zawiera sie ona w przedziale od 50 do 127. Sam program jest bardzo prosty, zawiera on jedynie suwak umożliwiajacy wstawienie konkretnej wartości oraz wyświetlacz wizualizujacy te wartość. Został on stworzony w Qt Designerze. Składa sie z czterech plików : silnik.ui zawierajacym projekt okna graficznego, silnik.ui.h zawierajacym procedure odpowiedzialna za komunikacje ze sterownikiem, silnik.pro oraz main.cpp. Rysunek 4: Program służacy do komunikacji ze sterownikiem 6 Wnioski Podstawowym problemem było ustalenie jakiego rodzaju jest posiadany silnik, gdyż to decydowało o wyborze rodzaju sterowania (bipolarne lub unipolarne). Było to o tyle proste, że silnik ten podczas obrotu nie wykazywał żadnego oporu (nie wyst epowało charakterystyczne przeskakiwanie). Wskazywało to na silnik 8
reluktancyjny. Kolejnym problemem był brak odpowiednich scalonych sterowników mogacych posłużyć do budowy układu. Zdecydowana wiekszośc sterowników dostepnych w sprzedaży była dostosowana do silników krokowych dwuuzwojeniowych (w tym najbardziej popularne L297 i L298N), tak wiec cały cieżar sterowania musiał zostać przeniesiony na strone programowa. Odbiło sie to na jakości sterowania. Przy małych predkościach obrotowych ruch wirnika nie jest płynny (pomimo zastosowania sterowania półkrokowego). Także moment obrotowy wytwarzany przez silnik jest bardzo mały, przy pradzie 500 ma na uzwojenie wystarcza on do obrotu wirnika, lecz jakikolwiek opór powoduje jego zatrzymanie. Literatura [1] Jarosław Doliński, Mikrokontrolery AVR w praktyce, Wydawnictwo BTC [2] Jacek Przepiórkowski, Silniki elektryczne w praktyce elektronika, Wydawnictwo BTC [3] Andrzej Pawluczuk, Sztuka programowania mikrokontrolerów AVR : podstawy, Wydawnictwo BTC [4] www.mikrokontrolery.net 9