吴忠躺衫网络科技有限公司

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

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

3天內不再提示

基于STM32物聯網開發板(3)--紅外測溫MLX90614

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

1.MLX90614簡介

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

MLX90614 系列模塊是一組通用的紅外測溫模塊。 在出廠前該模塊已進行校驗及線性化,具有非接觸、體積小、精度高,成本低等優點。被測目標溫度和環境溫度能通過單通道輸出,并有兩種輸出接口,適合于汽車空調、室內暖氣、家用電器、手持設備以及醫療設備應用等。

MLX90614的出廠校準溫度范圍很廣:環境溫度-40 ~ 125 ?C,物體溫度-70 ~ 382.2 ?C。傳感器測量的溫度為視場里所有物體溫度的平均值。MLX90614 室溫下的標準精度為±0.5oC。醫療應用版本的傳感器可在人體溫度范圍內達到±0.1oC 的精度。

poYBAGRblbeAXnhOAACLoMUSvI4824.pngpYYBAGRblcWAC9z9AAHVn0R1UtQ009.png

硬件接口:

引腳

說明

SCL

I2C時鐘

SDA

I2C數據線

VDD

電源3.3~5V

VSS

數字地GND

2 工作原理

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

pYYBAGRbllCAHQsxAACXKmbx5FU288.png

3. 通訊協議

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

poYBAGRblqKANhfnAADJvx_E_5U060.png

S 是起始信號,Sr是重發起始信號。
Rd讀使能,Wr寫使能。
A是應答,0為應答1為非應答(發送數據和讀取數據都需要應答)。
P 是停止信號。
PEC是CRC-8的多項式 a X8+X2+X1+1。每個字節的最高有效位首先傳送。

3.1 起始信號和停止信號

pYYBAGRbls2AL2vXAAF37spJ_0s618.png
//發送起始信號
//時鐘為高電平時,數據由高電平變為低電平。
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);//方便后續數據收發
    Delay_Us(1);
}
//停止信號
//時鐘線為高電平時,數據線由低變高。
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 數據傳輸時序

pYYBAGRblv2AKez5AABTWLmSslo585.png

時鐘線為高時讀取數據。應答信號本身就是一位數據。
(1)獲取應答示例

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

(2)讀取一字節數據示例

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

時鐘線為低電平時發送數據。應答信號本身就是一位數據。
(3)發送應答示例

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

(4)發送一字節數據示例

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

3.3 讀取溫度數據示例

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

poYBAGRbl6OAQaPAAAFeNtw_E4o715.png

RAM中不能寫入數據,只能進行讀取,并且只有有限數目是客戶感興趣的。

pYYBAGRbl72ADy5eAACXTT1MMhI956.png

TA是環境溫度地址,Tobj1是物體溫度低8位,Tobj2是物體溫度高8位。
讀取數據流程如下:設備地址為0x0

poYBAGRbl9OABmApAABl179Ux7w493.png

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

//讀內存
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();//起始信號
        I2C1_Send_Byte(0x00);//發送MLX90614地址
        I2C1_Wait_Ack();
        I2C1_Send_Byte(0x07);//發送讀MLX90614 RAM地址
        I2C1_Wait_Ack();
        I2C1_Start();//重新啟動
        I2C1_Send_Byte(0x01);//發送數據采集命令
        I2C1_Wait_Ack();
        TempL=I2C1_Read_Byte();//讀取地位數據
        I2C1_SendAck(0);
        TempH=I2C1_Read_Byte();//讀取高位數據
        I2C1_SendAck(0);
        Pec=I2C1_Read_Byte();//讀取校驗位
        I2C1_SendAck(0);
        I2C1_Stop();//停止信號
        arr[5]= 0x00;
        arr[4]= 0x07;
        arr[3]= 0x01;
        arr[2]= TempL;
        arr[1]= TempH;
        arr[0]= 0;
        PecReg=CRC_Calculation(arr);//計算CRC校驗
    }while(PecReg!=Pec);
    return (uint16_t)((TempH<<8)|TempL);
}

2.2.4 CRC-8的多項式X8+X2+X1+1計算示例

//crc校驗
uint8_t CRC_Calculation(uint8_t pec[])
{
    uint8_t crc[6];//存放多項式
    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 溫度轉換示例

  • 環境溫度Ta

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

環境溫度:

Ta[°K]=Targe*0.02;

物體溫度:

To[°K]=Targe*0.02;

轉換為攝氏度計算方法為:

Temp=Targe*0.02-273.5;

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

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

    關注

    161

    文章

    7860

    瀏覽量

    178928
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357556
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1495

    瀏覽量

    124551
  • 開發板
    +關注

    關注

    25

    文章

    5121

    瀏覽量

    98193
  • 紅外測溫
    +關注

    關注

    2

    文章

    200

    瀏覽量

    15065
收藏 人收藏

    評論

    相關推薦

    STC12C5A60S2與紅外測溫模塊MLX90614

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

    紅外測溫傳感器MLX90614測溫的響應時間是多少??????

    紅外測溫傳感器MLX90614測溫的響應時間是多少??????
    發表于 05-16 20:59

    請問STM32如何通過IIC驅動MLX90614紅外溫度傳感器?

    請問STM32如何通過IIC驅動MLX90614紅外溫度傳感器?
    發表于 11-25 09:11

    為什么無法使用MSP430進行調試MLX90614紅外測溫傳感器呢

    在用MSP430G2553調試MLX90614紅外測溫傳感器時,輸出的值始終為-273.1,我認為應該是讀取寄存器內容為0所致,我的程序使用STM32程序修改后進行調試的,原32程序輸
    發表于 11-29 06:08

    如何利用STM32F4去移植MLX90614紅外溫度計呢

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

    請問一下如何去實現一種基于STM32MLX90614測溫顯示設計呢

    請問一下如何去實現一種基于STM32MLX90614測溫顯示設計呢?
    發表于 12-15 06:41

    基于STM32MLX90614人體紅外測溫儀的設計資料分享

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

    mlx90614進行紅外測溫的方法

    做項目使用了NRF51822,要用mlx90614進行紅外測溫,分享一下相關的使用。mlx90614是一款紅外非接觸溫度計,有多個型號,BA
    發表于 01-10 08:17

    STM32如何通過IIC驅動MLX90614紅外溫度傳感器?

    STM32如何通過IIC驅動MLX90614紅外溫度傳感器?
    發表于 01-27 07:11

    如何讀取來自 MLX90614 紅外溫度計算

    何讀取來自 MLX90614 紅外溫度計的單個和擴展 PWM 輸出并使用 PIC MCU 計算溫度。計算出的占空比由 UART 以 ASCII 格式發送。軟件實現用于讀取 PWM 信號。該代碼采用
    的頭像 發表于 06-21 17:57 ?4333次閱讀
    如何讀取來自 <b class='flag-5'>MLX90614</b> <b class='flag-5'>紅外</b>溫度計算

    如何使用 MLX90614 紅外測溫儀實現 SMBus 通信

    本文檔介紹了 PIC 微控制器中的 MLX90614 紅外溫度計 SMBus 通信。本文檔還介紹了紅外測溫儀的應用,以及典型電路示例和所用開發
    的頭像 發表于 06-21 17:47 ?8289次閱讀
    如何使用 <b class='flag-5'>MLX90614</b> <b class='flag-5'>紅外</b><b class='flag-5'>測溫</b>儀實現 SMBus 通信

    使用STM8S和MLX90614手持非接觸紅外測溫槍設計的工程文件和程序

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

    基于STM32MLX90614人體紅外測溫

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

    基于MLX90614的mcu的代碼實現紅外功能

    基于MLX90614的mcu的代碼實現紅外功能
    發表于 06-20 15:06 ?9次下載

    stm32中使用mlx90614的驅動代碼

    關于stm32中使用mlx90614的驅動代碼
    發表于 06-25 10:07 ?6次下載
    百家乐投注系统| 视频百家乐官网试玩| 皇宝国际网址| 大发888体育场下载| 威尼斯人娱乐城是波音| 百家乐首页红利| 百家乐筹码盒| 送彩金百家乐平台| 电玩百家乐的玩法技巧和规则 | 财神百家乐娱乐城| 玩百家乐如何硬| 好运来百家乐官网的玩法技巧和规则 | 真钱百家乐注册送| 太阳百家乐3d博彩通| 澳门百家乐会出老千吗| 百家乐官网平注法规则| 博狗玩百家乐好吗| 百家乐游戏大厅下| 百家乐翻天粤| 百家乐分析仪有真的吗| 百家乐娱乐分析软件v| 中华德州扑克协会| 真钱百家乐官网送钱| 百家乐官网娱乐皇冠世界杯 | 百家乐官网发牌靴遥控| 可信百家乐官网的玩法技巧和规则 | 在线百家乐官网安卓| 游戏百家乐官网押金| 属狗与属猪能做生意吗| 樱桃木百家乐桌| 1368棋牌官网| 百家乐官网是赌博吗| 公海百家乐官网的玩法技巧和规则 | 德州扑克算牌| 百家乐官网投注规则| 百家乐官网网上真钱娱乐场开户注册 | 百家乐官网算号软件| A8百家乐官网赌场娱乐网规则| 百家乐网址哪里有| 多台百家乐的玩法技巧和规则 | 澳博88|