服務熱線
SLKOR 是一家集電子產品設計、開發、生產、銷售於一體的高新技術企業。為客戶提供可靠的產品和相應的技術服務。品牌“SLKOR」已逐漸發展成為國際知名企業,為全球10,000多家客戶提供產品和解決方案。
力爭提供客戶全系列的配套產品, SLKOR 推出了數位紅外線熱電堆非接觸式溫度測量應用設計演示板系列使用手冊。
1.1名:使用手冊 SLKOR 數位紅外線熱電堆非接觸式溫度測量應用設計展示板
1.2應用:智慧穿戴裝置、智慧型手機、工業溫度監測、非接觸式人體表面溫度測量、智慧溫度感測與控制等短距離測溫的小型裝置。
1.3 SL-W-TRS-5.5Dx 系列示範板:
它用於評估和測試各種類型的感測器。測量結果將顯示在螢幕上,並可透過USB轉串口列印到PC上的串列埠調試軟體。按鈕說明:左側按鈕為重設按鈕,右側按鈕可控製程式的啟動和暫停。
2. SL-W-TRS-5.5Dx系列硬體設計
晶片引腳包括電源和I2C匯流排,共有4個引腳。允許的電源電壓範圍為2.3 - 3.6V。感測器本身的功耗非常低。電源地之間一個 0.1uF 的電容就夠了。如果感測器距離供電部分比較遠,可以考慮額外增加10uF的電容,以確保供電穩定並降低雜訊。
3. SL-W-TRS-5.5Dx 系列示範板說明
3.1 示範板採用Type-C插座供電,示範板供電電壓為5V。使用時,將演示板透過Type-C連接到PC,即可在螢幕上查看結果。如果需要透過串列埠顯示數據,則需要安裝WCH CH340驅動程序,然後使用串列埠調試軟體進行操作。串列通訊設定如下:波特率:9600,資料位元:8,停止位元:1,無奇偶校驗。
3.2 示範板螢幕顯示由上至下依序為:環境溫度(tamb)、感測器輸出電壓(vtp_cor)、物體(表面)溫度(tobj)、人體溫度(tbdy)。上述溫度值的單位為℃,電壓的單位為μV。其中,前三個值是設備的原始輸出。體溫值是根據本公司演算法在原始值的基礎上計算得出的,僅供參考。使用者可以根據自己的需求,使用自己的體溫演算法處理資料。
串口顯示效果
2。 SL-W-TRS-5.5Dx系列示範板程式範例
////////////////////////////////////////////////// ///////// ////////////////////////////////////////// ////////////////// //
// main.c
//////
#定義FOR_CUSTOMER
#ifdef FOR_CUSTOMER
#include“drv_uart.h”
#include“drv_i2c.h”
#include“drv_key.h”
#include“oled/oled.h”
#include“trs55d.h”
外部無效SystemCoreClockupdate(void);
外部無效delay_ms(int cnt);
int main(void)
{
uint8_t 鍵;
uint8_t運行= 0x01;
系統核心時鐘更新();
如果(SysTick_Config(系統核心時鐘/ 1000))
同時(1);
uartInit();
drv_i2c_init();
drv_key_init();
OLED_Init();
OLED_Refresh();
OLED_Clear();
OLED_ShowString(8,0,"坦姆:",16,1);
OLED_ShowString(8,16,"Vtp:",16,1);
OLED_ShowChinese(8,32,0,16,1);
OLED_ShowChinese(24,32,2,16,1);
OLED_ShowChinese(40,32,3,16,1);
OLED_ShowChinese(8,48,1,16,1);
OLED_ShowChinese(24,48,2,16,1);
OLED_ShowChinese(40,48,3,16,1);
OLED_Refresh();
串口發送字串("SL-W-TRS-5.5Dx演示程式」);
而(1){
密鑰= drv_key_read();
while(drv_key_read());
如果(鍵){
運行=(運行)?
}
如果(運行){
TRS55D_read();
OLED_Refresh();
}
延遲毫秒(20);
}
}
////////////////////////////////////////////////// ///////// ////////////////////////////////////////// ////////////////// //
//trs55d.h
//////
#ifndef _TRS55D_H_
#定義_TRS55D_H_
的#include
#定義TRS55D_NORMAL_Tobj_MSB_R 0x10
#定義TRS55D_NORMAL_Tobj_CSB_R 0x11
#定義TRS55D_NORMAL_Tobj_LSB_R 0x12
#定義TRS55D_NORMAL_TEMP_MSB_R 0x16
#定義TRS55D_NORMAL_TEMP_CSB_R 0x17
#定義TRS55D_NORMAL_TEMP_LSB_R 0x18
#定義TRS55D_NORMAL_DATA1_MSB_R 0x19
#定義TRS55D_NORMAL_DATA1_CSB_R 0x1A
#定義TRS55D_NORMAL_DATA1_LSB_R 0x1B
#定義TRS55D_NORMAL_DATA2_MSB_R 0x1C
#定義TRS55D_NORMAL_DATA2_CSB_R 0x1D
#定義TRS55D_NORMAL_DATA2_LSB_R 0x1E
#定義TRS55D_RAW_DATA1_MSB_R 0x22
#定義TRS55D_RAW_DATA1_CSB_R 0x23
#定義TRS55D_RAW_DATA1_LSB_R 0x24
#定義TRS55D_RAW_DATA2_MSB_R 0x25
#定義TRS55D_RAW_DATA2_CSB_R 0x26
#定義TRS55D_RAW_DATA2_LSB_R 0x27
#定義TRS55D_RAW_TEMP_MSB_R 0x28
#定義TRS55D_RAW_TEMP_CSB_R 0x29
#定義TRS55D_RAW_TEMP_LSB_R 0x2A
#define ADDR_TRS55D 0xFE //(0x7F << 1)
#define _STATUS_DRDY_ 0x01 void TRS55D_read(void);
#endif
////////////////////////////////////////////////// ///////// ////////////////////////////////////////// ////////////////// //
// trs55d.c
//////
的#include
#include“drv_i2c.h”
#include“trs55d.h”
#include“body_temp.h”
extern uint8_t uartSendString(const char* buf);
extern void OLED_ShowString(uint8_t x,uint8_t y, const char *chr,uint8_t size1,uint8_t mode);
extern void OLED_ShowBNum(uint8_t x,uint8_t y,浮點數,uint8_t len,
uint8_t 大小2,uint8_t 模式); uint8_t TRS55D_IIC_Read(uint8_t addr_dev, uint8_t addr_reg,
uint8_t *buf、uint16_t 計數)
{
uint8_t ret;
uint8_t ackflag;
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
drv_i2c_writebyte(addr_reg);
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPRD);
for(i = 0; i < count; i ++) { ackflag = (i < (count-1)) ? 1:0;緩衝區[i]
= drv_i2c_readbyte(ackflag);
}
drv_i2c_stop();
return ret;
}
無效TRS55D_IIC_Write(uint8_t addr_dev,uint8_t addr_reg,uint8_t *buf,uint16_t計數)
{
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
drv_i2c_writebyte(addr_reg);
for (i = 0; i < 計數; i ++)
{ drv_i2c_writebyte(buf[i]);
}
drv_i2c_stop();
}
類型定義聯合{
int16_t i16;
uint16_t u16;
結構體{
uint8_t u8l;
uint8_t u8h;
}聯合國;
}uu16_t;
類型定義聯合{
int32_t i32;
結構體{
uint8_t u8b0;
uint8_t u8b1;
uint8_t u8b2;
uint8_t u8b3;
}聯合國;
}uu32_t;
靜態字元緩衝區[264];
uu32_t tobj,tamb_cal;
uu32_t vtp_cor;
浮動vtp_uv_f = 0.0;
浮動vtp_cor_f = 0.0;
浮動 Tambf = 0.0;浮動 tobjf = 0.0;
浮動 tbdyf = 0.0;
無效TRS55D_read(無效)
{
uint8_t rbuf[4];
uint8_t raddr,rdat;
uint8_t waddr = 0x0,wdat = 0x0;
整數超時=0;
瓦位址 = 0x30;
wdat = 0x09;
TRS55D_IIC_Write(ADDR_TRS55D, waddr, &wdat,1);
//開始轉換delay_ms(100);
// 等待轉換結束
拉德 = 0x03;
做{
TRS55D_IIC_Read (ADDR_TRS55D, raddr, &rdat,1);
while(((rdat == 0xFF) || (!(rdat & 0x30))) && 超時++ < 200);
拉德 = 0x02;
做{
TRS55D_IIC_Read (ADDR_TRS55D, raddr, &rdat,1);
} while(((rdat == 0xFF) || (!(rdat & 0x0B))) && 逾時++ < 200);
// 校準後的電壓值
raddr = TRS55D_NORMAL_DATA1_MSB_R;
TRS55D_IIC_Read(ADDR_TRS55D,raddr,&rbuf[0],3);
vtp_cor.un.u8b2 = rbuf[0];
vtp_cor.un.u8b1 = rbuf[1];
vtp_cor.un.u8b0 =rbuf[2];
if (vtp_cor.un.u8b2 & 0x80) { vtp_cor.un.u8b3 = 0xFF;
}別的 {
vtp_cor.un.u8b3 = 0x00;
// 修正後的vtp
}
vtp_cor_f = (浮點)vtp_cor.i32/524288.0;
vtp_cor_f *= 1000;
// 校準後的環境溫度值
raddr = TRS55D_NORMAL_TEMP_MSB_R;
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rbuf[0],3);
tamb_cal.un.u8b2 = rbuf[0];
tamb_cal.un.u8b1 =rbuf[1];
tamb_cal.un.u8b0 =rbuf[2];
tambf = (浮點)tamb_cal.i32 / 16384.0; // 環境溫度
// 校準後物體(表面)溫度
raddr = TRS55D_NORMAL_Tobj_MSB_R;
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rbuf[0],3);
tobj.un.u8b2 = rbuf[0]; tobj.un.u8b1 = rbuf[1];
tobj.un.u8b0 =rbuf[2]; tobjf = (浮動)tobj.i32 / 16384.0;
// 物體(表面)溫度
// 取得體溫
tbdyf = get_body_temp(tambf,tobjf); // 取得體溫
// 在 uart 上顯示 sprintf(buffer, "tamb = %.2f, vtp_cor = %.2f, tobj = %.2f, tbdy = %.2f ", tambf, vtp_cor_f, tobjf, tbdyf); uartSendString(buffer);
// 在oled上顯示
浮點值[4] = {tambf, vtp_cor_f, tobjf, tbdyf+0.05};
OLED_ShowBNum(64, 0, vals[0], 4, 16, 1); // 坦姆布
OLED_ShowBNum(48, 16, vals[1], 6, 16, 1); // 虛擬連接埠
OLED_ShowString(112,16, "uv",16, 1);
OLED_ShowBNum(64, 32, vals[2], 4, 16, 1); // 目標物件
OLED_ShowBNum(64, 48, vals[3], 4, 16, 1); // 待定
}




粤公网安备44030002007346号