用MEGA16 AD 测量-20~400°C温度,温度波动大(内有原理图和程序)没找到原因??传感器PT100
我用MEGA16 AD 测量-20~400°C 温度波动较大,有时有6~7°C。我第一次做PT100,搞几天了,没找到原因。那位前辈有这方便的经验,请指点,谢谢了!参考电压内部2.56V.原理图如下,调试时将-20°C 的阻值输入,输出为0V,输入,将400°C 的阻值输入,输出2.56V.
http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_191652.JPG
/********************************************************************
函 原 型: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;
} 仔细看看图吧!好像画错啦吧! 图画错啦
http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_191553.JPG 好复杂啊,我也在做PT100测温(0-70°),误差也很大,郁闷哪位高手 指导一下啊 给个图让我们参考参考,这里的R67 这么画 放大倍数怎么算? 最好不要用内部2.56V参考电压,那个变化大,不准看手册,误差大 基准不准,还有,电路画得不对,我做的,只有1度不稳 uint AdcConvert(void)
{
uchar j;
uint Temp_v;
uint ret;
uint Temp;
uint Temp1;
uint Temp2;
uint i;
//Temp=AD_Temp;
uchar max_id,min_id,max_value,min_value;
for(j=0;j<16;j++)
{ ADMUX=(0x01|ad_channel_1);
ADCSRA=0xD6;
ADCSRA|=_BV(ADSC);
loop_until_bit_is_set(ADCSRA,ADIF);
ADCSRA|=_BV(ADIF);
ret=ADCL;
ret|=(uint)(ADCH<<8);
g_aAdValue=ret;
}
ret=0;
for(j=0;j<16;j++)
ret+=g_aAdValue;
//找到最大和最小值索引
ret/=16;
max_id=min_id=1;
max_value=min_value=0;
for(j=0;j<16;j++)
{
if(g_aAdValue>ret)
{
if(g_aAdValue-ret>max_value)
{
max_value=g_aAdValue-ret;
max_id=j;
}
}
else
{
if(ret-g_aAdValue>min_value)
{
min_value=ret-g_aAdValue;
min_id=j;
}
}
}
//去掉第一个和最大最小值后的平均值
ret=0;
for(j=0;j<16;j++)
{
if((j!=min_id)&&(j!=max_id))
ret+=g_aAdValue;
}
if(min_id!=max_id)
ret/=14;
else
{ret/=15;}
//ADCSRA=0;//关闭ADC
if(((ret<=AD_TempZero)&&ret>=16)) // 大于等于零度,正温度AD_TempZero=988
{// Clr_Sensor_Warn;
for(i=0;i<=TempMax;i++) //总有350个温度点TempMax=350,根据实际情况而定
{
if((ret>=Temperature_Table_b)&&(ret<=Temperature_Table_b)) //实际温度在两个AD值之间
{
Temp1=g_aAdValue-Temperature_Table_b;
Temp2=Temperature_Table_b-g_aAdValue;
if(Temp1<=Temp2) //判断AD值离上限或者下限那个值更近则实际温度为偏差小的那个值
{Temp_v=i;}
else
{Temp_v=i+1;}
//if((Temp_v>350)||(Temp_v<0))
//Temp_v=1000;
}
}
}
//else
// {
// Set_Sensor_Warn;
// }
return Temp_v;
//return ret;
} 看看我做的直发器,误差就在2 /3度
http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_191592.jpg
http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_191593.jpg 是我粗心,电路错了,我已修改了,再试试先/ 7楼的,能弄个原理图吗? 我做的PT100多路温度检测精度能够做到0.5左右,方案是:做一个恒流源通过PT100,把PT100这点的电压经过运放放大,送入AD采集,每次采集12个点,进行数字滤波处理。其温度的计算采用了简单的方法:采集的电压的值求出对应的电阻减去100欧姆,然后除以0.39就可以得到温度的值了。 我们也有做,很稳的呀。 只要电路没问题, 关键就是要加数字滤波. 回复【10楼】haizhilan 小马哥
我做的PT100多路温度检测精度能够做到0.5左右,方案是:做一个恒流源通过PT100,把PT100这点的电压经过运放放大,送入AD采集,每次采集12个点,进行数字滤波处理。其温度的计算采用了简单的方法:采集的电压的值求出对应的电阻减去100欧姆,然后除以0.39就可以得到温度的值了。
-----------------------------------------------------------------------
小马哥你好,我现在也是做PT100多路温度检测,我是用PIC做主控芯片的,可以把你做的那个PT100多路温度检测系统发给我参考一下么?我的邮箱是cs1qq@163.com,谢谢哦 回复【13楼】cs1qq
-----------------------------------------------------------------------
记下 czhongli,
请把电路图给我发一份吧,谢谢!我的邮箱:encrytotion@163.com mark 回复【10楼】haizhilan 小马哥
-----------------------------------------------------------------------
小马哥,多路温度检测系统电路能给我一份吗,谢谢,我邮箱:cangqiongwl2009@163.com 关注 记号 mark mark 呵呵呵呵 回复【楼主位】MCUAVR
-----------------------------------------------------------------------
用过采样,把AD分辨率扩展到16位,把PT00的基准弄个好点的,我用的是430内部的12位AD,做出来很稳啊 标记学习 标志,正在整PT100测温 学习 mark 学习。。。
页:
[1]