树莓派控制PWM控制电机转速
一、硬件
- 树莓派
- 12V直流电机
- L298N电机驱动器
- 220V转12V变压器
二、连线
- 树莓派与L298N需要共地
- L298N驱动模块
- 树莓派接线
三、树莓派python库配置
- 安装GPIO库
sudo apt-get install python3-rpi.gpio
- 电机控制程序
import time
import RPi.GPIO as GPIO
#定义树莓派BCM编码引脚
Motor_A_EN = 16
Motor_A_Pin1 = 20
Motor_A_Pin2 = 21
#引脚初始设置
def setup():
global pwm_A
GPIO.setwarnings(False) #禁用监测编码为非默认值时的警告
GPIO.setmode(GPIO.BCM) #指定编码规则
#设置引脚模式为输出
GPIO.setup(Motor_A_EN, GPIO.OUT)
GPIO.setup(Motor_A_Pin1, GPIO.OUT)
GPIO.setup(Motor_A_Pin2, GPIO.OUT)
motorStop() #将所有引脚置为低电平
try: #捕获try后面语句的异常,如果有异常执行except语句后的
#将使能引脚初始化为PWM实例,频率为1000Hz;频率是指PWM脉宽调制的时间倒数
pwm_A = GPIO.PWM(Motor_A_EN, 1000)
except:
pass #无意义保证代码的完整性
def motorStop():
GPIO.output(Motor_A_Pin1, GPIO.LOW)
GPIO.output(Motor_A_Pin2, GPIO.LOW)
GPIO.output(Motor_A_EN, GPIO.LOW)
def motor_A(direction,speed):
if direction == 1:
GPIO.output(Motor_A_Pin1,GPIO.LOW)
GPIO.output(Motor_A_Pin2, GPIO.HIGH)
pwm_A.start(0) #设置开始占空比为0
pwm_A.ChangeDutyCycle(speed) #改变占空比 占空比范围0-100
elif direction == 0:
GPIO.output(Motor_A_Pin1, GPIO.HIGH)
GPIO.output(Motor_A_Pin2, GPIO.LOW)
pwm_A.start(0)
pwm_A.ChangeDutyCycle(speed)
else:
GPIO.output(Motor_A_Pin1, GPIO.LOW)
GPIO.output(Motor_A_Pin2, GPIO.LOW)
setup()
motor_A(1,100)
time.sleep(3)
motorStop()
time.sleep(3)
motor_A(0,100)
time.sleep(3)
#释放引脚资源
motorStop()
GPIO.cleanup()