基于NXP K32L2B MCU的额温枪参考方案(软件篇)

本文的前半部分介绍了该方案的硬件部分:

基于NXP K32L2B MCU的额温枪参考方案(硬件篇)

下面是软件部分的内容。

4、软件设计

世界卫生组织WHO认可的四个发烧检测部位是:直肠、腋下、口腔和耳温。不包括额温,因为不同肤色、室内还是室外,还有个体的差异,测量的温度会不一样,并不是一个恒定的温度。因此,用在额温测量时需要通过一定的算法计算出体温。

一切温度高于绝对零度的物体,均会依据其本身温度的高低发射定比例的红外辐射能量,辐射能量的大小及其按波长的分布与它的表面温度有着十分密切的关系。人体温度在(36~37℃)放射的红外波长为9~13um。依据此原理便能通过准确地测定人体额头的表面温度,修正额头与实际体温的温差便能显示基本准确的体温。

由于传感器厂商提供的都是25℃环境温度下的,对目标不同温度下的测量数据,精度到0.1度。但是并没有提供各种环境温度下详细的测试数据,比如6℃、10℃、20℃、30℃、40℃等,另外目前昼夜环境温度变化也会有影响。

因此为了解决这个问题,需要做温度标定。其实也有终极方案,就是使用完全不受环温影响的恒温探头,但是成本就高了。

温度标定的意义和方法

为了实现不同环温下的目标对象测温,在不同温度下的补偿数值需要事先做到表格里面,点数越多,精度越高,需要精度很高的恒温室来配合。这也是为什么有些市面上低端的测试仪精度不好,重复测温精度差,每次测量的数值不完全一样的原因之一。

曾经想过如果传感器能提供在不同环境温度下的测试数值足够多的话,应该可以曲线拟合一下,但实际上人体温度区间较窄,近似于一段直线。即使是在环境温度25℃、30℃、40℃情况下,被测温度在20~50℃范围内,传感器标称的数值基本上近似是一段直线。

图中系列一为20度环温,系列二是25度环温,系列三是30度环境,系列四是40度环温,系列五是50度环温。

传感器实际测温补偿算法的精准度,要求有大量的人体测温实测数据积累,并结合大数据分析,得出测温补偿规律,所以数据越多越复杂,得出的补偿算法就越准。

下面描述测量温度计算的软件算法,在环境温度变化的情况下,影响热电堆相关的因素。创建校准和温度补偿的必要步骤,以及在K32L2B MCU中实现物体温度计算的算法。

下表列出了以下说明中各个标识符的含义:

TP热电堆
Tobj物体温度
Tsen传感器温度
Tsen.ref校准时参考传感器温度
Delta TDelta T=Tsen-Tsen.ref
Vtp热电堆电压
TCsens热电堆灵敏度温度系数
Sconv灵敏度转换系数
Vtp.corr由Sconv校正的热电堆电压
Voffs偏移量,即参考曲线(存储在LUT表中)与实际曲线之间的电压差
Voffs.tc通过Tcf校正的Voffs(偏移量)
TcfTC系数,即TCF=1+ Delta T×TCsens
Vtp.ref计算热电堆在Tsen.ref温度下的电压
Vtp.ref.tc由Vtcf校准的Vtp.ref
LUT查找表

热电堆特性及温度测量

下图显示了典型的热电堆输出电压(在本例中为5μm截止滤波器)作为被测物体和环境的温度。

在环境温度变化的情况下,有两个重要的影响值得注意:

  1. 热电堆探测红外辐射。
    这个辐射是来自物体对象和从传感器本身输出辐射。
    因此,热电堆输出电压是:如果目标物体温度>传感器,则VTP>0温度;如果目标物体温度<传感器,则VTP<0温度;

  2. 随着环境温度的升高,灵敏度降低。
    由于材料特性(热电偶材料,薄膜材料)在较高的环境温度下,灵敏度(每吸收辐射的伏特数)较低。
    这个温度系数TCsens表示热电堆特性。

整个曲线在不同的电压水平下,根据环境的变化而变化温度。

这些曲线之间的间隔距离在这里称为偏移量Voffs。曲线的梯度(与热电堆的灵敏度成正比),环境温度越高,曲线越平坦。请注意,曲线特性仅取决于热电堆滤波器的特性。在大多数应用中,滤波器特性的这种变化可以忽略不计。

温度测量应该是在应用程序中完成,测量结果存在数据表中。步长取决于温度检测所需的精度和微控制器可用内存大小。后面需要对这个LUT执行两个操作查表和反查表,V=LUT(T)以及T=RLUT(V)。

例如 V=LUT(T=45)=1.70mv;T=RLUT(V=4.34mV) =70度

参数校准

测量热电堆参数,需要确定与实际热电堆测量值和与参考热电堆电压。将这些参数存储在Flash中,所需参数是热电堆和与参考热电堆传感器相比的灵敏度,灵敏度转换系数Sconv。

额温枪属于点测温,为了达到更高的测温精度±0.1℃,业界普遍采用黑体校准设备,可以设置温度值,是标准的温度源,红外测试设备以黑体的温度为准进行实时校准。

黑体布设在红外测试设备对面,保证测温精度在较高的水准上(±0.3℃精度),黑体只需供电即可,黑体自身可以达到±0.1℃精度。

实际测试中,放置3个黑体,目标温度分别为35℃、41℃和37℃。用额温枪分别测前两个黑体的温度,并进行校准,然后测试最后一个黑体的温度,判断校准后的读数是否与37℃的差别,直到满足准确度的要求。现在计量单位一般是取最小和最大的两个温度数值。

在某些应用中,根本不需要确切地知道每个传感器的TCsens,这意味着可以直接参考数据表中的参数。在这种情况下,只需要“一次环境温度校准”来测量灵敏度。

下面描述如何测量计算Sconv。校准点,参考传感器在一定温度情况下的输出电压数值查表如下。

需校准标定的热电堆TP测量数值为8.15mV,因此转换系数是0.982。

这里,在红外测温产品线使用的标准恒温室Tsen=Tref=25°C和Tobj=100°C时,将正在校准传感器TP的电压与参考标准源的电压进行比较,结果是灵敏度转换因子Sconv为0.982。此值必须存储在被校准测温设备的Flash中。

在MCU中进行计算

在K32L2B MCU中如何计算对象目标的温度呢,首先LUT参考表存在MCU Flash中,TCsens在数据手册中可以查到出处如下;其次,实际传感器的Sconv灵敏度转换系数也存在Flash中。

下面是根据传感器的输出电压计算目标温度的例子:

  1. Vtp = 3.00mV, Sconv = 0.982

  2. Vtp.corr=Vtp/Sconv = 3.00mV /0.982 = 3.055mV

  3. Tsen = 30°C 计算参考环境温度传感器的电压

  4. Tcf = 1+(Delta T x TCsens)= 1 + [(30°C – 25°C) x (-0.0045/K)]= 0.955

  5. Voffs = LUT(Tsen) = LUT(30°C) =0.39mV

  6. Voffs.tc = Voffs x Tcf = 0.39mVx 0.955 = 0.372mV 环境温度偏置电压

  7. Vtp.ref = Vtp.corr + Voffs.tc =3.055mV + 0.372mV = 3.427mV

  8. Vtp.ref.tc = Vtp.ref/Tcf =3.427mV / 0.955 = 3.588mV

  9. Tobj= RLUT (3.588mV) = 63.44°C

创建热电堆二维查表,如下给出了被测TP的参考曲线或校准曲线。这个校准曲线是通过测量一个或更多点后创建的。校准时记录传感器温度(在这种情况下为25°C)。

Tsen =35度,Tobj =65度。

Vtpgradient[65,35]= 3.76mV * (1+(35-25)*-0.0045/K)

Vtpgradient[65,35]= 3.591mV

测温枪结构位置以及标定方法

由于每家测温枪方案商的结构设计和光学设计不太一样,但是总体思路类似。

通常测温枪方案商会考虑整个枪体的结构,设计好结构后会将PCB板以及菲涅尔透镜组装在结构上,通过调节菲涅尔镜放在波导管多个齿轮上的位置,来调试测温枪的视场角。

调试完成后,测温枪方案商会进行标定(恒温水槽或者黑体),将标定得到的数据写入K32L2B MCU,并将其参数与传感器参数表进行对比修正,最终得到完成额温枪的设计另外产品完成以后,应满足JJG 856-2015工作用辐射温度计检定规程。

恒温水槽设定25度,然后水槽用水银和温度检测25度偏差0.1度以内,将额温枪上电后传感器头放置水槽保持5分钟,按键复位软件设定显示25度即可校准。

4.1 K32L2B基础软件包

基础软件包可以从kex.nxp.com官方网站下载,参考如下界面。选择官方推荐的K32L2B开发板下载软件驱动开发包。

4.2 ADC, DAC模拟部分代码

ADC 配置为VLPS模式下,使用内部时钟,连续转换模式下,功耗大约330uA。ADC采用DMA的方式实现。

连续的ADC DMA的例子可以参考SDK2.6.0安装包的代码,其对应的驱动程序目录地址为:

\boards\frdmk32l2b\driver_examples\adc16\continuous_dma

DAC驱动程序的地址为:

\driver_examples\dac

4.3 LCD, GPIO HMI人机交互代码

LCD的Segment和COM可以任意配置,相对PCB布板走线比较灵活。按键通过GPIO采用LLWU唤醒引脚。LCD配置参考如下的逻辑真值表配置相应的段或者COM口。

另外GPIO引脚中可以配置为中断的是GPIOA和GPIOC,其他GPIO引脚不能配置为中断。

   EXPORT  PORTA_IRQHandler        

   EXPORT  PORTC_PORTD_IRQHandler 

sLCD驱动的程序文件夹地址如下:

boards\frdmk32l2b\driver_examples\slcd

GPIOs输入中断的程序文件夹地址如下:

\boards\frdmk32l2b\driver_examples\gpio\input_interrupt

4.4 I2C传感器信号采集

使用I2C对温度和数字接近温度传感器进行信号采集。

I2C支持 DMA功能,可以最大限度降低CPU负荷,提高系统采集的实时性。测试温度速度快。测量显示在1s内完成。

I2C DMA的参考代码程序文件夹地址如下:

boards\frdmk32l2b\driver_examples\i2c\dma_b2b_transfer

4.5 低功耗待机代码

在低泄漏LLS模式下,功耗大概在2uA左右,可以通过LLWU按键唤醒。运行内部48Mhz时钟,24Mhz Flash时钟,供电电压VDD = 3.0 V,所有外设开启的情况下,功耗6mA左右。

20s内如果没有任何操作,系统进入待机模式,因此系统待机工作时间长。

各种低功耗操作以及唤醒的程序代码文件夹地址如下:

\boards\frdmk32l2b\demo_apps\power_mode_switch

4.6 烧写K32L2器件

生产线通过USB口,使用Kinetis FlashTool.exe提供的blhost.exe,执行如下命令行代码,

blhost.exe-u-flash-erase-all-unsecure

blhost.exe-u-reset timeout 2

blhost.exe-u-flash-image HDX-xxxx_ChargeCase.hex pause

可以通过USB同时从一台PC写入多颗K32L2的MCU中。也可以使用如下GUI软件进行烧录。

为了使用NMI引脚拉低的操作进入Bootrom,FOPT的BOOTPIN_OPT位需要设置为0,因此需要将FOPT=0x3F (BOOTPIN_OPT=1)修改为FOPT=0x3D (BOOTPIN_OPT=0) 。

将软件配置FOPT 设置为 0x3D,上电前将NMI引脚拉低,执行RESET操作就可以进入ROM bootloader。一旦进入Bootloader,然后执行RESET,K32L2B MCU会在3s内启动,此后如果再次按RESET引脚,将不会有3s的启动延迟,会立即启动。

当然也可以在应用中添加如下的代码使能不带Rom的启动模式。

/* no rom 启动. */

RCM->FM= 0; /*  no rom.*/

RCM->MR= RCM->MR; /*清除标志*/

注意:硬件设计中NMI引脚默认需要接上拉10K电阻到电源,如果程序在运行过程中外部将这个引脚拉地或者外接电容到GND, 低电平触发不可屏蔽中断。

如果要禁用NMI引脚,将其配置为IO口,需要将非可屏蔽中断NMI引脚配置为其他功能,通过FOPT[NMI_DIS]为设置为0来禁止NMI功能。

另外板上NMI脚对GND若有1uF下拉电容,因此NMI引脚上拉电阻要从10k改为1k。

在应用电路设计中没有使用NMI的功能,但是使用了NMI脚的GPIO输入按键功能,也就是实际上NMI功能被禁用了,如果要从APP进入Bootrom,可以采用如下代码。

uint32_t runBootLoaderAddress;

void (*runBootloader)(void *arg);

runBootLoaderAddress = **(uint32_t **)(0x1c00001c);

runBootloader =(void(*)(void *arg))runBootLoaderAddress;

runBootloader(NULL);  

4.7 PCB实物和实际调试要点

   

  • 第48脚(VLL3),为VLCD 提供外部供电,上拉10K电阻到电源,sLCD显示不会出现拖影。

  • 做低功耗调试,如果Jlink连接找不到内核,可通过复位短地才能连上Jlink。如果SWD DIO上面有个电阻,会出现如下连接错误,去掉额外的外部电阻,直接连接SWD调试口。

对SWD_DIO引脚,芯片使能了内部上拉,对于SWD_CLK引脚,芯片使能了内部下拉,外部不需要额外的电阻上下拉配置。

  • MCU DAC输出偏置电压是1.247V,给到运放的输入负端。NTC测温电阻点位电压为2.4V。传感器里面的NTC精度只有±3%  怎么让测温精度达到±0.1度?NTC电阻也需要校准的,通过恒温箱配合程序进行校准。
    目前NTC的阻值和温度的关系,通过查表来计算,通过实际测试电阻的大小,来换算为RT表中的温度数值。
    NTC电阻的采集和红外探头信号的输出是分开采集,同时采集的话,由于NTC的电压大,会对红外探头信号有影响。

5、结束语

体温,作为最基础个人体征信息所包含的医疗价值,特别是体温检测在公共卫生事件中快速简单的筛查的作用,已经被广泛的认同和重视。

该方案同样可以运用于耳温枪、奶温测试仪等支持段码LCD显示场合。

K32L2B系列中比较低端的K32L2B11VFM0A更可以运用在红外热电堆传感器模块应用场景,基于KL32L2B丰富的数字通信外设,支持USB, I2C, SPI或者UART等输出形式对接外围的系统主机,例如一些小区或者校区的测温门的应用等。

另外非接触的测温采用无线方式,实现病人基础体温测量和无纸化记录,采集结果并入数字化医疗信息平台。

亦可采用分离式设计方式,无源测温标签贴佩戴于病人体表,进行身份标识和识别,手持移动PDA终端(支持NFC的Andriod系统)通过非接触扫描,实现体温测量并实现与HIS/EMR的后台无缝集成。

无线电子体温标签可以采用LPC8N04MCU实现,LPC8N04芯片支持NFC场取电或者电池取电,内置NFC接口,支持ISO 14443 type A协议,内置温度传感器,通过NFC Reader芯片CLRC66303HN实现对测温标签的非接触无线方式温度收集。

延申:其它MCU选项

NXP提供了广泛的资源选择,从入门级到高精度SOC方案,为用户提供高可靠,高集成度,高性价比的MCU方案。

除了本文前面介绍的K32L2B系列外,需要的朋友可以进一步地了解以下一些产品系列:

关于各产品系列的详细信息,请登陆恩智浦官网查询。

1.谷歌开源 Pigweed,其实是一个嵌入式库!

2.为什么买了开发板只能吃灰,还是学不会嵌入式?

3.不同的内核源码编译出来的ko文件,区别到底是什么?

4.基于NXP K32L2B MCU的额温枪参考方案(硬件篇)

5.嵌入式编程中,如何使用复杂指针?

6.嵌入式系统中AI和ML的实际应用

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值