服务热线
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系列演示板程序示例
/////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// //
// 主程序
//////
#定义FOR_CUSTOMER
#ifdef FOR_CUSTOMER
#包括“drv_uart.h”
#包括“drv_i2c.h”
#包括“drv_key.h”
#包括“oled/oled.h”
#包括“trs55d.h”
外部无效SystemCoreClockupdate(void);
外部无效delay_ms(int cnt);
int main(void)
{
uint8_t键;
uint8_t运行=0x01;
系统核心时钟更新();
如果(SysTick_Config(SystemCoreClock / 1000))
同时(1);
UART初始化();
drv_i2c_初始化();
drv_key_init();
OLED初始化();
OLED刷新();
OLED清除();
OLED_ShowString(8,0,“Tamb:”,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刷新();
uart发送字符串(”SL-W-TRS-5.5Dx演示程序”);
while(1) {
密钥=drv_key_read();
当(drv_key_read())时;
如果(键){
运行 = (运行)?0:1;
}
如果(运行){
TRS55D_读取();
OLED刷新();
}
延迟毫秒(20);
}
}
/////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// //
//trs55d.h
//////
#如果定义 _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
#定义 ADDR_TRS55D 0xFE //(0x7F << 1)
#定义_STATUS_DRDY_ 0x01 void TRS55D_read(void);
#ENDIF
/////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// //
//trs55d.c
//////
的#include
#包括“drv_i2c.h”
#包括“trs55d.h”
#包括“body_temp.h”
外部uint8_t uartSendString(const char* buf);
外部void OLED_ShowString(uint8_t x,uint8_t y,const char *chr,uint8_t size1,uint8_t mode);
外部无效OLED_ShowBNum(uint8_t x,uint8_t y,float num,uint8_t len,
uint8_t size2,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确认标志;
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);
对于(i = 0;i < count;i ++){ackflag =(i <(count-1))?1:0;buf[i]
= drv_i2c_readbyte(确认标志);
}
drv_i2c_停止();
返回 ret;
}
void TRS55D_IIC_Write(uint8_t addr_dev, uint8_t addr_reg, uint8_t *buf, uint16_t count)
{
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
drv_i2c_writebyte(addr_reg);
对于(i = 0;i < 计数;i ++)
{ drv_i2c_writebyte(buf[i]);
}
drv_i2c_停止();
}
typedef union{
int16_t i16;
uint16_t u16;
结构{
uint8_t u8l;
uint8_t u8h;
}联合国;
}uu16_t;
typedef union{
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;
int超时=0;
waddr=0x30;
WDAT = 0x09;
TRS55D_IIC_Write(ADDR_TRS55D,waddr,&wdat,1);
//开始转换delay_ms(100);
// 等待转换结束
raddr=0x03;
做 {
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rdat,1);
} while(((rdat == 0xFF) || (!(rdat & 0x30))) && timeout++ < 200);
raddr=0x02;
做 {
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rdat,1);
} while(((rdat == 0xFF) || (!(rdat & 0x0B))) && timeout++ < 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];
如果 (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 = (float)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 上显示
浮点数vals[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); //VTP
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号