TSEV01CL55红外温度传感器的驱动设计与实现

有时候我们需要检测一些无法直接接触的器件的温度。为了实现这一需求,我们通常会选择红外温度传感器来实现这一功能。考虑到复用的问题,我们一般会将操作元器件的代码抽象为驱动函数以备调用。这里我们就来设计并实现tsev01cl55红外温度传感器的驱动。
1 、功能概述
tsev01cl55是一种基于红外辐射检测的无接触测温系统。tsev01cl55在前端装有红外传感器(热电堆)。
1.1 、硬件描述
tsev01cl55适用于需要非接触式温度测量的广泛应用场合。tsev01cl55红外温度传感器测温时,热堆传感器必须指向所要测量的目标对象。tsev01cl55红外温度传感器的引脚定义如下:
tsev01cl55红外温度传感器测温基本工作原理是:用热电堆传感器探测红外辐射,该传感器将入射辐射转换成模拟电压;用热敏电阻测定传感器温度。根据测到的目标温度和环境温度数据进一步的进行模拟信号处理和调理,使用处理单元计算环境温度和物体温度。
1.2 、通讯接口
tsev01cl55红外温度传感器对外通讯采用数字输出总线(i2c)。通过i2c总线和响应的操作命令就可以得到物体温度和环境温度数据。这两个值都是以百分之一的度数传输的。相关的操作命令如下:
tsev01cl55红外温度传感器测温有一定的范围限制,当环境或物体温度超过指定温度范围时,温度输出显示以下数据:
tsev01cl55红外温度传感器的i2c硬件模块在scl“锁存”问题上进行了更改。修改后的i2c模块不再下拉scl命令主程序等待数据的计算。因此,主设备必须增加等待时间,以确保从设备能够组织数据。对于标准数据传输(比如读取温度),1ms的时间足够从设备组织数据。对于需要更多时间的操作(如读取/写入eeprom),应该留取足够的时间等待从设备处理数据。
向tsev01cl55红外温度传感器写命令时序如下:
从tsev01cl55红外温度传感器读数据时序如下:
上述时序图是读取目标温度的时序图。其它数据的读写过程类似,在此不再赘述。
2 、驱动设计与实现
我们已经了解了tsev01cl55红外温度传感器的基本情况。接下来我们将设计并实现tsev01cl55红外温度传感器的通用驱动程序。
2.1 、对象定义
在使用一个对象之前我们需要获得一个对象。同样的我们想要tsev01cl55红外温度传感器对象就需要先定义tsev01cl55红外温度传感器的对象。如何得到tsev01cl55红外温度传感器的对象呢?接下来我们就来考虑这个问题。
2.1.1 、对象的抽象
我们要得到tsev01cl55红外温度传感器对象,需要先分析器基本特性。一般来说,一个对象至少包含两方面的特性:属性与操作。接下来我们就来从这两个方面思考一下tsev01cl55红外温度传感器的对象。
先来考虑属性,作为属性肯定是用于标识或记录对象特征的东西。我们来考虑tsev01cl55红外温度传感器对象属性。作为i2c通讯从设备,在总线上唯一区别不同设备的就是设备地址。所以我们将i2c设备地址作为对象的一个属性。tsev01cl55红外温度传感器所检测的环境温度和目标温度虽然不能唯一标识tsev01cl55红外温度传感器对象,但可以记录当前的状态所以我们将其作为对象的属性。
接着我们还需要考虑tsev01cl55红外温度传感器对象的操作问题。对于i2c通讯设备,我们需要向设备写命令,同时也要从设备接收数据,但不论是接收数据还是发送命令都依赖于硬件接口和相关的硬件平台,所以我们将写命令和收数据作为tsev01cl55红外温度传感器对象的两个操作。此外,操作过程中我们需要时序操作,而延时操作都依赖于具体的平台,所以我们将延时操作作为tsev01cl55红外温度传感器对象的一个操作。
根据上述我们对tsev01cl55红外温度传感器的分析,我们可以定义tsev01cl55红外温度传感器的对象类型如下:
//定义tsev01cl55红外温度传感器对象类型typedef structhlptobject{ uint8_t devaddress; //对象的地址 float tempobject; //对象温度值 float tempambient; //环境温度 void (*delayms)(volatile uint32_tntime); //延时操作指针 void (*receive)(struct hlptobject *hlpt,uint8_t *rdata,uint16_t rsize); //接收数据操作指针 void (*transmit)(struct hlptobject *hlpt,uint8_t *wdata,uint16_t wsize); //发送数据操作指针}hlptobjecttype;2.1.2 、对象初始化
我们知道,一个对象仅作声明是不能使用的,我们需要先对其进行初始化,所以这里我们来考虑tsev01cl55红外温度传感器对象的初始化函数。一般来说,初始化函数需要处理几个方面的问题。一是检查输入参数是否合理;二是为对象的属性赋初值;三是对对象作必要的初始化配置。据此我们设计tsev01cl55红外温度传感器对象的初始化函数如下:
/* 红外温度传感器对象初始化 */void hlptinitialization(hlptobjecttype*hlpt, //初始化的对象变量 uint8_t address, //设备i2c地址 hlptreceive receive, //接收函数指针 hlpttransmit transmit, //发送函数指针 hlptdelayms delayms //毫秒延时函数指针 ){ if((hlpt==null)||(receive==null)||(transmit==null)||(delayms==null)) { return; } hlpt->receive=receive; hlpt->transmit=transmit; hlpt->delayms=delayms; hlpt->tempobject=0.0; hlpt->tempambient=0.0; if(address>0x00) { hlpt->devaddress=address; } else { hlpt->devaddress=hlptslaveaddress; }}2.2 、对象操作
我们已经完成了tsev01cl55红外温度传感器对象类型的定义和对象初始化函数的设计。但我们的主要目标是获取对象的信息,接下来我们还要实现面向tsev01cl55红外温度传感器的各类操作。
面向tsev01cl55红外温度传感器的操作比较简单,最主要的就是读取温度数据,包括环境温度和目标温度。所以我们开发获取面向tsev01cl55红外温度传感器数据的操作如下:
/* 读取数据 */static uint16_treaddatafromhlpt(hlptobjecttype *hlpt,uint8_t cmd){ uint8_t data[2]; uint16_t tempcode; hlpt->transmit(hlpt,cmd,1); hlpt->delayms(1); hlpt->receive(hlpt,data,2); tempcode=(data[0]devaddress,tdata,tsize,1000);}对于延时函数我们可以采用各种方法实现。我们采用的stm32平台和hal库则可以直接使用hal_delay()函数。于是我们可以调用初始化函数如下:
hlptinitialization(&hlpt,0x54,receivefromhlpt,transmittohlpt,hal_delay);
3.2 、基于对象进行操作
我们定义了对象变量并使用初始化函数给其作了初始化。接着我们就来考虑操作这一对象获取我们想要的数据。我们在驱动中已经将获取数据并转换为转换值的比例值,接下来我们使用这一驱动开发我们的应用实例。
/*读取温度值*/void gettemperaturedata(void){ float tempobject; float tempambient; gethlptemperature(&hlpt); tempobject=hlpt.tempobject; tempambient=hlpt.tempambient;}4 、应用总结
我们实现了tsev01cl55红外温度传感器的驱动,并再次基础上设计了一个简单的验证应用。我们得到了目标温度和环境温度。这说明我们的驱动设计是成功的。
在使用驱动时我们需要注意,与tsev01cl55红外温度传感器的i2c通讯会出现锁死的情况,特别是使用硬件i2c收发器的时候。而且tsev01cl55红外温度传感器不会在数据准备好后下拉scl电平,所以读取数据时,需要给以足够的延时来保证数据准备就绪。
在使用tsev01cl55红外温度传感器的驱动时还应注意,tsev01cl55红外温度传感器有一个固定的地址0x54,在初始化时输入此地址,若不给定这个地址就会以广播的方式通讯。

浅谈两会民声之医疗
面部表情识别的伦理问题
如何使用很少的IO端口线将该触摸键直接与LCD相连的电容式触摸控制方案
关于通信技术的几个经典小故事
一文详解交换机间VLAN的通信过程
TSEV01CL55红外温度传感器的驱动设计与实现
云计算安全风险主要在哪些方面
中国科学院研究人员开发了一种新型生物医学内窥镜
R型低频变压器和高频变压器有怎样的区别?
运营商对于NB-IoT都有哪些关键的布局?
广凌耗材管理系统 |让耗材管理更科学
智联微科携TRINAMIC最新产品将在中国(成都)电子信息博览会
什么是DNN_如何使用硬件加速DNN运算
拿什么拯救你---我的百年非遗包子
晶科储能成功交付首批客户定制化要求的工商业储能一体机SunGiga
PCB电路板的灌封胶该如何选择?
带有精确剩余电量指示的电池管理方案
白天也可享受到超大屏幕影音的震撼,酷乐视Q6旗舰版拆解
什么是插件电阻?选择插件电阻需要考虑哪些因素呢?
软银选择诺基亚云原生5G核心软件