|
<>PID控制器参数选择的方法很多,例如试凑法、临界比例度法、扩充临界比例度法等。但是,对于PID控制而言,参数的选择始终是一件非常烦杂的工作,需要经过不断的调整才能得到较为满意的控制效果。依据经验,一般PID参数确定的步骤如下[42]:<BR>(1) 确定比例系数Kp<BR>确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为<BR>纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。<BR>(2) 确定积分时间常数Ti<BR>比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。<BR>(3) 确定微分时间常数Td<BR>微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。<BR>(4) 系统空载、带载联调<BR>对PID参数进行微调,直到满足性能要求。<BR>本文来自: DSP交流网(<A target=_blank href="http://www.hellodsp.com">www.hellodsp.com</A>) 详细出处参考:<A target=_blank href="http://www.hellodsp.com/bbs/viewthread.php?tid=688">http://www.hellodsp.com/bbs/viewthread.php?tid=688</A></P><P> </P><P> </P><P>PID代码</P><P>//定义变量<BR>float Kp; //PI调节的比例常数<BR>float Ti; //PI调节的积分常数<BR>float T; //采样周期<BR>float Ki;<BR>float ek; //偏差e[k]<BR>float ek1; //偏差e[k-1]<BR>float ek2; //偏差e[k-2]<BR>float uk; //u[k]<BR>signed int uk1; //对u[k]四舍五入取整<BR>signed int adjust; //调节器输出调整量</P><P>//变量初始化<BR> Kp=4;<BR> Ti=0。005;<BR> T=0.001;<BR>// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数<BR> ek=0;<BR> ek1=0;<BR> ek2=0;<BR> uk=0;<BR> uk1=0;<BR> adjust=0;</P><P>int piadjust(float ek) //PI调节算法<BR>{<BR> if( gabs(ek)<0.1 )<BR> {<BR> adjust=0;<BR> }<BR> else <BR> { <BR> uk=Kp*(ek-ek1)+Ki*ek; //计算控制增量<BR> ek1=ek; <BR> <BR> uk1=(signed int)uk;<BR> if(uk>0)<BR> {<BR> if(uk-uk1>=0.5)<BR> {<BR> uk1=uk1+1;<BR> }<BR> }<BR> if(uk<0)<BR> {<BR> if(uk1-uk>=0.5)<BR> {<BR> uk1=uk1-1;<BR> }<BR> }<BR> adjust=uk1; <BR> } <BR> <BR> <BR> return adjust;<BR>}</P><P>下面是在AD中断程序中调用的代码。<BR> <BR> 。。。。。。。。。。。<BR> else //退出软启动后,PID调节,20ms调节一次<BR> {<BR> EvaRegs.CMPR3=EvaRegs.CMPR3+piadjust(ek);//误差较小PID调节稳住<BR> if(EvaRegs.CMPR3>=890)<BR> {<BR> EvaRegs.CMPR3=890; //限制PWM占空比<BR> } <BR> }</P><P>本文来自: DSP交流网(<A target=_blank href="http://www.hellodsp.com">www.hellodsp.com</A>) 详细出处参考:<A target=_blank href="http://www.hellodsp.com/bbs/viewthread.php?tid=688">http://www.hellodsp.com/bbs/viewthread.php?tid=688</A></P> |
|