pyy1980 发表于 2010-11-18 13:22:08

在线等大家讨论一个PI问题

void PI()                /* PI调节算法 */
{
float V_REF=3.3;         
      Kp=100;          /* PI调节的比例常数 */
      Ti=0.005;      /* PI调节的积分常数 */
      T=0.001;         /* 周期,Ki=KpT/Ti=40*0.001/0.005=8 */                     
      Ki=8;
      ek=0;            /* 偏差e */
      ek1=0;         /* 偏差e */
      uk=0;            /* u */
      uk1=0;         /* 对u四舍五入取整 */
      adjust=0;      /* 调节器输出调整量 */
      XPWM=0;          /* 占空比调节 */

{
ek=V_REF-adc1.Ch1Out;
if( ek<0.1 )
         /* 偏差小于0.1则调整值为0 */
{
    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;
    XPWM=XPWM+adjust;
}
//return;
}
//asm(" NOP ");         /* 请将光标移到此处设置断点,并用debug->Animate监测数据 */
}



        while(1)
        {

        PI();
        }


我主程序中只做PI 运算,,那这些
ek=0;            /* 偏差e */
   ek1=0;         /* 偏差e */
   adjust=0;      /* 调节器输出调整量 */
   XPWM=0;          /* 占空比调节 */

那这几个变量的的初始化是
1.在PI子函数中,,每次PI运算都要初始化
2.放在整个大程序的最前面,,,只初始化一次,,哪个

format 发表于 2010-11-18 13:33:30

应该设置成全局变量

或者局部静态变量
页: [1]
查看完整版本: 在线等大家讨论一个PI问题