<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MAX31855熱電偶溫度變送器的驅動設計與實現

CHANBAEK ? 來源:木南創智 ? 作者: 尹家軍 ? 2022-12-07 15:42 ? 次閱讀

一些時候,我們需要通過熱電偶獲取溫度數據。在這里我們將討論如何實現并使用MAX31855熱電偶溫度變送器的驅動問題。

1、功能概述

??MAX31855是具有冷端補償,能將K、J、N、T或E型熱電偶信號轉換成數字量的熱偶溫度變送器。該熱偶溫度變送器輸出14位帶符號數據,通過SPI兼容接口、以只讀格式輸出。其引腳定義疾風傳如下圖所示:

Dingtalk_20221206154648.jpg

??MAX31855器件處理來自熱電偶的讀數,并通過串口發送數據。當片選信號為低電平,并在SCK端施加時鐘信號,即可從SO讀取結果。MAX31855器件始終在后臺執行轉換,只有片選信號CS為高電平時才能更新故障狀態和溫度數據。片選信號CS為低電平時,SO引腳將輸出第一位數據。通過SPI接口讀取完整的冷端補償熱電偶溫度,需要14個時鐘周期。讀取熱電偶和參考端溫度需要32個時鐘周期,其格式如下圖所示:

Dingtalk_20221206154648.jpg

??在時鐘下降沿讀取輸出位。第一位D31為熱電偶溫度符號位。D[30:18]位包含溫度轉換數據,順序為MSB至LSB。D16位正常狀態下為低電平,熱電偶輸入開路或對GND或VCC短路時變為高電平。參考端溫度數據從D15開始。個數據位的定義如下:

Dingtalk_20221206154648.jpg

??MAX31855熱偶溫度變送器的溫度分辨率為0.25℃,最高溫度讀數為+1800℃,最低溫度讀數為-270℃,對于K型熱電偶,溫度范圍為-200℃至+700℃,保持±2℃精度。

2、驅動設計與實現

??我們已經了解了MAX31855熱偶溫度變送器的基本情況。接下來我們將依據MAX31855熱偶溫度變送器的各種配置參數設計并實現MAX31855熱偶溫度變送器的驅動程序。

2.1、對象定義

??與以前的驅動設計一樣,我們依然是基于對象來設計MAX31855熱偶溫度變送器的驅動程序。所以我們要先抽象并定義MAX31855熱偶溫度變送器對象類型。一般來講對象包括屬性與操作兩方面,我們將據此逐一分析MAX31855熱偶溫度變送器對象的屬性與操作。

??先考慮MAX31855熱偶溫度變送器對象的屬性。對于MAX31855熱偶溫度變送器來說,每次訪問返回的數據格式是固定的,這其中包括一些狀態位,所以為了記錄這些狀態位我們定義一個狀態量作為對象的屬性。還有讀回來的原始數據編碼、解析出來的檢測溫度和冷端溫度實際上表示了MAX31855熱偶溫度變送器當時所處的狀態,所以我們將其定義為對象的屬性。

??再來考慮MAX31855熱偶溫度變送器對象的操作。對于MAX31855熱偶溫度變送器來說,操作就是獲取溫度檢測數據,而讀取數據操作本身依賴于具體的軟硬件平臺,所提我們將其定義為對象的操作。而MAX31855熱偶溫度變送器采用SPI接口需要控制片選信號,當然在總線上只有一臺設備時,我們可以直接將其通過硬件選中,但為了通用性我們還是使用軟件來控制片選操作,所以我們將片選動作作為對象的一個操作。

??根據上述對MAX31855熱偶溫度變送器對象屬性和操作的分析,我們可以抽象的到MAX31855熱偶溫度變送器的對象類型如下:

/*定義MAX31855對象類型*/
typedef struct Max31855Object {
    uint8_t status;
    uint32_t dataCode;
    float mTemperature;     //TC測量溫度
    float rTemperature;      //冷端溫度
    void (*ReadData)(uint8_t *rData,uint16_t rSize);
    void (*ChipSelcet)(Max31855CSType cs);     //片選信號
}Max31855ObjectType;

??抽象了對象類型后就可聲明對象變量,可是這個對象變量必須作必要的初始化才能使用。所以我們需要一個初始化函數來對其進行初始化。在此函數中,我們將檢測變量的有效性和初始狀態賦值,并對設備進行必要的配置。根據這些要求我們設計MAX31855熱偶溫度變送器的對象初始化函數如下:

/*初始化MAX31855對象*/
void Max31855Initialization(Max31855ObjectType *tc,
                            Max31855ReadDataType read,
                            Max31855ChipSelcetType cs
                                )
{
    if((tc==NULL)||(read==NULL))
    {
        return;
    }
    tc->ReadData=read;

    if(cs!=NULL)
    {
        tc->ChipSelcet=cs;
    }
    else
    {
        tc->ChipSelcet=DefaultChipSelect;
    }

    tc->status=0;
    tc->dataCode=0;
    tc->mTemperature=0.0;
    tc->rTemperature=0.0;

    tc->ChipSelcet(Max31855CS_Disable);
}

2.2、對象操作

??我們之所以定義這一對象,目的是為了操作該對象。接下來我們就來考了MAX31855熱偶溫度變送器對象的操作問題。我們使用MAX31855熱偶溫度變送器就是為了測量溫度。所以對MAX31855熱偶溫度變送器對象所要做的主要操作就是獲取溫度的轉換數據并解析出溫度值。對于MAX31855熱偶溫度變送器來說,除了熱電偶的測量溫度還有冷端的溫度,這兩個數據轉換值都是可以讀出來的,他們的格式如下:Dingtalk_20221206154648.jpg

Dingtalk_20221206154648.jpg

??根據前面的分析以及數據格式,我們可以設計獲取溫度數據的操作函數如下:

/*獲取MAX31855測量數據*/
void Max31855GetDatas(Max31855ObjectType *tc)
{
    uint8_t rData[4];
    uint16_t tCode=0;
    uint16_t rCode=0;

    tc->ChipSelcet(Max31855CS_Enable);

    tc->ReadData(rData,4);

    tCode=(rData[0]<<8)+rData[1];
    tCode=(tCode>>2);

    rCode=(rData[2]<<8)+rData[3];
    rCode=(rCode>>4);

    tc->mTemperature=CalcMeasureTemperature(tCode);
    tc->rTemperature=CalcColdEndTemperature(rCode);

    tc->dataCode=(rData[0]<<24)+(rData[1]<<16)+(rData[2]<<8)+rData[3];
    tc->ChipSelcet(Max31855CS_Disable);
}

3、驅動的使用

??我們已經設計并實現了MAX31855熱偶溫度變送器對象的驅動程序。這一驅動程序的設計還需要驗證,所以我們需要設計一個簡單的應用來驗證這一驅動程序的正確性。

3.1、聲明并初始化對象

??為了基于對象操作MAX31855熱偶溫度變送器,我們還是需要聲明并初始化MAX31855熱偶溫度變送器對象變量。

Max31855ObjectType max31855;

??聲明了這個對象變量,我們還需要使用前面設計的Max31855Initialization對象初始化函數對這個變量進行初始化。這個變量有幾個參數:

Max31855ObjectType *tc,     //MAX31855對象變量
Max31855ReadDataType read,  //讀MAX31855函數指針
Max31855ChipSelcetType cs   //片選操作函數指針

??其中第一個參數為需要初始化的對象變量,后面兩個為操作回調函數的指針,這幾個函數我們是炫耀實現的,其原型定義如下:

typedef void (*Max31855ReadDataType)(uint8_t *rData,uint16_t rSize);
typedef void (*Max31855ChipSelcetType)(Max31855CSType cs);     //片選信號

??這些函數的實現依賴于具體的軟硬件平臺,我們這里實現基于STM32F103的操作函數,依據原型定義我們實現如下:

/*SPI1讀數據操作*/
static void BmtcReadData(uint8_t *rData,uint16_t rSize)
{
    HAL_SPI_Receive (&hspi1, rData, rSize, 1000);
}
/*SPI1片選操作函數*/
static void BmtcChipSelcet(Max31855CSType cs)
{
    if(Max31855CS_Enable == cs)
    {
        HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET);
        return;
    }
    HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
}

??這要初始化函數的全部參數皆已定義,我們可以初始化MAX31855熱偶溫度變送器對象如下:

/*初始化MAX31855對象*/
    Max31855Initialization(&max31855,
                           BmtcReadData,
                           BmtcChipSelcet
                               );

3.2、基于對象進行操作

??事實上,這個驅動程序我們已經應用于具體的項目當中,并且使用正常。所以在這個驗證中,我們直接將項目中的實現代碼節選如下:

/*獲取MAX31855測量數據*/
    Max31855GetDatas(&max31855);
    aPara.phyPara.temperature=max31855.mTemperature;
    aPara.phyPara.rTemperature=max31855.rTemperature;

4、應用總結

??在我們的項目中,我們使用驅動實現了熱電偶的溫度采集,在使用過程中運行很穩定,數據獲取及解析也沒有問題,所以驅動程序的設計應該是符合要求的。

??在使用驅動程序的時候要注意,MAX31855熱偶溫度變送器SPI端口的時鐘頻率有要求,主設備輸出的串行時鐘最大不要超過5MHz,我們設置為2.5MHz時運行比較穩定。

??在使用驅動時需注意,采用SPI接口的器件需要考慮片選操作的問題。如果片選信號是通過硬件電路來實現的,我們在初始化時給其傳遞NULL值。如果是軟件操作片選則傳遞我們編寫的片選操作函數。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 熱電偶
    +關注

    關注

    5

    文章

    851

    瀏覽量

    74885
  • 驅動設計
    +關注

    關注

    1

    文章

    108

    瀏覽量

    15205
  • 溫度變送器
    +關注

    關注

    0

    文章

    97

    瀏覽量

    14896
  • MAX31855
    +關注

    關注

    1

    文章

    7

    瀏覽量

    16190
收藏 人收藏

    評論

    相關推薦

    MAX31855測量溫度疑問???

    申請了MAX31855芯片,購買了K型熱電偶,采用STM32進行驅動,但是在常溫下測量的數據就是不對;時序波形如下:從邏輯分析儀上看出的波形和規格書一樣,沒有什么問題但是讀出的溫度值不
    發表于 04-16 11:35

    【NanoPi M2試用體驗】之通過spidev0.0驅動MAX31855芯片采集K型熱電偶溫度(附工程文件)

    M2外擴的SPI0接口實現MAX31855熱電偶轉換后的溫度進行采集。本篇試用報告主要介紹如何通過Nanopi M2已經實現的SPI0
    發表于 06-12 12:52

    【Nanopi M2試用】之通過spidev0.0驅動MAX31855芯片采集K型熱電偶溫度

    本帖最后由 lee_st 于 2018-2-5 19:31 編輯 【Nanopi M2試用】之通過spidev0.0驅動MAX31855芯片采集K型熱電偶溫度
    發表于 02-05 19:29

    MAX31855常見問題

    熱電偶數據庫中的系數實現線性化:作為替代方案,MAX31856支持不同類型熱電偶的線性化處理。MAX31855對EMI或RF干擾進行濾波嗎?
    發表于 01-10 15:33

    MAX31855讀數不正常哦

    MAX31855,在實驗室測試正常,一到工作機臺從MAX31855讀到的數據是0XFF,有1000多度(實際溫度20左右),這個時候 工作機臺的加熱系統還沒有工作。,用的是K型熱電偶,
    發表于 01-18 10:58

    MAX31855

    MAX31855,在實驗室測試正常,一到工作機臺從MAX31855讀到的數據是0XFF,有1000多度(實際溫度20左右),這個時候 工作機臺的加熱系統還沒有工作。,用的是K型熱電偶,
    發表于 01-18 11:10

    MAX31855熱電偶轉換器開發流程

    MAX31855熱電偶轉換器開發流程 一、準備硬件和相關知識實驗連接圖 1.硬件:一塊開發板、邏輯分析儀、熱電偶(常用的K型熱電偶)、杜邦線等; 2.相關知識:VHDL基礎、SPI通
    發表于 03-15 19:39

    MAX31855 冷端補償熱電偶至數字輸出轉換器IC介紹

    MAX31855EASA+T -40°C to +900°C8SO MAX31855RASA+T -50°C to +1770°C 8SO MAX31855具有冷端補償,將K、J、N、T或E型
    發表于 05-05 12:13

    MAX31855測量溫度不準

    MAX31855測量溫度不準,常溫高3度,60度接近,再上升比實際溫度低,100度低12度,200度低25度,300度低30度,哪位高手可以幫忙?
    發表于 05-30 16:41

    MAX31855熱電偶至數字輸出轉換器開發指南

    MAX31855熱電偶至數字輸出轉換器1、【硅天下備樣信息】MAX31855KASA+T -200°C to +1350°C8SO MAX31855JASA+T-40°C to +75
    發表于 06-16 18:41

    MAX31855熱電偶至數字輸出轉換器

    本帖最后由 junyunlai1 于 2020-7-3 10:01 編輯 MAX31855熱電偶至數字輸出轉換器1、【硅天下備樣信息】MAX31855KASA+T -200°C
    發表于 06-16 18:45

    Proteus仿真熱電偶測溫(Max6675+LCD1602)

    Proteus仿真熱電偶測溫檢測芯片:Max6675聽說max6675快要停產了,可以用max31855代替,代碼稍微改下就行!壓縮包里有仿真工程文件+C51
    發表于 12-04 18:26

    MAX31855 冷端補償熱電偶至數字輸出轉換器

    MAX31855冷端補償熱電偶至數字輸出轉換器,這個轉換器解析為0.25 ° C的溫度下,允許讀數高達1800° C和高達-270 ° C低
    發表于 04-06 18:35 ?3257次閱讀

    MAX31855中文手冊

    MAX31855具有冷端補償,將K、J、N、T或E型熱電偶信號轉換成數字量(如果使用S和R型熱電偶,請聯系工廠)。器件輸出14位帶符號數據,通過SPITM兼容接口、以只讀格式輸出。轉換器的溫度
    發表于 12-07 10:11 ?322次下載
    <b class='flag-5'>MAX31855</b>中文手冊

    MAX31855熱電偶轉換器開發流程

    MAX31855熱電偶轉換器開發流程 一、準備硬件和相關知識 1.硬件:一塊開發板、邏輯分析儀、熱電偶(常用的K型熱電偶)、杜邦線等; 2.相關知識:VHDL基礎、SPI通信
    發表于 03-25 16:23 ?2520次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>