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

PID--积分项I

含有比例项和积分项的PID输出值:

                                        Out_{t} = K_{P} *Error_{t} + K_{I} * \int_{0}^{t}Error_{t}d_{t}

积分项的输出值K_{I} * \int_{0}^{t}Error_{t}d_{t}取决于0~t所有时刻误差的积分与历史时刻有关。积分项将历史所有时刻的误差累积,乘上积分项系数K_{I}后作为积分项输出值, 积分项用于弥补纯比例项产生的稳态误差,若系统持续产生误差,则积分项会不断累积误差,直到控制器产生动作,让稳态误差消失.

K_{I}越大,积分项权重越大,稳态误差消失越快,但系统滞后性也会随之增加

我们的软件层不能一直只监控误差的积分,即使是加了FreeRTOS等实时操作系统也做不到硬件那种连续性,所有我们的积分是离散化的,每个周期T采样一次进行积分。如果我们抛出比例项,只保留积分项K_{I} * \int_{0}^{t}Error_{t}d_{t},那从零时刻起,Out会逐渐逼近Target,而且在这个过程中,Error是不断减少的,所以越靠近Target增长越慢,这就是滞后性,积分项能确保Actual达到Target(前提是Target值合理,Out取最大值前Actual能达到Target),积分项存在,则只要存在误差,Out就会不断改变,无论初态是高是低,经积分项作用最终都会达到Target

消除稳态误差:

通过积分项的作用,稳态误差被消除,但是也埋下了一个问题,即Out值与历史有关了,积分值是一个较大的值,对于电机驱动来说如果Target设置为150,紫色是误差值 ,橙色是积分值,红色目标值Target,绿色是Out值。                                                                     此时的K_P = K_I = 0.2                                                  积分项的积分值在很短的时间内就积累起来了,而比例项的误差值涨幅不高并且之后降为了0,所以PI控制的情况下最终实际上Out只取决于积分项I了。              我们设置的K_I在这种电机控制下占比还是比较的大,没有太高普遍参考意义                                                  如果这里K_I是0.05或更小值是,积分值会非常高,这会降低响应速度,增大之后性(这里的响应不同于比例项P的响应,比例项到达稳态误差后,积分项还没从之前的历史影响走出来,作用的较慢)

积分限幅

要解决的问题:如果执行器因为卡住、断电、损坏等原因不能消除误差,则误差积分会无限制加大,进而达到深度饱和状态,此时PID控制器会持续输出最大的调控力,即使后续执行器恢复正常,PID控制器在短时间内也会维持最大的调控力,直到误差积分从深度饱和状态退出 积分限幅

实现思路:对误差积分或积分项输出进行判断,如果幅值超过指定阈值,则进行限制

ErrorInt += Error0;
if(ErrorInt > Limit){ErrorInt = Limit;}
else if(ErrorInt < -Limit){ErrorInt = -Limit;}
Out = K_P * Error0 + K_I * ErrorInt;

Int是积分integral的缩写

Limit一般设置为Out的最大值,令Limit = K_I * ErrorInt。

也可以直接对积分项I进行限幅

I += K_I * Error0;
if(I > Limit){I = Limit;}
else if(I < -Limit){I = -Limit;}
Out = K_P * Error0 + I + K_D * (Error0 - Error1);

积分分离

对于一些精准调控,如转盘位置,积分项导致的滞后性会导致当Actual达到Target时Out不能及时的归零,需要积分抵消才能停止。

要解决的问题:积分项作用一般位于调控后期,用来消除持续的误差,调控前期一般误差较大且不需要积分项作用,如果此时仍然进行积分,则调控进行到后期时,积分项可能已经累积了过大的调控力,这会导致超调

积分分离实现思路:对误差大小进行判断,如果误差绝对值小于指定阈值,则加入积分项作用,反之,则直接将误差积分清零或不加入积分项作用

//求绝对值
if(Error0 < 0){ErrorValve = -Error0;}
else{ErrorValve = Error0;}
//阈值比较
if(K_I != 0 &&  ErrorValve <= Value){ErrorInt += Error0;}
else{ErrorInt = 0;}Out = K_P * Error0 + K_I * ErrorInt;

阈值Value根据稳态误差确定,使K_I = 0,观察稳态误差,并且以此为基础适当扩大阈值,给积分项一定预热时间。

积分激活法:

ErrorInt += Error0;
uint8_t i = 0;if(Error0 < 0){ErrorValve = -Error0;}
else{ErrorValve = Error0;}
if(K_I != 0 &&  ErrorValve <= Value){i = 1;}
else{i = 0;}Out = K_P * Error0 + i * K_I * ErrorInt;

变速积分

要解决的问题:积分项作用一般位于调控后期,用来消除持续的误差,调控前期一般误差较大且不需要积分项作用,如果此时仍然进行积分,则调控进行到后期时,积分项可能已经累积了过大的调控力,这会导致超调。

变速积分一般是对积分分离的优化。

积分分离实现思路:对误差大小进行判断,如果误差绝对值小于指定阈值,则加入积分项作用,反之,则直接将误差积分清零或不加入积分项作用

if(Error0 < 0){ErrorValve = -Error0;}
else{ErrorValve = Error0;}		
if(K_I != 0 &&  ErrorValve <= Value){i = 1 /(k * ErrorValve + 1);}
else{i = 0;}
ErrorInt += i * Error0;
Out = K_P * Error0 + i * K_I * ErrorInt + K_D * (Error0 - Error1);

积分项在弥补比例项不足的同时也产生了新的问题,根据实际情况合理调参,进行优化,才能使算法达到一个比较理想的状态。

http://www.dtcms.com/a/450712.html

相关文章:

  • 万维网网站服务的名称做网站需要注册什么公司
  • 相亲网站拉人做基金公司网站建设精品
  • 怎样做网站静态wordpress评论qq头像
  • 【代码随想录day 35】 力扣 1049. 最后一块石头的重量 II
  • 网站排名优化软件电话wordpress网络图片不显示
  • 网站建设相关制度门业网站模板
  • 基于 GEE 利用 Sentinel-2 数据结合线性回归模型实现碳储量反演
  • 招聘网站有哪些平台做视频网站盈利模式
  • Zsh 的基本语法总结
  • 网站伪静态作用吉林省头条新闻
  • 铜仁市网站建设免费做自己的网站
  • 网站双倍浮动注册个网站要多少钱
  • 易商官方网站python和wordpress
  • 吉安市网站制作北京网站建站网
  • 【高级版】Fastflow工作流系统源码全开源
  • discuz网站搬家大型网站的设计
  • 每日一个网络知识点:物理层数字传输系统
  • 网络网站建设属于什么费用扬中网
  • 成品网站能用吗wordpress wumi
  • 【实战场景】——开发中常见问题
  • No023:好奇心的觉醒——当DeepSeek开始主动探索世界
  • 阀门网站设计wordpress搜索开发
  • 数组——双指针:80.删除有序数组中的重复项 II
  • 网站开发在线学习百度高级搜索页面的网址
  • 什么网站做3d模型能赚钱golang做网站
  • 推广运营公司网站wordpress 模板添加
  • C48-数组指针与二维数组的配合应用
  • 成都专业的网站建设制作公司哪家好欧亚专线到国内多久
  • 西安长安区建设局网站阿里云服务器官方网站
  • 响应式网站建设有哪些好处四川住房和城乡建设网站