- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PID控制系统---P I D参数的作用 控制系统专用
数字PID控制器的设计Kpee(t)=r(t)-y(t) ++ +ure+ -y d1.模拟PID控制器 在工业控制中,常常采用如下图的PID控制: 其控制规律: 对应的模拟PID调节器的传递函数: 比例控制的作用作用:对当前时刻的偏差信号e(t)进行放大或衰减,控制作用的强弱取决于比例系数;特点:它能迅速反应误差,从而减小误差,加快响应速度。缺点:不能消除静态误差,过大甚至造成系统不稳定。积分控制的作用作用:通过对误差累积的作用影响控制量,并通过系统的负反馈作用减小偏差;特点:与e(t)存在全部时段有关,只要有足够的时间,积分控制将能够消除稳态误差。缺点:不能及时地克服扰动的影响。微分控制的作用作用:反应e(t) 变化的速度,在偏差刚刚出现时产生很大的控制作用,具有超前控制作用;作用:有助于减小 超调和调整时间,改善系统的动态品质;缺点:不能消除系统的稳态误差。数字PID控制算法数字PID控制—位置型位置型的缺点:(1)积分项计算量大,存储量大。(2)u(k)在某一时刻故障,u(k)变大变小,误动作影响大。数字PID控制——增量型增量型与位置型的比较(1)增量型算法不需要累加,控制量增量的确定仅与最近几次误差采样值有关,计算误差或计算精度问题,对控制量的计算影响较小。而位置型算法要用到过去的误差的累加值,容易产生大的累加误差。(2)增量型算法得出的是控制量的增量,误动作影响小,不会影响严重系统的工作。而位置型算法的输出是控制量的全量输出,误动作影响大。PID参数整定试凑法(先比例,后积分,再微分)扩充临界比例度法扩充响应曲线法增量式流程图用计算机实现PID控制#includereg51.h#define uchar unsigned char#define uint unsigned int #define KP 100#define TI 2#define TD 1#define T 1 sbit start=P3^0; sbit OE=P3^1; sbit EOC=P3^2; float y_cur; //y(k) float y_pre; //y(k-1) float e_cur; //e(k) float e_pre; //e(k-1) float e_last; //e(k-2) float u_cur; //u(k) float u_pre; //u(k-1) float u_aug; //△u(k) uchar AD; uint INPUT=3; uint r; void pid_init() { r=INPUT; y_cur=0; y_pre=0; u_pre=0; e_pre=0; e_last=0; } float pid_process() { float q0, q1, q2; e_cur=r-y_cur; //e(k)=r-y(k) q0=(float)( KP*(1+T/TI+TD/T)); q1=-KP-2*KP*TD/T; q2=KP*TD/T; u_aug=q0*e_cur+q1*e_pre+q2*e_last; //△u(k)=q0*e(k)+q1*e(k-1)+q2*e(k-2) u_cur=u_aug+u_pre; //u(k)=△u(k)+u(k-1) u_pre=u_cur; //u(k-1)=u(k) e_last=e_pre; //e(k-2)=e(k-1) e_pre=e_cur; //e(k-1)=e(k) return u_cur; //返回u(k) }void dac1() { uint out; out=(int)(pid_process()); P0=out; }void delayms(){ int i,j; for(i=0;i1000;i++) { for(j=0;j10;j++); { ; } }}void ad_0808( ){ start=1; start=0; while(EOC==0); AD=P2; OE=0;}void adc() { ad_0808(); y_cur=AD; //A/D结果赋给y(k) }void main(){ pid_init(); while(1) { delayms(); dac1(); adc(); }}
文档评论(0)