找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1431|回复: 4
打印 上一主题 下一主题
收起左侧

STC12C5A60S2单片机读取温度会漂移,怎样读取稳定温度数值呢?请多多指教

[复制链接]
跳转到指定楼层
楼主
ID:416575 发表于 2022-4-23 22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void InitADC()
{
        P1ASF =0x01;  //0x01打开P1.0
        ADC_RES=0;
        ADC_RESL=0;
        ADC_CONTR =ADC_POWER|ADC_speed_LL;   // 1)ON Power; 2)speed 90 3)ADC in P1.0
        usdelay();              
}
uint GetADCResult(uchar ch)          //采集温度
{  uint value;
        ADC_CONTR=ADC_POWER|ADC_speed_LL|ch|ADC_START; //配置ADC,设置转换通道,启动转换
    _nop_();                        //等待设置ADC_POWER完毕
    _nop_();
    _nop_();                        
    _nop_();
    while(!(ADC_CONTR & ADC_FLAG));//读取转换完毕标志位ADC_FLAG
    ADC_CONTR &=~ADC_FLAG;         //清除ADC_FLAG标志位
     value =ADC_RES<<2|ADC_RESL; //读取10位转换结果保存到value
     return value;                  //返回ADC转换结果10位
}
void Get_Temp(void)         //读NTC查表
{
uint num=0;
uchar i;
        num=GetADCResult(0);
        num=num*4.8;    //变成mv 最大值1024 。1024*4.8=4915mv,如果增加精度可以使用浮点计算
        for(i=0;i<101;i++)         //判断采集电压值大于或者等于表格电压时,停下来并记录当前i值
           {
            if(num >= NTCcode[ i])
               {
                       TMP=i;  
                              break;    //检测到即跳出循环,否则继续循环
                }                  
             }
                        disp[4]=TMP/100;        //温度百位
                        disp[5]=TMP%100/10; //温度十位
                        disp[6]=TMP%10;            //温度个位
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2022-4-24 07:16 | 只看该作者
用简单的平均滤波,1ms采样1次,20次平均,消除环境工频干扰。
  1. void Get_Temp(void)         //读NTC查表
  2. {
  3.         static uint num=0;
  4.         static uchar count=0;
  5.         uchar i;
  6.         num+=GetADCResult(0);
  7.         count++;
  8.         if(count>=20)
  9.         {
  10.                  count=0;
  11.                 num=(num*48+5)/20;    //变成mv 最大值1024 。1024*4.8=4915mv,如果增加精度可以使用浮点计算
  12.                 for(i=0;i<101;i++)         //判断采集电压值大于或者等于表格电压时,停下来并记录当前i值
  13.                 {
  14.                         if(num >= NTCcode[ i])
  15.                         {
  16.                                 TMP=i;  
  17.                                 break;    //检测到即跳出循环,否则继续循环
  18.                         }                  
  19.                 }
  20.                 num=0;
  21.                 disp[4]=TMP/100;        //温度百位
  22.                 disp[5]=TMP%100/10; //温度十位
  23.                 disp[6]=TMP%10;            //温度个位
  24.         }
  25. }
复制代码
回复

使用道具 举报

板凳
ID:390416 发表于 2022-4-24 08:03 | 只看该作者
http://www.51hei.com/bbs/dpj-213898-1.html  去这里下载,里面代码有NTC文件夹
回复

使用道具 举报

地板
ID:416575 发表于 2022-4-24 22:41 | 只看该作者
wulin 发表于 2022-4-24 07:16
用简单的平均滤波,1ms采样1次,20次平均,消除环境工频干扰。

多谢指教,请问 num=(num*48+5)/20;中加5是什么意思呢?
回复

使用道具 举报

5#
ID:213173 发表于 2022-4-25 07:28 | 只看该作者
hsyxjm 发表于 2022-4-24 22:41
多谢指教,请问 num=(num*48+5)/20;中加5是什么意思呢?

你的原计算公式 num=num*4.8;
改后的计算公式 num=(num*4.8*10+5)/10/20; //乘10加5是为了小数四舍五入,不过在这里没有什么实际意义。
化简的计算公式 num=(num*48+5)/200;//回复中少了个0。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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