树莓派学习笔记之PWM控制直流电机转速

树莓派控制PWM控制电机转速

一、硬件

  1. 树莓派
  2. 12V直流电机
  3. L298N电机驱动器
  4. 220V转12V变压器

二、连线

  1. 树莓派与L298N需要共地
  2. L298N驱动模块
    树莓派学习笔记之PWM控制直流电机转速
  3. 树莓派接线
    树莓派学习笔记之PWM控制直流电机转速

三、树莓派python库配置

  1. 安装GPIO库
sudo  apt-get  install  python3-rpi.gpio
  1. 电机控制程序
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()
上一篇:舵机的控制原理


下一篇:Go题库10_字符个数统计