Wkretak.pl Silniki krokowe
Dodane przez Ravender dnia 03.04.2008 00:14
Pisząc ten artykuł mam na celu przedstawienie łatwego sposobu na zbudowanie prostego układu, służącego do sterowania silnikiem krokowym z komputera. Poradnik ten skierowany jest do osób początkujących, dlatego umieściłem w nim dość dużo fotografii. Nie wyczerpuję w nim całości bardzo obszernego tematu. Skupię się na budowie i zasadzie działania silnika krokowego unipolarnego i sterowaniu nim przy wykorzystaniu portu LPT komputera. Zapraszam do lektury.

Zastrzegam, że nie ponoszę odpowiedzialności za ewentualne szkody. Wszelkie czynności (podłączanie obwodów do portu, używanie programów itp) proszę wykonywać na własną odpowiedzialność!

Budowa silnika krokowego

Silnik krokowy (ang. stepper motor) jest to silnik elektryczny, w którym wirnik nie obraca się ruchem ciągłym, lecz wykonuje za każdym razem ruch obrotowy o ściśle ustalonym kącie. Dzieje się tak ponieważ do jego zacisków doprowadzany jest ciąg impulsów sterujących, a nie ciągłe (stałe bądź zmienne) napięcie. Można je spotkać praktycznie we wszystkich urządzeniach elektrycznych, w których wymagana jest pewna precyzja obrotu, przesuwu lub innego rodzaju ruchu (suwnice w drukarkach, skanerach, wycieraczki w samochodzie, cd-romy, fdd, zabawki i milion innych urządzeń).


silnik krokowy

Do zalet silników krokowych możemy zaliczyć:

Do wad zaliczamy:

Wyróżniamy wiele typów silników krokowych. Ze względu na łatwiejszy sposób sterowania, omówię tylko budowę silnika unipolarnego.

W najprostszej postaci silnik krokowy unipolarny składa się z wirnika, na którym znajdują się dwa bieguny N i S. Wokół wirnika umieszczone są cewki. Podając odpowiednie impulsy na nie, te “aktywują się” i wirnik ustawia się w odpowiedniej pozycji. Przedstawia to rysunek poniżej:

silnik unipolarny

Silnik unipolarny możemy rozpoznać po pięciu bądź sześciu przewodach. W przypadku pięciu przewodów, jeden z nich jest przewodem zasilającym a cztery sygnałowymi. W przypadku sześciu przewodów, dwa są zasilającymi (z reguły i tak sie je łączy razem). Jeśli silnik ma cztery przewody, to znaczy że jest to silnik bipolarny. Jego sterowanie jest trudniejsze i nie będę go tutaj omawiał.

Sterowanie silnikiem unipolarnym może odbywać się na kilka sposobów.

Pojedyncze krokowanie - w tym przypadku impulsy podaje się pojedynczo na kolejne cewki. Aby wirnik wykonał pełen obrót, należy sekwencję powtórzyć 12 razy. Jeden krok (impuls) to 7.5 stopnia. W dużym uproszczeniu koncepcję takiego sterowania przedstawia rysunek niżej:


silnik krokowy

Zwiększony moment obrotowy - w tym przypadku impulsy podaje się na dwie sąsiednie cewki. Silnik dzięki temu jest “silniejszy”.


silnik krokowy

Sterowanie półkrokowe - w tym przypadku impulsy podaje się na zmianę na jedną i dwie cewki. Dzięki temu uzyskujemy większą rozdzielczość (silnik może przyjmować wartości pośrednie ułożenia wirnika). Silnik wykonuje pełen obrót w 96 krokach. Jeden krok to 3.75 stopnia (oczywiście te parametry zależą od konstrukcji silnika i mogą się różnić).


silnik krokowy

Ktoś może stwierdzić, że wkradła się do powyższych informacji pewna nieścisłość. Na rysunkach widać cztery bieguny a ja piszę, że należy wykonać 48 kroków żeby obrócić wirnik o 360 stopni. Tak, ale te rysunki są tylko pewnym uproszczeniem. W rzeczywistości w silnikach krokowych znajduje się kilka lub kilkanaście biegunów, dlatego trzeba wykonać większą liczbę kroków. Ułożenie biegunów wygląda mniej więcej tak:


silnik krokowy

Należy jeszcze wspomnieć o dość praktycznej kwestii. Po wyjęciu silnika ze starego skanera, początkowo trudno ustalić które przewody prowadzą do cewek, a które są przewodami zasilającymi. Przewody z silników krokowych najczęściej wychodzą w dwóch rzędach po trzy przewody (przy silnikach 6-przewodowych).


silnik krokowy

Najczęściej jest tak, że jeden rząd zasila dwie cewki, a przewód środkowy jest głównym przewodem zasilającym. W przypadku mojego silnika sytuacja wygląda tak:


silnik krokowy

Jeśli ktoś ma w domu miernik, ustalenie który przewód jest który nie powinno być trudne. Wybieramy trzy przewody w rzędzie. Do dwóch (powiedzmy pierwszy i drugi) podłączamy miernik ustawiony na pomiar rezystancji i przypuśćmy, że uzyskaliśmy 120R (ohmów). Teraz wybieramy przewód drugi i trzeci. Znowu mierzymy. Także i tym razem uzyskaliśmy 120R. Na końcu mierzymy przewód pierwszy i trzeci. Na mierniku pokazała się wartość 240R. Oznacza to, że przewody pierwszy i trzeci prowadzą do cewek, natomiast przewód środkowy jest zasilającym. Tak samo postępujemy z dolnym rzędem przewodów.


silnik krokowy

Programowanie portu LPT

Naszym silnikiem będziemy sterować przy pomocy portu LPT, ponieważ najłatwiej go zaprogramować. Posiada osiem wyjść, więc spokojnie możemy podłączyć pod niego np. osiem diodek LED lub dwa silniki krokowe.

Rysunek poniżej przedstawia wyprowadzenia portu LPT. Do pełnego opisu odsyłam na inne strony. Nas interesować będą przede wszystkim nóżki D0 do D7. Są to właśnie wyjścia portu.

port lpt

Patrząc na takie złącze od frontu, czerwone kropki to właśnie wyjścia, natomiast niebieskie piny to ziemia (minus). Są one ze sobą połączone wiec zasadniczo mógłby być tam równie dobrze jeden wielki pin :).


port lpt

Na samym początku proponuję podłączenie do portu diod led. Sam skonstruowałem sobie specjalną końcówkę z ośmioma diodami. W razie potrzebny podłączam ją pod port i od razu widzę jaki stan jest na którym wyjściu:


port lpt

Moje diody to zwykłe czerwone na napięcie około 2V. Dołączyłem do nich rezystory 150R, aby nie uszkodzić diody a tym bardziej samego lpt:


port lpt

Programowanie portu

Zasada sterowania portem jest stosunkowo prosta. Każdy z ośmiu pinów wyjściowych ma wagi, które są potęgą liczby 2. Pin D0 ma wagę 2^0 czyli 1. Port D7 ma wagę 2^7 czyli 128. Chcąc zapalić diodę, musimy ustawić pin do którego jest podłączona w stan wysoki, czyli jedynkę. Aby zapalić np. diodę D2, wystarczy wysłać na port liczbę 4, bo taką wagę ma pin D2. Aby zapalić diodę D6, na port trzeba wysłać liczbę 64. By zapalić diody tak jak na rysunku niżej (D1, D3, D4), musimy wysłać na port liczbę równą sumie wag pinów, które chcemy ustawić w stan wysoki. Czyli 2+8+16 = 26. Dlatego też, w celu zapalenia wszystkich diodek, wysyła się liczbę 255, aby zgasić wszystkie diody, zero. Prawda że proste?

port lpt

W Windows Xp nie ma bezpośredniej możliwości obsługi portu LPT (obsługę przeprowadza się poprzez sterownik). Dlatego aby ułatwić sobie życie, powstał program UserPort (do ściągnięcie stąd ). Plik UserPort.sys umieszczamy w “C:\WINDOWS\system32\drivers”. Następnie uruchamiamy program. Pojawi się okienko w którym wystarczy nacisnąć przycisk START. Od tej pory mamy możliwość wysyłania poleceń bezpośrednio do portu lpt:


port lpt

Obsługa LPT w Visual Basic

W tym punkcie zrobię małe wprowadzenie do obsługi LPT z poziomu VB6. Osoby które nie mają ochoty lub umiejętności programistycznych, mogą ten fragment tekstu ominąć. Natomiast osoby które programują w innych językach, powinny poszukać bibliotek ułatwiających obsługę portu pod swoje środowiska programistyczne.

Aby zacząć zabawę należy ściągnąć bibliotekę inpout32 (strona domowa). Plik dll umieszczamy w folderze “C:\Windows\”. Uruchamiamy VB i tworzymy nowy projekt. Dodajemy do projektu moduł (MODULE1) a w nim umieszczamy kod:

Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal port As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal port As Integer, ByVal value As Integer)

Teraz możemy umieścić na formie przycisk, a w nim napisać:

Out &H378, 3

Polecenie Out wysyła na port o adresie &H378, liczbę znajdującą się po przecinku (w tym przypadku 3). W niektórych komputerach port lpt ma adres &H278.

Żeby odczytać stan na porcie, trzeba użyć instrukcji:

INP (&H378)

Wygodnie jest na samym początku programu zadeklarować sobie stałą z numerem portu..np.

Const port = &H378

I to w sumie wszystko :). Prawda że proste? Teraz stosując przyciski, pętle i na co tylko ma się ochotę, można wysyłać na port różne sekwencje liczb, gasząc bądź zapalając diody. Namawiam do eksperymentów.

Programy

Napisałem malutki programik, który umożliwia włączanie i wyłączanie diodek. Wystarczy zaznaczać odpowiednie “ptaszki” by dioda na danym pinie zapaliła się. Po prawej wyświetla się suma wag zapalonych diodek. Po zamknięciu programu na port wysyłane jest zero. Można go ściągnąć stąd .

screen (okno programu i zdjęcie zapalonych diodek)

port lpt

Więcej programów można znaleźć na googlach.

Projekt interface’u

O ile z podłączeniem diod do LPT większego problemu nie ma, o tyle z podłączeniem silnika pojawia się mały problem. Cewki w nim się znajdujące, pobierają stosunkowo duży prąd. Dlatego nie można silnika podłączyć bezpośrednio do portu, gdyż groziłoby to jego uszkodzeniem (a całkiem możliwe, że i płyty głównej). Potrzebny będzie wzmacniacz, który dostarczy potrzebnej silnikowi energii. Najprostszym sposobem będzie zastosowanie scalonego układu ULN2003. Można go kupić w większości sklepów elektronicznych (za cenę 75gr/szt). Nie będę się zbytnio rozpisywał na temat działania tej magicznej kostki. Powiem tylko, że w swojej strukturze posiada wzmacniacze (układ Darlingtona) i diody zabezpieczające. Ma siedem wejść i siedem wyjść. Jego starszym bratem jest ULN2803, który ma osiem wejść i osiem wyjść. Układ który proponuję nie jest idealny. W celu maksymalnego uproszczenia zrezygnowałem z tzw izolacji galwanicznej. Chodzi tutaj o to, że obwód silnika jest elektrycznie połączony z portem lpt. Przy jakiś problemach typu zwarcie, spalenie silnika itp.. uszkodzeniu może ulec również port. By to wyeliminować, należałoby użyć dodatkowo transoptorów. Niemniej przedstawiony układ jest stosunkowo dobry w celach czysto edukacyjnych. Jednak zastrzegam jeszcze raz,że nie ponoszę odpowiedzialności za ewentualne problemy i szkody.

Ideowy schemat połączeń wygląda tak:

silnik krokowy

Jak widać, cztery przewody z portu lpt (D0, D1, D2, D3) poprowadzone są na cztery nóżki wejściowe układu 2003 (nóżki 1,2,3,4). Z wyjść układu 2003 (nózki 13,14,15,16) sygnał wchodzi na cewki silnika krokowego. Masa z portu lpt (nie trzeba jej tak łączyć. Wystarczy jeden dowolny pin) poprowadzona jest na nóżkę 8 i do minusa zasilania. Natomiast przewody zasilające silnik połączone są razem i podłączone do plusa. Tak to wygląda w teorii. Teraz napiszę jak to wygląda w praktyce.

Przewody

Aby połączyć całość można użyć dowolnych technik. Można lutować przewody “na pająka”. Można użyć płytki uniwersalnej albo wytrawić specjalną płytkę. Można również pójść w moje ślady i zmontować układ przy pomocy specjalnych kabelków (ani jednego lutowania). W tym celu dobrze wykombinować kawałek przewodu typu skrętka (kabel komputerowy) , rozciąć otoczkę i wyjąć ze środka przewody. Moje kabelki mają około 10cm długości.

Następnie z obu końców kabelka trzeba zdjąć izolację na długości 1,5cm (zdjęcia są nieostre). Teraz trzeba zgiąć przewód w połowie i dobrze ścisnąć (nie może być pętelki).

silnik krokowy

Trzeba się zaopatrzyć w metalowe gniazda pin. Wyglądają one tak ja na zdjęciu:

silnik krokowy

Wyłamujemy jedno, wkładamy przewód do środka i dobrze zaciskamy kombinerkami lub obcinaczkami.


silnik krokowy

Przygotowałem dziesięć takich przewodów i była to liczba “na styk”.

Łączenie całości

Cały układ połączyłem na stole mojego biurka, wg powyższego schematu. Najpierw cztery kabelki pomiędzy lpt a uln2003. Potem z wyjść uln-a na silnik. Do tego kabelki od zasilania i masy. W niektórych miejscach konieczne sie okazało włożenie paru papierków między piny, bo groziły zwarciem. Całość podłączyłem do zasilacza 12V na prąd stały oczywiście.


silnik krokowy

A tutaj parę zdjęć.


silnik krokowy

silnik krokowy

silnik krokowy

silnik krokowy

I odpalenie

Na szybko napisałem w VB program sterujący tym silnikiem. Zasadniczo program składał się z dwóch funkcji odpowiedzialnych za obrót w lewo i prawo. Pierwszym parametrem jest przerwa między kolejnym krokiem. Drugi parametr określa liczbę kroków. Liczby 3, 6,12,9 powodują podanie jedynek na dwie sąsiednie cewki.. Realizowane jest sterowanie ze zwiększonym momentem.

Public Sub prawo(czas As Integer, ile As Integer)
For i = 1 To ile
Out port, 3
Sleep czas
Out port, 6
Sleep czas
Out port, 12
Sleep czas
Out port, 9
Sleep czas
Next i
End Sub

Dla osób, które nie potrafią programować pozostaje wygrzebanie z internetu gotowych programów do sterowania takim silnikiem. Jeden z nich można znaleźć tutaj.

Natomiast TUTAJ umieściłem krótki filmik przedstawiający silnik w czasie pracy, gdy podawałem na niego z komputera odpowiednie wymyślone przeze mnie sekwencje ruchów.

Na zakończenie

Mam nadzieję, że chociaż trochę zainteresowałem cię drogi czytelniku tematyką silników krokowych. Wiedza którą starałem się przekazać może służyć do zbudowania własnego urządzenia o którym dawno marzyłeś(np robot, własna frezarka,albo obrotowa figurka na biurko :) . Być może na pierwszy rzut oka wszystko wydaje się dość trudne i zawiłe, ale w rzeczywistości nie jest. Wg mnie warto zainwestować swój czas, w zbudowanie chociaż prostego układu by zacząć własne eksperymenty.