[HowTo] Stappenmotoren
Laatst bijgewerkt op donderdag 23 oktober 2003
Inhoudsopgave Waarom deze HowTo?
De laatste tijd ben ik, met een niet al te grote electronica kennis,
bezig geweest met het aansluiten van een stappenmotor op de
parallelle poort. Ik merkte dat er genoeg informatie over te vinden
was maar dat deze informatie vaak niet op 1 plek stond, niet in het
nederlands was of alleen op oude besturingssystemen werkt.
Aangezien er waarschijnlijk wel meer mensen zijn met hetzelfde
probleem heb ik geprobeerd de benodigde informatie samen te
vatten in een artikel.
Voor mijn project heb ik een stappenmotor uit een oude printer gehaald.
De totale kosten voor het aansluiten kwamen zo op 1 euro 50 
Wat is een stappenmotor?
De kracht van een stappenmotor zit hem in het feit dat hij zeer nauwkeurig
gepositioneerd kan worden. Veel stappenmotoren kunnen tot op de graden
nauwkeurig gedraaid worden. Hierdoor zijn ze bijvoorbeeld uitermate
geschikt voor gebruik in robots.
Disclaimer
Zoals hierboven al vermeld: ik ben zelf ook geen groot kenner van
stappenmotoren. Ik probeer alleen de informatie die ik opgezocht heb
duidelijk bij elkaar te zetten. Hierdoor is het mogelijk dat bepaalde
informatie niet geheel correct is. Kom je fouten tegen of heb je
aanvulling? Post ze dan in dit topic, ze zijn meer dan welkom. Het
aansluiten van je parallelle poort is niet geheel zonder risico's. Als
je er teveel spanning op zet of kortsluiting maakt kun je je parallelle
poort opblazen. Ben je dus niet zeker van wat je doet kun je het beter
uitproberen op een oude computer. Vanzelfsprekend ben ik niet
aansprakelijk voor schade aan je moederbord, voeding of stappenmotor.
Wat voor stappenmotor heb ik?- Unipolaire stappenmotor
Heeft je motor 5, 6, 7 of 8 draden is het hoogstwaarschijnlijk een unipolaire
stappenmotor. In deze howto zal ik uitgaan van een unipolaire stappenmotor
omdat deze eenvoudig op de parallelle poort aan te sluiten zijn.
Een unipolaire stappenmotor bestaat uit vier spoelen waar afwisselend spanning
op gezet word. Een permanente magneet word door deze spoelen aangedreven.
Elke spoel heeft zijn eigen draad, dit zijn meestal de gekleurde aansluitingen.
De andere draden hebben meestal dezelfde kleur en moeten allemaal op je
spanningsbron aangesloten worden.
Eigenlijk zitten er vaak maar 2 spoelen in een stappenmotor, maar de werking is het
makkelijkste te verklaren als je uitgaat van 4 spoelen.
- Bipolaire stappenmotor
Als je motor 4 draden heeft is het meestal een biplaire stappenmotor. Het is
niet zo eenvoudig deze met weinig onderdelen via je parallelle poort aan te
sturen, je hebt dan namelijk twee zogeheten “H bruggen” nodig.
Ook moet je de polariteit van je signaal kunnen veranderen, iets dat ook niet
zo eenvoudig is met de parallelle poort. Deze howto richt zich daarom op de
unipolaire stappenmotor, maar op internet is genoeg informatie te vinden
(zie Waar vind ik meer informatie?).
Wat heb ik nodig?- Unipolaire stappenmotor
Het spreekt voor zich, maar je hebt dus een stappenmotor nodig
Je kunt
ze vaak vinden in een oude printer of fax, maar bij de electronica
(web)winkels zijn ze ook te vinden. Voor zo’n 20 euro heb je al een
stappenmotor bij Conrad. Voor echt goedkope stappenmotoren kun je bij
Van Dijken Elektronica terecht. Zij hebben stappenmotoren vanaf 1,50 en
voor 6 euro heb je een stappenmotor met flink wat kracht.
- Een voeding
De parallelle poort levert niet genoeg stroom als je een stappenmotor
of iets soortgelijks aan wilt sluiten. Aangezien je waarschijnlijk
geen regelbare spanningsbron thuis hebt staan, zul je iets anders
nodig hebben. Ik gebruik een voeding uit een oude computer. Aan de
voedingsaansluitingen zitten 4 draden, de rode is meestal 5v en de
gele of blauwe 12v. Let wel op dat je zo'n voeding meestal alleen
voldoende belast mag gebruiken. Je kunt er dus 2 oude harddisken
aan laten hangen, maar het kan ook op een mooiere manier.
Euss legt hier duidelijk uit hoe dat kan.
Je kunt natuurlijk ook de voeding uit je eigen pc gebruiken, dan
moet je de rode draad (5v) en de zwarte draad verlengen en
aan de achterkant uit je kast laten lopen. Let wel op dat niet
alle voedingen even goed tegen kortsluiting kunnen. Mijn
voeding heeft het zo'n 15 keer achter elkaar overleefd, maar
dat zegt zeker niets over andere voedingen.
Als laatste kun je nog een usb kabel gebruiken voor de stroom. Pin 1
is +5v en pin 4 is ground:
Let wel op dat de USB poort maar 500mA levert.
- ULN2003
Je kunt je stappenmotor niet direct aansluiten op de parallelle
poort; er moet nog een ic tussen. De ULN2003 (“zevenvoudige darlington array”)
kost 1,50 en is overal te koop. Een datasheet van de ULN2003 is hier
te vinden. Een ULN2003 kan best 12v aan, als de stroomsterkte
maar beperkt blijft (officieel kan de 2003 maar tot 5v). Als je
met zwaardere stappenmotoren gaat werken kun je beter voor de
ULN2004 gaan. Nog beter is een speciale stepper motor driver,
zoals de 5804 van Allegro. Je kunt dan zwaardere motoren gebruiken
en daarnaast heb je maar 2 datalijnen nodig om hem aan te sturen.
- Een printerkabel
Je zult de kabel open moeten maken dus een oude printerkabel komt
goed van pas.
- Breadboard (optioneel)
Om de draden aan de ULN2003 te bevestigen kun je een printplaat
gebruiken of de onderdelen “los” aan elkaar solderen.
Het is echter het makkelijkste om een zogeheten breadboard te
gebruiken (foto). Zo'n breadboard is overal te koop en is vaak
onder de 10 euro.
Zie voor alle informatie over het Breadboard De Breadboard FAQ.
Welke pinnen van de parallelle poort moet ik hebben?


Je hebt vier aansluitingen van je parallelle poort nodig om 1 motor
aan te sluiten. Het is het makkelijkste om aan de kant van je
computer (male) de behuizing van de printerkabel te halen, je kunt
dan namelijk zien welke pin welke kleur heeft. Aan de andere kant
kun je de hele connector eraf halen/knippen. Ik gebruik voor mijn
stappenmotor pin 6 t/m 9.
| Pin Nummer | Naam | Data Richting | Functie | | 2 | Data line 0 | Uitgang | Stappenmotor 1 | | 3 | Data line 1 | Uitgang | Stappenmotor 1 | | 4 | Data line 2 | Uitgang | Stappenmotor 1 | | 5 | Data line 3 | Uitgang | Stappenmotor 1 | | 6 | Data line 4 | Uitgang | Stappenmotor 2 | | 7 | Data line 5 | Uitgang | Stappenmotor 2 | | 8 | Data line 6 | Uitgang | Stappenmotor 2 | | 9 | Data line 7 | Uitgang | Stappenmotor 2 |  | | 15 | Error | Ingang | - | | 13 | Select | Ingang | - | | 12 | PE | Ingang | - | | 10 | Ack | Ingang | - | | 11 | Busy | Ingang | - |  | | 1 | Strobe | Ingang / Uitgang, Inverted | Stappenmotor 3 | | 14 | Auto Feed | Ingang / Uitgang, Inverted | Stappenmotor 3 | | 16 | Init | Ingang / Uitgang | Stappenmotor 3 | | 17 | SLCT IN | Ingang / Uitgang, Inverted | Stappenmotor 3 |
Hoe sluit ik alles aan?
Eerst moet je de pinnen kiezen die je wilt gaan gebruiken, in mijn
geval dus 6 t/m 9. Daarna kijk je welke kleur draad er aan de pinnen
zit die je wilt gebruiken. Deze vier draden moeten nu vastgemaakt
worden aan je ULN2003. Hiervoor gebruik ik het volgende schema:

Aan de tegenovergestelde kant van de ULN maak je de (meestal)
gekleurde draad van een spoel vast. Het enige wat je nu nog moet
doen is de stroomvoorziening regelen. De 5v (of 12v, afhankelijk
van je motor) moet bij de ULN verbonden worden met pin 9. Ook moet
het verbonden worden met de voedingsdra(a)d(en) van je stappenmotor,
meestal zijn dit de zwarte draden. Pin 8 van de ULN moet dubbel
geaard worden, namelijk aan de voeding die je gebruikt én aan de
aardedraad van je parallelle poort. Laatstgenoemde is meestal
makkelijk te herkennen omdat er geen omhulling omheen zit. Alles
zou nu moeten werken!
Ja maar, hoe stuur ik dat dan aan?
Vroeger, met Windows 95 en Windows 98 was het nog vrij eenvoudig om
de parallelle poort direct aan te sturen, maar met de op Windows 2000
gebaseerde besturingssystemen is dit niet meer mogelijk. Windows kent
namelijk bepaalde rechten toe aan programma’s, en gewone programma’s
hebben niet het recht om de parallelle poort te benaderen. Door middel
van een dll is de poort echter wel vanuit elke programmeertaal te
benaderen. Bij mij werkte inpout32.dll het beste, die hier te downloaden is.
In deze zipfile zitten ook al wat code voorbeelden. Vanzelfsprekend moet
de dll in de windows/system map geplaatst worden. Ik zal een voorbeeld
geven hoe de parallelle poort aangestuurd kan worden vanuit Visual Basic:
Maak een module aan en zet daar het volgende in:
Visual Basic:
1 2 3 4
| Public Declare Function Inp Lib "inpout32.dll" _
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
|
De acht datapoorten van de parallelle poort zijn aan te sturen dmv van
8 bits. Stel bijvoorbeeld dat we datapoort 3 (dat is eigenlijk de 4e
datapoort en pin 5) aan willen zetten, we moeten dan het volgende
uitsturen: 0000 1000. We mogen echter niet de binaire waarde uitsturen,
maar deze moet omgezet worden naar een decimale waarde.
Enkele voorbeelden:
Visual Basic:
1 2 3 4 5 6 7 8
| // Zet poort op 0000 0000
Alles uit
// Zet poort op 0000 0001
Data line 0 hoog
// Zet poort op 0000 0010
Data line 1 hoog
// Zet poort op 0000 0011
Data line 1 en 2 hoog
|
Deze binaire waarde moet dus omgezet worden in een decimale. Informatie
over binair tellen is te vinden in How Bits and Bytes Work. Voor het omzetten kun je
ook deze functie gebruiken:
Visual Basic:
1 2 3 4 5 6 7 8 9 10
| Function Bin2Dec(Num As String) As Long
Dim n As Integer
n = Len(Num) - 1
a = n
Do While n > -1
x = Mid(Num, ((a + 1) - n), 1)
Bin2Dec = IIf((x = "1"), Bin2Dec + (2 ^ (n)), Bin2Dec)
n = n - 1
Loop
End Function
|
Als je de stappenmotor rond wilt laten draaien moet je weten in welke
volgorde je spanning op de spoelen moet zetten. Om achter deze volgorde
te komen kun je het beste steeds even een andere pin aanzetten en kijken
naar welke kant je stappenmotor een stap maakt. Als je achter deze
volgorde bent kun je een programma schrijven die de stappenmotor laat
draaien. Maak in het formulier een timer aan (tmrStep), zet de interval
op 50 en ‘Enabled’ op False. Maak ook drie knoppen
aan (cmdTurnL, cmdTurnR, cmdStop). De code:
Visual Basic:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Dim intStepCount As Integer
Dim strDirection As String // Richting van draaien
Private Sub cmdTurnL_Click()
strDirection = "l" // Draai naar links
tmrStep.Enabled = True // Start de timer
End Sub
Private Sub cmdTurnR_Click()
strDirection = "r" // Draai naar rechts
tmrStep.Enabled = True // Start de timer
End Sub
Private Sub cmdStop_Click()
tmrStep.Enabled = False // Stop de timer
End Sub
Private Sub Form_Load()
intStepCount = 1
End Sub
Private Sub tmrStep_Timer()
Select Case intStepCount
Case 1
Out Val(888), Val(32) // Eerste stap
Case 2
Out Val(888), Val(64) // Tweede stap
Case 3
Out Val(888), Val(16) // Derde stap
Case 4
Out Val(888), Val(8) // Vierde stap
End Select
If strDirection = "r" Then
intStepCount = intStepCount + 1
If intStepCount = 5 Then intStepCount = 1
Else
intStepCount = intStepCount - 1
If intStepCount = 0 Then intStepCount = 4
End If
End Sub
|
Bij “Eerste stap”, “Tweede stap” enz moet dus de decimale waarde van de
pin ingevuld worden. Ook moet hier rekening gehouden worden met de volgorde
die je zelf hebtmoeten uitzoeken. Bij mij is de volgorde dus 32, 64, 16, 8.
Voor de andere programmeertalen kun je veel via google vinden. Nog enkele linkjes:Hoeveel stappenmotoren kan ik aansluiten?
Op deze manier kun je drie stappenmotoren aansturen, 2 op de datapoorten
en 1 op de statuspoorten. Indien je er meer aan wilt sluiten kun je er
een andere IC tussen zetten, zoals de SAA1027. Je hoeft dan alleen nog
maar step en richting te sturen waardoor je er veel meer aan kunt sluiten.
Deze ic's kosten echter wel veel meer dan de ULN2003. Zoals hierboven al
vermeld kun je ook de 5804 gebruiken. Dit is de pinout
van dit IC:

Zie ook: Parallelle poort FAQ: Hoe kom ik aan meer in en uitgangen?.
Waar vind ik meer informatie? |