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 的精度。
硬件接口:
引腳 |
說明 |
SCL |
|
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ù)。
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。
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)
//發(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í)序
時(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接口讀和寫。
RAM中不能寫入數(shù)據(jù),只能進(jìn)行讀取,并且只有有限數(shù)目是客戶感興趣的。
TA是環(huán)境溫度地址,Tobj1是物體溫度低8位,Tobj2是物體溫度高8位。
讀取數(shù)據(jù)流程如下:設(shè)備地址為0x0
①發(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;
}
-
濾波器
+關(guān)注
關(guān)注
158文章
7596瀏覽量
176581 -
STM32
+關(guān)注
關(guān)注
2258文章
10828瀏覽量
352493 -
I2C
+關(guān)注
關(guān)注
28文章
1452瀏覽量
122253 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
4771瀏覽量
96177 -
紅外測(cè)溫
+關(guān)注
關(guān)注
2文章
182瀏覽量
14982
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論