基于DS18B20的生化分析仪加热模块的设计与实现
2014-11-23沈增贵邓红玉
沈增贵,邓红玉
0 引言
生物化学分析仪(简称“生化仪”)是常见的临床检验设备之一,广泛应用于肝功能、肾功能、心肌酶谱、糖类、血脂、电解质等测试。根据自动化程度高低,生化仪分为半自动生化仪与全自动生化仪[1]。全自动生化仪具有测量速度快、准确性高、消耗试剂量小等优势,被广泛应用于医院、研究机构、动植物检测所等机构。
在全自动生化仪研发实践中,温度控制是重要的一环。温度控制包括冷却模块与加热模块。一般而言,生化仪使用的试剂需要保存在4℃左右,而全自动生化仪中使用的试剂都是保存在试剂盘中,因此,常见的做法是设计一个冷却模块(帕尔贴)包裹着试剂盘,并利用仪器的不间断供电将试剂盘置于某个冷却的环境中,达到保存试剂的目的。而在测试过程中,试剂被吸取到反应杯中,在常温下参与反应。因为试剂一直处于较低温度,如果这时直接加入到反应杯,很容易在管路或者杯壁起雾,影响测试结果。因此,需要设计一个加热模块,在抽取试剂时对试剂进行预加热。本文论述的就是利用DS18B20作为温度传感器、加热膜作为加热部件设计出来的全自动生化仪加热模块。
1 DS18B20简介
DS18B20是达拉斯公司生产的一款数字温度传感器,支持9~12位不同精度的温度读数。DS18B20的一个特点就是使用单总线通信,也就是只要一根信号线即可实现主机与从机间的信息交互[2]。另外一个特点就是使用“寄生电源”,当连接线处于高电平状态时,就可以对DS18B20内部的电容充电;当连接处于低电平时,可利用该电容的电能工作。这2种特性可以使DS18B20占用的微控制单元(micro controlunit,MCU)资源少,非常适合复杂仪器中连续监控温度值时使用[3-4]。
DS18B20单总线的通信方式意味着主-从双方对管脚上信号的时序要求更加严格。总线上的时序包括复位时序、读时序、写时序3种[5]。
1.1 复位时序
任何跟DS18B20通信的时序必须以复位时序开始[6]。复位时序由主机(MCU)发起,MCU将连接管脚设置为输出管脚,拉低电平至少需要480μs。然后释放管脚,并设置类型为输入管脚。因为管脚是接上拉电阻,所以输出为高电平。如果从机(DS18B20)正常响应,拉低电平需要60~240μs。因此,如果在这段时间内MCU采样到低电平,就可以确认DS18B20正常工作,可以继续读时序或者写时序。整个复位时序如图1所示。
图1 DS18B20复位时序
1.2 写时序
写时序主要是MCU配置DS18B20里面的寄存器,包括写0与写1 2种。在复位时序后,DS18B20释放管脚,管脚为高电平。进入写时序前,MCU先拉低总线,DS18B20会在15~60μs之间采样总线。如果采样是高电平,则认为是写1时序;如果采样是低电平,则认为是写0时序。因此,如果MCU需要写0,应当保持60μs的低电平;如果需要写1,应在拉低15μs后释放管脚,使管脚被拉高为高电平。写时序如图2所示。
图2 DS18B20写时序
1.3 读时序
在读取DS18B20里面的温度值时,需要使用到读时序。与写时序类似,读时序也包括读0与读1 2种。发起读时序时,MCU拉低管脚至少1μs,然后释放管脚,并设置为输入管脚。如果DS18B20输出0,则在15μs内管脚都被拉低;如果DS18B20需要输出1,则在15μs内管脚被拉高。值得注意的是,输出值在15μs内有效,因此,MCU必须及时地在这段时间内采样管脚。因为读时序至少要60μs,2次读之间要1μs的恢复时间,所以采样管脚电平后,MCU最多要等待16μs后才能继续下一位的读操作。读时序如图3所示。
图3 DS18B20读时序
2 加热模块硬件设计
在整机结构中,上层模块作为一个控制逻辑,主要完成用户输入、结果显示、算法实现等功能。以80C51作为MCU的主控板,负责外设的驱动控制。加热模块硬件由主控板、加热膜以及温度传感器组成。控制板使用80C51单片机作为MCU,通过串口接收上层模块传下来的温控命令,并通过DS18B20读取当前温度,根据控制需要打开或者关闭加热膜,从而达到控制温度的效果。温控命令包括温度查询、温度设置、加热膜状态查询3种。整个加热模块的结构如图4所示。
图4 加热模块设计框图
在加热膜控制实现上,80C51通过通用IO口控制加热开关的连接与断开,以实现加热功能。加热膜的功率是16W,为了提高驱动能力,一般设计独立的驱动电路。另外,也会在加热膜前加过热保护电路与熔断丝,确保加热膜工作在可控范围。
温度传感器同样由80C51通过通用IO口控制。根据传感器的时序要求,用IO口控制高、低电平,实现对传感器的配置、温度值的读取。硬件连接上,直接将控制管脚接入到IO口即可。
在设计中使用2个温度传感器,一个用于工作室温度探测,另外一个用于环境温度检测。使用2个温度传感器除了出于加热算法的考虑外,还考虑到容错性设计。
3 加热模块软件设计
3.1 软件架构
软件架构如图5所示。
图5 软件架构图
加热膜控制软件主要是温度传感器读写驱动、加热膜控制以及逻辑控制,运行在主控板MCU上。上层接收控制命令,完成控制后返回执行结果。在实现上,IO口输出高、低电平,实现对加热膜的启动与断开;而IO口的高、低电平持续时间满足温度传感器时序要求后,可完成对温度的读取等操作。
MCU上电后,先完成软硬件初始化,包括片内外设、片外外设、系统全局参数,然后进入主循环中。主循环内负责接收并响应上层的温控命令,同时对加热膜、DS18S20进行控制。
3.2 DS18B20读驱动
按照DS18B20的数据手册,在读取温度值前,先给DS18B20发送复位信号,然后向单总线发送0xCC、0x44 2个命令字,通知DS18B20开始温度转换。转换完成后,发送OxCC与OxBE通知DS18B20执行读温度,并依次读入9个字节的温度数据,最后发送复位信号到DS18B20。控制范例代码如下:
3.3 温度控制命令
3.3.1 协议定义
温控加热模块作为下位机,通过串口与上位机通信,接收上位机的命令,同时返回执行结果。通信双方按照预定协议去解读控制字节流。从上位机发送到下位机的称为下行协议,从下位机发送到上位机的称为上行协议。整个全自动生化仪有13个下位机模块,所以,为了管理方便,所有上下行协议都是定长的。为了保证执行时序,下位机收到命令后立刻返回响应消息。此外,正常情况下,下位机只有在收到下行命令后才能发送上行响应,只有在检测到异常后才能主动发送异常通知。
加热模块的控制命令字包括温度设置、温度查询、加热状态查询。下行协议操作码与参数的含义见表1,上行协议操作码与参数含义见表2。
表1 下行协议温控操作码与参数对照表
表2 上行协议温控操作码与参数对照表
3.3.2 温控命令响应
当加热模块收到“设置温度”命令字时,先把目标温度赋值给全局变量,并读取DS18B20上的当前温度值。如果当前温度低于目标温度,则软件上设置加热标志位。在软件的主循环中,如果检测到加热标志位有效,则给加热膜输出高电平,从而实现加热功能。如果当前温度比目标温度高,则清除加热标志位,关闭加热膜,通过自然散热来降温。
当加热模块收到“温度查询”命令字时,读取DS18B20上的当前温度值,然后按照上行协议的格式发送给上层软件;当加热模块收到“加热状态查询”命令字时,将加热标志位按照上行协议格式发送给上层软件。
3.3.3 温度控制算法优化
在实验中发现,如果简单地通过目标温度与当前温度的比较来启动、关闭加热膜,会有温度过冲现象。原因是加热膜包裹的工作室空间比较小,散热效果不好,如果工作室温度高于目标温度时才关闭加热膜,此时加热膜还是输出热量,只是比工作状态输出的热量小,而散去的热量抵消不掉加热膜的余热,温度持续升高,最高能过冲3~4℃[7]。
这种温度过冲的现象可以通过优化算法来改善。在常温环境下,如果目标温度高于当前温度4℃以上,则同时打开2个加热膜,加快升温过程;如果二者相差小于4℃,则只用其中一个加热膜工作;如果二者相差小于0.5℃,则不对加热膜做任何操作。这种优化临界值是通过实验得出的经验值,实践时应该根据加热膜的功率、加热膜体积大小、工作室通风情况、模块的工作环境温度来修正。
4 容错性设计
因为加热膜是直接附着在液路管壁上,如果发生故障导致异常加热,可能会影响测试结果,或者导致管路高温变形、破裂,甚至烧毁其他部件等严重后果,所以,容错性考虑是必不可少的。此外,加热膜不工作、温度传感器读数异常都是容错性考虑的一部分[8]。
4.1 异常持续加热
如果控制软件跑飞、误入死循环,或者其他硬件异常导致MCU一直给加热膜输出高电平,则引起持续加热异常。由这种异常导致的后果比较严重,一般做法是在加热膜上增加熔断器,用硬件的办法来处理。在软件上,当启动加热时,会同时启动一个定时器,在固定周期采集工作室的温度读数,如果温度读数超过合理的范围,则停止加热。另外一种方法是熔断器前接上拉电阻,作为一个IO中断源,或者直接接到复位信号上。
4.2 加热膜不工作
如果某种原因导致加热线路短路或者加热膜不工作,则整个加热模块失去其设计功能。检测加热膜是否工作有2种方法:(1)加热后启动连续读取工作室温度,如果温度变化小于某个阈值,则认为加热失效;(2)加热后比较工作室温度与环境温度。2种方法通常联合使用。在常温环境下,一般使用方法(1)来判断;在高温环境下使用方法(1),而在低温环境下则使用方法(2)。
检测到加热膜不工作时,通过MCU向上层发送异常码,最终显示到用户界面上。
4.3 读数异常处理
由于DS18B20使用的是单总线通信,读取的温度值是靠总线上的高低电平确定,如果某一位检测错误,读出来的温度值将有很大的误差,因此,对总线时序要求非常严格。如果MCU工作主频不高,或者对循环读取传感器的代码时间控制不准,存在积累误差,就很容易导致读数异常。
在实际测试中我们发现,如果每1 s读取1次温度,连续工作8 h,发现大约每50次就有1个异常值。从加热算法得知,如果测得的温度值比目标温度值低,就打开加热膜加热。假设本次测得的温度值是个异常值,并且比目标温度值低,这时MCU输出一个高电平到加热膜;当下一次测得的值是个正常值,比目标温度值高,这时候MCU就输出一个低电平到加热膜。这样,就会因为读取到异常值,导致加热膜收到一个高频脉冲。时间长了,这种频繁的开关动作就可能损坏加热膜。
解决这种异常,方法之一是优化单总线通信时序,但这种方法在实践中很难完全杜绝读数异常。另外一种方法是使用读数平滑方法,算法如图6所示。
一般认为,在间隔不长的时间段内连续读取温度,温度变化不会很大。当需要读取当前温度时,先预测一个温度值,如果读出来的值跟预测的温度相差超过某个阈值,即可判断该值是异常值,直接忽略读出来的温度值,而用预测值替代本次温度值。这个预测值实际上就是前4次温度值的平均值。
图6 温度平滑算法示意图
通过实验发现,如果每1 s读温度1次,把平滑窗口设置为前4次,把阈值设置为3℃,能有效去掉异常值。当读温度频率更高时,可以通过增加平滑窗口有效滤除异常值。
5 加热效果评价
为了验证加热效果,将模块按照正常的工作状态安装在全自动生化仪上,在10℃温差(环境温度为27.2℃,目标温度为37℃)、一般通风的情况下,启动加热模块,并且每1 s读取1次温度值,测试结果如图7所示。
图7 加热效果图
由图7可知,约在20 s的时间内,工作室的温度即可达到预设的目标值,并且在目标温度范围小幅波动。根据生化试剂的一般要求,这种波动幅度是完全可以接受的,证明该模块是可行的[9-10]。
6 结论
本文主要阐述了全自动生化仪加热模块的设计,虽然硬件设计上比较简单,但在加热方法、容错性设计等方面,都是针对实际产品经常出现的故障,并做大量实验取得的经验参数而得出的处理方法,对其他研发人员有一定的提示意义。本设计方案作为一个整体模块,在血细胞分析仪、特定反应蛋白分析仪、酶标仪等体外检验临床设备上使用,也取得了很好的效果,事实证明其可行、有效。
[1] 李鲁宁,唐正香.自动生物化学分析仪的原理、应用和发展[J].医疗装备,2007,20(4):16-17.
[2] 李钢,赵彦峰.1-Wire总线数字温度传感器DS18B20原理及应用[J].现代电子技术,2005(21):77-79.
[3] 周月霞,孙传友.DS18B20硬件连接及软件编程[J].传感器世界,2001(12):25-29.
[4] 王江红,朱丽君,孙学用.基于DS18B20恒温监控系统的设计与实现[J].湖北农业科学,2013,52(8):1 946-1 949.
[5] 李萍.基于DS18B20的多路温度监测系统设计与仿真[J].现代电子技术,2013,36(10):122-127.
[6] 郁翔,赵学增.数字温度传感器DS18B20在温度场测试中的应用[J].导弹与航天运载技术,2004,272(5):53-56.
[7] 李兰英,杨晨.嵌入式温度采集系统设计与实现[J].电脑学习,2007(1):6-8.
[8] 徐振,时维铎,王健,等.粮仓远程多通道测温系统的设计[J].湖北农业科学,2013,52(7):1 666-1 682.
[9] 周兴辉.雅培C8000自动生化分析仪在临床标本分析中的应用评价[J].实用预防医学,2008(3):267-269.
[10] 汪宏良,陈丽峰,胡芳.生物化学分析仪检测结果的临床评价[J].检验医学与临床,2007(6):558-559.