This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

2812的PI程序



您好:

       我的PI程序是放在EVA的下溢中断里,可是误差的实时值与上一时刻的误差值相等,从而导致我的P没有作用,请问是什么问题。下面是我的程序代码。谢谢。

//PID算法//

ek=Uref-Uf;
Up=Kp*(ek-ek1);
Ui=Ki*ek;
Uk=Uk1+Ui+Up;
if(Uk1>=2500)Uk=2500;
else if(Uk1<1700)Uk=1700;
ek1=ek;
Uk1=Uk;
delta_Uk=Uk;

  • 你好。

    增量式的PI算法中,Up=0,并不代表P没有作用啊。最后的输出是要加上前一次的Up的,当前的Up=0只是代表P作用的输出不变而已,P还是在起作用的。

  • 你好,那也就是说我这个是没有问题的.....然后有一句题外话:你们是不是都是TI的工程师.....

  • 你好。在这里回答问题应该都是我们公司的工程师。

    欢迎来社区提问。

  • 恩....谢谢。最近用CCS调程序的时候发现两个个问题:

    1.在watch window 中观察一个变量的数值,refresh一次程序似乎就会重新运行,请问这个refresh是如何影响程序的运行的;

    2.CCS3.3我有时会打不开,右下角的标志会变灰,然后电脑重启又可以打开了,然后就是打开的速度没有以前快了,这个会是哪里的问题。

    谢谢!

  • 您好,我的增量式PI程序,这个程序不知道能否实现自动调节,您能跟我说说电压闭环的增量式PI的工作原理吗?!Thanks.

    下面是我的程序,期待您的回复,谢谢我的1083176055@qq.com

    unsigned   int   pwm, PWM_max=375,PWM_min=32;
    float     Vin,Vout,Vd=0,Vref=48,errv=0,errv_1=0;
    //////    PID运算    ///////
    void pid_ctrl(void)
    {   Vout=u1;//将采样值付给Vout,
     errv=Vref-Vout;//电压误差计算
        errv_1=errv;  //将本次的值赋给下次用
    //    Vd+=(int)(0.007135*(errv-errv_1)+0.91475*errv);
     Vd+=0.007135*(errv-errv_1)+0.91475*errv;//【Vd=Vd+0.921885*errv-0.007135errv_1】
     if(Vd>=0.8)
      pwm=PWM_max;
     else
      if(Vd<=0)
         pwm=PWM_min;
      else
      pwm = (unsigned int)(Vd*469.0);   
     
       EPwm1Regs.CMPA.half.CMPA =pwm;
       EPwm2Regs.CMPA.half.CMPA =pwm;
       EPwm3Regs.CMPA.half.CMPA =pwm;