找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1856|回复: 11
收起左侧

单片机+MAX6675读K型热电偶相差温度2到3度,采集频率影响到的吗?

[复制链接]
ID:327265 发表于 2020-11-3 10:04 | 显示全部楼层 |阅读模式
MAX6675读K型热电偶相差温度2到3度,从常温到高温差不多都是相差2到3度,因为我都是用热电偶测的,各位可以帮忙看一下是什么问题吗?
//---------------------读温度----------------------
u16 ReadMAX6675(void)           
{
        u8 count;  //计数
        u16 Value;
        count=0;
        Value=0;
        MAX6675_CS=0;
        MAX6675_SCK=0;
        for(count=0;count<16;count++)
        {
                MAX6675_SCK=1;   //时钟置低
                Value=Value<<1;  //左移
               
                if(MAX6675_SO==1)  //取当前的值
                        Value=Value|0x01;
                MAX6675_SCK=0;
        }
        MAX6675_CS=1;
        return Value;
}

void MAX6675_dis()         //这个函数每210ms运行一次
{
        u16 t=0;
        t=ReadMAX6675();
        Flag_connect=t&0x04;
        
        Flag_connect=Flag_connect>>2;
        
        t=t<<1;      //去掉头一位
        t=t>>4;      //去掉后面3位
        hot_data=t/4;      //hot_data是全局变量,赋值完直接发送到上位机(每300ms发一次)
}

回复

使用道具 举报

ID:327265 发表于 2020-11-3 10:04 | 显示全部楼层
是我采集频率影响到的吗?
回复

使用道具 举报

ID:451718 发表于 2020-11-3 18:26 | 显示全部楼层
你的参照物是什么?  换句话说,你的参照物准确么?   对于热电偶来说,因为杂质的原因,不同品牌的热电偶会有少许差别。 你这个高温有多高?  K型测温一般可以到1000多度,2、3度的误差算不了啥了。如果你只测到了几十度,那就在底层改一下代码,线性补偿上去就好了。  反正跟频率是没有啥直接关系的。
回复

使用道具 举报

ID:836364 发表于 2020-11-3 20:09 | 显示全部楼层
主要看楼主的测量范围是那个,大不大,
回复

使用道具 举报

ID:327265 发表于 2020-11-3 23:07 | 显示全部楼层
robinsonlin 发表于 2020-11-3 18:26
你的参照物是什么?  换句话说,你的参照物准确么?   对于热电偶来说,因为杂质的原因,不同品牌的热电偶 ...

参照温度是在网上买的测温度也是用K型热电偶的,我需要测的温度到最大170度左右,怎么修改线性补偿,可以请教一下吗?
回复

使用道具 举报

ID:327265 发表于 2020-11-3 23:07 | 显示全部楼层
123456czst 发表于 2020-11-3 20:09
主要看楼主的测量范围是那个,大不大,

测的范围大概0~170度左右
回复

使用道具 举报

ID:327265 发表于 2020-11-3 23:09 | 显示全部楼层
robinsonlin 发表于 2020-11-3 18:26
你的参照物是什么?  换句话说,你的参照物准确么?   对于热电偶来说,因为杂质的原因,不同品牌的热电偶 ...

主要是低于100度相差2到3度,达到100度以上也是相差100度,所以想在这里请教一下怎么修改线性补偿,修改线性补偿后温度跑到100度以上会不会偏差变大
回复

使用道具 举报

ID:327265 发表于 2020-11-3 23:11 | 显示全部楼层
robinsonlin 发表于 2020-11-3 18:26
你的参照物是什么?  换句话说,你的参照物准确么?   对于热电偶来说,因为杂质的原因,不同品牌的热电偶 ...

那个参照温度应是准的,因为是在网上刚买的,我朋友那边测也是先相差2到3度
回复

使用道具 举报

ID:451718 发表于 2020-11-4 09:43 | 显示全部楼层
whwteng 发表于 2020-11-3 23:11
那个参照温度应是准的,因为是在网上刚买的,我朋友那边测也是先相差2到3度

你要做小数显示么?  如果不做小数显示。t= t - t/50 ;就搞定了。  (一般单片机没有浮点运算)
回复

使用道具 举报

ID:327265 发表于 2020-11-6 10:04 | 显示全部楼层
robinsonlin 发表于 2020-11-4 09:43
你要做小数显示么?  如果不做小数显示。t= t - t/50 ;就搞定了。  (一般单片机没有浮点运算)

刚刚试啦,这样读出来的数直接飙到一百多度啦、
回复

使用道具 举报

ID:451718 发表于 2020-11-6 11:19 | 显示全部楼层
unsigned int TypeFlag = 0;


void MAX6675_Init(void)
{
        MAX6675_CS = 0;
        MAX6675_SCK = 0;
        MAX6675_SO = 1;

        MAX6675_CS = 1;
        MAX6675_SCK = 0;
}

unsigned int MAX6675_Read(void)
{
        unsigned char i=0;
        unsigned int dat;
        dat=0;
        i = 0;
       
        TypeFlag = 0;
       
        MAX6675_CS = 0 ;
  MAX6675_SCK = 0;

        for(i=0;i<16;i++)
        {
       
               
                MAX6675_SCK = 1 ;
               
                dat <<= 1;
               
                if(MAX6675_SO == 1)
                {
                        dat |= 0x01 ;
                       
                }

                MAX6675_SCK = 0 ;
        }
        MAX6675_CS = 1;
       
        TypeFlag = dat & 0x04;            //断线判断标志,全局变量
       
        return dat;
}
unsigned int Get_Temp(unsigned int TempDat)
{
        TempDat=MAX6675_Read();
       
        TempDat <<= 1 ;
        TempDat >>= 4 ;
       
        TempDat =  5*TempDat/2 - 30 ;                        
       
        return TempDat;
}
上面是我处理的方法。
因为51不能浮点运算,而我又想显示精度到0.1,所以,我把返回值扩大了10倍,  -30就是做的线性纠正。   t= t - t/50 只是想给你一个思路,照搬可不行的。   
回复

使用道具 举报

ID:327265 发表于 2020-11-17 18:58 | 显示全部楼层
robinsonlin 发表于 2020-11-6 11:19
unsigned int TypeFlag = 0;

可以啦,解决,我修改啦线性
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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