ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Arduino结合PID控制算法实现跟随运动

2021-11-17 22:33:11  阅读:329  来源: 互联网

标签:采样 Arduino 控制算法 PID value 算法 error


Arduino是很火的开源硬件平台之一,今天利用Arduino结合PID控制算法来实现位置跟随运动。

实验初步硬件平台如下:

 

位置检测元件使用的是一个夏普红外传感器,其技术规格如下所示

  • 信号类型:模拟输出
  • 探测距离:4-30cm
  • 工作电压:4.5~5.5V
  • 标准电流:33mA
  • 接口类型:PH2.0-3P
  • 最大尺寸:40x20x13.5 mm

由于位置传感器输出的是模拟量,需要在通过Arduino接收后再转化为数字量,使用的Arduino UNO如下图所示, 

 

传感器的输出量的参考转换代码如下

void loop ()

{

uint16_t value = analogRead (pin);       

if (value < 16) 

value = 16;

distance= 2076.0 / (value - 11.0);}

其中pin为模拟量输入引脚号(A0-A5),distance为转换成的数字量。

PID算法

作为一名电子从业者,应该都对PID算法不陌生,作为改变世界的十大算法之一,也许只有你自己接触后,才会有更深的体会。笔者认为,PID算法能够使闭环控制系统能够更快更好的实现我们的预期功能,先介绍下我们的算法原型:

 

上面所示的是PID控制原理框图,我们需要将其在程序中离散化

 

 

这样看似高深的东西可以简化为每次采样完成后的计算输出,我们计划采用u作为控制器的控制量,控制电机的转动,电机的输出速度与输入电压成正比例关系,拟采用电机转动的位置来模拟最终的调节量,如果传感器检测到目标位置,电机将停止转动。

基于Arduino的PID测距控制(二)

在上期的blogger中,笔者讲述了如何使用Arduino和夏普红外传感器来检测距离。并就PID的基本理论进行阐述。在本期blogger中,笔者将以电机的控制电压量变化演示如何实现PID反馈闭环控制。

下图是控制原理框图

 

 

由于不知道控制对象具体的理论传递函数,我们在进行PID参数的选取时进行了若干次的尝试,直到相对满意时为止。

如何定义一个ms采样周期?

Arduino的millis()函数能够获取arduino从开始运行到现在的程序之后的毫秒数,返回值为unsignd long型。通过设置一个timechang=now-lasttime,阈值设为100时,即表示100ms的时间间隔。

定义采样周期计算Arduino的输出值

那么如何将PID计算输出呢?

   up=Kp*error;

   ud=Kd*(error-error_1)/Ts;

   ui=ui_1+Ki*error*Ts;

输出u=up+ud+ui,Ts表示采样周期,error为当前检测到距离距离目标位移的差值,而error_1为上一次采样的差值,这样既可以将上期bloggger中的离散控制算法转换为C语言。

监控Arduino的控制量

通过Serial.print (),通过Arduino的Serial Monitor显示出来。

 

 

 

 

 

标签:采样,Arduino,控制算法,PID,value,算法,error
来源: https://www.cnblogs.com/weibamm/p/15564248.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有