' {$STAMP BS2sx}' {$PBASIC 2.5}'' -----[ I/O Definitions ]-------------------------------------------------fasepins VAR OUTA ' fase output pins 0,1,2,3arduinopin PIN 4 ' signaal wissel L/R van Arduinoschakelpin PIN 5 ' terugkoppeling, schakelaar voor motor in nulstand' -----[ Constants ]-------------------------------------------------------stepdelay CON 5 ' delay voor draaisnelheidvertraging CON 64 ' ingebouwd in stappenmotorstappenperrondje CON 64 ' 360/11,25 graden = 32 stappen, x vertraging = 2048 stappen per omwlinks CON 0 ' wisselstandenrechts CON 1' -----[ Variables ]-------------------------------------------------------index VAR Word ' stappentellerhalfrondje VAR Word ' aantal stappen voor halve asomwentelingfase VAR Nib ' fase indexstepsFT VAR Nib(4) ' fasen Full Torque; 2 spoelen, trekt meer stroomstepsLT VAR Nib(4) ' fasen Low Torque; 1 spoel, minder stroomstepsHS VAR Nib(8) ' fasen Half Step; langzamer maar nauwkeurigerwisselstand VAR Bit ' actuele wisselstand' -----[ step data ]-----------------------------------------------------stepsFT(0) = %1100 ' fasen Full TorquestepsFT(1) = %0110stepsFT(2) = %0011stepsFT(3) = %1001stepsLT(0) = %1000 ' fasen Low TorquestepsLT(1) = %0100stepsLT(2) = %0010stepsLT(3) = %0001stepsHS(0) = %1000 ' fasen Half StepstepsHS(1) = %1100stepsHS(2) = %0100stepsHS(3) = %0110stepsHS(4) = %0010stepsHS(5) = %0011stepsHS(6) = %0001stepsHS(7) = %1001' -----[ Initialisatie ]--------------------------------------------------DIRA = %1111 ' maak P0..P3 outputDIRB = %0000 ' maak P4..P7 inputfase = 0 ' set willekeurige fase indexhalfrondje = vertraging * stappenperrondje / 2 ' 32 * 64 /2 = 1024 stappenGOSUB beginstand ' draai rechtsom totdat schakelaar ingedruktPAUSE 100 ' even wachten' -----[ Main ]-----------------------------------------------' kijk wat de arduinopin aangeeft, vergelijk met acuele' wisselstand en zet wissel om naar gewenste standDO IF (arduinopin = links) AND (wisselstand = rechts) THEN GOSUB draailinksom IF (arduinopin = rechts) AND (wisselstand = links) THEN GOSUB draairechtsom ' anders L=L of R=R, niets doenLOOP' -----[ Subroutines ]-----------------------------------------------------'beginstand: ' draai rechtsom tot schakelaar ingedrukt = 0 DO WHILE schakelpin = 1 fase = (fase + 1) // 4 ' wijs naar volgende stap (modulus 4) GOSUB DoStepLT ' draai motor één stap LOOP ' schakelaar ingedrukt = beginstand = wisselstand R wisselstand = rechts ' nieuwe wisselstand bereiktRETURN'-------------------------draailinksom: ' draai halve slag linksom FOR index = 1 TO halfrondje fase = (fase + 3) // 4 ' wijs naar vorige stap GOSUB DoStepLT NEXT fasepins = %1111 ' motor stroomloos wisselstand = links ' nieuwe wisselstand bereiktRETURN'-----------draairechtsom: ' draai halve slag rechtsom FOR index = 1 TO halfrondje fase = (fase + 1) // 4 ' wijs naar volgende stap GOSUB DoStepLT NEXT fasepins = %1111 ' motor stroomloos wisselstand = rechts ' nieuwe wisselstand bereiktRETURN'-----------' stuur fase naar output pins (Low Torque)DoStepLT: fasepins = stepsLT(fase) ' output fase bits 0..3 PAUSE stepDelay ' pause tussen stappenRETURN'-----------' stuur fase naar output pins (Full Torque)DoStepFT: fasepins = stepsFT(fase) ' output fase bits 0..3 PAUSE stepDelay ' pause tussen stappenRETURN
...Met de aansluiting van de Arduino, bedoel je denk ik het aansluiten op een van de pinnen van het Mardec Shield. Is hiermee het in de Mardec draad genoemde bezwaar dat niet altijd duidelijk is wat de beginstand is van de stappenmotor geëlimineerd?
Met zo'n drivertje kun je met drie signalen de motor ook perfect aansturen.https://www.martoparts.nl/A3967-V44-