查看: 4897|回复: 2

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

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3301

    主题

    6548

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32040
    最后登录
    2024-4-28
    发表于 2020-4-9 09:05:30 | 显示全部楼层 |阅读模式
    基于NXP K32L2B MCU的额温枪参考方案(软件篇)

    本文的前半部分介绍了该方案的硬件部分:
    下面是软件部分的内容。


    4、软件设计

    世界卫生组织WHO认可的四个发烧检测部位是:直肠、腋下、口腔和耳温。不包括额温,因为不同肤色、室内还是室外,还有个体的差异,测量的温度会不一样,并不是一个恒定的温度。因此,用在额温测量时需要通过一定的算法计算出体温。
    一切温度高于绝对零度的物体,均会依据其本身温度的高低发射定比例的红外辐射能量,辐射能量的大小及其按波长的分布与它的表面温度有着十分密切的关系。人体温度在(36~37℃)放射的红外波长为9~13um。依据此原理便能通过准确地测定人体额头的表面温度,修正额头与实际体温的温差便能显示基本准确的体温。
    由于传感器厂商提供的都是25℃环境温度下的,对目标不同温度下的测量数据,精度到0.1度。但是并没有提供各种环境温度下详细的测试数据,比如6℃、10℃、20℃、30℃、40℃等,另外目前昼夜环境温度变化也会有影响。

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

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

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

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

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

    下表列出了以下说明中各个标识符的含义:
    22.png
    热电堆特性及温度测量
    下图显示了典型的热电堆输出电压(在本例中为5μm截止滤波器)作为被测物体和环境的温度。
    23.png
    在环境温度变化的情况下,有两个重要的影响值得注意:

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

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

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

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

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

    例如 V=LUT(T=45)=1.70mv;T=RLUT(V=4.34mV) =70度
    24.png
    参数校准
    测量热电堆参数,需要确定与实际热电堆测量值和与参考热电堆电压。将这些参数存储在Flash中,所需参数是热电堆和与参考热电堆传感器相比的灵敏度,灵敏度转换系数Sconv。
    额温枪属于点测温,为了达到更高的测温精度±0.1℃,业界普遍采用黑体校准设备,可以设置温度值,是标准的温度源,红外测试设备以黑体的温度为准进行实时校准。
    黑体布设在红外测试设备对面,保证测温精度在较高的水准上(±0.3℃精度),黑体只需供电即可,黑体自身可以达到±0.1℃精度。
    实际测试中,放置3个黑体,目标温度分别为35℃、41℃和37℃。用额温枪分别测前两个黑体的温度,并进行校准,然后测试最后一个黑体的温度,判断校准后的读数是否与37℃的差别,直到满足准确度的要求。现在计量单位一般是取最小和最大的两个温度数值。
    在某些应用中,根本不需要确切地知道每个传感器的TCsens,这意味着可以直接参考数据表中的参数。在这种情况下,只需要“一次环境温度校准”来测量灵敏度。
    下面描述如何测量计算Sconv。校准点,参考传感器在一定温度情况下的输出电压数值查表如下。
    25.png
    需校准标定的热电堆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中。
    26.png
    下面是根据传感器的输出电压计算目标温度的例子:

    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)。
    27.png
    28.png
    Tsen =35度,Tobj =65度。

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

    Vtpgradient[65,35]= 3.591mV
    29.png
    测温枪结构位置以及标定方法

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

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

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

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


    4.1 K32L2B基础软件包

    基础软件包可以从kex.nxp.com官方网站下载,参考如下界面。选择官方推荐的K32L2B开发板下载软件驱动开发包。
    30.png
    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口。
    31.png
    另外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软件进行烧录。
    32.png
    为了使用NMI引脚拉低的操作进入Bootrom,FOPT的BOOTPIN_OPT位需要设置为0,因此需要将FOPT=0x3F (BOOTPIN_OPT=1)修改为FOPT=0x3D (BOOTPIN_OPT=0) 。
    33.png
    将软件配置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实物和实际调试要点
    34.png
    第48脚(VLL3),为VLCD 提供外部供电,上拉10K电阻到电源,sLCD显示不会出现拖影。
    做低功耗调试,如果Jlink连接找不到内核,可通过复位短地才能连上Jlink。如果SWD DIO上面有个电阻,会出现如下连接错误,去掉额外的外部电阻,直接连接SWD调试口。
    35.png
    对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的后台无缝集成。
    36.png

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

    延申:其它MCU选项



    NXP提供了广泛的资源选择,从入门级到高精度SOC方案,为用户提供高可靠,高集成度,高性价比的MCU方案。
    除了本文前面介绍的K32L2B系列外,需要的朋友可以进一步地了解以下一些产品系列:

    37.png

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


    红外体温计领域的相关检定规程
    Ⅰ、JJF 1107-2003《测量人体温度的红外温度计校准规范》
    Ⅱ、JJG 1162-2019《医用电子体温计检定规程》
    Ⅲ、JJG 1164-2019《红外耳温计检定规程》
    Ⅳ、JJG 2093-1995《常温黑体辐射计量器具》

    作者:何此昂@NXP  文章出处:恩智浦MCU加油站  
    签到签到
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    11
    最后登录
    2021-9-8
    发表于 2020-4-9 09:41:19 | 显示全部楼层
    MARK一下,额温枪参考用。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-5-25 16:03
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    8

    主题

    718

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3395
    最后登录
    2024-3-5
    发表于 2020-4-9 11:14:33 | 显示全部楼层
    好好好
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 20:49 , Processed in 0.122448 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表