完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
几乎没有一种控制算法比PID调节规律更有效、更方便的了。现在一些时髦点的调节器基本源自PID。甚至可以这样说:PID调节器是其它控制调节算法的MOM。
PID解决了自动控制理论所要解决的最基本问题,既系统的稳定性、快速性和准确性。调节PID的参数,可实现在系统稳定的前提下,兼顾系统的带载能力和抗扰能力,同时,在PID调节器中引入积分项,系统增加了一个零积点,使之成为一阶或一阶以上的系统,这样系统阶跃响应的稳态误差就为零。由于自动控制系统被控对象的千差万别,PID的参数也必须随之变化,以满足系统的性能要求。这就给使用者带来相当的麻烦,特别是对初学者。下面简单介绍一下调试PID参数的一般步骤: 1.负反馈 自动控制理论也被称为负反馈控制理论。首先检查系统接线,确定系统的反馈为负反馈。例如电机调速系统,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时,误差=输入-反馈),同时电机转速越高,反馈信号越大。其余系统同此方法。 2.PID调试一般原则 a.在输出不振荡时,增大比例增益P。 b.在输出不振荡时,减小积分时间常数ti。 c.在输出不振荡时,增大微分时间常数Td。 3.一般步骤 a.确定比例增益P 确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。 b.确定积分时间常数Ti 比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。 c.确定积分时间常数Td 积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。 d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。 PID调节经验总结 PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。依据经验,一般PID参数确定的步骤如下[42]: (1)确定比例系数Kp 确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为 纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。 (2)确定积分时间常数Ti 比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。 (3)确定微分时间常数Td 微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。 (4)系统空载、带载联调 对PID参数进行微调,直到满足性能要求。 PID代码 //定义变量 float Kp; //PI调节的比例常数 float Ti; //PI调节的积分常数 float T; //采样周期 float Ki; float ek; //偏差e[k] float ek1; //偏差e[k-1] float ek2; //偏差e[k-2] float uk; //u[k] signed int uk1; //对u[k]四舍五入取整 signed int adjust; //调节器输出调整量 //变量初始化 Kp=4; Ti=0。005; T=0.001; // Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数 ek=0; ek1=0; ek2=0; uk=0; uk1=0; adjust=0; int piadjust(float ek) //PI调节算法 { if( gabs(ek)<0.1 ) { adjust=0; } else { uk=Kp*(ek-ek1)+Ki*ek; //计算控制增量 ek1=ek; uk1=(signed int)uk; if(uk>0) { if(uk-uk1>=0.5) { uk1=uk1+1; } } if(uk<0) { if(uk1-uk>=0.5) { uk1=uk1-1; } } adjust=uk1; } return adjust; } 下面是在AD中断程序中调用的代码。 。。。。。。。。。。。 else //退出软启动后,PID调节,20ms调节一次 { EvaRegs.CMPR3=EvaRegs.CMPR3+piadjust(ek);//误差较小PID调节稳住 if(EvaRegs.CMPR3>=890) { EvaRegs.CMPR3=890; //限制PWM占空比 } } 后续将会有PID举列程序,请大家敬请期待! |
|
相关推荐
10个回答
|
|
挺不错的,我们一般舵机控制都是PD
|
|
|
|
想起了大学时的自动控制,就是PID,但实际算法好像PD居多 做的智能车舵机控制就是只用PD
|
|
|
|
赞赞赞
|
|
|
|
|
|
正在学习,感谢楼主分享,学习下,谢谢。
|
|
|
|
感谢分享。拿来学习一下
|
|
|
|
PID基础知识,可用
|
|
|
|
好东西,先看为敬。。。
|
|
|
|
谢谢,正需要很好,
|
|
|
|
正在学习,感谢楼主分享,学习下,谢谢。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-16 20:25 , Processed in 0.858667 second(s), Total 63, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号