高级会员
主题
帖子
积分1705
阅读权限30
注册时间2010-2-13
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2011-11-8 20:36
|
显示全部楼层
回复 11# 没事瞎转悠
中值滤波法和PID控制温度
/************PID计算***************************************************/
float pid_process()
{
float q0, q1, q2;
q0=(float)( KP*(1+T/TI+TD/T));
q1=-KP-2*KP*TD/T;
q2=KP*TD/T;
e_cur=r-tvalue;
u_pre=q0*e_cur+q1*e_pre+q2*e_last;
if(r>tvalue)
u_out=u_last+u_pre;
else
u_out=0;
u_last=u_out;
e_last=e_pre;
e_pre=e_cur;
return (u_out);
}
void dac1()
{
uint idata out;
out=(int)(pid_process());
Lcd_Bus=out;
}
/*****************************************************************************
函数功能:滤波函数 中位值滤波法
入口参数:
功能参数:
*****************************************************************************/
uint filter(uchar channel) {
uint value_buf[10],temp_f;
uchar count,i,j;
for ( count=0;count<10;count++){
value_buf[count] =get_AD_result(channel);
// value_buf[count]=value_buf[count]>>2;
DELAY_MS(3);
}
for (j=0;j<9;j++)
{for (i=0;i<10-j;i++)
{if ( value_buf>value_buf[i+1] )
{temp_f = value_buf;
value_buf = value_buf[i+1];
value_buf[i+1] = temp_f;
}}}
return value_buf[5];
} |
|