Werken met stappenmotoren
Dit artikel behandelt verschillende types stappenmotoren en laat zien hoe je ze moet aansturen. Het artikel is geschreven door Lambiek.
Inleiding
Een stappenmotor is een elektromechanisch apparaat, dat een digitaal signaal omzet naar een draaiende beweging met een vaste hoekverstelling. De as van de stappenmotor verdraait één stapje bij iedere puls, het aantal stappen komt dus overeen met het aantal pulsen dat hij krijgt. Een stappenmotor is dan ook uitermate geschikt voor het positioneren van assen bij bepaalde processen.
De staphoek van een stappenmotor kan variëren van bijvoorbeeld 15, 7,5, 3,75, 1,8 of 0,9 graden per stap. Er zijn verschillende types stappenmotoren: stappenmotoren met een permanente magneet, reluctantie stappenmotoren en hybride stappenmotoren. Verder zijn ze nog onderverdeeld in unipolair, bipolair, twee fasen, drie fasen en vier fasen.
De belangrijkste voordelen van een stappenmotor zijn: het snel innemen van een nieuwe positie, werkt nauwkeurig zonder terugkoppeling, constante snelheid bij een vaste frequentie, korte aanlooptijd, korte remtijd, betrouwbare werking, geen onderhoud, lange levensduur, een groot houdkoppel bij een stilstaande motor. Er zijn ook nadelen natuurlijk: trilling door resonantie, kunnen niet echt een hoge snelheid halen, zijn vaak wat groter dan een normale elektromotor en er is een complexere besturing nodig.
De toepassingen van een stappenmotor zijn talrijk: robotica, X, Y, Z tafels, printers, 3D printers, CNC freesmachines, foam cutters, scanners in ziekenhuizen enzovoort en vroeger werden ze gebruikt in plotters, disc drives, harde schijven. En ik zal waarschijnlijk nog wel een paar toepassingen vergeten zijn.
We gaan eerst de unipolair en bipolair stappenmotoren eens onder de loep nemen. Dit zijn bij de meeste hobbyisten de meest gebruikte motoren, ze zijn ook makkelijk te vinden in oude printers en dergelijke.
Unipolaire motoren
We gaan beginnen met de principe werking van de unipolaire motor. Zoals je kunt zien in het voorbeeld bestaat de motor uit twee spoelen met een middenaftakking en een rotor. De rotor bestaat uit een permanente magneet met een vertanding erop, die vertanding bepaald ook het aantal stappen. Het ligt er dus aan hoe de stappenmotor mechanisch geconstrueerd is voor het aantal stappen die hij kan maken. Door nu A.1, A.2, B.1 en B.2 in een bepaald patroon aan te sturen kan je de motor laten draaien, later meer over het stappenpatroon.
Je hebt unipolaire stappenmotoren met vijf en zes aansluitdraden, in het voorbeeld zijn dat zes draden.
Deze motor kan je ook bipolair gebruiken, dan worden de aansluitingen A.1, A.2, B.1 en B.2 gebruikt. De draden waar de plus bij staat worden dan niet gebruikt. Als je nu een motor hebt waar vijf draden aan zitten, dan kan de motor alleen unipolair gebruikt worden.
Aansturing
We gaan eens kijken hoe deze motor aangestuurd kan worden, zie het voorbeeld hieronder.
Aansturing unipolaire stapppenmotor
Zoals je kan zien worden de twee plus draden aan elkaar gezet, daar komt de voedingsspanning voor de stappenmotor op. De spoelen A.1, A.2, B.1 en B.2 worden door de vier NPN transistoren T1, T2, T3 en T4 naar de GND getrokken, op deze manier kan de stappenmotor bediend worden. De transistoren worden op hun beurt aangestuurd door bijvoorbeeld een computer of een microcontroller. In plaats van transistoren kunnen er ook MOSFET's gebruikt worden, of voor kleinere motoren bijvoorbeeld de ULN2803 of een andere driver in IC-vorm.
Later volgt er nog een compleet schema voor een unipolaire stappenmotor.
Stappen
We hebben het in het begin over de staphoek gehad, daar had ik een paar voorbeelden genoemd: 15, 7,5, 3,75, 1,8 en 0,9 graden. We gaan even een voorbeeld bekijken van een stappenmotor met een staphoek van 1,8 graden. Dit zijn de meest gebruikte stappenmotoren. Een motor met een staphoek van 1,8 graden moet dus 200 stappen maken voor één omwenteling van 360 graden. Dit zijn dus hele stappen, maar je hebt ook 1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128 en 1/256 stap. Hele en halve stappen is het minst moeilijk om zelf te maken, maar een 1/4 tot 1/256 stap wordt moeilijker. Dit noemt men micro stappen, die worden toegepast in gekochte drivers of in uitgebreidere besturing-IC's voor stappenmotoren.
We gaan even kijken wat die stappen nu precies inhouden. Stel we nemen een 1,8 graden stappenmotor, we hebben gezien dat zo'n motor 200 stappen over één omwenteling doet met hele stappen. Stel dat we zo'n motor nu met halve stappen aansturen, dan hebben we geen 200 stappen maar 400 stappen per omwenteling. De motor maakt nu een stapje van 0,9 graden in plaats van 1,8 graden. De motor maakt kleinere stappen en wordt daardoor ook preciezer, en gaat rustiger lopen. Stel dat we nu 1/16 stap gebruiken (microstepping) dan krijgen we 200 x 16 = 3200 stappen per omwenteling, dan wordt de motor nog preciezer. En in plaats van 1,8 graden per stap wordt het bij 1/16 stap 360 : 3200 = 0,1125 graden per stap.
Een nadeel is wel dat de stapfrequentie omhoog moet voor een redelijk toerental van de stappenmotor. Maar meestal kunnen we wel voldoen met hele en halve stappen, zeker als het voor de hobby is en voor experimenten met stappenmotoren. We gaan nu het stappendiagram van een stappenmotor met hele stappen eens bekijken. Zie het voorbeeld hieronder.
Hele stappen - CW
| Stap | A.1 | A.2 | B.1 | B.2 |
|---|---|---|---|---|
| 1 | On | Off | On | Off |
| 2 | On | Off | Off | On |
| 3 | Off | On | Off | On |
| 4 | Off | On | On | Off |
Hier zie je hoe de spoelen aangestuurd moeten worden om de motor te laten draaien. Je ziet dat er steeds vier stappen gemaakt worden, als hij bij stap vier is wordt er weer naar stap één gesprongen. Er staat ook CW bij, clockwise, dus met de klok mee.
Als je de stappenmotor nu de andere kant op wil laten draaien, moet het stappendiagram anders afgelopen worden.
Hele stappen - CCW
| Stap | A.1 | A.2 | B.1 | B.2 |
|---|---|---|---|---|
| 1 | Off | On | On | Off |
| 2 | Off | On | Off | On |
| 3 | On | Off | Off | On |
| 4 | On | Off | On | Off |
Hierboven zie je het stappendiagram voor CCW, counterclockwise, tegen de klok in dus. Je kan zien dat stap vier bij CW nu stap één bij CCW geworden is. Stap drie bij CW wordt stap twee bij CCW, stap twee bij CW wordt stap drie bij CCW, en stap één bij CW wordt stap vier bij CCW. Op deze manier kan je de stappenmotor de andere kant op laten draaien.
Dit zijn hele stappen, maar je kan zelf ook halve stappen maken. Dan komen er vier stappen bij.
Halve stappen - CW
| Stap | A.1 | A.2 | B.1 | B.2 |
|---|---|---|---|---|
| 1 | On | Off | On | Off |
| 2 | On | Off | Off | Off |
| 3 | On | Off | Off | On |
| 4 | Off | Off | Off | On |
| 5 | Off | On | Off | On |
| 6 | On | Off | Off | Off |
| 7 | Off | On | On | Off |
| 8 | Off | Off | On | Off |
Op het voorbeeld hierboven kan je zien hoe dat eruit ziet. Dit is weer clockwise, dus met de klok mee. De stappen lopen nu van stap één tot en met acht, als stap acht bereikt is dan wordt er weer naar stap één gesprongen. De stappen twee, vier, zes, en acht zijn erbij gekomen. Deze stappen zijn er tussen gevoegd, dus een stappenmotor met 200 stappen maakt nu ineens 400 stappen per omwenteling. Een 200 staps stappenmotor maakt nu geen 1,8 graden per stap, maar 0,9 graden per stap.
Hieronder het voorbeeld voor halve stappen CCW.
Halve stappen - CCW
| Stap | A.1 | A.2 | B.1 | B.2 |
|---|---|---|---|---|
| 1 | Off | Off | On | Off |
| 2 | Off | On | On | Off |
| 3 | On | Off | Off | Off |
| 4 | Off | On | Off | On |
| 5 | Off | Off | Off | On |
| 6 | On | Off | Off | On |
| 7 | On | Off | Off | Off |
| 8 | On | Off | On | Off |
Hier geldt eigenlijk precies hetzelfde als bij het hele stappendiagram. Stap acht van CW wordt stap één bij CCW, stap zeven bij CW wordt stap twee bij CCW, enzovoort.
Als de draairichting nu niet overeenkomt met CW en CCW uit het stappendiagram, dan kan de bedrading van de stappenmotor omgedraaid worden. A.1 en B.2 worden dan omgewisseld, en A.2 en B.1 worden dan omgewisseld. Op deze manier moet de draairichting dan weer kloppen met het stappendiagram.
Microstepping
Hieronder nog een voorbeeld hoe microstepping opgebouwd wordt. Je kan zien dat er een sinus digitaal opgebouwd wordt, de blauwe lijnen die je ziet stellen de stappen voor. Dit is in software te maken, maar dit is niet makkelijk. Er zijn standaard microstepping drivers te koop die dit voor je doen.
Bipolaire motoren
We gaan nu een voorbeeld bekijken van een bipolaire stappenmotor, zie hieronder. Hier zie je hoe een bipolaire stappenmotor opgebouwd is, je kan zien dat de motor maar vier aansluitdraden heeft, A+, A-, B+, en B-. Let wel dat beide voorbeelden zowel unipolair als bipolair (zoals ze getekend zijn) in het echt stappen van 90 graden zouden maken. Dit zijn dus schematische voorbeelden.
Aansturing
De aansturing van een bipolaire stappenmotor gebeurd met acht transistoren of MOSFET's, deze halfgeleiders staan opgesteld in een zogenaamde H-brug (hier zijn er twee van nodig). Dit is nodig omdat de polariteit van de spoelen gewisseld wordt. Zo'n besturing kan je zelf maken met losse componenten, of met drivers in IC-vorm.
De L298 is daar een voorbeeld van, samen met de L297 is daar een stappenmotor driver mee te maken. Maar ook met een IC als de DRV8825 (een microstepping driver) is een prima stappenmotorregeling te maken.
Aansturing van een bipolaire stapppenmotor met 2 H-bruggen
Hierboven een voorbeeld van een besturing met een dubbele H-brug. Zoals je kan zien wordt spoel A en spoel B ieder door een brug aangestuurd. Iedere brug bestaat uit twee PNP en twee NPN transistoren. Deze configuratie vindt je ook terug in de L298. In beide voorbeelden (zowel bij het voorbeeld van de unipolaire eindtrap als bij de bipolaire eindtrap) missen nog wat componenten. De belangrijkste zijn de vrijloopdiodes. Deze zijn nodig om de transistoren of de MOSFET's te beschermen tegen de inductie van de spoelen die optreed tijdens het draaien van de stappenmotor.
Als er gebruik gemaakt wordt van MOSFET's, kunnen er nog wat meer componenten ter bescherming bij komen. Dit kunnen zenerdiodes zijn om de gate te beschermen, of om de drain-source overgang te beschermen. Ook kan er een RCD (een combinatie van een weerstand, condensator en een diode) over de spoel naar de drain-aansluiting gezet worden. Later daarover meer.
Zoals je in het voorbeeldschema kan zien, zijn de twee bruggen (zowel boven als onder) met elkaar verbonden. Hier wordt de voedingsspanning voor de stappenmotor op gezet. De basissen van de transistoren kunnen bijvoorbeeld door een microcontroller aangestuurd worden.
Spanning en stroom
Even iets over de spanning en stroom van de stappenmotoren. Als je in een datasheet kijkt van een bepaald type stappenmotor, dan zie je dat daar een spanning en stroom waarde bij staan. Als er bijvoorbeeld een spoelspanning van 5 VDC bij staat, wil dat niet zeggen dat je de stappenmotor alleen maar met 5 VDC mag voeden. Dat mag best meer zijn, als de stroom maar geregeld wordt, je ziet dan ook op alle gekochte drivers dat de stroom ingesteld kan worden. En dat is niet voor niets gedaan. Op deze manier kan je de stappenmotor dus ook met een hogere spanning voeden dan waar hij eigenlijk voor bedoeld is. De stroomregeling in zo'n driver gebeurd door middel van een zogenaamd PWM-signaal, dat is een signaal met een vaste frequentie en een variabele pulsbreedte.
Een PWM-signaalZie hiernaast het voorbeeld. De tijd dat er stroom door de spoelen kan lopen wordt bepaald door de pulsbreedte van het PWM signaal. Op deze manier kan de stroom door de spoelen dus prima geregeld worden.
Er zijn ook twee verschillende stromen die door de spoelen lopen, dat is de houdstroom (de stroom door de spoelen als de motor stilstaat) en de stroom die er loopt als de motor draait. Als de stroom door de spoelen hetzelfde zou zijn tijdens draaien en stilstaan, dan zou de stappenmotor veel te heet worden als deze stil staat, met kans op verbranden van de spoelen. Bij de kleinere stappenmotoren (bijvoorbeeld uit printers) kan dit ook met een voorschakelweerstand opgelost worden. Door deze tussen de voeding te zetten wordt de stroom dan beperkt, vaak is een weerstand van een paar Ohm al voldoende. Het moet wel een weerstand zijn die de stroom aan kan natuurlijk.
We hadden het net over de spanning die op de spoelen mag komen te staan. Als je een stappenmotor een hoger toerental wil laten maken, moet de spanning door de spoelen ook omhoog. Maar let er wel op dat je een stappenmotor met bijvoorbeeld een spoelspanning van 5 VDC niet gaat voeden met een spanning van 60 VDC, ook met een goede stroomregeling slaat zo'n motor toch door op een gegeven moment. Maar voeden met 12 tot 15 VDC is geen probleem.
Er zijn professionele systemen die met bijvoorbeeld 150 VDC of meer werken, die stappenmotoren halen dan ook een veel hoger toerental. Maar met een simpele regeling en stappenmotoren uit een printer moeten we genoegen nemen met een toerental tussen de 60 en 120 toeren per minuut, als je tenminste nog een beetje koppel wil hebben aan de as. Maar voor experimenten en kleine machines (denk aan X, Y tafels) is dat meer dan voldoende.
We hebben nu de unipolaire en bipolaire stappenmotoren behandeld, maar er zijn nog een paar types. We hebben de hybride en de reluctantie stappenmotoren nog niet gehad.
Hybride motoren
We gaan eerst naar de hybride stappenmotor kijken.
Hierboven een voorbeeld van een hybride stappenmotor. Zoals je kunt zien is er niet zoveel verschil met de andere twee type stappenmotoren, het verschil is dat er nu vier spoelen aanwezig zijn en acht aansluitdraden. Maar met dit type stappenmotor kun je wel meer combinaties maken. Je kunt de motor zowel als unipolair en als bipolair gebruiken. Ook kun je de spoelen in serie of parallel aansluiten. Verder hebben dit type stappenmotoren meerdere magneet schijven op de as zitten, zodat het koppel een stuk groter is dan bij de stappenmotoren uit bijvoorbeeld een printer. Dit type stappenmotoren wordt dan ook vaak gebruikt in de wat grotere machines. Hybride stappenmotoren zijn vaak te koop in 200 of 400 stappen per omwenteling.
Reluctantie motoren
We hebben nog één type te gaan, de reluctantie stappenmotor. Een reluctantie stappenmotor heeft een cilindrische rotor die opgebouwd is uit weekijzeren lamellen. De rotor bezit radiale tanden. De stator bevat ook tanden, en daar zijn de spoelen op aangebracht. De rotor heeft minder tanden dan de stator. De hoek tussen twee opeenvolgende rotortanden is 45 graden, en tussen twee statortanden 30 graden. Dus elke 15 graden is er een rotortand met een minimale reluctantie, er staan dus vier tanden tussen de rotortanden in. Maar er staan ook vier rotortanden precies tegenover vier statortanden. Deze stappenmotor heeft dus een staphoek van 15 graden. Dit is dus geen twee of vier fasen stappenmotor, maar een drie fasen stappenmotor.
Een drie-fase reluctantie stappenmotor
Hierboven zie je een voorbeeld van een drie-fase reluctantie stappenmotor.
Unipolaire stappenmotor driver
Ik ga nog wat voorbeelden geven van zelf gemaakte besturingen voor stappenmotoren. Hieronder, zoals beloofd, het schema voor een unipolaire stappenmotor driver.
Schema unipolaire stappenmotor driver
Er wordt gebruik gemaakt van een L297, dit IC verzorgt de stapvolgorde voor de stappenmotor. Op de clock ingang van de L297 wordt een signaal gezet voor de stappen en de stapfrequentie. Met de ingang CW en CCW kun je de draairichting van de stappenmotor bepalen. Met de ingang RUN en HOLD wordt de stroom door de spoelen van de stappenmotor geregeld. Er zit standaard een functie op de L297 die de stroom regelt, maar dat vind ik bij wat grotere stappenmotoren niet echt goed werken. Vandaar dat er een extra microcontroller bij staat om de stroom te regelen.
Ik had het in het begin over een RCD combinatie (een weerstand, condensator en een diode). Zoals je kan zien in het schema is dat hier toegepast. Over iedere spoel staat zo'n combinatie, dit is gedaan om de inductie die de spoelen opwekken tijdens het draaien te dempen. Ter beveiliging van de IRF540 MOSFET's zijn er ook nog zenerdiodes aangebracht, deze staan over de drain-source overgang en over de gate-source overgang.
Via een 4081 (AND poort) worden de signalen van de L297 door gegeven aan twee gate drivers (IR4427). Deze drivers sturen via weerstanden de gates van de MOSFET's aan, op deze manier komt er 12 VDC (als de schakeling met 12 VDC gevoed wordt) op de gates te staan. Op deze manier worden de MOSFET's goed open gestuurd.
Zoals je kan zien staan er nogal wat elco's in het schema van niet al te grote waarde, dit is gedaan omdat er gebruik gemaakt wordt van een zogenaamd ruimte besparend koellichaam. Er staan namelijk verschillende elco's onder het koellichaam, en die konden niet te groot zijn anders paste het niet. Dus vandaar de wat kleinere waardes van de elco's.
Op de punten A, B, C en D worden de spoelen van de stappenmotor aangesloten. Aan de bovenkant zie je de twee plus aansluitingen voor de spoelen. De spanningsregelaar (78S05) verzorgt de 5 VDC voor de PIC12F683, de L297, en de 4081. De 78S05 en de IRF540 MOSFET's zijn op het koellichaam gemonteerd met veren die je in het koellichaam kan drukken. Op deze manier worden de componenten continue tegen het koellichaam gedrukt voor een goede warmteoverdracht. Er zitten wel isolatieplaatjes tussen de regelaar en de MOSFET's, anders zouden ze sluiting maken.
De print
Hieronder de print voor de stappenmotorregeling. Deze print is gefreesd, maar kan natuurlijk ook geëtst worden. Alle componenten staan er op met de waardes erbij, de weerstand symbolen met het vierkantje erin zijn nul Ohm weerstanden (dit zijn draadbruggen). De grote rode omlijning is het koelblok. Met de twee potmeters (waar RUN en HOLD bij staat) kan de stroom ingesteld worden. Voor de rest wijst het voor zich. De afmeting van de print is 100 x 120 mm.
Unipolaire stappenmotor driver print
De software
Zoals ik al gezegd had staat er een PIC12F683 op voor de stroomregeling, daar hoort een programma bij. Hieronder het programma wat in de 12F683 staat.
Device 12F683 ; processor type
Xtal 4 ; Interne oscillator
Config WDT_OFF,_ ; WatchDog Timer uit
PWRTE_ON,_ ; Power-up Timer Enable aan
MCLRE_OFF,_ ; Externe Master Reset Enable uit
INTRC_OSC_NOCLKOUT ; Interne oscilator aan
All_Digital true ; Alle poorten digitaal
Declare CCP1_Pin GPIO.2 ; PWM uitgang
Declare Adin_Res = 8 ; Resolutie 8 bits
Declare Adin_Tad = frc ; Set rc osc
Declare Adin_Stime = 50 ; Sample tijd 5
Symbol VRIJGAVE_RUN_HOLD = GPIO.5 ; Ingang vrijgave run_hold
Symbol FREQUENTIE = 20000 ; PWM frequentie 20KHz
Dim HOLD_FUNCTIE As Byte ; Variabele analoog_in 0
Dim RUN_FUNCTIE As Byte ; Variabele analoog_in 1
Clear ; Wis geheugen
;543210 ; Hulpregel
GPIO = %000000 ; Maak poort laag
TRISIO = %110011 ; Poort I/O
;76543210 ; Hulpregel control register
ADCON0 = %00000001 ; A/D control register
; STROOM INSTELLING DOOR DE SPOELEN - INSTELLEN VIA ANALOGE INGANG 0.
HOLD:
HOLD_FUNCTIE = ADIn 0
HPWM 1,HOLD_FUNCTIE,FREQUENTIE
If VRIJGAVE_RUN_HOLD = 0 Then
GoTo RUN
EndIf
GoTo HOLD
; STROOM INSTELLING DOOR DE SPOELEN - INSTELLEN VIA ANALOGE INGANG 1.
RUN:
RUN_FUNCTIE = ADIn 1
HPWM 1,RUN_FUNCTIE,FREQUENTIE
If VRIJGAVE_RUN_HOLD = 1 Then
GoTo HOLD
EndIf
GoTo RUN
End
Zoals je ziet is het vrij simpel, de twee analoge ingangen lezen de potmeters in en zetten de waarde om naar een PWM-signaal. En de VRIJGAVE_RUN_HOLD bepaalt welk PWM-signaal er naar de MOSFET's gestuurd wordt voor de stroominstelling.
Ik heb ook een klein test programma gemaakt om de werking te controleren en om aan de print te meten. Hieronder het test programma.
Device 16F887 ; Processor type
Xtal 10 ; Cristal 10Mhz
Asm ; Config settings
CONFIG_REQ
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF &
IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON
__CONFIG _CONFIG2, WRT_OFF & BOR40V
EndAsm
All_Digital true ; Alle poorten digitaal
Symbol PULS = PORTA.0 ; Ingang puls
Symbol DIR = PORTA.1 ; Ingang DIR 0 = rechts DIR 1 = links
Symbol HOLD = PORTA.2 ; Ingang houdstroom
Symbol FACTOR = 400 ; Instelling halve hele stappen
Symbol S1 = PORTE.2 ; Ingang vrijgave puls
Symbol FREQUENTIE = 400 ; Instelling stapfrequentie
Symbol WACHT = 0 ; Instelling wacht links rechts
Symbol AANTAL_OMWENTELINGEN = 10 ; Instelling aantal omwentelingen
Dim I As Dword ; Variabele FOR NEXT
Clear ; Wis geheugen
;543210 ; Hulpregel poort A
PORTA = %000000 ; Maak poort A laag
TRISA = %000000 ; Poort_A I/O
;543210 ; Hulpregel poort B
PORTB = %000000 ; Maak poort B laag
TRISB = %111111 ; Poort_B I/O
;76543210 ; Hulpregel poort C
PORTC = %00000000 ; Maak poort C laag
TRISC = %00000000 ; Poort_C I/O
;76543210 ; Hulpregel poort D
PORTD = %00000000 ; Maak poort D laag
TRISD = %00000000 ; Poort_D I/O
;210 ; Hulpregel poort E
PORTE = %000 ; Maak poort E laag
TRISE = %111 ; Poort_E I/O
;76543210 ; Hulpregel analoog
ADCON0 = %00000001 ; ADCON0 register analoog
;543210 ; Hulpregel analoog poort_B
ANSELH = %000000 ; ANSEL register analoog poort_B
; STROOM REDUCTIE AAN IN STILSTAND PLUS VRIJGAVE PULS
START_RECHTS:
HOLD = 1
If S1 = 1 Then
DelayMS WACHT
GoTo RUN_RECHTS
EndIf
GoTo START_RECHTS
; UITGAVE AANTAL STAPPEN RECHTSOM MET KEUZE RICHTING "DIR".
RUN_RECHTS:
DIR = 0
HOLD = 0
For I = 1 To AANTAL_OMWENTELINGEN * FACTOR Step 1
PULS = 1
DelayUS FREQUENTIE
PULS = 0
DelayUS FREQUENTIE
If I = AANTAL_OMWENTELINGEN * FACTOR Then
I = 0
GoTo START_LINKS
EndIf
Next I
GoTo RUN_RECHTS
; STROOM REDUCTIE AAN IN STILSTAND PLUS VRIJGAVE PULS.
START_LINKS:
HOLD = 1
If S1 = 1 Then
DelayMS WACHT
GoTo RUN_LINKS
EndIf
GoTo START_LINKS
; UITGAVE AANTAL STAPPEN LINKSOM MET KEUZE RICHTING "DIR".
RUN_LINKS:
DIR = 1
HOLD = 0
For I = 1 To AANTAL_OMWENTELINGEN * FACTOR Step 1
PULS = 1
DelayUS FREQUENTIE
PULS = 0
DelayUS FREQUENTIE
If I = AANTAL_OMWENTELINGEN * FACTOR Then
I = 0
GoTo START_RECHTS
EndIf
Next I
GoTo RUN_LINKS
End
Op deze manier heb ik de regeling getest, zoals het er nu staat draait de stappenmotor 10 omwentelingen naar rechts en naar links. De stap frequentie staat op 400, dat is wel zo'n beetje het maximum in half stap bedrijf en het direct aanzetten van de stappenmotor bij een voedingsspanning van 12 VDC. Dit komt overeen met een stapfrequentie van 1200 Hz. Dit kan nog wel iets hoger als je ramp up en ramp down toepast, bij de test heb ik dat niet gedaan, ik schakel in één keer om van linksom naar rechtsom.
Hieronder kan je zien waar je nog wat instellingen kan wijzigen. Bij FACTOR kan je instellen of het hele of halve stappen moeten zijn, dan moet ook de jumper JP1 op de print omgestoken worden. Bij FREQUENTIE kan je de stapsnelheid instellen, hoe groter die waarde is hoe langzamer de stappenmotor draait. Bij WACHT kan je een wachttijd tussen het van linksom naar rechtsom draaien instellen, die tijd is in milliseconden. En bij AANTAL_OMWENTELINGEN geef je het aantal omwentelingen aan die de stappenmotor mag draaien, dat mag een waarde zijn tussen 0 en 4294967295 stappen. Verder valt er eigenlijk niet zoveel over te vertellen.
Symbol FACTOR = 400 ; Instelling halve hele stappen
Symbol FREQUENTIE = 400 ; Instelling stapfrequentie
Symbol WACHT = 0 ; Instelling wacht links rechts
Symbol AANTAL_OMWENTELINGEN = 10 ; Instelling aantal omwentelingen
Hieronder nog een aansluitschema van de print en stappenmotor.
Aansluitschema unipolaire stappenmotor driver
Unipolaire stappenmotor aansluitingen
De gebruikte stappenmotor is een Sanyo Denki 1,8 graden per stap DC.3A. Typenummer 103H7126-0744.
Ik heb de draadkleuren van de motor erbij gezet, en bij de aansluitklemmen staat de kleur ook. Dus als men dit na wil bouwen hoeft de aansluiting geen probleem op te leveren.
Bij de Molex-stekker staan de aansluitingen er ook bij.
Stappenmotor driver met de DRV8825
Ik heb nog een schakeling gemaakt rond de DRV8825 (stepstick) en Profilab in combinatie met een PIC16F628A. Het geheel is serieel te besturen via Profilab. Profilab is een programma waar je van alles mee kan besturen via de PC, ik heb daar ook een boek over geschreven wat te downloaden is op Circuits Online. De DRV8825 had ik al eerder genoemd, en daar heb ik dan ook het voorbeeld mee gemaakt. Maar we beginnen met het programma wat in de 16F628 staat, de 16F628 verzorgd de seriële communicatie.
De software
Hieronder het programma wat in de PIC staat.
Device 16F628A ; processor type 16F628A
Xtal 10 ; Kristal 10 MHz
Config HS_OSC,_ ; Extern kristal
WDT_OFF,_ ; WatchDog Timer uit
PWRTE_ON,_ ; Power-up Timer Enable aan
MCLRE_OFF,_ ; Externe Master Reset Enable uit
BODEN_OFF,_ ; Brown Out Detectie Enable uit
LVP_OFF,_ ; Low-Voltage Programming uit
CP_OFF ; Code Protection uit
All_Digital true ; Alle poorten digitaal
Declare Rsout_Pin PORTA.2 ; Data uit
Declare Rsin_Pin PORTA.3 ; Data in
Declare Serial_Baud 9600 ; Baudrate 9600
Symbol STAP_FREQUENTIE = 50 ; Stapfrequentie stappenmotor
Symbol DELAY_DRAAIEN = 50 ; Wachttijd voor draaien
Symbol AANTALSTAPPEN = 3200 ; Aantal stappen is 3200 / omw
Symbol EINDSCHAK_R = PORTA.1 ; Eindschakelaar rechtsom
Symbol EINDSCHAK_L = PORTA.0 ; Eindschakelaar linksom
Symbol RICHTING = PORTB.1 ; Richting stappenmotor driver
Symbol VRIJGAVE = PORTB.3 ; Vrijgave stapenmotor driver
Symbol PULS = PORTB.2 ; Puls stappenmotor driver
Dim DATA_IN As Byte ; Data serieel in
Dim DATA_UIT As Byte ; Data serieel uit
Dim X As Dword ; Variabele uitgave stappen
Clear ; Wis geheugen
;76543210 ; Hulpregel Poort poort_A
PORTA = %00000000 ; Zet poort_A laag
TRISA = %00001011 ; Poort_A I/O
;76543210 ; Hulpregel Poort poort_B
PORTB = %00000000 ; Zet poort_B laag
TRISB = %00000000 ; Poort_B I/O
;-------------------------------------------
; VRIJGAVE = 1 IS MOTORDRIVER ONBEKRACHTIGD.
; VRIJGAVE = 0 IS MOTORDRIVER BEKRACHTIGD.
; RICHTING = 1 IS STAPPENMOTOR LINKSOM.
; RICHTING = 0 IS STAPPENMOTOR RECHTSOM.
;-------------------------------------------
DATA_IN = 0
VRIJGAVE = 1
RUN:
DATA_IN = RSIn
If DATA_IN = 251 Then
RSOut 2
DelayMS 5
GoSub DRAAIEN_RECHTS
EndIf
If DATA_IN = 252 Then
RSOut 4
DelayMS 5
GoSub DRAAIEN_LINKS
EndIf
If DATA_IN = 253 Then
RSOut 8
DelayMS 5
VRIJGAVE = 0
EndIf
If DATA_IN = 254 Then
RSOut 16
DelayMS 5
VRIJGAVE = 1
EndIf
GoTo RUN
; UITSTUREN VAN HET AANTAL INGEGEVEN STAPPEN - RECHTSOM.
DRAAIEN_RECHTS:
DATA_IN = 0
DelayMS 5
DATA_IN = RSIn
If DATA_IN > 250 Then
DATA_IN = 0
Return
EndIf
X = DATA_IN * AANTALSTAPPEN
RICHTING = 0
DelayMS DELAY_DRAAIEN
For X = X To 1 Step - 1
PULS = 1
DelayUS STAP_FREQUENTIE
PULS = 0
DelayUS STAP_FREQUENTIE
If EINDSCHAK_R = 1 Then
DATA_IN = 0
RSOut 0
GoTo RUN
EndIf
If X = 1 Then
DATA_IN = 0
RSOut 0
EndIf
Next X
Return
; UITSTUREN VAN HET AANTAL INGEGEVEN STAPPEN - LINKSOM.
DRAAIEN_LINKS:
DATA_IN = 0
DelayMS 5
DATA_IN = RSIn
If DATA_IN > 250 Then
DATA_IN = 0
Return
EndIf
X = DATA_IN * AANTALSTAPPEN
RICHTING = 1
DelayMS DELAY_DRAAIEN
For X = X To 1 Step - 1
PULS = 1
DelayUS STAP_FREQUENTIE
PULS = 0
DelayUS STAP_FREQUENTIE
If EINDSCHAK_L = 1 Then
DATA_IN = 0
RSOut 0
GoTo RUN
EndIf
If X = 1 Then
DATA_IN = 0
RSOut 0
EndIf
Next X
Return
End
Profilab
Hieronder het programma in Profilab.
Hieronder de frontplaat.
De stappenmotor die wordt gebruikt is een 100-staps bipolaire stappenmotor, dus 100 stappen per omwenteling. De DRV8825 is een microstep driver die je kan instellen op hele stappen, 1/2 stappen, 1/4 stap, 1/8 stap, 1/16 stap en 1/32 stap. Ik heb in dit geval 1/32 stap gebruikt, dat is dus 100 x 32 = 3200 stappen per omwenteling. In het voorbeeld ga ik uit van minimaal één omwenteling en maximaal 250 omwentelingen.
Voor dit voorbeeld heb ik COM5 gebruikt, dus als men hier mee wil experimenteren moet je COM5 gebruiken of een andere poort invullen.
Zoals op de frontplaat te zien is kan je de vrijgave, links/rechts, start en het aantal omwentelingen ingeven. Als men op vrijgave drukt wordt de DRV8825 actief gezet (motor is bekrachtigd), als dat gebeurt is stuurt de PIC een signaal terug om de lamp vrijgave aan te zetten. Datzelfde gebeurt bij de keuze links- en rechtsom. Als je bij het aantal omwentelingen bijvoorbeeld 10 ingeeft en je drukt op rechts en daarna op start, zal de motor 10x rond gaan en dan stoppen. Er is ook een mogelijkheid om eindschakelaars te monteren, dus je kan het ook gebruiken om er een X- of Y-tafel mee te maken.
De waardes die door Profilab verstuurt worden zijn: 251, 252, 253 en 254. De verstuurde waardes van uit PICBasic zijn: 0, 2, 4, 8 en 16. Als je de programma's beter bekijkt kun je er wel uit halen wat de code precies doet.
De print
Ik heb ook een printje gemaakt voor de driver.
Aansluitschema DRV8825 stappenmotor driver
De eindschakelaars gaan via twee optocouplers, de twee klemmen (linksboven) zijn twee plussen die van de voeding af komen. Daarnaast op de klemmen (rechtsboven) komt de stappenmotor. Onder hebben we de voeding en de seriële aansluiting. Ook hier wordt er weer gebruik gemaakt van de interface die ook in het boek staat. Met de DIP-switch 1, 2 en 3 kan de stapgrootte ingesteld worden: 1, 1/2, 1/4, 1/8, 1/16 en 1/32. De code daarvoor kan uit de datasheet van de DRV8825 gehaald worden.
Op DIP-switch 4 zit de reset van de DRV8825, daar kan je de driver mee resetten, maar ook de vrijgave van de motor aan en uit zetten.
Op de print van de DRV8825 zit ook een potmeter (linksonder), daarmee kan de stroom ingesteld worden voor de motor. De driver mag maximaal een stroom van 2,5 A leveren, dus een motor uit bijvoorbeeld een printer (of vergelijkbaar) kan daarmee makkelijk bestuurd worden.
Op de print zit ook een ICSP-aansluiting om de 16F628A te programmeren, de PIC hoeft dus niet verwijderd te worden.
Zie hieronder de print voor de stappenmotor driver met de DRV8825.
DRV8825 stappenmotor driver print
Als regelaar is er een 78S05 gebruikt. Bij de printkroonstenen kan je nogmaals zien hoe het één en ander aangesloten moet worden.
Ik hoop dat dit een leuk project is om eventueel na te bouwen. Het kan eventueel ook op gaatjesprint gemaakt worden natuurlijk.
Ik hoop dat er zo het één en ander duidelijk is geworden hoe een stappenmotor werkt en hoe je die eventueel aan kan sturen en wat je er mee kan doen. Het zijn altijd leuke dingen om een beetje mee te experimenteren, maar je kan er ook leuke machientjes mee maken.
Dit artikel is geschreven door Lambiek.





