原理图:
接口说明
A控制信号输入------PWMA VM ------电机驱动电压输入端(4.5V-15V)
A电机输入端2 ------AIN2 VCC ------逻辑电平输入端(2.7V-5.5V)
A电机输入端1 ------AIN1 GND ------ 接地
正常工作/待机状态控制端------STBY AO1 ------- A电机输出端1
B电机输入端1------BIN1 AO2 ------ A电机输出端2
B电机输入端2------BIN2 BO2 ------ B电机输出端2
B控制信号输入端------PWMB BO1 ------ B电机输出端1
接地------GND GND ------- 接地
该实验的基础是两块并联在一起的驱动模块,所以和单独一个驱动模块有些许差别。
其他关于该驱动模块的介绍详见百度。
不多说,上代码。
importRPi.GPIO as GPIOimporttime
PWMA= 18AIN1= 22AIN2= 27PWMB= 23BIN1= 25BIN2= 24
#该驱动模块调速区间为[0-100]
#前进
deft_up(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,False)#AIN2
GPIO.output(AIN1,True) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,False)#BIN2
GPIO.output(BIN1,True) #BIN1
time.sleep(t_time)
#停止deft_stop(t_time):
L_Motor.ChangeDutyCycle(0)
GPIO.output(AIN2,False)#AIN2
GPIO.output(AIN1,False) #AIN1
R_Motor.ChangeDutyCycle(0)
GPIO.output(BIN2,False)#BIN2
GPIO.output(BIN1,False) #BIN1
time.sleep(t_time)
#后退deft_down(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,True)#AIN2
GPIO.output(AIN1,False) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,True)#BIN2
GPIO.output(BIN1,False) #BIN1
time.sleep(t_time)
#左转deft_left(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,True)#AIN2
GPIO.output(AIN1,False) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,False)#BIN2
GPIO.output(BIN1,True) #BIN1
time.sleep(t_time)
#右转deft_right(speed,t_time):
L_Motor.ChangeDutyCycle(speed)
GPIO.output(AIN2,False)#AIN2
GPIO.output(AIN1,True) #AIN1
R_Motor.ChangeDutyCycle(speed)
GPIO.output(BIN2,True)#BIN2
GPIO.output(BIN1,False) #BIN1
time.sleep(t_time)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(AIN2,GPIO.OUT)
GPIO.setup(AIN1,GPIO.OUT)
GPIO.setup(PWMA,GPIO.OUT)
GPIO.setup(BIN1,GPIO.OUT)
GPIO.setup(BIN2,GPIO.OUT)
GPIO.setup(PWMB,GPIO.OUT)
L_Motor= GPIO.PWM(PWMA,100)
L_Motor.start(0)
R_Motor= GPIO.PWM(PWMB,100)
R_Motor.start(0)try:whileTrue:
t_up(50,3)
t_down(50,3)
t_left(50,3)
t_right(50,3)
t_stop(3)exceptKeyboardInterrupt:
GPIO.cleanup()
需要注意的是由于该电机模块的峰值电流能达到2A/3A,如果发现代码运行一段时间出现了电机停止运行,那么很有可能是电压不够导致了PWM复位。
代码参考:http://bildr.org/2012/04/tb6612fng-arduino/