找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2586|回復: 11
收起左側(cè)

單片機+MAX6675讀K型熱電偶相差溫度2到3度,采集頻率影響到的嗎?

[復制鏈接]
ID:327265 發(fā)表于 2020-11-3 10:04 | 顯示全部樓層 |閱讀模式
MAX6675讀K型熱電偶相差溫度2到3度,從常溫到高溫差不多都是相差2到3度,因為我都是用熱電偶測的,各位可以幫忙看一下是什么問題嗎?
//---------------------讀溫度----------------------
u16 ReadMAX6675(void)           
{
        u8 count;  //計數(shù)
        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()         //這個函數(shù)每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是全局變量,賦值完直接發(fā)送到上位機(每300ms發(fā)一次)
}

回復

使用道具 舉報

ID:327265 發(fā)表于 2020-11-3 10:04 | 顯示全部樓層
是我采集頻率影響到的嗎?
回復

使用道具 舉報

ID:451718 發(fā)表于 2020-11-3 18:26 | 顯示全部樓層
你的參照物是什么?  換句話說,你的參照物準確么?   對于熱電偶來說,因為雜質(zhì)的原因,不同品牌的熱電偶會有少許差別。 你這個高溫有多高?  K型測溫一般可以到1000多度,2、3度的誤差算不了啥了。如果你只測到了幾十度,那就在底層改一下代碼,線性補償上去就好了。  反正跟頻率是沒有啥直接關系的。
回復

使用道具 舉報

ID:836364 發(fā)表于 2020-11-3 20:09 | 顯示全部樓層
主要看樓主的測量范圍是那個,大不大,
回復

使用道具 舉報

ID:327265 發(fā)表于 2020-11-3 23:07 | 顯示全部樓層
robinsonlin 發(fā)表于 2020-11-3 18:26
你的參照物是什么?  換句話說,你的參照物準確么?   對于熱電偶來說,因為雜質(zhì)的原因,不同品牌的熱電偶 ...

參照溫度是在網(wǎng)上買的測溫度也是用K型熱電偶的,我需要測的溫度到最大170度左右,怎么修改線性補償,可以請教一下嗎?
回復

使用道具 舉報

ID:327265 發(fā)表于 2020-11-3 23:07 | 顯示全部樓層
123456czst 發(fā)表于 2020-11-3 20:09
主要看樓主的測量范圍是那個,大不大,

測的范圍大概0~170度左右
回復

使用道具 舉報

ID:327265 發(fā)表于 2020-11-3 23:09 | 顯示全部樓層
robinsonlin 發(fā)表于 2020-11-3 18:26
你的參照物是什么?  換句話說,你的參照物準確么?   對于熱電偶來說,因為雜質(zhì)的原因,不同品牌的熱電偶 ...

主要是低于100度相差2到3度,達到100度以上也是相差100度,所以想在這里請教一下怎么修改線性補償,修改線性補償后溫度跑到100度以上會不會偏差變大
回復

使用道具 舉報

ID:327265 發(fā)表于 2020-11-3 23:11 | 顯示全部樓層
robinsonlin 發(fā)表于 2020-11-3 18:26
你的參照物是什么?  換句話說,你的參照物準確么?   對于熱電偶來說,因為雜質(zhì)的原因,不同品牌的熱電偶 ...

那個參照溫度應是準的,因為是在網(wǎng)上剛買的,我朋友那邊測也是先相差2到3度
回復

使用道具 舉報

ID:451718 發(fā)表于 2020-11-4 09:43 | 顯示全部樓層
whwteng 發(fā)表于 2020-11-3 23:11
那個參照溫度應是準的,因為是在網(wǎng)上剛買的,我朋友那邊測也是先相差2到3度

你要做小數(shù)顯示么?  如果不做小數(shù)顯示。t= t - t/50 ;就搞定了。  (一般單片機沒有浮點運算)
回復

使用道具 舉報

ID:327265 發(fā)表于 2020-11-6 10:04 | 顯示全部樓層
robinsonlin 發(fā)表于 2020-11-4 09:43
你要做小數(shù)顯示么?  如果不做小數(shù)顯示。t= t - t/50 ;就搞定了。  (一般單片機沒有浮點運算)

剛剛試啦,這樣讀出來的數(shù)直接飆到一百多度啦、
回復

使用道具 舉報

ID:451718 發(fā)表于 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 發(fā)表于 2020-11-17 18:58 | 顯示全部樓層

可以啦,解決,我修改啦線性
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表