文章目录[隐藏]
在这篇文章中,我们将看到如何实现直流电机的非常精确的位置控制。我们使用Arduino和PID计算来实现简单直流电机的精确位置控制。
这样的小项目非常有趣,您可以通过构建该项目来学习许多概念,例如PID,闭环系统和编码器基础。
首先,我想向您简要介绍什么是PID,因为这将帮助您进一步了解这些内容。
PID代表比例微分和积分计算
PID是编程的一部分,在该部分上,控制器将执行复杂的计算,并根据过程的反馈来操纵输出。
PID有4个关键值:
1. PV(过程值)或反馈
2. SV(设定值)
3.错误
4.输出
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的
- 直流电动机
(1)软件设置方面,由于单片机可以通过编程的方式,处理一些业务逻辑,因此就能对智能语音处理过程进行操作。例如,在导航智能电子设备中,可以将其中的一些道路名称、距离等进行提取,然后进行播报,同时,还可以选择不同的名人口吻进行播报,真正实现智能化的定制操作,更好地满足用户的需求;
- 量角器
- 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文件
Android APP:https://www.mediafire.com/file/uz95pmbl58fg3bo/StepperMotorApp+%281%29.apk
Editable file:https://www.mediafire.com/file/4gz6wcw19acxuvf/StepperMotorApp.aia/file
下载:https://51qudong.lanzous.com/ibqglnc ,或长按二维码直接下载
下载该应用程序,然后执行以下弹出的Android操作,即可从未经授权的来源进行安装。
设置>安全。
检查选项“未知来源”。
在提示信息上点击确定。
选择“信任”。
下载完成后,项目准备就绪打开应用程序发送所需角度或移动刻度盘以相应地移动指针
机器周期不仅对于指令执打有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。