您当前的位置:五五电子网电子知识单片机-工控设备51单片机51单片机PID的算法实现程序 正文
51单片机PID的算法实现程序

51单片机PID的算法实现程序

点击数:7224 次   录入时间:03-04 11:48:07   整理:http://www.55dianzi.com   51单片机
      {
  Temp[2]=(PID.Ek_Uint32[0]+ PID.Ek_Uint32[2])-Temp[2];     //E(k-2)+E(k)>2E(k-1)
        PID.EkFlag_Uint8[2]=0;  }                                          //E(k-2)+E(k)-2E(k-1)为正数
   else
{
  Temp[2]=Temp[2]-(PID.Ek_Uint32[0]+ PID.Ek_Uint32[2]);  //E(k-2)+E(k)<2E(k-1)
        PID.EkFlag_Uint8[2]=1;  }                                       //E(k-2)+E(k)-2E(k-1)为负数
/****************************************/       
      Temp[0] = (uint32)PID.KP_Uint8 * Temp[0];                        // KP*[E(k)-E(k-1)]
      Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[0];              // KI*E(k)
      Temp[2] = (uint32)PID.KD_Uint8 * Temp[2];                      // KD*[E(k-2)+E(k)-2E(k-1)]

/*以下部分代码是讲所有的正数项叠加,负数项叠加*/     
/**********KP*[E(k)-E(k-1)]**********/
if(PID.EkFlag_Uint8[0]==0)
  PostSum += Temp[0];                                    //正数和
else                                              
  NegSum += Temp[0];                                    //负数和
/********* KI*E(k)****************/ 
if(PID.EkFlag_Uint8[1]==0)      
  PostSum += Temp[1];                                 //正数和
else
   ;                                                 //空操作,E(K)>0
/****KD*[E(k-2)+E(k)-2E(k-1)]****/                           
if(PID.EkFlag_Uint8[2]==0)
PostSum += Temp[2];                               //正数和
else
  NegSum += Temp[2];                             //负数和
/***************U(K)***************/                             
PostSum += (uint32)PID.Uk_Uint16;    
        
if(PostSum > NegSum )                         // 是否控制量为正数
{ Temp[0] = PostSum - NegSum;
if( Temp[0] < 100 )                         //小于上限幅值则为计算值输出
PID.Uk_Uint16 = (uint16)Temp[0];
else
  PID.Uk_Uint16 = 100;                     //否则为上限幅值输出
}
else                                     //控制量输出为负数,则输出0(下限幅值输出)
   PID.Uk_Uint16 = 0;
}
}
else 
{ PID.Uk_Uint16 = 0;  } 

}

/*********************************
函数入口: U(K)
函数出口: out(加热输出)
//PID运算植输出函数
********************************/
void     PIDOutput (void)  

statIC  int i;
i=PID.Uk_Uint16;
if(i==0)
  out=1;
else out=0;
if((count++)==5)//如定时中断为40MS,40MS*5=0.2S(输出时间单位),加热周期20S(100等份)
{              //每20S PID运算一次
  count=0;
  i--;
}
}



上一页  [1] [2] 


本文关键字:单片机  程序  51单片机单片机-工控设备 - 51单片机