PID算法学习
比例-积分-微分控制器
一、位式控制
二、PID控制
sv设定值 /pv当前值

三、PID算法分析
必须对传感器的值进行检测(从被控对象中取值-采样)
1.从开机以来传感器所有采样点的一个数据序列
X1、X2、X3、…Xk-2、Xk-1、Xk
2.分析采样点的数据序列,可以挖掘出3个方向上的信息
①Ek=Sv-Xk
1)Ek >0 当前未达标
2)Ek =0 已经达标
3)Ek <0 当前已经超标
***OUT=Kp•Ek(比例)一般在控制中输出PWM信号,通过调节PWM占空比,从而实现控制。
缺点:当Ek=0时,不会进行控制,因此这也是比例控制的缺点,为了克服这种不良影响,可以在比例控制中加入一个小的常量OUT0,即使为0,也会有一定的输出,只不过该输出很小,但是有时候也会出现适得其反的效果。
OUT=Kp•Ek+OUT0(常量,比较小。)

②Ek=Sv-Xk
X1、X2、X3、…Xk-2、Xk-1、Xk
在每一时刻都会产生一个误差,将其记录下来即为一个误差序列:
E1、E2、E3…Ek-2、Ek-1、Ek
这些误差中有正有负,大于零说明未达标,小于零即为已达标。
Sk= E1+E2+E3…Ek+Ek-1+Ek
1)Sk>0 过去这段时间,大多数是未达标的。
2)Sk=0过去这段时间,大多数是已达标的(可能性很小)。
3)Sk<0过去这段时间,大多数是已超达标的。
IOUT=Kp•Sk(由于是将历史阶段相加起来的,所以类似积分控制,所以也称为积分控制。)
这个仅仅代表历史这段时间的问题,而当前这段时间却不知道。

③E1、E2、E3…Ek-2、Ek-1、Ek前一个时刻到现在这个时刻之间的差值,最近两次的偏差相减,
Dk=Ek-Ek-1 得到两次变化的偏差
1)Dk>0 后一时刻的偏差值大于前一时刻的偏差值,如下图1所示。
2)Dk=0
3)Dk<0 后一时刻的偏差值小于前一时刻的偏差值,如下图2所示。

用前一时刻的变化作为下一时刻变化的依据,例如倒数第三次的是3°,倒数第二次是5°,可以看到两次之间的差值为两度,可以预见倒数第一次是7°。
所以微分算法实际上就是用这个Dk的值
DOUT=Kp•Dk,不能单独行动。偏差有了变化趋势才会发生改变。
加入独立行动,就一定会出现误差。
为了不使偏差没有变化率的情况出现,在后面加上一个OUT0,使其在没有误差变化率的时候仍然有输出。
DOUT=Kp•Dk+ OUT0
通过设置Kp从而实现夸大控制,从而有效控制输出。

PID的输出推导:
PID(OUT)=POUT+IOUT+DOUT
=(Kp•Ek+OUT)+(Kp•Sk+OUT)+(Kp•Dk+OUT)
=Kp(Ek+Sk+Dk)+OUT
通过算出来的数字进行PMW控制(脉冲的宽度)。
Sk的处理,T是采样周期。
Sk=1/T1 ∑_(k=0)^n▒〖Ek•T〗 T是计算周期(采样周期),在写程序时要能够调节,不能设置成为固定的。
T_i积分常量-积分时间。
因为比例控制说明当前的状态,假如当前状态是差值比较大,比例环节认为应该加大输出。
对于积分环节而言,是对历史而言的,因此把当前状态和之前状态差值比较大,的时候,通过累加,积分环节仍然是差值较大,所以积分环节也会认为后一阶段应该加大输出。
综合以上可知,比例环节和积分环节会达成一致“意见”,把这段时间称为积分时间常数。
Sk=1/T1 ∑_(k=0)^n▒〖Ek•T〗 时间常数在分母上,所以时间常数越大,输出越小。
时间越大,相当于把之前多个历史误差数据加了进来,而长时间的误差可能没有意义,因此输出较小。
如果选择太小,考察的时间太小,稍微有一点波动就会产生很大的影响,例如:超市里办积分卡,假如,张三,过去一年都没去,而超市只考察某一天的消费使用情况,恰好张三今天买了五千元的东西,超市工作人员就会认为张三消费信用较好,这是不符合实际的,相反李四过去一年消费3万+,而恰恰今天没有消费,则被认为消费信用差,这当然与实际情况也是有较大出入的。
假如从开机时起,设定温度是100°。
第1时刻:70°
第2时刻:80°
第3时刻:90°

第X时刻100°
第X时刻第一次达到100°,这是误差为0,比例项几乎不输出响应,而之前这些时刻累计的误差是正值,在第一次达到100°时,误差累计仍然是正值,因此积分项还会加大输出,从而导致第X时刻超过100°(过冲),于是误差出现负值,一段时间过后,就开始出现误差累计为负,从而减小输出,如此反复下去,直到无限接近100°,在100°上下波动。

积分项在缺点是:会出现过冲,所以在某些状态下,会将Ti设置的较大,另外有时不会将积分环节过早加进去,当其到达70%-80%时才会将积分加入进去。(积分分离)
注意,一断达标(第一次达标后),比例项是不起作用的,但是积分项会参与继续控制。
可以理解为,在未达标之前,积分环节协助输出,但是达标后,才会重点参与进去。

Dk的处理,变换率:
Dk=TdEk-Ek-1)/T Td也是一个可调常数,T一般不能取值太大,否则不能及时反应出剧烈的变换。
PD(当达成一致时,微分就会提醒比例加大)

单片机中的PID表达式
OUT=(K_p∙E_k )+K_p∙(T/Tn∙∑_0^n▒E_k )+(K_p∙(T_D/T)∙(E_k-E_(k-1) ))+OUT

位置式PID & 增量式PID

传感器读回来的值,这个函数使得传感器的温度值和pid结合在一起。

对于计算得到的PID数值,对应一个PWM脉冲宽度,最大值有可能>1000,也有可能<0,因此,对于计算得到的这个数值,不应该作为最终值,而应该定义一个临时变量进行临时存储,进行比较。
进行一个判断
if(out>>pid.pwmcycle)
{
pid.OUT=pid.pwmcycle;
}
if(out<0)
{
pid.OUT=;
}

pid.OUT=out;

终于把PID的原理搞懂了相关推荐

  1. 肝了一早上,终于把mybatis的一级缓存和二级缓存原理搞懂了~

    今天的沉淀,是助力明天飞向远方的基石~ 每当自己沉思下来写学习文章的时候,内心深处总是会得到一片宁静. 缓存的概念 我们在查询数据时,经常去查询一些条件相同.数据的正确与否对最终结果影响不大的数据,并 ...

  2. HTTPS加密原理,搞懂什么是对称加密、非对称加密、证书、数字签名

    众所周知,http协议是一种未加密的协议,我们未加密的数据,在传输的过程中会经过一个又一个的物理节点,如果被人通过抓包的方式拿到了我们的数据,将会给我们造成无法估量的损失. 为了解决解决这个问题,ht ...

  3. 别不承认!搞懂那些数理原理,才发现它们和枯燥根本不沾边!

    ▲ 点击查看 数理化的学习对于很多孩子,包括家长都是一个大难题. 比如,我们要教孩子认识动物,一般是要给孩子看动物的图片或实体,孩子自然就对这个动物有个认知. 要教孩子数字,就会用一件玩具.两个苹果这 ...

  4. 手机里竟然有这么多传感器!终于都搞懂了

    手机里竟然有这么多传感器!终于都搞懂了 本文来自快科技 随着技术的进步,手机已经不再是一个简单的通信工具,而是具有综合功能的便携式电子设备.手机的虚拟功能,比如交互.游戏.都是通过处理器强大的计算能力 ...

  5. 万字多图,搞懂 Nginx 高性能网络工作原理!

    在单进程的网络编程模型中.所有的网络相关的动作都是在一个进程里完成的,如监听 socket 的创建, bind.listen.再比如 epoll 的创建.要监听事件的添加,以及 epoll_wait ...

  6. Android 动态分区详解(一) 5 张图让你搞懂动态分区原理

    文章目录 0. 导读 1. 动态分区详解的背景 1.1 背景 1.2 动态分区的本质 2. Linux device mapper 驱动 3. Android 动态分区布局 3.1 动态分区布局 3. ...

  7. HTTPS 终于搞懂了 !

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  8. layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

  9. php service原理,轻松搞懂WebService工作原理

    用更简单的方式给大家谈谈WebService,让你更快更容易理解,希望对初学者有所帮助. WebService是基于网络的.分布式的模块化组件. 我们直接来看WebService的一个简易工作流程: ...

最新文章

  1. Commvault公司营收增长 但本季度仍身陷亏损
  2. Linux中LVM(逻辑卷管理)的使用
  3. c# 读取大文件方法
  4. 百度智能云人脸活体检测系统获得公安部一所首批安全性能认证
  5. Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法
  6. 异常 try catch finally return 执行关系 MD
  7. 分布式消息队列 Kafka
  8. android浏览SD卡的文件,简单实现浏览Android SD卡中的文件
  9. Android轩辕剑之ActionBar之一
  10. 获得当前应用程序路径C#03
  11. ubuntu文字界面与图形界面切换
  12. 136. PHP 编程
  13. 计算机硬件个人总结,计算机硬件课程设计个人总结
  14. 在js中为什么0.1+0.2不等于0.3
  15. 原生 JS 实现一个瀑布流插件
  16. pycharm关联git
  17. 核电站计算机专业是干什么的,什么叫核电站?它是干什么用的呢?
  18. 智慧城市:未来已来,时尚生活不再遥不可及
  19. mybatisplus 自增主键失效,自增主键超大
  20. php遍历windows下中文目录下的所有文件名

热门文章

  1. 图书馆借阅管理系统(图书管理系统),可提供远程搭建运行服务
  2. Java大端字节和小端字节
  3. MySQL 获取时间函数
  4. mongodb的单机和集群安装手册
  5. log4的配置和使用
  6. 设置文字最后一行,末尾自定义
  7. 干货 | 蒙特卡洛方法(Monte Carlo)
  8. Tensorflow③ Keras的LSTM和TF的LSTM实现的源码剖析
  9. 手机红米5android7.11,这些是不支持ANDROID 11更新的小米和红米手机
  10. 一些学习经验总结和分享