Gepost door Jeroen Vreuls op zondag 18 oktober 2015
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.
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
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.
Ik heb ook een printje gemaakt voor de 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.
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.
Reacties
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.
Leerzaam artikel Lambiek !!!
Bedankt Bram.
Als je ingelogd bent kun je een reactie plaatsen.