总览
在这篇文章中,我们将看到如何实现直流电机的非常精确的位置控制。我们使用Arduino和PID计算来实现简单直流电机的精确位置控制。
这样的小项目非常有趣,您可以通过构建该项目来学习许多概念,例如PID,闭环系统和编码器基础。
首先,我想向您简要介绍什么是PID,因为这将帮助您进一步了解这些内容。
PID
PID代表比例微分和积分计算
PID是编程的一部分,在该部分上,控制器将执行复杂的计算,并根据过程的反馈来操纵输出。
PID有4个关键值:
1. PV(过程值)或反馈
2. SV(设定值)
3.错误
4.输出
PID图
PID的基本工作如下,我不想进行复杂的算术公式,因为我想保持简单。
PID尝试使PV尽可能接近SV。
误差= SV-PV误差是设定值与过程值之间的差值,
而输出直接是误差的先决条件,换句话说,如果误差为正,则误差为正,如果误差为负,则输出与正的差越大,输出就越大。输出为负。随着PV越来越接近SV,误差变得越来越小,因此输出也越来越小,因此,我们获得了干净而精确的输出。
这是一个真实的例子。
假设我告诉您,在直路上行驶1公里以下的不中断汽车,因为您没有间断,因此油门就可以用来控制汽车,因此您上车时按住油门并加速一会儿,然后释放油门减速并逐渐停在1公里处。
这就是您所做的全部,我们可以称其为PID控制。PID知道如何在到达SP之前操纵输出。
Kp,Ki,Kd是可以微调PID控制器的参数,这些参数可以控制过冲下冲振荡。
假设一个微控制器在没有PID的情况下驱动汽车,它将启动汽车并继续加速直至到达1公里。
然后放开油门,使动车继续行驶并逐渐停止,直至超过我们设定的1公里。
然后,微控制器再次使汽车反转,并在他回到1公里点时加速,再次释放油门,同样的事情由于动量而继续向后移动,这样的循环一次又一次地重复。
您可以想像,现在几乎没有控制器可以在没有PID的情况下将汽车停在固定点
以下是了解PID平滑运动外观的视觉效果。
这个怎么运作?
双轴简单直流齿轮电动机的一侧与编码器的轴连接,另一侧与指针连接,该指针指向量角器上标记的角度,编码器与中断引脚上的arduino连接,并通过L293D电动机IC驱动直流电动机, HC-05模块用于将我们的系统与android设备连接
当我们从android设备arduino发送角度设定值接收数据并运行电机时,编码器将脉冲与要求匹配时,编码器会按照预定义的计算将实时位置反馈发送到arduino,这意味着指针到达所需位置arduinuo在这种情况下停止直流电机。所有过程均由PID控制,以实现平稳,干净的运动。
例如,在这里我们使用了一个光学编码器,该编码器可以提供1600跃迁脉冲以进行360度旋转,因此,如果我们想将指针旋转到90度,那么来自编码器的1600/360 x 90 = 400脉冲将告诉我们它移动了90度。
组件
我使用了一个简单的BO电机,将光编码器连接到其轴上,将360度量角器用作秤HC-05 bt模块,用于连接arduino和android设备,并使用android手机运行android app发送角度设置指向arduino
以下是产品链接,以防万一您需要购买
Arduino的
直流电动机
量角器
L293d IC
光学编码器
我3d打印了一些土墩电机和编码器零件,我也3d打印了指针,您可以在下面的链接中找到3D文件。
https://www.thingiverse.com/thing:3221695
光学编码器
我在这里使用了一个400 ppr 2相增量式光学编码器,该编码器可以为每个演进提供1600平移的参考,意味着每个相位800个过渡,我们需要连接连接到A相和B相的上拉电阻,因为我们不能使引脚悬空以避免任何问题。干扰,在我们的案例中,我们使用的是arduino,它具有内置的上拉电阻器功能,只需要从代码中激活即可。
pinMode (encoderPin1,INPUT_PULLUP );
pinMode (encoderPin2,INPUT_PULLUP );
要了解有关编码器的更多信息,请阅读上期推文
电路图
进行上图所示的接线,编码器绿色和白色导线必须连接到arduino的中断引脚,即数字引脚2和3。
在这里,我使用了L293D H桥式电动机控制IC,它可以控制直流电动机。工作在5V至36V的电压范围内,它可以处理每个通道1A的电流,每个通道2A的峰值,必须将HC-05 BT模块连接到arduino的串行引脚(TX,RX)引脚0和1。
我用了9V电池为电动机供电。
源代码
在开始编码之前,您必须先安装一个PID库(https://github.com/br3ttb/Arduino-PID-Library/archive/master.zip ),
该库由br3ttb提供(https://github.com/br3ttb/Arduino-PID-Library),是一个出色的库,它非常易于使用,并且可以使用。
如上面的视频和图像所示,首先我借助3D打印的联轴器和3D打印的安装支架连接编码器和直流电动机,然后借助M3 X 10螺栓将安装支架固定在编码器上。
在支架I的另一侧上,通过这种方式将直流电动机粘到直流编码器轴上,直流编码器轴与直流编码器轴一起移动,并继续向arduino提供位置参考
现在,我带了一个大的360度保护器,并在中心钻了一个孔,以便可以将其安装在直流电动机轴上。现在,我在电动机的另一轴上连接了3D打印指针,该指针指出了直流电动机轴的运动角度。
我有一块可用的PCB,可以连接直流电动机,L293d IC和HC-05模块,该PCB可以用作arduino uno屏蔽,可以直接安装在Arduino UNO上。
一旦我们完成了所有组件的组装,就可以运行该项目,因此我们需要一个android设备和android应用,您可以从下面的链接下载android应用和可编辑的.aia文件
always
-
编码器
+关注
关注
45文章
3641浏览量
134499 -
直流电机
+关注
关注
36文章
1710浏览量
70180 -
PID
+关注
关注
35文章
1472浏览量
85506
原文标题:Arduino用PID控制直流电机定位旋转 - 【单片机教程-Arduino-PID】
文章出处:【微信号:aidanpianji,微信公众号:单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论