根据资料, 可以使用L298N的ENA,ENB端口进行直流电机的速度控制,方式为PWM。这里备注下代码,比较简单。
CONTENTS [hide]
连线
树莓派GPIO3 == IN1
树莓派GPIO4 == IN2
树莓派GPIO5 == ENA
+3.5V == VCC
测试代码
import RPi.GPIO as GPIO |
import time |
def speedCtrl(seconds, count, percent): |
print (seconds, count, percent); |
|
timeunit = 1.0 / count; |
cnt = 0 ; |
while cnt < seconds: |
cnt = cnt + 1 ; |
times = 0 ; |
while times < count: |
times = times + 1 ; |
GPIO.output(GPIO_CTRL, GPIO.HIGH); |
time.sleep( timeunit * percent / 100 ); |
GPIO.output(GPIO_CTRL, GPIO.LOW); |
time.sleep( timeunit * ( 1 - percent / 100 ) ); |
if __name__ = = "__main__" : |
GPIO_DATA1 = 22 ; |
GPIO_DATA2 = 23 ; |
GPIO_CTRL = 24 ; |
GPIO.setmode(GPIO.BCM); |
GPIO.setup(GPIO_DATA1,GPIO.OUT); |
GPIO.setup(GPIO_DATA2,GPIO.OUT); |
GPIO.output(GPIO_DATA1, GPIO.LOW); |
GPIO.output(GPIO_DATA2, GPIO.HIGH); |
GPIO.setup(GPIO_CTRL,GPIO.OUT); |
GPIO.output(GPIO_CTRL, GPIO.LOW); |
time.sleep( 1 ); |
|
speedCtrl( 5 , 10 , 0 ); |
speedCtrl( 5 , 10 , 20 ); |
speedCtrl( 5 , 10 , 40 ); |
speedCtrl( 5 , 10 , 60 ); |
speedCtrl( 5 , 10 , 80 ); |
speedCtrl( 5 , 10 , 100 ); |
|
speedCtrl( 5 , 1 , 40 ); |
speedCtrl( 5 , 5 , 40 ); |
speedCtrl( 5 , 10 , 40 ); |
speedCtrl( 5 , 15 , 40 ); |
speedCtrl( 5 , 20 , 40 ); |
|
GPIO.cleanup(); |
更新:
之前的函数有点问题,写个新的。
def speedCtrl(seconds, count, percent): |
timeunit = 1.0/count; |
cnt = seconds * count; |
GPIO_HIGH = GPIO.HIGH; |
GPIO_LOW = GPIO.LOW; |
timeA = timeunit * percent / 100; |
timeB = timeunit * (1- percent/100); |
while cnt > 0: |
cnt = cnt - 1; |
if timeA > 0.0001: |
GPIO.output(GPIO_CTRL, GPIO_HIGH); |
time .sleep( timeA ); |
if timeB > 0.0001: |
GPIO.output(GPIO_CTRL, GPIO_LOW); |
time .sleep( timeB ); |
发表评论