MLX90640 紅外熱成像儀測(cè)溫模塊開(kāi)發(fā)筆記(三)工作流程和操作MLX90640 的一般步驟
河北穩(wěn)控科技MLX90640 紅外熱成像傳感器
默認(rèn)參數(shù)時(shí)
MLX90640 的工作流程
(1) 上電,內(nèi)部初始化(約 40ms)
(2) 讀取工作參數(shù)到控制和狀態(tài)寄存器
(3) 開(kāi)始以 2Hz 的速率測(cè)量實(shí)時(shí)數(shù)據(jù)并更新到 RAM,自動(dòng)更新?tīng)顟B(tài)寄存器。
測(cè)量幀解釋
MLX90640 共有 768 個(gè)測(cè)量像素點(diǎn),每次測(cè)量其中的一半,稱(chēng)為 1 幀,故此完成 768 像
素需要測(cè)量 2 幀,用幀 0 和幀 1 來(lái)表示。即:所謂的 1 幀數(shù)據(jù)其實(shí)是完整像素的一半。
可以修改的參數(shù)
可以修改的參數(shù)有以下幾個(gè)方面:
? 自動(dòng)測(cè)量:默認(rèn)為自動(dòng)測(cè)量,即自動(dòng)循環(huán)測(cè)量幀 0 和幀 1 更新到RAM 中。與其對(duì)應(yīng)的是手動(dòng)測(cè)量,即:用指令來(lái)控制測(cè)量幀 0 還是幀 1。手動(dòng)測(cè)量已經(jīng)在官方的數(shù)據(jù)手冊(cè)中被刪除,看來(lái) MLX 也不喜歡別人用,所以我們也就別用了。自動(dòng)測(cè)量保持默認(rèn)值,不要改就好。
? 幀分布:前面已經(jīng)說(shuō)了,1 幀實(shí)際上是測(cè)量完成了一半的像素點(diǎn),這一半像素有兩種分布模式,手冊(cè)上稱(chēng)為 TV 模式和 Chess 模式,TV 模式以行為單位,是指每幀只測(cè)量奇數(shù)行或者偶數(shù)行,Chess 模式是指以像素為單位,每次交錯(cuò)著像素測(cè) 384 個(gè)像素點(diǎn)。我們可以稱(chēng)之為“行交錯(cuò)模式”和“像素交錯(cuò)模式”。
在這方面,手冊(cè)上又說(shuō)了,出廠時(shí)是以 Chess 模式校準(zhǔn)的,具有最好的精度(言下之意就是說(shuō)如果修改為了 TV 模式時(shí)會(huì)不準(zhǔn)),鑒于此,這個(gè)參數(shù)也不要?jiǎng)印?br />
? 測(cè)量分辨率:可選的有 16~19 位 AD 轉(zhuǎn)換精度,默認(rèn)是 18 位,轉(zhuǎn)換位數(shù)當(dāng)然是越
高越好了,但 18 和 19 位經(jīng)過(guò)測(cè)試也沒(méi)有發(fā)現(xiàn)有什么實(shí)際區(qū)別,這個(gè)參數(shù)可改可不改。
? 測(cè)量速率:每秒測(cè)量幾幀數(shù)據(jù),這個(gè)參數(shù)很有用處,畢竟我們希望成像后是連續(xù)的
動(dòng)畫(huà),每秒 2 次一定是不好的,我們可以調(diào)用 API 將這個(gè)參數(shù)修改為 8Hz 或者 16Hz 甚至 32Hz,64Hz 是不建議的,因?yàn)闇y(cè)量速率太快時(shí)噪聲特別大,圖像特別亂。普通相機(jī)的刷新速率也就 15Hz 左右,所以建議最高設(shè)置為 16Hz 吧。
所以,雖然數(shù)據(jù)手冊(cè)上寫(xiě)的感覺(jué)好像可修改的參數(shù)挺多,這么一分析,其實(shí)只有 1 個(gè)測(cè)量速率是有用處的,其它都是浮云(雞肋)。
參數(shù)修改方法討論:
有兩種修改方法,修改寄存器和修改 EEPROM。
(1) 修改寄存器(推薦)
傳感器上電后會(huì)自動(dòng)從 EEPROM 讀取參數(shù)到寄存器,寄存器內(nèi)的參數(shù)值是運(yùn)行時(shí)實(shí)際執(zhí)行的參數(shù),直接通過(guò) I2C 修改寄存器值即可,隨用隨改、立即生效。寄存器的值是掉電遺失的, 所以每次上電后都要修改一次。
(2) 修改 EEPROM
EEPROM 是掉電不丟失的,所以修改 EEPROM 內(nèi)的運(yùn)行參數(shù)只需要一次,下次啟動(dòng)生效。但
EEPROM 內(nèi)存儲(chǔ)的不僅只是同步到運(yùn)行寄存器的幾個(gè)參數(shù),大部分的是 768 個(gè)像素的校準(zhǔn)參數(shù),這些參數(shù)是出廠時(shí)寫(xiě)入的,特別重要,所以我的建議還是不要對(duì) EEPROM 有任何的寫(xiě)操作,以免發(fā)生意外,EEPROM 里的像素校正參數(shù)一旦被意外修改就再也找不回來(lái)了。
MLX90640 底層驅(qū)動(dòng)Keil 項(xiàng)目(STC 單片機(jī))下載
建議的操作流程
unsigned short EE[832]; unsigned short Frame[834]; paramsMLX90640 MLXPars; float Vdd,Ta,Tr;
float Temp[768];
IIC_Init(); //I2C 初始化
MLX90640_I2CInit(); //MLX 傳感器初始化
Delay_ms(50); //預(yù)留一點(diǎn)時(shí)間讓 MLX 傳感器完成自己的初始化
MLX90640_SetRefreshRate(0); //測(cè)量速率 1Hz(0~7 對(duì)應(yīng) 0.5,1,2,4,8,16,32,64Hz)
MLX90640_I2CRead(0x2400, 832, EE); //讀取像素校正參數(shù)MLX90640_ExtractParameters(EE, &MLXPars); //解析校正參數(shù)(計(jì)算溫度時(shí)需要)
while (1)
{
Delay_ms(5);
if (MLX90640_GetFrameData(Frame)==0) //有轉(zhuǎn)換完成的幀
{
Vdd=MLX90640_GetVdd(Frame, MLXPars); //計(jì)算 Vdd(這句可有可無(wú)) Ta=MLX90640_GetTa(Frame, MLXPars); //計(jì)算實(shí)時(shí)外殼溫度
Tr=Ta-8.0; //計(jì)算環(huán)境溫度用于溫度補(bǔ)償
//手冊(cè)上說(shuō)的環(huán)境溫度可以用外殼溫度-8℃ MLX90640_CalculateTo(Frame, MLXPars, 0.95, Tr, Temp); //計(jì)算像素點(diǎn)溫度
/*
Temp 數(shù)組內(nèi)即是轉(zhuǎn)換完成的實(shí)時(shí)溫度值,單位℃
可以在這里對(duì)得到的 32*24=768 個(gè)溫度值進(jìn)行處理、轉(zhuǎn)換為顏色值、顯示關(guān)于溫度轉(zhuǎn)顏色方法,在后續(xù)的文章中會(huì)有專(zhuān)門(mén)介紹
*/
}
}
一點(diǎn)疑問(wèn)
校正參數(shù)存儲(chǔ)于傳感器內(nèi)部的 EEPROM,實(shí)時(shí)數(shù)據(jù)也來(lái)自傳感器,如何利用實(shí)時(shí)數(shù)據(jù)和校正
參數(shù)計(jì)算溫度的方法也是事先規(guī)定好的,MLX 為什么不直接在內(nèi)部完成這個(gè)溫度計(jì)算讓用戶(hù)直接讀取溫度值?為了體現(xiàn)這個(gè)傳感器的復(fù)雜性或者是讓用戶(hù)有成就感嗎?
本來(lái)可以在傳感器內(nèi)部解決的問(wèn)題被廠家要求在外部完成,對(duì) MCU 的性能要求是特別高的, 大量的浮點(diǎn)運(yùn)算,大量的RAM 消耗,較低的效率。
-
紅外熱成像儀
+關(guān)注
關(guān)注
1文章
111瀏覽量
14906 -
測(cè)溫模塊
+關(guān)注
關(guān)注
0文章
11瀏覽量
2852 -
MLX90640
+關(guān)注
關(guān)注
2文章
22瀏覽量
1232
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論