PID算法的C语言实现五 积分分离的PID优化
来源:互联网 发布:柬埔寨网络博客合法吗 编辑:程序博客网 时间:2024/04/27 10:44
在上面三、四我们知道积分环节是为了消除静差,但有时候机器启动、结束或出现大幅的偏差时,这样在短时间内会累积大量的偏差,这样就导致积分项很大,以至于出现超调甚至震荡,这样是不允许的!
为了克服这个问题,我们对积分偏差的做一个选择,即通过控制积分偏差的大小来决定是否增加积分项的调节!
在第三篇的代码中做如下更改:
将
float PID_Cal(float Speed)
{
pid.SetSpeed = Speed;
pid.Err = pid.SetSpeed - pid.ActualSpeed;
pid.Integral += pid.Err;
pid.Voltage = pid.Kp*pid.Err + pid.Ki*pid.Integral + pid.Kd*(pid.Err - pid.Err_Last);
pid.Err_Last = pid.Err;
pid.ActualSpeed = pid.Voltage*1.0;
return pid.ActualSpeed;
} 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。代码段一
改成
float PID_Cal(float Speed){
unsigned char index;
pid.SetSpeed = Speed;
pid.Err = pid.SetSpeed - pid.ActualSpeed;
if(abs(pid.Err) >=100) //取绝对值
{
index = 0;
}
else
{
index =1;
pid.Integral += pid.Err;
pid.Voltage = pid.Kp*pid.Err +index*pid.Ki*pid.Integral + pid.Kd*(pid.Err - pid.Err_Last);
pid.Err_Last = pid.Err;
pid.ActualSpeed = pid.Voltage*1.0;
return pid.ActualSpeed;
}。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。代码段二
我们用199这个值来判断他们优化时间的快慢!
代码段一:
运行代码可以看到一下从198到199的越变的次数为 406次,即没积分环节的优化,达到199需要406次的PID控制,时间为406个单位!
代码段二:
运行代码可以看到一下从198到199的越变的次数为 406次,即没积分环节的优化,达到199需要219次的PID控制,时间为219个单位!
从上面我们知道优化后的PID比没优化的快了将近1倍的时间单位!
- PID算法的C语言实现五 积分分离的PID优化
- PID算法的C语言实现六 抗积分饱和的PID优化
- PID算法的C语言实现七 梯形积分的PID优化
- PID算法的C语言实现八 变积分的PID优化
- PID算法的C语言实现一 PID算法原理
- Pid控制算法-积分分离pid算法C++实现
- PID算法的C语言实现
- PID算法的C语言实现方式
- PID算法的C语言实现
- PID控制算法的C语言实现
- PID算法的C语言实现-20170816
- PID控制算法的C语言实现
- PID算法的简单C语言实现
- PID算法的C语言实现三 位置型PID的C语言实现
- PID算法的C语言实现四 增量型PID的C语言实现
- PID算法的C语言实现二 PID算法的离散化
- PID控制算法的C语言实现一 PID算法原理
- PID控制算法的c语言实现十一 模糊PID的参数整定
- Deep Learning论文笔记之(五)CNN卷积神经网络代码理解
- CI 处理json
- Inkpad绘图原理浅析
- $("body").append()是什么意思?
- Eclipse Permission is only granted to system apps 解决
- PID算法的C语言实现五 积分分离的PID优化
- instrument 名词解释
- javascript关卡检测——语法
- Android如何判断app是否是每日第一次登录
- 指针数组与数组指针【转】
- 30多个Android 开发者工具 带你开发带你飞
- nosql介绍
- 斜率优化入门
- lnmp一键安装包