MLX90640 紅外熱成像儀測溫模塊開發筆記(三)工作流程和操作MLX90640 的一般步驟

默認參數時
MLX90640 的工作流程
(1) 上電,內部初始化(約 40ms)
(2) 讀取工作參數到控制和狀態寄存器
(3) 開始以 2Hz 的速率測量實時數據并更新到 RAM,自動更新狀態寄存器。
測量幀解釋
MLX90640 共有 768 個測量像素點,每次測量其中的一半,稱為 1 幀,故此完成 768 像
素需要測量 2 幀,用幀 0 和幀 1 來表示。即:所謂的 1 幀數據其實是完整像素的一半。
可以修改的參數
可以修改的參數有以下幾個方面:
? 自動測量:默認為自動測量,即自動循環測量幀 0 和幀 1 更新到RAM 中。與其對應的是手動測量,即:用指令來控制測量幀 0 還是幀 1。手動測量已經在官方的數據手冊中被刪除,看來 MLX 也不喜歡別人用,所以我們也就別用了。自動測量保持默認值,不要改就好。
? 幀分布:前面已經說了,1 幀實際上是測量完成了一半的像素點,這一半像素有兩種分布模式,手冊上稱為 TV 模式和 Chess 模式,TV 模式以行為單位,是指每幀只測量奇數行或者偶數行,Chess 模式是指以像素為單位,每次交錯著像素測 384 個像素點。我們可以稱之為“行交錯模式”和“像素交錯模式”。
在這方面,手冊上又說了,出廠時是以 Chess 模式校準的,具有最好的精度(言下之意就是說如果修改為了 TV 模式時會不準),鑒于此,這個參數也不要動。
? 測量分辨率:可選的有 16~19 位 AD 轉換精度,默認是 18 位,轉換位數當然是越
高越好了,但 18 和 19 位經過測試也沒有發現有什么實際區別,這個參數可改可不改。
? 測量速率:每秒測量幾幀數據,這個參數很有用處,畢竟我們希望成像后是連續的
動畫,每秒 2 次一定是不好的,我們可以調用 API 將這個參數修改為 8Hz 或者 16Hz 甚至 32Hz,64Hz 是不建議的,因為測量速率太快時噪聲特別大,圖像特別亂。普通相機的刷新速率也就 15Hz 左右,所以建議最高設置為 16Hz 吧。
所以,雖然數據手冊上寫的感覺好像可修改的參數挺多,這么一分析,其實只有 1 個測量速率是有用處的,其它都是浮云(雞肋)。
參數修改方法討論:
有兩種修改方法,修改寄存器和修改 EEPROM。
(1) 修改寄存器(推薦)
傳感器上電后會自動從 EEPROM 讀取參數到寄存器,寄存器內的參數值是運行時實際執行的參數,直接通過 I2C 修改寄存器值即可,隨用隨改、立即生效。寄存器的值是掉電遺失的, 所以每次上電后都要修改一次。
(2) 修改 EEPROM
EEPROM 是掉電不丟失的,所以修改 EEPROM 內的運行參數只需要一次,下次啟動生效。但
EEPROM 內存儲的不僅只是同步到運行寄存器的幾個參數,大部分的是 768 個像素的校準參數,這些參數是出廠時寫入的,特別重要,所以我的建議還是不要對 EEPROM 有任何的寫操作,以免發生意外,EEPROM 里的像素校正參數一旦被意外修改就再也找不回來了。
MLX90640 底層驅動Keil 項目(STC 單片機)下載
建議的操作流程
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); //預留一點時間讓 MLX 傳感器完成自己的初始化
MLX90640_SetRefreshRate(0); //測量速率 1Hz(0~7 對應 0.5,1,2,4,8,16,32,64Hz)
MLX90640_I2CRead(0x2400, 832, EE); //讀取像素校正參數MLX90640_ExtractParameters(EE, &MLXPars); //解析校正參數(計算溫度時需要)
while (1)
{
Delay_ms(5);
if (MLX90640_GetFrameData(Frame)==0) //有轉換完成的幀
{
Vdd=MLX90640_GetVdd(Frame, MLXPars); //計算 Vdd(這句可有可無) Ta=MLX90640_GetTa(Frame, MLXPars); //計算實時外殼溫度
Tr=Ta-8.0; //計算環境溫度用于溫度補償
//手冊上說的環境溫度可以用外殼溫度-8℃ MLX90640_CalculateTo(Frame, MLXPars, 0.95, Tr, Temp); //計算像素點溫度
/*
Temp 數組內即是轉換完成的實時溫度值,單位℃
可以在這里對得到的 32*24=768 個溫度值進行處理、轉換為顏色值、顯示關于溫度轉顏色方法,在后續的文章中會有專門介紹
*/
}
}
一點疑問
校正參數存儲于傳感器內部的 EEPROM,實時數據也來自傳感器,如何利用實時數據和校正
參數計算溫度的方法也是事先規定好的,MLX 為什么不直接在內部完成這個溫度計算讓用戶直接讀取溫度值?為了體現這個傳感器的復雜性或者是讓用戶有成就感嗎?
本來可以在傳感器內部解決的問題被廠家要求在外部完成,對 MCU 的性能要求是特別高的, 大量的浮點運算,大量的RAM 消耗,較低的效率。

-
紅外熱成像儀
+關注
關注
1文章
118瀏覽量
15168 -
測溫模塊
+關注
關注
0文章
11瀏覽量
2940 -
MLX90640
+關注
關注
3文章
22瀏覽量
1436
發布評論請先 登錄
普冉EEPROM在工業紅外熱成像儀中的應用
Made with KiCad(102):DIY 一個紅外熱成像儀

紅外熱成像儀+AI:Raythink燧石技術為機場安防裝上不眠的智慧之眼


優利德智慧巡檢新利器:UTi640X靈蛇系列智能紅外熱成像儀
【正點原子STM32H7R3開發套件試用體驗】+MLX90640熱成像
熱成像儀YRH400的工作原理

防爆紅外熱成像儀YRH550 在復雜高危環境中的使用方法

評論