登录 |  注册

当前位置: 主页 >> 毕设技巧 >> 专业知识 >>

单片机如何使用PID的算法进行控制(3)

时间:2017-04-01 来源: 作者:5UBS-3 点击:
 
/*以下部分代码是讲所有的正数项叠加,负数项叠加*/     
/**********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等份)【转载请注明出处:https://www.5ubs.com/skill/zhuanyezhishi/450.html
顶一下
(5)
71.4%
踩一下
(2)
28.6%
------分隔线----------------------------
评论内容 查看评论>>
发表评论
遵守互联网法律法规,严禁发布违法的言论。
评价:
用户名: 验证码: 点击我更换图片
栏目列表
毕设方法