/
PiStepper.py
58 lines (51 loc) · 2.21 KB
/
PiStepper.py
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# IMPORT LIBRARIES
import RPi.GPIO as GPIO
import time
# CONFIGURE PYTHON WITH PI
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
# PIN ASSIGNMENTS
switchCW = 22 # CLOCKWISE SWITCH POSITION PIN (CONNECT TO SWITCH TERMINAL 1)
switchCCW = 27 # COUNTERCLOCKWISE SWITCH POSITION PIN (CONNECT TO SWITCH TERMINAL 3)
DIR = 23 # DIRECTION GPIO PIN
PUL = 25 # PULSE GPIO PIN
ENA = 17 # ENABLE GPIO PIN
# CONFIGURE INPUT PINS
# SWITCH TERMINAL 2 GETS CONNECTED TO 3.3V SOURCE
GPIO.setup(switchCW, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(switchCCW, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
# CONFIGURE OUTPUT PINS
GPIO.setup(DIR, GPIO.OUT)
GPIO.setup(PUL, GPIO.OUT)
GPIO.setup(ENA, GPIO.OUT)
# CONFIGURE PWM CONTROL CHARACTERISTICS
frequencyPWM = 1600 # FREQUENCY OF PWM FROM PI (Hz)
dutycyclePWM = 50 # DUTY CYCLE OF PWM FROM PI (%)
PWM = GPIO.PWM(PUL, frequencyPWM) #CONFIGURE PUL PIN AS PWM
PPR = 3200 # PULSES PER REVOLUTION. DIP STICK MISCROSTEP SETTING ON DRIVER
RPS = frequencyPWM / PPR # REVS PER SECOND OF MOTOR SHAFT
print(RPS, 'REVOLUTIONS PER SECOND')
try:
while True:
if GPIO.input(switchCW): # SWITCH IN CLOCKWISE POSITION?
#print("Clockwise!") # TERMINAL FEEDBACK
GPIO.output(ENA, False) # ENABLE THE MOTOR DRIVE
GPIO.output(DIR, True) # SET DIRECTION PIN TO HIGH
PWM.start(dutycyclePWM) # START PWM WITH 50% DUTY CYCLE
elif GPIO.input(switchCCW): # SWITCH IN COUNTERCLOCKWISE POSITION?
#print("Counterclockwise!") # TERMINAL FEEDBACK
GPIO.output(ENA, False) # ENABLE THE MOTOT DRIVE
GPIO.output(DIR, False) # SET DIRECTION PIN TO LOW
PWM.start(dutycyclePWM) # START PWM WITH 50% DUTY CYCLE
else: # SWITCH IN CENTER POSITION
#print("Idle!") # TERMINAL FEEDBACK
GPIO.output(DIR, False) # SET DIRECTION PIN TO LOW
GPIO.output(PUL, False) # TURN OFF PWM GPIO
GPIO.output(ENA, True) # DISABLE THE MOTOR DRIVE
time.sleep(0.1)
except KeyboardInterrupt: # PRESS CTRL-C TO TERMINATE THE SCRIPT
print ("\nCtrl-C pressed. Stopping and exiting...")
finally:
GPIO.output(PUL, False) # TURN OFF PWM GPIO
GPIO.output(ENA, True) # DISABLE THE MOTOR DRIVE
GPIO.cleanup()