新型PID控制及其应用(二)
2016-03-04 18:30
253 查看
数字PID控制算法的改进
1.积分分离PID控制算法:
引入积分项的目的:消除静态误差,提高精度,但在开机或者大幅度增减设定值时,系统会有很大的偏差,造成很大的超调量。积分分离作用就是减小
超调量。
程序:
2.遇限削弱积分PID控制算法(又称抗饱和积分):
一开始就积分,进入限制范围后就停止积分。
这种方法可以避免长时间的停留在饱和区。
程序:
3.变积分的PID控制算法:
以上的控算法都是基于积分分离的前提,本程序也不例外。
变积分是指在一般的控制过程中,积分增量不变。但是,系统的要求是当系统偏差大时,积分作用应该较小,但系统误差小时,积分作用应该增大。
积分系数大了会产生超调,小了短时间内不能消除静差。所以变积分是有效的。
变积分的思想是改变积分项的累加速度。使其偏差越大,积分越慢,偏差越小,积分越快。
总结:都是基于积分分离的控制算法。
1.积分分离PID控制算法:
引入积分项的目的:消除静态误差,提高精度,但在开机或者大幅度增减设定值时,系统会有很大的偏差,造成很大的超调量。积分分离作用就是减小
超调量。
程序:
int index = 0; if(abs(pid.err)>= 200 ) index = 0;//设定一个阈值 else { index = 1; pid.err_sum += pid.err; } pid.act = pid.P*pid.err + index * pid.I*pid.err_sum + pid.D*pid.err_last;
2.遇限削弱积分PID控制算法(又称抗饱和积分):
一开始就积分,进入限制范围后就停止积分。
这种方法可以避免长时间的停留在饱和区。
程序:
float Pid (float SET){ int index = 0; pid.set = SET; pid.err = pid.set - pid.act; if(pid.act > pid.umin){ if(abs(pid.err) > 200) index = 0; else{ index = 1; if(pid.err<0) pid.err_sum += pid.err; } }else if(pid.act < pid.umin){ if(abs(pid.err)>200) index = 0; else { index = 1; if(pid.err>0) pid.err_sum += pid.err; } }else{ if(abs(pid.err)>200) index = 0; else { index = 1; if(pid.err>0) pid.err_sum += pid.err; } } pid.err_last = pid.err; pid.act = pid.P*pid.err + pid.I*pid.err_sum + pid.D*pid.err_last; return pid.act; }
3.变积分的PID控制算法:
以上的控算法都是基于积分分离的前提,本程序也不例外。
变积分是指在一般的控制过程中,积分增量不变。但是,系统的要求是当系统偏差大时,积分作用应该较小,但系统误差小时,积分作用应该增大。
积分系数大了会产生超调,小了短时间内不能消除静差。所以变积分是有效的。
变积分的思想是改变积分项的累加速度。使其偏差越大,积分越慢,偏差越小,积分越快。
float Pid (float SET){ float index = 0.0f; pid.set = SET; pid.err = pid.set - pid.act; if(abs(pid.err)>200) index = 0.0f; else if(abs(pid.err)<180) { index = 1.0f; pid.err_sum += pid.err; }else{ index =(200 - abs(pid.err))/20; pid.err_sum += pid.err; } pid.act = pid.P*pid.err + index * pid.I*pid.err_sum + pid.D*pid.err_last; pid.err_last = pid.err; return pid.act; }
总结:都是基于积分分离的控制算法。
相关文章推荐
- 文章标题
- 重学备忘
- 关于xib布局,不写死centerY,根据屏幕比例进行适应
- 【安卓基础四】adb命令使用Heap检测和分析Android应用内存
- Android开发中的View类的视图属性focusableInTouchMode这个属性跟focusable有什么区别?
- Java自动装箱与拆箱
- 二分图判断(交叉染色)
- ViewGroup的事件分发机制
- c++复制构造函数实例
- JAVA中string.replace()和string.replaceAll()的区别及用
- 杭电1230
- 我的ACM之路---大一篇(蓝桥杯后)
- 嵌入QMessageBox的无边框消息提示框
- 安卓开发——在Activity里如何获得另一个xml布局文件的控件
- [LeetCode]334 三个递增数字子序列
- Linux多线程及同步
- ios 进阶 -- 开机视频
- cgi   fast-cgi  php-cgi  php-fpm理解
- 搭建git for windows服务器
- 比赛分组(二)——更通用的解法