Werken met stappenmotoren

Gepost door Jeroen Vreuls op zondag 18 oktober 2015 16:08

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.

Het Profilab programmaHet Profilab programma

Hieronder de frontplaat.

De frontplaat in ProfilabDe frontplaat in Profilab

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 driverAansluitschema 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 printDRV8825 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.

Gepost door Lambiek op zondag 18 oktober 2015 17:33
Ik wil eerst zelf Jeroen een compliment geven, het staat er weer netjes op Jeroen Bedankt. :) Dat mag ook wel eens gezegd worden vind ik.
Gepost door bprosman op woensdag 13 januari 2016 01:28
Leerzaam artikel Lambiek !!!
Gepost door Lambiek op zondag 31 januari 2016 16:59
Leerzaam artikel Lambiek !!!
Bedankt Bram. :)

Als je ingelogd bent kun je een reactie plaatsen.