PID控制算法介绍与实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PID控制算法介绍与实现 一、PID的数学模型 在工业应用屮PID及一其衍生算法是应用最广泛的算法Z-,是当之无愧的力能算法,如果 能够熟练掌握P1D算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研 发问题了,而难能可贵的是,在很多控制算法当屮,P1D控制算法又是最简单,最能体现反馈 思想的控制算法,可谓经典中的经典。经典的耒必是复杂的,经典的东西常常是简单的,而且 是最简单的。PTD算法的一般形式: + + PID算法通过误差信号控制被控量川j控制器本身就是比例、积分、微分三个环节的加和。 这里我们规定(在t时刻): 1-输入量为农) 2?输出量为0(° 3.偏差量为=址)一 0亿) 呗)=kp(err(°+討err^d 呗)=kp(err(°+討 err^dt + TDd err (t) 二、PID算法的数字离散化 假设采样间隔为T,则在第K个T时刻: 偏差戶仇)一 o的 积分环节用加和的形式表示,H|Jerr(k)+ err(/c+1) +… 微分环节用斜率的形式表示,即[err(k)- £厂心_1)]/丁; PID算法离散化后的式子: T v Td u(k)= kp(errw +-.err(J) + — (err(k) 一 叭心))) 则仇)可表示成为: u(k)= kp(errM + kt err(7) + kd(errw 一 少住“))) 其中式中: 比例参数知:控制器的输出与输入偏差值成比例关系。系统一旦岀现偏差,比例调节立即产 生调节作用以减少偏差。特点:过程简单快速、比例作用大,可以加快调节,减小谋差;但是 使系统稳定性卜降,造成不稳定,有余弟。 积分参数他:积分环节主要是用來消除静差,所谓静差,就是系统稳定后输出值和设定值之间 的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原冇系统上以抵消系统造成 的静差。 微分参数%:微分信号则反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的 变化趋势來进行超前调节,从而增加了系统的快速性。 PID的基本离散表示形式如上。目前的这种表述形式属于位置型PID,另外一种表述方式 为增量式PID,由上述表达式可以轻易得到: u(D =扁+ 俭》err(y) + kd(err(k_1} 一 err(k_2))) 那么: △u(k)= kp(errw 一 err(k_1}) + fczerr(k) + kd(errw 一 2err(k_1)+err(k_2)) 上式就是离散化PID的增量式表示方式,由公式可以看出,增量式的表达结果和最近三次 的偏差冇关,这样就人人提高了系统的稳定性。需要注意的是最终的输出结果应该为: 输出量二u(k) +增量调节值 三、PID的C语言实现 1.位置式PID的C语言实现 上边已经抽象出了位置性P1D和增量型P1D的数学表达式,这里重点讲解C语言代码的实现过 程。 第一步:定义PTD变量结构体,代码如下: struet t_pid { float SetSpeed; 〃定义设定值 float ActualSpeed; //定义实际值 float err; //定义偏差值 float err_last; //定义上一个偏差值 floa t Kp,Ki,Kd; //定义比例、积分、微分系数 float vol Lage; //定义屯压值(控制执行器的变量) floa t integral; 〃定义积分值 }pid; 第二部:初始化变量,代码如下: void PlD_init () { pid.SetSpeed=O. 0; pid.ActualSpeed=0. 0; pid.err=0. 0; pid.err_last=0. 0; pid.voltage=0. 0; pid. integral=0. 0; pid. Kp=0. 2; pid. Ki=0. 015; pid. Kd=0. 2; } 统一初始化变量,尤其是Kp,Ki,Kd三个参数,调试过程当中,对于要求的控制效果,可以通 过调节这三个量直接进行调节。 第三步:编写控制算法,代码如下: float PID realize(float speed) { pid. SetSpeed=speed; pid. err=pid. SetSpeed-pid. Actual Speed; 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^l. 0; return pi d. Actual Spee

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档