首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

树莓派3通过PWM信号控制电机转速

首先是硬件连接,将有刷电机与L298N模块的管脚连接。我这里用电机A接口做测试,所以有刷电机的M+和M-分别与In1和In2连接。

控制IN1和IN2的高低电压用于控制电机A;IN2和IN3用于控制电机B;ENA和ENB称为调速端。我们由树莓派3产生PWM信号,通过其占空比来调节电机转速。这个PWM信号占空比就是电机A当前速度与全速的比值。 全速是多少呢? 这个需要实际测试(占坑)。

L298N的管脚

在树莓派上,可以通过对GPIO的编程来实现PWM。

创建一个 PWM 实例,:

1p =GPIO.PWM(channel, frequency)

启用 PWM:

1p.start(dc) # dc 代表占空比(范围:0.0 = 100.0)

更改频率:

1p.ChangeFrequency(freq) # freq 为设置的新频率,单位为 Hz

更改占空比:

1p.ChangeDutyCycle(dc) # 范围:0.0 = 100.0

停止 PWM:

1p.stop()

变量“p”超出范围,会导致 PWM 停止。

参考小R科技提供的开源代码,本次PWM调速的python代码如下:

#coding:utf-8#Python中声明文件编码的注释,编码格式指定为utf-8from socket import *from time import ctimeimport binasciiimport RPi.GPIO as GPIOimport timeimport threadingGPIO.setmode(GPIO.BCM)#设置BCM工作模式GPIO.setwarnings(False)########电机驱动接口定义#################ENA = 13#//L298使能AENB = 20#//L298使能BIN1 = 19#//电机接口1IN2 = 16#//电机接口2IN3 = 21#//电机接口3IN4 = 26#//电机接口4#########电机初始化为LOW##########GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(ENB,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(IN3,GPIO.OUT,initial=GPIO.LOW)GPIO.setup(IN4,GPIO.OUT,initial=GPIO.LOW)####PWM初始化,并设置频率为200HZ####GPIO.setup(ENA,GPIO.OUT)#初始化 p1 = GPIO.PWM(ENA,200) #200HZ p1.start(40) #产生占空比为0.4的PWM信号,取值范围0-100#########定义电机正转函数##########def gogo():print 'motor gogo'#GPIO.output(ENA,True)GPIO.output(IN1,True)GPIO.output(IN2,False)#########定义电机反转函数##########def back():print 'motor_back'GPIO.output(ENA,True)GPIO.output(IN1,False)GPIO.output(IN2,True)#########定义电机停止函数##########def stop():print 'motor_stop'#GPIO.output(ENA,False)p1.stop # 停止PWM信号GPIO.output(ENB,False)GPIO.output(IN1,False)GPIO.output(IN2,False)GPIO.output(IN3,False)GPIO.output(IN4,False)'''整个实验是正转10.5s反转10.5s'''while True:gogo();time.sleep(10.5)stop();time.sleep(10.1)back();time.sleep(10.5)

小车之前是个两轮平衡车,现在改成差速三轮小车的内容还没完成。 今天不对轮子转速和pwm占空比之间的关系做测试了。

下次更新的时候,把码盘数据读进去,就能确定转速大小了。

附录:

RPi.GPIO 模块程序包提供了一个在 Raspberry Pi 中控制 GPIO 的类。该模块不适合应用到追求实时性或计数周期的应用中。

目前有两种方式可以通过 RPi.GPIO 对 Raspberry Pi 上的 IO 针脚进行编号。

第一种方式是使用 BOARD 编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。使用该方式的优点是无需考虑主板的修订版本,您硬件始终都是可用的状态。您将无需从新连接线路和更改您的代码。

第二种方式是使用 BCM 编号。这是一种较低层的工作方式 – 该方式参考 Broadcom SOC 的通道编号。使用过程中,您始终要保证主板上的针脚与图表上标注的通道编号相对应。您的脚本可能在 Raspberry Pi 主板进行修订版本更新时无法工作。

本文中使用的BCM方式。下图中可以看到BCM编号与树莓派3板子的对应关系。图上的wiringPi是应用于树莓派平台的GPIO控制库函数,支持C语言。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171216G0JHMS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券