我用MEGA16 AD 测量-20~400°C 温度波动较大,有时有6~7°C。我第一次做PT100,搞几天了,没找到原因。那位前辈有这方便的经验,请指点,谢谢了!
参考电压内部2.56V.原理图如下,调试时将-20°C 的阻值输入,输出为0V,输入,将400°C 的阻值输入,输出2.56V.
/********************************************************************
函 原 型:unsigned int filter(unsigned int *p)
功 能:温度AD滤波
说 明:采样10次,去掉最大值和最小值求平均数
涉及变量:P为缓存数组
入口参数:无
出口参数:无
设 计: 日 期:2006-08-10
修 改: 日 期:
***********************************************************************/
unsigned int filter(unsigned int *p)
{
unsigned int temp;
signed char i;
// p=AD_data;
for(i=1;i<10;i++)
{
if(*(p+i-1)>*(p+i))
{
temp=*(p+i-1);
*(p+i-1)=*(p+i);
*(p+i)=temp;
}
}
for(i=9;i>0;i--)
{
if(*(p+i-1)>*(p+i))
{
temp=*(p+i-1);
*(p+i-1)=*(p+i);
*(p+i)=temp;
}
}
return ((*(p+1)+*(p+2)+*(p+3)+*(p+4)+*(p+5)+*(p+6)+*(p+7)+*(p+8))/8);
}
/******************************************************************************
功能:温度测量转换
说明:温度段分8段,输入一个AD值,然后计算出温度.步进放大10倍处理
*******************************************************************************/
signed int PT100_Change(unsigned int AD)
{
signed int tp_temp=0;
if(AD<52) //基度-20 --0 步进2.6
{
tp_temp=(20-(AD*10/26))*-1;
}
if((AD>=52)&&(AD<180)) //基度0 --50 步进2.6
{
tp_temp=(AD-52)*10/26;
}
if((AD>=180)&&(AD<306)) //基度50 --100 步进2.5
{
tp_temp=(AD-144)*10/25+50;
}
if((AD>=306)&&(AD<431)) //基度100 --150 步进2.5
{
tp_temp=(AD-306)*10/25+100;
}
if((AD>=431)&&(AD<553)) //基度150 --200 步2.4
{
tp_temp=(AD-431)*10/24+150;
}
if((AD>=553)&&(AD<674)) //基度200 --250 步进2.4
{
tp_temp=(AD-553)*10/24+200;
}
if((AD>=674)&&(AD<792)) //基度250 --300 步进2.4
{
tp_temp=(AD-674)*10/24+250;
}
if((AD>=792)&&(AD<909)) //基度300 --350 步进2.3
{
tp_temp=(AD-792)*10/23+300;
}
if((AD>=909)&&(AD<1024)) //基度350 ---400 步进2.3
{
tp_temp=(AD-909)*10/23+350;
}