搜索
bottom↓
回复: 29

用MEGA16 AD 测量-20~400°C温度,温度波动大(内有原理图和程序)没找到原因??传感器PT100

[复制链接]

出0入0汤圆

发表于 2007-12-21 11:32:48 | 显示全部楼层 |阅读模式
我用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;
       }

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-12-21 12:16:56 | 显示全部楼层
仔细看看图吧!好像画错啦吧!

出0入0汤圆

发表于 2007-12-21 12:23:03 | 显示全部楼层
图画错啦


出0入0汤圆

发表于 2007-12-21 12:23:21 | 显示全部楼层
好复杂啊,我也在做PT100测温(0-70°),误差也很大,郁闷  哪位高手 指导一下啊   给个图让我们参考参考,  这里的R67 这么画 放大倍数怎么算?

出0入0汤圆

发表于 2007-12-21 12:50:20 | 显示全部楼层
最好不要用内部2.56V参考电压,那个变化大,不准看手册,误差大

出0入0汤圆

发表于 2007-12-21 12:54:15 | 显示全部楼层
基准不准,还有,电路画得不对,我做的,只有1度不稳

出0入0汤圆

发表于 2007-12-21 12:56:33 | 显示全部楼层
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[j]=ret;
}
ret=0;
        for(j=0;j<16;j++)
        ret+=g_aAdValue[j];
        //找到最大和最小值索引
        ret/=16;
        max_id=min_id=1;
        max_value=min_value=0;
        for(j=0;j<16;j++)
        {
                if(g_aAdValue[j]>ret)
                {
                        if(g_aAdValue[j]-ret>max_value)
                        {
                                max_value=g_aAdValue[j]-ret;
                                max_id=j;
                        }
                }
                else
                {
                        if(ret-g_aAdValue[j]>min_value)
                        {
                                min_value=ret-g_aAdValue[j];
                                        min_id=j;
                        }
                }
        }
//去掉第一个和最大最小值后的平均值
        ret=0;
        for(j=0;j<16;j++)
        {
                if((j!=min_id)&&(j!=max_id))
                        ret+=g_aAdValue[j];
        }
             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[i+1]))   //实际温度在两个AD值之间
                                                 {
                                                         Temp1=g_aAdValue[j]-Temperature_Table_b;     
                                                         Temp2=Temperature_Table_b[i+1]-g_aAdValue[j];
                                                         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;
}

出0入0汤圆

发表于 2007-12-21 13:07:16 | 显示全部楼层
看看我做的直发器,误差就在2 /3度

出0入0汤圆

 楼主| 发表于 2007-12-21 13:50:11 | 显示全部楼层
是我粗心,电路错了,我已修改了,再试试先/

出0入0汤圆

发表于 2007-12-21 17:55:55 | 显示全部楼层
7楼的,能弄个原理图吗?

出0入0汤圆

发表于 2007-12-25 16:17:20 | 显示全部楼层
我做的PT100多路温度检测精度能够做到0.5左右,方案是:做一个恒流源通过PT100,把PT100这点的电压经过运放放大,送入AD采集,每次采集12个点,进行数字滤波处理。其温度的计算采用了简单的方法:采集的电压的值求出对应的电阻减去100欧姆,然后除以0.39就可以得到温度的值了。

出0入0汤圆

发表于 2007-12-26 16:57:59 | 显示全部楼层
我们也有做,很稳的呀。

出0入0汤圆

发表于 2007-12-27 13:27:22 | 显示全部楼层
只要电路没问题, 关键就是要加数字滤波.

出0入0汤圆

发表于 2010-3-31 10:35:47 | 显示全部楼层
回复【10楼】haizhilan 小马哥
我做的PT100多路温度检测精度能够做到0.5左右,方案是:做一个恒流源通过PT100,把PT100这点的电压经过运放放大,送入AD采集,每次采集12个点,进行数字滤波处理。其温度的计算采用了简单的方法:采集的电压的值求出对应的电阻减去100欧姆,然后除以0.39就可以得到温度的值了。
-----------------------------------------------------------------------

小马哥你好,我现在也是做PT100多路温度检测,我是用PIC做主控芯片的,可以把你做的那个PT100多路温度检测系统发给我参考一下么?我的邮箱是cs1qq@163.com,谢谢哦

出0入0汤圆

发表于 2010-4-1 12:41:50 | 显示全部楼层
回复【13楼】cs1qq
-----------------------------------------------------------------------

记下

出0入0汤圆

发表于 2010-4-11 14:48:08 | 显示全部楼层
czhongli,
  请把电路图给我发一份吧,谢谢!我的邮箱:encrytotion@163.com

出0入0汤圆

发表于 2010-4-11 16:18:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-12 19:48:43 | 显示全部楼层
回复【10楼】haizhilan 小马哥
-----------------------------------------------------------------------

小马哥,多路温度检测系统电路能给我一份吗,谢谢,我邮箱:cangqiongwl2009@163.com

出0入0汤圆

发表于 2010-6-21 12:05:35 | 显示全部楼层
关注

出0入0汤圆

发表于 2010-7-30 13:56:53 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-7-30 14:01:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-30 19:55:09 | 显示全部楼层
mark

出0入18汤圆

发表于 2011-1-6 09:54:02 | 显示全部楼层
呵呵呵呵

出0入0汤圆

发表于 2011-1-6 10:29:48 | 显示全部楼层
回复【楼主位】MCUAVR
-----------------------------------------------------------------------

用过采样,把AD分辨率扩展到16位,把PT00的基准弄个好点的,我用的是430内部的12位AD,做出来很稳啊

出0入0汤圆

发表于 2011-1-6 11:02:42 | 显示全部楼层
标记学习

出0入4汤圆

发表于 2011-4-12 21:59:01 | 显示全部楼层
标志,正在整PT100测温

出0入0汤圆

发表于 2011-4-17 21:42:30 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-4-22 01:32:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-11-22 10:04:22 | 显示全部楼层
学习。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-17 14:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表