当前位置: 首页 > news >正文

蚌埠网站建设专业的公司大余做网站公司

蚌埠网站建设专业的公司,大余做网站公司,中原区建设局网站,校友网站建设前面已经实现了各种的PID算法#xff0c;然而在某些给定值频繁且大幅变化的场合#xff0c;微分项常常会引起系统的振荡。为了适应这种给定值频繁变化的场合#xff0c;人们设计了微分先行算法。 1、微分先行算法的思想 微分先行PID控制是只对输出量进行微分#xff0c;而…前面已经实现了各种的PID算法然而在某些给定值频繁且大幅变化的场合微分项常常会引起系统的振荡。为了适应这种给定值频繁变化的场合人们设计了微分先行算法。 1、微分先行算法的思想 微分先行PID控制是只对输出量进行微分而对给定指令不起微分作用因此它适合于给定指令频繁升降的场合可以避免指令的改变导致超调过大。微分先行的基本结构图 根据上面的结构图我们可以推出PID控制器的输出公式比例和积分是不变的只是微分部分变为只对对象输出积分记为y我们对微分部分引入一阶惯性滤波可记微分部分的传递函数如下 于是微分部分可以推导出如下的公式 前面我们在推导PID的公式时曾规定KdKp*Td/T于是我们将其带入公式可得 于是我们就可以得到微分先行的离散化公式 这即是位置型PID的计算公式了我们也可以使用前面的方法推导增量型的计算公式如下 从上面的公式我们发现微分部分只与测量值有关而且与连续的几个测量值都有关。而与设定值没有关系设定值的阶跃变化不会造成高频的干扰。 2、算法实现 前面我们已经简单的介绍了微分现行的基本结构也推导了位置型以及增量型公式接下来我们根据前面对其基本思想的描述来实现基于微分先行的PID算法实现同样是包括位置型和增量型两种实现方式。 2.1、位置型PID算法实现 关于微分先行PID算法的公式我们已经推导出来了编码实现就是在公式的基础上将其计算机语言化。同样的首先定义PID对象的结构体 /*定义结构体和公用体*/ typedef struct {float setpoint;       //设定值float proportiongain;     //比例系数float integralgain;      //积分系数float derivativegain;    //微分系数float lasterror;     //前一拍偏差float result;     //输出值float integral;   //积分值float derivative;      //微分项float lastPv;     //前一拍的测量值float gama;      //微分先行滤波系数 }PID; 接下来实现PID控制器 void PIDRegulation(PID *vPID, float processValue) {float thisError;float c1,c2,c3,temp;thisErrorvPID-setpoint-processValue;vPID-integralthisError;tempvPID- gama * vPID- derivativegain vPID- proportiongain;c3vPID- derivativegain/temp;c2(vPID- derivativegain vPID- proportiongain)/temp;c1vPID- gama*c3;vPID- derivativec1* vPID- derivativec2*processValuec3* vPID- lastPv;vPID-resultvPID-proportiongain*thisErrorvPID-integralgain*vPID-integralvPID-derivative;vPID-lasterrorthisError;vPID- lastPv processValue; } 对于微分先行的位置型PID控制器来说本次的微分项不仅与上一拍的微分结果有关而且与上一拍的测量值有关。 2.2、增量型PID算法实现 微分先行增量型PID控制算法的实现就是以前面的增量型公式为基础。微分先行的比例与积分部分并没有什么变化当然积分部分也可以采用各种优化算法。而微分部分以增量型公式实现即可首先定义PID对象的结构体 /*定义结构体和公用体*/ typedef struct {float setpoint;       //设定值float proportiongain;     //比例系数float integralgain;      //积分系数float derivativegain;    //微分系数float lasterror;     //前一拍偏差float preerror;     //前两拍偏差float deadband;     //死区float result;      //输出值float deltadiff;              /*微分增量*/float integralValue;          /*积分累计量*/float gama;                   /*微分先行滤波系数*/float lastPv;                 /*上一拍的过程测量值*/float lastDeltaPv;            /*上一拍的过程测量值增量*/ }PID; 接下来实现PID控制器 void PIDRegulation(PID *vPID, float processValue) {float thisError;float increment;float pError,iError;float c1,c2,c3,temp;float deltaPv;tempvPID- gama * vPID- derivativegain vPID- proportiongain;c3vPID- derivativegain/temp;c2(vPID- derivativegain vPID- proportiongain)/temp;c1vPID- gama*c3;deltaPvprocessValue- vPID- lastDeltaPvvPID- deltadiff c1* vPID- deltadiff c2*deltaPv c3* vPID- lastDeltaPv;thisErrorvPID-setpoint-processValue; //得到偏差值pErrorthisError-vPID-lasterror;iErrorthisError;incrementvPID-proportiongain*pErrorvPID-integralgain*iErrorvPID- deltadiff;   //增量计算vPID-preerrorvPID-lasterror; //存放偏差用于下次运算vPID-lastDeltaPvdeltaPv;vPID-lastPv processValue;vPID-lasterrorthisError;vPID-resultincrement; } 这就实现了一个最简单的微分先行的增量型PID控制器与一般的PID控制器相比还需要知道前一拍的测量值、前一拍的测量值增值以及前一拍的微分增量其余的只需要按公式完成即可。 3、总结 微分先行由于微分部分只对测量值起作用所以可以消除设定值突变的影响还可以引入低通滤波甚至在必要时将比例作用也可进行相应的改进。其实用于设定值会频繁改变的过程对象防止设定值的频繁波动造成系统的不稳定。该控制对于改善系统的动态特性是有好处的但势必影响响应的速度需全面考虑。 欢迎关注
http://www.zqtcl.cn/news/632108/

相关文章:

  • 天津公司网站怎样制作网页设计图片尺寸
  • 网站建设中模板代码网络营销推广公司哪家好
  • 百度免费建立网站搜索引擎推广效果
  • 网站建设分金手指排名十二建设内容管理网站的目的
  • 无锡网站策划制作网站的工具
  • 免费的网站开发软件百度做网站推广的费用
  • 汽车维修东莞网站建设怎么用阿里的域名 做网站
  • 网站怎么做免费cosy WordPress
  • wordpress 关闭自动更新青岛济南网站建设优化
  • 外贸网站推广平台哪个好如何建设手机端网站
  • linux新建网站巩义网站建设定制
  • 网站建设要什么软件有哪些北京seo
  • 空调设备公司网站建设wordpress 4.9
  • 潮州市网站建设公司网页设计代码模板素材
  • 深圳做网站开发费用个人网页设计作品手绘
  • 怎样做网站跳转国内企业建站模板
  • 优化网站哪个好互联网公司市值
  • 广州微信网站开发游戏企业用什么程序做网站
  • 深圳赶集同城网站建设网站空间类型
  • 怎么样做网站代wordpress手机上传图片插件
  • 西安做网站xamokjwordpress 酒业模板
  • 做微博网站如何开网店卖自己的东西
  • 黄骅市有什么好玩的地方常州百度seo排名
  • 做英语在线翻译兼职网站公交建设公司的官网
  • 做网站需要什么电脑律师事务所在线咨询免费
  • 网站建设推广公司需要哪些岗位建站模板源码
  • 网站深圳优化建设购物网站模版
  • 网站后端用什么软件做广西城乡建设部网站首页
  • wordpress android客户端湛江网站关键词优化
  • 建材企业网站推广方案申请域名建立网站