0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32物聯(lián)網(wǎng)開發(fā)板(3)--紅外測(cè)溫MLX90614

wang123a ? 來源:wang123a ? 作者:wang123a ? 2023-05-11 09:04 ? 次閱讀

1.MLX90614簡(jiǎn)介

MX90614是一款由邁來芯公司提供的低成本,無接觸溫度計(jì)。輸出數(shù)據(jù)和物體溫度呈線性比例,具有高精度和高分辨率。TO-39金屬封裝里同時(shí)集成了紅外感應(yīng)熱電堆探測(cè)器芯片MLX81101(溫度是通過PTC或是PTAT元件測(cè)量)和信號(hào)處理專用集成芯片MLX90302,專門用于處理紅外傳感器輸出信號(hào)。用以阻礙可見光和近紅外光輻射的光學(xué)濾波器(可傳播長波)集成在封裝內(nèi)提供對(duì)環(huán)境和日光的免疫。濾波器的波長通帶為5.5到14μm。由于集成了低噪聲放大器、17位模數(shù)轉(zhuǎn)換器和強(qiáng)大的數(shù)字信號(hào)處理芯片 MLX90302,使得高精度和高分辨度的溫度計(jì)得以實(shí)現(xiàn)。一個(gè)附加的片上溫度傳感器用來測(cè)量芯片的溫度。測(cè)量完兩個(gè)傳感器的輸出后,對(duì)應(yīng)的環(huán)境溫度和物體溫度被計(jì)算出。計(jì)算所得物體溫度和環(huán)境溫度存儲(chǔ)在MLX90302的RAM單元,溫度分辨率為0.01℃,并可通過兩線 SMBus(系統(tǒng)管理總線)兼容協(xié)議接口(IIC與之兼容)(0.02℃分辨率)或是10位PWM(脈寬調(diào)制)輸出模式輸出。MLX90614出廠溫度范圍都進(jìn)行過校準(zhǔn),傳感器測(cè)量的溫度為視場(chǎng)里所有物體溫度的平均值。

MLX90614 系列模塊是一組通用的紅外測(cè)溫模塊。 在出廠前該模塊已進(jìn)行校驗(yàn)及線性化,具有非接觸、體積小、精度高,成本低等優(yōu)點(diǎn)。被測(cè)目標(biāo)溫度和環(huán)境溫度能通過單通道輸出,并有兩種輸出接口,適合于汽車空調(diào)、室內(nèi)暖氣、家用電器、手持設(shè)備以及醫(yī)療設(shè)備應(yīng)用等。

MLX90614的出廠校準(zhǔn)溫度范圍很廣:環(huán)境溫度-40 ~ 125 ?C,物體溫度-70 ~ 382.2 ?C。傳感器測(cè)量的溫度為視場(chǎng)里所有物體溫度的平均值。MLX90614 室溫下的標(biāo)準(zhǔn)精度為±0.5oC。醫(yī)療應(yīng)用版本的傳感器可在人體溫度范圍內(nèi)達(dá)到±0.1oC 的精度。

poYBAGRblbeAXnhOAACLoMUSvI4824.pngpYYBAGRblcWAC9z9AAHVn0R1UtQ009.png

硬件接口:

引腳

說明

SCL

I2C時(shí)鐘

SDA

I2C數(shù)據(jù)線

VDD

電源3.3~5V

VSS

數(shù)字地GND

2 工作原理

MLX90614是由內(nèi)部狀態(tài)機(jī)控制物體溫度和環(huán)境溫度的測(cè)量和計(jì)算,進(jìn)行溫度后處理,并將結(jié)果通過PWM或是SMBus模式輸出。ASSP支持兩個(gè)IR傳感器。 (MLX90614xAx只有一個(gè)IR傳感器) IR傳感器的輸出通過增益可編程的低噪聲低失調(diào)電壓放大器放大,經(jīng)過Sigma Delta調(diào)制器轉(zhuǎn)換為單一比特流并反饋給 DSP做后續(xù)的處理。信號(hào)通過可編程的(用 EEPROM 實(shí)現(xiàn))FIR和IIR低通濾波器以進(jìn)一步減低輸入信號(hào)的帶寬從而達(dá)到所需的噪聲特性和刷新率。IIR濾波器的輸出為測(cè)量結(jié)果并存于內(nèi)部RAM中,其中三個(gè)單元可被用到:一個(gè)是片內(nèi)溫度傳感器(片上PTAT或PTC),其余兩個(gè)為IR傳感器。基于以上測(cè)量結(jié)果,計(jì)算出對(duì)應(yīng)的環(huán)境溫度Ta和物體溫度To,兩個(gè)溫度分辨率都為0.01℃。Ta和 To可通過兩種方式讀取:通過兩線接口讀取RAM單元,(0.02℃分辨率,固定范圍)或者通過 PWM 數(shù)字模式輸出。(10位分辨率,范圍可配置)測(cè)量周期的最后一步為:測(cè)量所得Ta和To被重新調(diào)節(jié)為PWM所需的輸出分辨率,并且該數(shù)據(jù)存在PWM 狀態(tài)機(jī)的寄存器中,狀態(tài)機(jī)可以產(chǎn)生固定頻率和一定占空比來表示測(cè)量的數(shù)據(jù)。

pYYBAGRbllCAHQsxAACXKmbx5FU288.png

3. 通訊協(xié)議

單片機(jī)與MLX90614紅外測(cè)溫模塊之間通信的方式是“類IIC”通信,意思就是通信方式跟IIC通信方式很像但又不是IIC,它有另外一個(gè)名字叫做SMBus。SMBus (System Management Bus)是1995年由 intel公司提出的一種高效同步串行總線,SMBus只有兩根信號(hào)線:雙向數(shù)據(jù)線和時(shí)鐘信號(hào)線,容許CPU與各種外圍接口器件以串行方式進(jìn)行通信、交換信息,既可以提高傳輸速度也可以減小器件的資源占用,另外即使在沒有SMBus 接口的單片機(jī)上也可利用軟件進(jìn)行模擬。。MLX90614 SMBus時(shí)鐘的最大頻率為100KHz,最小為 10KHz。

poYBAGRblqKANhfnAADJvx_E_5U060.png

S 是起始信號(hào),Sr是重發(fā)起始信號(hào)。
Rd讀使能,Wr寫使能。
A是應(yīng)答,0為應(yīng)答1為非應(yīng)答(發(fā)送數(shù)據(jù)和讀取數(shù)據(jù)都需要應(yīng)答)。
P 是停止信號(hào)。
PEC是CRC-8的多項(xiàng)式 a X8+X2+X1+1。每個(gè)字節(jié)的最高有效位首先傳送。

3.1 起始信號(hào)和停止信號(hào)

pYYBAGRbls2AL2vXAAF37spJ_0s618.png
//發(fā)送起始信號(hào)
//時(shí)鐘為高電平時(shí),數(shù)據(jù)由高電平變?yōu)榈碗娖健?static void I2C1_Start(void)
{
I2C1_SDAout_Mode();//輸出模式
    I2C1_SDAout(1);
	I2C1_SCL(1);
	Delay_Us(2);
	I2C1_SDAout(0);
	Delay_Us(2);
	I2C1_SCL(0);//方便后續(xù)數(shù)據(jù)收發(fā)
    Delay_Us(1);
}
//停止信號(hào)
//時(shí)鐘線為高電平時(shí),數(shù)據(jù)線由低變高。
static void I2C1_Stop(void)
{
	I2C1_SDAout_Mode();//輸出模式
	I2C1_SCL(0);
	I2C1_SDAout(0);
	Delay_Us(5);
	I2C1_SCL(1);
	Delay_Us(5);
	I2C1_SDAout(1);
}

3.2 數(shù)據(jù)傳輸時(shí)序

pYYBAGRblv2AKez5AABTWLmSslo585.png

時(shí)鐘線為高時(shí)讀取數(shù)據(jù)。應(yīng)答信號(hào)本身就是一位數(shù)據(jù)。
(1)獲取應(yīng)答示例

//獲取應(yīng)答信號(hào)
static u8 I2C1_Wait_Ack(void)
{
	u8 cnt=0;
	I2C1_SDAIN_Mode();//配置為輸入模式
	I2C1_SDAout(1);	
	I2C1_SCL(0);//告訴從機(jī),主機(jī)需要獲取數(shù)據(jù)
	Delay_Us(5);
	I2C1_SCL(1);//從機(jī)數(shù)據(jù)發(fā)送完成,主機(jī)開始讀取數(shù)據(jù)
	while(I2C1_SDAin)
	{
		cnt++;
		Delay_Us(5);
		if(cnt>=100)return 1;
	}
	Delay_Us(5);
	I2C1_SCL(0);//方便下一次數(shù)據(jù)收發(fā)
	return 0;
}

(2)讀取一字節(jié)數(shù)據(jù)示例

//讀取一個(gè)字節(jié)數(shù)據(jù)
static u8 I2C1_Read_Byte(void)
{
	u8 i=0;
	u8 data=0;
	I2C1_SDAIN_Mode();//配置為輸入模式
	for(i=0;i<8;i++)
	{
		I2C1_SCL(0);//告訴從機(jī),主機(jī)需要獲取數(shù)據(jù)
		Delay_Us(5);
		I2C1_SCL(1);//開始讀取數(shù)據(jù)
		data<<=1;//默認(rèn)收到0
		if(I2C1_SDAin)data|=0x01;
		Delay_Us(5);
	}
	I2C1_SCL(0);
	return data;
}

時(shí)鐘線為低電平時(shí)發(fā)送數(shù)據(jù)。應(yīng)答信號(hào)本身就是一位數(shù)據(jù)。
(3)發(fā)送應(yīng)答示例

/***********發(fā)送應(yīng)答信號(hào)**************************
**
**形參:u8 ack -- 0應(yīng)答,1非應(yīng)答
**
***************************************************/
static void I2C1_SendAck(u8 ack)
{
	I2C1_SDAout_Mode();//輸出模式	
	I2C1_SCL(0);//告訴從機(jī),主機(jī)開始發(fā)送數(shù)據(jù)
  if(ack&0x01)
  {
    I2C1_SDAout(1);
  }
  else I2C1_SDAout(0);
	Delay_Us(5);
	I2C1_SCL(1);//告訴從機(jī),主機(jī)數(shù)據(jù)發(fā)送完成
	//方便下一次數(shù)據(jù)收發(fā)
	Delay_Us(5);
	I2C1_SCL(0);
}

(4)發(fā)送一字節(jié)數(shù)據(jù)示例

//發(fā)送一個(gè)字節(jié)數(shù)據(jù)
static void I2C1_Send_Byte(u8 data)
{
	u8 i=0;
	I2C1_SDAout_Mode();//輸出模式
	for(i=0;i<8;i++)
	{
		I2C1_SCL(0);//告訴從機(jī),主機(jī)開始發(fā)送數(shù)據(jù)
		if(data&0x80)I2C1_SDAout(1);
		else I2C1_SDAout(0);
		Delay_Us(5);
		I2C1_SCL(1);//主機(jī)數(shù)據(jù)發(fā)送完成
		data<<=1;
		Delay_Us(5);
	}
	I2C1_SCL(0);//方便下一次數(shù)據(jù)收發(fā)
}

3.3 讀取溫度數(shù)據(jù)示例

對(duì)該模塊操作主要是看懂幾個(gè)圖。模塊里有EEPROM和RAM兩塊,EEPROM里只有限定數(shù)目的地址是允許客戶改寫的。整個(gè) EEPROM可通過SMBus接口讀和寫。

poYBAGRbl6OAQaPAAAFeNtw_E4o715.png

RAM中不能寫入數(shù)據(jù),只能進(jìn)行讀取,并且只有有限數(shù)目是客戶感興趣的。

pYYBAGRbl72ADy5eAACXTT1MMhI956.png

TA是環(huán)境溫度地址,Tobj1是物體溫度低8位,Tobj2是物體溫度高8位。
讀取數(shù)據(jù)流程如下:設(shè)備地址為0x0

poYBAGRbl9OABmApAABl179Ux7w493.png

①發(fā)送起始信號(hào)-->②設(shè)備地址+寫使能(0x0)+獲取應(yīng)答-->③發(fā)送讀取溫度命令(0x07)+獲取應(yīng)答-->④發(fā)送起始信號(hào)-->⑤設(shè)備地址+讀使能(0x1)+獲取應(yīng)答-->⑥讀取溫度低8位+發(fā)送應(yīng)答-->⑦讀取溫度高8位+發(fā)送應(yīng)答-->⑧發(fā)送停止信號(hào);

//讀內(nèi)存
uint16_t MLX906_ReadMemory(void)
{
    uint8_t Pec,PecReg,ErrorCounter;
    uint8_t TempL=0;
    uint8_t TempH=0;
    uint8_t arr[6];
    ErrorCounter=0;
    do
    {
        ErrorCounter++;
        if(ErrorCounter==10)
        {
            return 0;
        }            
        I2C1_Start();//起始信號(hào)
        I2C1_Send_Byte(0x00);//發(fā)送MLX90614地址
        I2C1_Wait_Ack();
        I2C1_Send_Byte(0x07);//發(fā)送讀MLX90614 RAM地址
        I2C1_Wait_Ack();
        I2C1_Start();//重新啟動(dòng)
        I2C1_Send_Byte(0x01);//發(fā)送數(shù)據(jù)采集命令
        I2C1_Wait_Ack();
        TempL=I2C1_Read_Byte();//讀取地位數(shù)據(jù)
        I2C1_SendAck(0);
        TempH=I2C1_Read_Byte();//讀取高位數(shù)據(jù)
        I2C1_SendAck(0);
        Pec=I2C1_Read_Byte();//讀取校驗(yàn)位
        I2C1_SendAck(0);
        I2C1_Stop();//停止信號(hào)
        arr[5]= 0x00;
        arr[4]= 0x07;
        arr[3]= 0x01;
        arr[2]= TempL;
        arr[1]= TempH;
        arr[0]= 0;
        PecReg=CRC_Calculation(arr);//計(jì)算CRC校驗(yàn)
    }while(PecReg!=Pec);
    return (uint16_t)((TempH<<8)|TempL);
}

2.2.4 CRC-8的多項(xiàng)式X8+X2+X1+1計(jì)算示例

//crc校驗(yàn)
uint8_t CRC_Calculation(uint8_t pec[])
{
    uint8_t crc[6];//存放多項(xiàng)式
    uint8_t BitPosition = 47;
    uint8_t shift;
    uint8_t i,j,temp;
    do
    {
        crc[5]=0;
        crc[4]=0;
        crc[3]=0;
        crc[2]=0;
        crc[1]=0x01;
        crc[0]=0x07;
        BitPosition = 47;
        shift = 0;
        i=5;
        j=0;
        while((pec[i]&(0x80>>j))==0 && i>0)
        {
            BitPosition--;
            if(j<7)
            {
                j++;
            }
            else
            {
                j= 0x00;
                i--;
            }
        }
        shift= BitPosition-8;
        while(shift)
        {
            for(i=5;i<0xFF;i--)
            {
                if((crc[i-1]&0x80)&&(i>0))
                {
                    temp=1;
                }
                else
                {
                    temp=0;
                }
                crc[i]<<=1;
                crc[i]+=temp;
            }
            shift--;
        }
        for(i=0;i<=5;i++)
        {
            pec[i]^=crc[i];
        }
    }while(BitPosition>8);
    return pec[0];
}

3.5 溫度轉(zhuǎn)換示例

  • 環(huán)境溫度Ta

傳感器芯片溫度是通過PTC或是PTAT元件測(cè)量的,傳感器所有的狀態(tài)和數(shù)據(jù)處理都是在片內(nèi)進(jìn)行的,處理好的線性傳感器溫度Ta存于芯片內(nèi)存里。計(jì)算好的溫度輸出分辨率為 0.02 ?C,傳感器的出廠校準(zhǔn)范圍為40…+125 ?C。在RAM單元地址006h中,2DE4h對(duì)應(yīng)-38.2 ?C (線性輸出最低限度) ,4DC4h (19908d)對(duì)應(yīng) 125 ?C。通過下式將RAM內(nèi)容轉(zhuǎn)換為實(shí)際的Ta溫度,結(jié)果是開爾文為單位。

環(huán)境溫度:

Ta[°K]=Targe*0.02;

物體溫度:

To[°K]=Targe*0.02;

轉(zhuǎn)換為攝氏度計(jì)算方法為:

Temp=Targe*0.02-273.5;

//讀溫度
float MLX906_Read_Temp(void)
{
    return (float )MLX906_ReadMemory()*0.02-273.15;
}
pYYBAGRbmQeAOtQEABxHqtx-dIE329.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 濾波器
    +關(guān)注

    關(guān)注

    158

    文章

    7596

    瀏覽量

    176581
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352493
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1452

    瀏覽量

    122253
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4771

    瀏覽量

    96177
  • 紅外測(cè)溫
    +關(guān)注

    關(guān)注

    2

    文章

    182

    瀏覽量

    14982
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STC12C5A60S2與紅外測(cè)溫模塊MLX90614

    STC12C5A60S2與紅外測(cè)溫模塊MLX90614用什么方式通信比較好
    發(fā)表于 04-16 18:52

    紅外測(cè)溫傳感器MLX90614測(cè)溫的響應(yīng)時(shí)間是多少??????

    紅外測(cè)溫傳感器MLX90614測(cè)溫的響應(yīng)時(shí)間是多少??????
    發(fā)表于 05-16 20:59

    為什么無法使用MSP430進(jìn)行調(diào)試MLX90614紅外測(cè)溫傳感器呢

    在用MSP430G2553調(diào)試MLX90614紅外測(cè)溫傳感器時(shí),輸出的值始終為-273.1,我認(rèn)為應(yīng)該是讀取寄存器內(nèi)容為0所致,我的程序使用STM32程序修改后進(jìn)行調(diào)試的,原32程序輸
    發(fā)表于 11-29 06:08

    如何利用STM32F4去移植MLX90614紅外溫度計(jì)呢

    MLX90614是什么?如何利用STM32F4去移植MLX90614紅外溫度計(jì)呢?
    發(fā)表于 12-02 07:02

    請(qǐng)問一下如何去實(shí)現(xiàn)一種基于STM32MLX90614測(cè)溫顯示設(shè)計(jì)呢

    請(qǐng)問一下如何去實(shí)現(xiàn)一種基于STM32MLX90614測(cè)溫顯示設(shè)計(jì)呢?
    發(fā)表于 12-15 06:41

    基于STM32MLX90614人體紅外測(cè)溫儀的設(shè)計(jì)資料分享

    前述:QQ:961209458V X:F9986858承接畢業(yè)設(shè)計(jì)。設(shè)計(jì)的內(nèi)容本課題主要是設(shè)計(jì)一種基于STM32MLX90614人體紅外測(cè)溫儀。全文主要闡述了非接觸式人體體溫測(cè)試儀的
    發(fā)表于 01-10 06:02

    mlx90614進(jìn)行紅外測(cè)溫的方法

    做項(xiàng)目使用了NRF51822,要用mlx90614進(jìn)行紅外測(cè)溫,分享一下相關(guān)的使用。mlx90614是一款紅外非接觸溫度計(jì),有多個(gè)型號(hào),BA
    發(fā)表于 01-10 08:17

    基于MLX90614紅外溫度計(jì)的發(fā)射率在線測(cè)量系統(tǒng)_吉珊珊

    基于MLX90614紅外溫度計(jì)的發(fā)射率在線測(cè)量系統(tǒng)_吉珊珊
    發(fā)表于 03-19 19:08 ?30次下載

    如何讀取來自 MLX90614 紅外溫度計(jì)算

    何讀取來自 MLX90614 紅外溫度計(jì)的單個(gè)和擴(kuò)展 PWM 輸出并使用 PIC MCU 計(jì)算溫度。計(jì)算出的占空比由 UART 以 ASCII 格式發(fā)送。軟件實(shí)現(xiàn)用于讀取 PWM 信號(hào)。該代碼采用
    的頭像 發(fā)表于 06-21 17:57 ?4116次閱讀
    如何讀取來自 <b class='flag-5'>MLX90614</b> <b class='flag-5'>紅外</b>溫度計(jì)算

    如何使用 MLX90614 紅外測(cè)溫儀實(shí)現(xiàn) SMBus 通信

    本文檔介紹了 PIC 微控制器中的 MLX90614 紅外溫度計(jì) SMBus 通信。本文檔還介紹了紅外測(cè)溫儀的應(yīng)用,以及典型電路示例和所用開發(fā)
    的頭像 發(fā)表于 06-21 17:47 ?7930次閱讀
    如何使用 <b class='flag-5'>MLX90614</b> <b class='flag-5'>紅外</b><b class='flag-5'>測(cè)溫</b>儀實(shí)現(xiàn) SMBus 通信

    淺談MLX90614片上的數(shù)字信號(hào)濾波器

    MLX90614是易于集成的TO39封裝的紅外測(cè)溫儀。它使用兩芯片架構(gòu)來提供完全集成和經(jīng)過校準(zhǔn)的解決方案。
    的頭像 發(fā)表于 05-25 05:31 ?4360次閱讀
    淺談<b class='flag-5'>MLX90614</b>片上的數(shù)字信號(hào)濾波器

    使用STM8S和MLX90614手持非接觸紅外測(cè)溫槍設(shè)計(jì)的工程文件和程序

    基于STM8S手持非接觸紅外測(cè)溫MLX90614 額溫槍設(shè)計(jì),包含原理圖、PCB、源程序等
    發(fā)表于 02-04 08:00 ?0次下載
    使用STM8S和<b class='flag-5'>MLX90614</b>手持非接觸<b class='flag-5'>紅外</b><b class='flag-5'>測(cè)溫</b>槍設(shè)計(jì)的工程文件和程序

    基于STM32MLX90614人體紅外測(cè)溫

      今天分享一個(gè)項(xiàng)目是做一個(gè)紅外測(cè)溫的。這個(gè)東西網(wǎng)上都有現(xiàn)成的資料和代碼,做起來不難。關(guān)于紅外測(cè)溫用的芯片是mlx90614
    發(fā)表于 01-26 19:06 ?84次下載
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>MLX90614</b>人體<b class='flag-5'>紅外</b><b class='flag-5'>測(cè)溫</b>槍

    基于MLX90614的mcu的代碼實(shí)現(xiàn)紅外功能

    基于MLX90614的mcu的代碼實(shí)現(xiàn)紅外功能
    發(fā)表于 06-20 15:06 ?7次下載

    stm32中使用mlx90614的驅(qū)動(dòng)代碼

    關(guān)于stm32中使用mlx90614的驅(qū)動(dòng)代碼
    發(fā)表于 06-25 10:07 ?3次下載