单片机设计智智能静脉输液自动监控系统设计
静脉输液是临床治疗中应用最广的一种给药方式,传统的输液过程主要是依靠人工监护来完成的,存在着护士工作负担重、异常情况反应慢、患者体验差等状况。本文根据以上问题,设计并实现了一套以STM32F411CEU6为主控制芯片、使用RT-Thread作为实时操作系统来组成的一套智能静脉输液自动监控系统。
系统用模块化设计为主控模块、滴速检测模块、温度检测及加热控制模块、液位检测模块、输液开关控制模块、显示模块、电源模块。滴速检测用SD01水滴传感器,采用红外光电原理检测液滴落地产生脉冲信号,主控芯片用脉冲计数得到实时滴速。温度检测用DS18B20防水数字温度传感器,实时检测药液温度,当温度低于设定的阈值时自动开始PTC加热片加热水液。液位检测使用非接触式液位传感器,当药液液位低于安全值时发出报警声,同时驱动舵机使输液管夹住,保证无空气进入静脉或者血液回流。系统使用TFT LCD显示屏对滴速、温度、液位等进行显示。软件方面采用了RT-Thread实时操作系统,把各个功能模块分成了不同的任务线程,从而实现实时地协同工作。
由测试结果可知系统滴速检测误差在正常范围内,温度检测误差为±0.5℃,液位报警响应时间小与1秒、舵机关断响应时间小与1秒,连续工作时间大于24小时。本系统功能齐全,性能稳定,成本可控,可以有效地减轻医护人员的工作负担,提高输液过程的安全性、患者舒适度,有较好的临床应用前景。
关键词:静脉输液;STM32;RT-Thread;滴速检测;温度控制;液位监测;自动关断
Intravenous infusion is also one of the most frequently used methods for giving medicine. But it also very much depend on the watch of men so nursing is very tiresome, response late and patients get no service at all. In order to solve the above problems,this paper uses STM32F411CEU6 microcontroller as the main control chip of this system, RT – Thread real - time operating system.
It is set up as Modular; The Dripping rate detecting is being used where it’s an SD01drospletsensor that makes use of photoeletric principls, ir detecing of falling dropels to form pulse: The main control chips works out the present time drip-rate by pulse. Temperature Detection module is DS18B20 WaterprooF Digital Thermometer, reads the current solution that’s being used and can use anytime. When it is colder than the set threshold, the PTC heating pad will start to heat up. Liquid level part is not to touch the liquid level detector When it’s under the safe liquid level, it will make a sound and light warning, at this time, the servo is actuated to close the infusion tube clamps to prevent air from entering the blood vessels or reverse flow of blood. The System will be having an TFT LCD it is showing the drop rate temp, Liquid Level status and All the other alarns in realtime. Then there’s a software that uses RT-thread real-time os, every function module is going to be its own task thread so we can do like real cooperating with other times within our program.
The test results show that the drip rate measurement deviation of the system is no more than 2 drops / minute in the normal area, and the temperature measurement accuracy is + / - 0.5 C, the liquid level alarm and servo clamping response time is less than one second, and the system runs continuously and stably for more than 24 hours. It is complete, it works well, and it costs little to control. It can also reduce the work burden of medical personnel and make the infusion process safer and more comfortable for patients, it has promising clinical applications.
Key words: Intravenous infusion; STM32; RT-Thread; Drip rate detection; Temperature control; Liquid level monitoring; Automatic clamping
1.1 研究背景与意义
静脉输液是临床医学最基础、最常用的治疗方法之一,它把药液直接注入患者的静脉血管里,从而达到快速补液、给药、营养支持的目的。据估计超过70%的住院病人会在治疗过程中使用静脉输液,在急诊科、儿科、手术室等科室中静脉输液的比例还要高得多。静脉输液起效快、生物利用度高、可精确控制给药剂量,是现代医学不可缺少的一种治疗方法。
但是传统的静脉输液过程大多采用人工监测,存在着诸多亟待解决的问题。首先就是护理人员工作负担沉重的问题。在大型综合医院里,一个护士要同时照顾多名患者输液监测工作,需要经常往来各个病房内查看输液情况,即检查点滴是否正常、药液是否会快耗尽、穿刺处有无渗漏等。高强度的巡查工作耗费了护士大部分的时间,在统计中发现,护士大约30%的工作时间都用在了输液相关巡查和处置上。第二就是响应速度过慢的问题。由于人力的不足,输液结束后没有被及时发现和处理的情况也时常会发生,在药物使用完毕后,如果输液器没有及时关闭的话,就会出现血液回流到输液管、空气进入血管形成气栓等危急的医疗风险。滴速异常会增加药物不良反应的风险,同时也会造成药效不足等问题,不能得到及时的发现和调整。第三就是患者的体验问题。输液过程中,患者或者陪护家属要随时注意药液剩余量,心理负担重,尤其是夜间输液或者老年患者输液时更甚。冬季输液时药液温度一般比室温低,进入人体会引起病人不适甚至寒战反应。
就上述问题来说,研制出一个可以自动检测输液情况,并在异常时候发出警报并予以处理的智能监测系统,有着十分明显的现实意义。另一方面,该系统可以代替人工做滴速监测、液位监测、温度监测等重复性的工作,当出现异常的时候发出警报并且执行关断操作,极大地减轻了护士的工作量和强度。一方面可以更精确地控制滴速和体温,使静脉用药给药更加安全、舒适。除此之外,该系统成本可控、操作简单,可以广泛应用于各级各类医院的使用中,具有较好的社会效益和经济效益。
1.2 国内外研究现状
1.2.1 国外研究现状
国外对智能输液监控领域的研究开始的比较早,技术基础较好。早在20世纪90年代,欧美发达国家就研究把电子技术用于输液过程的监测。早期的测定主要是使用重力传感器,也就是称重式的方法来测定药液剩余量,通过对吊瓶重量的变化进行计算来确定输液速度。该种方法原理简单,但是传感器精度容易受吊瓶晃动的影响较大,需要经常校准。
进入21世纪以后,伴随着微电子技术、传感器技术的迅猛发展,以光电检测原理为基础的滴速监测装置也渐渐成为主流。光电式滴速传感器利用红外对管检测液滴滴落时产生光强的变化来实现对滴速的测量,具有非接触、反应迅速、精度高等特点。与此同时,国外的主要医疗器械企业百特、费森尤斯卡比、泰尔茂等都推出了一些带有流量调节、气泡检测、压力监控、温度控制功能的智能输液泵。高端产品用闭环控制算法,能自动调节输液器的夹紧程度,达到精准控制滴速的目的。还配有各种类型的传感器进行输液的监测,检测到异常如气泡、堵塞、输液完毕时立即发出声光报警并自动停止输液。
但是进口的智能输液泵存在着一些明显的问题。价格昂贵,单台设备售价一般为数万元人民币以上,超出现行基层医疗机构的承受范围。第二,设备体积大、便携性差。三是部分产品要使用配套的专用输液管路,增大了使用成本。因此高端产品主要用在三甲医院的重症监护室、手术室等重点部门,并不能在普通病房以及基层医疗机构广泛应用。
1.2.2 国内研究现状
国内对于智能输液监控系统的探究始于二十世纪初,近些年来呈现出了迅猛发展的趋势。早期研究大多采用的是STC89C52、AT89S52等型号的51系列单片机,完成最基本的滴速检测以及液位报警的功能。以红外对管为滴速检测的驱动器,利用单片机定时器计数相邻两次液滴时间间隔的方式来得到滴速,在滴速出现异常的时候用蜂鸣器发出警报。该种系统结构简单、成本低,但是功能比较单一,缺少温度控制、自动关断等功能。
伴随着ARM Cortex-M系列高性能微控制器的广泛应用,基于STM32的智能输液监控系统也成了研究的热点。STM32系列芯片具有处理能力强、外设多、能耗低等特点,可以满足复杂系统的需要。研究人员用STM32平台开发了滴速检测、液位监测、无线传输WiFi、蓝牙、ZigBee、护士站集中监测等。有些研究把触摸屏交互,数据记录和追踪加入进来。
近几年来嵌入式实时操作系统被越来越多的智能输液监控系统所采用。传统裸机编程方式不能很好地解决多任务并发问题,即同时对传感器采样、显示数据、判断报警、发送数据等操作。使用实时操作系统如RT-Thread、FreeRTOS、uC/OS之后,可以把不同的功能做成独立的任务线程,然后交给操作系统内核去调度执行,从而使得系统具有更高的实时性以及可靠性。RT-Thread属于国产开源的物联网操作系统,具备代码开源、组件繁多、可裁剪性强、中文文档完备等特点,在我国嵌入式开发范畴内得到了普遍的应用。
尽管国内的研究取得了很多成果,但是大部分还停留在实验室样机的阶段,产品化的程度不高。从温度控制、自动关断等集成功率来讲,与国外高端产品相比还存在一定的不足。另外,现有关于系统稳定性的检验以及临床试验的研究较少。因此,在已有研究的基础上,设计出一个集滴速检测、温度控制、液位监测、自动关断为一体的智能输液监控系统,并且完成全部功能测试,具有较强的工程应用价值。
1.3 主要研究内容
本课题的主要目的就是设计出一个以STM32F411CEU6为主控制芯片,采用RT-Thread操作系统为内核的智能静脉输液自动监测系统。系统要实现输液过程中的滴速、药液温度、液位状态三个主要参数的实时监控,具有温度自动调节、液位过低自动关闭、异常声光报警、信息实时显示的功能。
具体而言,本课题的主要研究内容包括以下几个方面。
第一部分提出系统总体方案设计。在对临床需求和已有的研究结果充分了解的基础上,明确系统功能需求和技术指标,设计系统的总体架构,确定主控芯片和各个功能模块的选择方案。系统使用模块化设计思想,把滴速检测、温度检测、加热、液位检测、输液关断、显示交互、电源管理等分成不同的模块,有利于分步开发和调试。
第二部分为系统硬件设计。完成主控电路的STM32F411CEU6最小系统及时钟配置、滴速检测电路SD01水滴传感器接口、温度检测与加热控制电路DS18B20传感器及PTC加热片驱动、液位检测电路非接触式液位传感器接口、输液开关控制电路舵机驱动、显示电路TFT LCD SPI接口和电源电路设计。完成了PCB原理图的绘制、布局布线和实物焊接组装工作。
第三部分系统软件的设计。完成RT-Thread操作系统在STM32平台上移植以及配置工作,创建滴速检测任务、温度采集与加热控制任务、液位检测与报警任务、舵机控制任务、LCD显示任务等各个子任务,并使它们进行实时的协同调度。编写各个传感器驱动程序以及核心算法,包含滴速计数与滤波算法、DS18B20单总线通信协议、温度控制算法、舵机PWM控制、LCD图形界面显示等。
第四是要对系统进行测试和认证。制订完善的测试方案,创建模拟输液测试平台,对滴速检测的精度,温度检测及加热控制的效果,液位检测和报警的可靠性,舵机关断动作的效度,系统长时间工作稳定性的考察展开,保存测试数据加以剖析,从而判断系统能否达到设计需求。
通过对以上研究内容的实现,得到一套功能完备、性能良好、成本可控的智能静脉输液自动监控系统样机,为后续产品化及临床使用做准备。
2.1 系统功能需求
根据静脉输液的临床应用场景及已有研究基础,本系统要实现如下功能要求,每个功能要求均有对应的指标。
系统要能对输液过程中点滴速度实施实时检测,然后把数值用滴/分钟这一单位的形式表现出来。滴速检测的范围为临床常见的输液速度,即0~150滴每分钟。检测精度要控制在正负二滴每分钟之内,保证临床使用可靠。滴速检测要实时的,数据更新间隔时间不能大于一秒,这样可以保证护士可以及时地了解到输液的情况发生怎样的变化。另外系统还要有滴速异常报警功能,当滴速超过120滴/分或者小于40滴/分时,应发出声光报警信号。
温度检测及加热控制。系统应能实时检测吊瓶内药液温度,温度数值应能显示在显示屏上。由于冬季或者空调环境温度较低,一般低于室温,温度在15℃到20℃之间,直接注射到体内会导致病人不舒适,所以系统必须具有自动加热功能。当药液温度低于设定的32℃的时候,自动打开PTC加热片给吊瓶加温。当温度升高到上限阈值,即三十六摄氏度的时候就停止加热。温度控制采用滞回比较算法,不能让加热片在阈值附近经常地启停。温度检测的准确度为正负0.5℃,温度的调节误差不能大于正负1℃。
液位检测和自动停止。系统要对吊瓶里药液液位进行持续监测,判断药液是否要滴完。液位检测要采取非接触形式,不能让传感器同药液发生直接接触,这样容易造成交叉污染。当液位降到预定的阈值,一般为剩余药液量约为5~10毫升的时候,系统就应该发出声光报警,并且开始驱动舵机把输液管夹紧起来,防止空气进入血管或者血液回流。液位触发到舵机完成夹闭动作的响应时间不能大于一秒,保证安全。
信息显示。系统要配备一块显示屏,实时显示如下内容:当前滴速单位为滴每分钟,当前药液温度单位为摄氏度,液位状态为正常或者过低,报警状态为正常或者报警。显示屏亮度大、可视角度好,利于护士从任何角度观察。显示的内容应该简单明了,重要的数据要用较大的字体来显示。
声光报警。当系统检测出液位过低、滴速异常等异常情况的时候,就应发出声音报警和光报警。声音报警的音量应足够大,在病房环境噪声为50~60分贝时仍能清晰地听到。光报警应该使用高亮度LED,方便远处观察。其他性能要求。系统应有较好的可靠性,保证二十四小时不间断的正常工作不发生死机或者误报警。系统功耗要控制在合理的范围内,总功率不能超过十瓦。系统体积小、轻便,方便固定在输液架或吊瓶上使用。操作应该简单直观,护士不需要复杂培训就可以使用。
2.2 系统总体架构
根据以上功能要求,本系统采用模块化的设计思想,把整个系统分为主控模块、传感器输入模块、执行输出模块和电源管理模块这四个部分。系统的总体结构如下图2-1所示。
图2-1 系统总体架构图
主控模块是以STM32F411CEU6微控制器为内核,完成整个系统控制、计算、调度的工作的。主控模块使用RT-Thread实时操作系统,用多任务调度的方式控制各个模块的工作。主控模块接收各个传感器发出的信号,经过算法处理后控制相应的执行机构的动作,并把状态信息发送给显示模块。
传感器输入模块有三个核心传感器。SD01水滴传感器用来检测滴速,它的输出是脉冲信号,每滴一滴药液产生一个脉冲,主控模块通过测量单位时间内脉冲的数量来计算滴速。DS18B20防水数字温度传感器用作药液温度检测,采用单总线方式和主控进行通信,返回十六位数字温度值。非接触式液位传感器用以实现液位的检测,它产生的是数字电平信号,高电平表示液位正常,低电平表示液位过低。
执行输出模块有四个执行部件。PTC加热片用MOSFET开关电路控制通断,实现温度闭环调节。舵机用作输液管夹闭元件,通过PWM信号精确调节其转动角度,正常输液时舵机处在不压迫管路的状况下,液位下降到一定程度时舵机就会转到压迫输液管的位置上去夹紧它。蜂鸣器、LED用作声光报警,在出现异常时发出警报。TFT LCD显示屏用来做信息显示,用SPI接口和主控通信来实时更新显示的内容。
电源管理模块给整个系统提供稳定可靠的电源。系统输入采用USB 5V或外部适配器,通过AMS1117-5.0和AMS1117-3.3稳压芯片分别产生5V和3.3V电压。5V电压供SD01水滴传感器、非接触式液位传感器、舵机、PTC加热片使用。3.3V电压供给STM32主控芯片和TFT LCD显示屏使用。电源模块还有滤波电路,用来减少电源纹波给系统稳定性造成的不良影响。
各个模块之间的数据流以及控制流关系清楚明了。传感器输入模块采集到的数据经过主控模块处理之后,一方面显示给用户看,另一方面作为执行输出模块的控制信号。例如温度传感器检测到药液温度太低的时候,主控模块发出高电平信号去激活MOSFET导通,PTC加热片开始加热。液位传感器检测到液位低于低液位高度的时候,主控模块一方面启动蜂鸣器、LED报警,另一方面输出PWM信号使舵机夹紧输液管。整个系统数据采集、处理、输出控制都是RT-Thread操作系统统一调度的,保证各项任务及时可靠地完成。
2.3 关键器件选型
根据系统功能需求和技术指标,本系统应该选择合适的主控芯片以及各个功能模块的各个部件。选型原则有性能符合要求、成本控制在可承受范围内、货源稳定、开发资料齐全、功耗适中等。对各个关键器件的选型方案做详细的说明。
主控芯片用的是STM32F411CEU6。该芯片基于ARM Cortex-M4内核,支持DSP指令集和浮点运算单元,最高主频可达100MHz,程序存储容量为512KB Flash,数据存储容量为128KB SRAM,IO引脚数量为36个,提供12位ADC、多个通用定时器、多种通信接口如USART、I2C、SPI等。该芯片性能充足,可以顺畅地运行RT-Thread操作系统,而且功耗小,适合于用电池或者USB供电的情况。另外STM32系列芯片开发资料丰富、开发工具链成熟,利于开发与调试。
滴速检测传感器采用的是SD01水滴传感器。该传感器采用红外光电检测原理,内含红外发射管和接收管,液滴经过检测区域的时候,红外光会发生折射,接收管接收得到的光强会变弱,产生电平变化脉冲信号。该传感器工作电压为DC5.0V,输出为TTL电平脉冲,可以直接和STM32的GPIO引脚相接。传感器体积小、安装简单、响应快,能准确检测出每一滴药液,适合于输液滴速检测。
选用DS18B20防水数字温度传感器做为温度检测传感器。该传感器用单总线通信协议,只需一根数据线就可以和主控芯片进行通信,大大简化了布线。DS18B20的测量范围是-55℃~+125℃,在-10℃~+85℃之间精度为±0.5℃,可以满足药液温度检测要求。传感器有9位到12位的可配置分辨率,标准配置为12位,温度转换时间是750毫秒。防水型DS18B20采用不锈钢外壳封装、防水引线,可以直接浸入液体中测量温度,适用于吊瓶内药液温度检测。
液位检测传感器用的是非接触式液位传感器。该传感器采用电容检测原理,可以穿过非金属容器壁检测出内部液体液位的高度,不需要和液体直接接触,防止交叉感染的风险。传感器的工作电压是DC5.0V,输出的是数字电平信号,液位高于阈值时输出高电平,低于阈值时输出低电平。传感器体积小,安装时只需用胶带或者扎带固定在吊瓶外壁指定的高度上,使用十分方便。
采用PTC加热片做加热元件。PTC即正温度系数的加热元件,有恒温发热特性,温度升高时电阻变大,功率减小,有自限温功能,安全性能好。PTC加热片的工作电压为DC 5V~12V,功率大约为5W~10W,发热面积合适,可以贴在吊瓶外壁上加热。加热片为柔性结构,可对各种形状的吊瓶表面加热,安装简单。
采用舵机作为执行机构。舵机是一种位置伺服驱动器,它用PWM信号来控制输出轴的角度位置。本系统所用的是比较普遍的9g微型舵机,尺寸为21.5mm x 11.8mm x 22.7mm,重量只有9g,工作电压是4.8V到6.0V,堵转扭矩为1.2到1.4kgf.cm,无负载时每分钟转速为0.12s/60°。该舵机体积小、重量轻、扭矩足够将输液管压紧,符合本系统的需求。
显示模块使用TFT LCD彩色液晶屏,驱动芯片为ILI9341,分辨率为240×320像素,用SPI接口和主控通讯。SPI接口只需要4根信号线就可以完成数据传输,所占主控引脚少。该屏幕可以显示彩色图形、文字,视觉效果较好,适合显示滴速、温度、状态等文本信息。
电源管理芯片用AMS1117系列低压差线性稳压器。AMS1117-5.0用于将USB 5V输入稳压输出5V,AMS1117-3.3用于将5V降压至3.3V。该系列芯片外围电路简单,只需要输入输出滤波电容就可以稳定工作,输出电压精度高,纹波小,适合给微控制器和传感器供电。
经过以上关键器件的合理选择,在保证系统的功能、性能要求的基础上,实现了系统成本控制与开发便利性相结合的目的,为后面硬件设计及软件开发打下了良好的基础。
3.1 主控电路设计
3.1.1 STM32F411CEU6最小系统
主控电路是智能静脉输液自动监控系统的主体部分,主要负责对各个传感器信号进行采集,并进行数据处理,控制各个执行部件的动作,显示报警信息等。本系统所用到的主控芯片为ST的STM32F411CEU6,此芯片采用的是ARM Cortex-M4处理器,拥有浮点运算单元以及数字信号处理指令,并且能够做到最高的主频为100MHz,程序存储空间为512KBFlash,数据存储资源为128KBSRAM,并配置了有36个通用输入输出端口,集成了一个12位模数转换电路,在内部还集成了几个通用定时器以及USART,I2C和SPI等多类型的数据通信接口。其性能充裕且功耗较低,非常适合本系统的应用需求。
图3-1 STM32F411CEU6最小系统电路图
电源电路方面,STM32F411CEU6的工作电压范围为1.7V至3.6V,典型工作电压为3.3V。系统用AMS1117-3.3稳压芯片把5V输入电压转变成稳定的3.3V,给主控芯片供电。为了减小电源纹波给芯片带来的影响,在每个电源引脚处都要连接一个0.1微法的陶瓷滤波电容,并在电源输入端并联上一个10微法的电解电容。电源电路设计的原则是尽可能减小滤波电容到芯片电源引脚之间的距离,从而减小分布电感。
复位电路是给系统上电或者产生故障的时候,对芯片进行复位的操作。STM32F411CEU6的复位引脚NRST是低电平有效,只有该引脚被拉低的时候芯片才会进入到复位状态。本系统使用经典的阻容复位电路,上拉电阻为10千欧,下拉电容为0.1微法。上电的时候电容充电,使得NRST引脚维持一段时间的低电平,之后再次变为高电平,从而达成上电复位。并且该引脚外接有一个按键开关,可以用户通过按键手动复位系统。图3-2 复位电路原理图。采用阻容复位方式,上拉电阻为10kΩ,下拉电容为0.1μF,并外接手动复位按键。
图3-2 复位电路原理图
启动配置电路用来选择芯片的启动方式。STM32F411CEU6通过BOOT0和BOOT1两个引脚的电平状态决定启动位置。本系统采用从主Flash开始,即BOOT0为低电平、BOOT1为低电平。BOOT0引脚采用10千欧下拉电阻接地方式,使系统默认从主Flash启动。这个引脚同时留有一个跳线或者按键,方便之后开发时切换到系统存储器启动模式进行程序下载。图3-3 BOOT启动配置电路图。通过BOOT0和BOOT1引脚的电平状态选择芯片的启动方式,本系统将BOOT0下拉接地,默认从主Flash启动。
图3-3 BOOT启动配置电路图
调试接口电路是程序下载以及在线调试所必须的。STM32F411CEU6支持SWD串行调试接口,只需要用SWDIO、SWCLK这俩根信号线就可以实现程序下载和调试。本系统设计了一个四针SWD调试接口,有SWDIO、SWCLK、3.3V电源、GND四个引脚。该接口和ST-Link等调试器相连,利于在开发过程里完成程序烧录、断点调试等工作。图3-4 SWD下载调试接口电路。采用四针接口,包含SWDIO、SWCLK、3.3V和GND,可与ST-Link调试器连接。图3-4SWD下载调试接口电路。采用四针接口,包含SWDIO、SWCLK、3.3V和GND,可与ST-Link调试器连接。
图3-4 BOOT启动配置电路图
STM32F411CEU6最小系统电路还包括各个电源引脚的滤波电容配置。芯片上有VDD、VDDA、VDDIO等许多电源引脚,每一个电源引脚都要就近地接上一个0.1微法的陶瓷电容,来消除高频噪声。模拟电源VDDA和模拟地VSSA要分别进行滤波以保证模数转换器的精度。图3-5 电源去耦电路图。在每个电源引脚处并联0.1μF陶瓷电容,消除高频噪声,保证芯片稳定工作。
图3-5 电源去耦电路图
图3-6 声光报警器电路示意图。由蜂鸣器和LED指示灯组成,在液位过低或滴速异常时发出报警信号。
图3-6 声光报警器电路示意图
3.1.2 时钟电路配置
时钟电路是STM32F411CEU6正常工作的关键部分,它给芯片的内核、总线、外设提供同步时钟信号。STM32F411CEU6有多个时钟源,即内部高速振荡器、内部低速振荡器、外部高速晶振和外部低速晶振。本系统用外部高速晶振做主时钟源,可以得到较高的频率稳定性和准确性。
外部高速晶振选8MHz无源晶振,用两个22皮法的负载电容、一个1兆欧的反馈电阻组成振荡电路。8MHz晶振信号通过芯片内部锁相环倍频之后,可以得到最高100MHz的系统时钟。锁相环配置参数为输入分频系数M=12、倍频系数N=96、输出分频系数P=2,所以锁相环输出频率为8MHz除以12再乘以96再除以2等于96MHz。96MHz时钟被用来做为系统的时钟,即SYSCLK。图3-6晶振电路原理图。采用8MHz外部高速晶振和两个22pF负载电容,经PLL倍频后提供系统时钟。
图3-7 晶振电路原理图
系统时钟SYSCLK经分频后产生各总线时钟。AHB总线时钟HCLK设置为SYSCLK的一分频,即96MHz。APB1总线时钟PCLK1设置为HCLK的二分频,即48MHz,因为APB1总线上挂载的外设最高工作频率为50MHz。APB2总线时钟PCLK2设置为HCLK的一分频,即96MHz,APB2总线上挂载的外设如GPIO、SPI等可以工作在较高频率。
时钟配置中另一个重要的部分就是外部低速晶振LSE的配置。该系统用的是32.768kHz外部低速晶振驱动实时时钟RTC。RTC在系统主电源断电时可以依靠备用电池来维持工作状态,记录当前的时间。虽然本系统的实时时钟功能需求不高,但是留有LSE晶振方便以后的功能扩展。
时钟配置的代码用HAL库函数来实现。首先要初始化RCC寄存器的振荡器配置结构体,设置HSE为打开状态、LSE为打开状态、锁相环时钟源为HSE、锁相环分频倍频系数按上述步骤设定。然后调用HAL_RCC_OscConfig函数完成振荡器配置。接着配置时钟结构体,将系统时钟源设置为锁相环输出,AHB分频系数设为1,APB1分频系数设为2,APB2分频系数设为1,调用HAL_RCC_ClockConfig函数完成时钟配置。配置时需要按照系统时钟频率来设定Flash存储器的等待周期,96MHz下应将等待周期设为3个周期,保证Flash读取的稳定。
图3-8 STM32时钟配置图
时钟配置完毕之后,各个外设的总线时钟均已完成设置。可以采用读取RCC寄存器或者调用HAL_RCC_GetSysClockFreq()函数的方式来获取当前的系统时钟频率,以此来检验时钟设置是否正确。正确时钟配置是系统正常运行的前提,给后面各个功能模块的驱动开发提供时序保障。
3.2 滴速检测电路设计
滴速检测属于智能静脉输液监控系统的关键功能之一,它把药液滴落的过程转变成电信号,供主控芯片做计数及速度运算之用。本系统用SD01水滴传感器做为滴速检测元件。该传感器采用的是红外光电检测原理,内部装有红外发射二极管、红外接收二极管,两者相对安装构成一条检测光路。
SD01水滴传感器的工作原理为。当传感器通电的时候,红外发射二极管在驱动电路的作用下发出固定频率的红外线。红外线穿过发射管和接收管之间,被接收管接收。没有液滴经过时,红外线可以无阻碍地到达接收管,接收管导通,传感器的OUT引脚一直输出高电平信号。当有液滴从滴壶中落下,穿过红外对管间的缝隙的时候,液滴会使得通过其的红外线发生折射、散射,使到达接收管的红外线强度减小。当接收管检测到光强降低的时候,它的导通状态就会发生变化,OUT引脚就发出低电平脉冲。液滴通过之后,光路正常,OUT引脚为高电平。每滴落一滴药液时OUT引脚就会产生一个由高到低再到高的脉冲信号。图3-9 SD01液滴传感器实物及原理图。采用红外光电检测原理,液滴穿过检测区域时输出脉冲信号。
图3-9 SD01液滴传感器图
SD01水滴传感器工作电压为DC5V,可以接系统5V电源。传感器的OUT引脚输出的是TTL电平的脉冲信号,高电平约是5V,低电平是0V。由于STM32F411CEU6的GPIO引脚是3.3V容忍输入,而5V电平直接接入会导致损坏芯片,所以需要在OUT引脚和STM32的GPIO引脚之间加上一个电平转换电路。本系统使用电阻分压法完成电平转换,即用一10kΩ电阻加5.1kΩ电阻组成的分压电路把5V高电平变成大约3.3V,满足了STM32的输入电平要求。
SD01水滴传感器有三个引脚,VCC接系统5V电源正极,GND接系统电源地,OUT经过电平转换电路接STM32的GPIO引脚。本系统将OUT引脚与STM32的PA0引脚相连,PA0引脚可以设置成外部中断输入模式。当液滴脉冲到来的时候,就发出外部中断信号,在中断服务函数中将滴速计数器进行累加操作。
为了保证滴速检测的准确度,电路设计时要注意以下几点。第一,传感器的安装位置要保证滴壶的液滴垂直穿过红外对管的检测区域,不能使液滴偏离光路而造成漏检。第二,传感器和主控板之间连接的线不能太长,最好不超过30厘米,以减小信号传输时产生的干扰。第三,在传感器的电源引脚处并联一个0.1微法的滤波电容来减小电源噪声对传感器输出信号的影响。第四,现场电磁干扰较强时,可在OUT信号线上串联一个1千欧电阻,在STM32的输入端加一个拉电阻来提高信号的抗干扰能力。
SD01水滴传感器响应速度快、检测精度高、体积小、安装方便,适合于输液滴速检测的应用场景。经过实测,该传感器对于常规输液速度下液滴的检测准确率达到99%以上,可以满足本系统的设计要求。图3-10 输液器点滴计数器安装示意图。传感器夹持在滴壶外侧,非接触式检测液滴下落。
图3-10 输液器点滴计数器实物图
图3-11 输液器点滴计数器实物图
3.3 温度检测与加热控制电路设计
温度检测及加热控制功能是动态监控吊瓶里药液温度,在温度过低的时候立即执行加热任务,保证给患者注射的药液温度合乎要求,进而改善输液过程中的舒适感受。本系统采用DS18B20防水数字温度传感器进行温度检测,用PTC加热片做为加热元件。
DS18B20是Maxim公司所推出的一款数字温度传感器,使用单总线通信协议。与传统的模拟温度传感器热敏电阻相比,DS18B20把温度信号直接转变为数字量输出,不需要另外加一个模数转换电路来完成信号的转换工作,大大简化了硬件设计。DS18B20主要技术参数为测量范围是-55摄氏度到+125摄氏度,精度为±0.5摄氏度,供电电压为3.0V~5.5V,转换12位温度数据时间是750毫秒。本系统选用防水型DS18B20,传感器探头用不锈钢外壳包裹,引线用防水软线,可以直接浸入药液里进行温度检测。图3-12 DS18B20水温传感器实物图。不锈钢外壳封装,防水引线,可直接浸入药液中测量温度。
图3-12 输DS18B20水温传感器实物图
DS18B20共三个引脚,红色线接电源正极VDD,黑色线接电源地GND,黄色线为数据线DQ。本系统中,DS18B20的VDD引脚接3.3V电源,GND引脚接地,DQ引脚接STM32的PA1引脚。由于DS18B20数据线是开漏输出的,在DQ引脚处应加装一个4.7kΩ的上拉电阻接3.3V电源,以保证通信时的电平可靠。
DS18B20和STM32之间的通信时序要求比较高。单总线协议基本的操作有复位脉冲、存在脉冲、写时隙、读时隙。复位操作是主控将DQ线拉低至少480微秒,然后放开,DS18B20会在检测到复位脉冲的时候把DQ线拉低60到240微秒来当作存在脉冲响应。在写时隙内,主控将DQ线电压拉低形成写起始信号,在15微秒到60微秒之间把数据位送出总线,在60微秒到120微秒之间使总线保持稳定的电压状态。读时隙内,主控把DQ线压低至少1微秒后再释放,在释放之后的15微秒内读取总线电平状态,读取到的高电平代表数据位为1,低电平代表数据位为0。
加热控制部分用PTC加热片做执行元件。PTC是正温度系数的缩写,加热元件具有自限温性,温度上升时电阻急剧增加,功率逐渐降低,有一定的安全防护作用。本系统所用的PTC加热片工作电压为DC 5V到12V,功率约为5W到10W,发热面为柔性材料,可以贴在吊瓶外壁上进行加热。
PTC加热片驱动电路使用MOSFET开关方式。采用N沟道MOSFET如SI2302做开关元件,栅极由STM32的GPIO引脚控制,漏极接PTC加热片的负极,源极接地。PTC加热片的正极连接系统5V或者12V电源。当STM32的PA2引脚输出高电平3.3V时,MOSFET导通,加热片通电发热。当PA2引脚输出低电平时,MOSFET截止,加热片停止加热。为了限制栅极驱动电流以及保护MOSFET,在GPIO引脚和MOSFET栅极之间并联一个100欧的电阻,在MOSFET栅极和源极之间并联一个10千欧的下拉电阻,保证MOSFET在GPIO引脚高阻态时可靠截止。图3-13 PTC加热模块驱动电路图。采用N沟道MOSFET控制加热片通断,实现温度闭环调节。
图3-13 PTC加热模块驱动电路图
温度控制策略用滞回比较法。温度下限设为32℃,上限设为36℃。当DS18B20检测到药液温度小于32℃的时候,STM32的PA2引脚就输出高电平,PTC加热片开始工作加热。当温度达到36℃的时候,PA2引脚输出低电平,加热停止。当温度处于上下限之间时保持原来的温度。该种滞回控制方式可以防止加热片在阈值点附近频繁启停,使MOSFET、加热片使用寿命得到延长。
3.4 液位检测电路设计
液位检测功能就是用来检测吊瓶里药液剩余量,液位低于安全范围时就会发出报警声并关闭。由于卫生安全的要求,液位检测必须使用非接触式的方法,不能使传感器和药液直接接触而造成交叉污染。本系统使用非接触式电容液位传感器来完成这个功能。
非接触式液位传感器是用电容检测的方式工作的。传感器内部有一个检测电极,当传感器粘贴在容器外壁上时,检测电极与容器内液体之间的等效电容就形成了。有液体和无液体时,等效电容的值相差较大。传感器内部的检测电路可以把电容的变化转化成可以被计算机识别的数字电平信号。图3-14 非接触式水位传感器实物图。采用电容检测原理,可穿透非金属容器壁检测液位,避免交叉污染。
图3-14 非接触式水位传感器实物图
本系统所用的非接触式液位传感器主要参数如下,工作电压DC5.0V,输出数字电平,液位高于阈值时输出高电平,液位低于阈值时输出低电平,响应时间小于100毫秒,穿透非金属容器壁厚度不大于5mm。该传感器体积小,形状为扁方形,背面用双面胶固定,安装时只需要将它粘贴在吊瓶外壁上液位高度处就可以了。
非接触式液位传感器的电路设计共有三个引脚,VCC接系统5V电源正极,GND接系统电源地,OUT接STM32的PA3引脚。与SD01传感器一样,本传感器输出也是5V TTL电平,需要用到电阻分压电路把3.3V电平传给STM32的GPIO引脚。本系统采用的都是相同的10千欧、5.1千欧电阻分压电路来转换电平。
液位传感器的安装位置要依照实际情况吊瓶容量、形状来确定。以常用的250毫升输液吊瓶为例,把传感器粘贴在距离瓶底两厘米高的地方,此时对应剩下的药液量是10到15毫升。该剩余量可以为护士留出足够的反应时间更换吊瓶或者停止输液,在自动关闭之后也不会有大量空气进入血管。
STM32用GPIO输入读取液位传感器的电平状态。当读取到高电平时,液位正常,系统继续正常工作。当读取到低电平时,就表明液位已经低于阈值,系统马上执行报警处理程序,触发蜂鸣器发出声音报警声,LED指示灯亮起,在LCD屏幕上显示液位过低警告信息,启动舵机驱动机构夹住输液管。为了保证系统的可靠,液位检测用多次采样确认来判断液位是否真的低于了低位阈值,只有三次检测到的信号都是低电平时才视为液位低,防止由于传感器的瞬间误报警引起误告警。
3.5 输液开关控制电路设计
输液开关控制功能,在液位过低的时候,自动关闭输液管,避免空气进入到患者体内或者出现血液回流的情况。本系统采用微型舵机作执行机构,用PWM信号准确控制舵机的转动角度,驱动机械臂压住输液管来达到关断的目的。
舵机是一种位置伺服驱动器,它把直流电机、减速齿轮组、位置反馈电位器和控制电路整合在一起。舵机工作原理为控制电路收到PWM信号之后,根据目标角度对应脉宽来解析,同时用电位器读取输出轴实际角度,两者的偏差信号驱动电机正转或者反转,将输出轴转到目标角度位置。舵机扭矩大、控制简单、响应快。图3-15 输液器关闭开关实物图。采用9g微型舵机,通过PWM信号控制转动角度,驱动机械臂压紧输液管。
图3-15 输液器关闭开关实物图
本系统使用的是常见的9克微型舵机,其主要参数如下表所示。该舵机的扭矩大可以压紧输液管使其闭合,体积小利于安装于输液架或者吊瓶挂架上。
舵机的控制信号是PWM脉冲,周期为20毫秒,所以频率是50赫兹。高电平脉宽从0.5毫秒到2.5毫秒,输出轴的转角范围是0度到180度。具体对应的参数值有0.5毫秒对应的角度为0度,1.0毫秒对应的角度为45度,1.5毫秒对应的角度为90度,2.0毫秒对应的角度为135度,2.5毫秒对应的角度为180度。
在本系统中,舵机安装位置要保证输出轴上固定机械臂可以压住输液管。正常输液时,舵机在0度处,机械臂离输液管远。当液位过低触发关断的时候,舵机转动到90度或者135度的位置上,机械臂压住输液管使之关闭,阻断了药液的流通。舵机的电源由系统5V电源供电,因为舵机启动时电流较大,约为200-300毫安,所以在舵机电源引脚附近并联一个100微法的电解电容,减小对系统电源的影响。
PWM信号产生用到STM32通用定时器TIM3。TIM3工作在PWM模式1,自动重载值设为1999,预分频系数设为96减1,计数时钟频率为1MHz。在这个配置中,PWM周期是2毫秒(1999加上1除以1MHz)的周期。实际上需要20毫秒周期,所以正确的配置应该为自动重装载值19999,预分频系数为96减1,计数时钟频率为96MHz除以96等于1MHz,PWM频率为1MHz除以20000等于50赫兹,周期为20毫秒。PWM的比较值CCR决定高电平脉宽,0度对应CCR为500,45度对应1000,90度对应1500,135度对应2000,180度对应2500。
3.6 显示电路设计
显示模块对输液过程中的液体流量、药液的温度、液位及有无报警进行显示。本系统使用了TFT LCD彩色液晶屏做为显示设备,选用的液晶屏为ILI9341驱动芯片,分辨率为240乘320像素,可以显示65K色,使用SPI串行接口和主控通信。
TFT LCD即薄膜晶体管液晶显示器,每个像素点都是一个独立的薄膜晶体管,可以准确地控制通过每个像素点的光量,因此具有很高的对比度以及快速的响应速度。TFT LCD比传统单色液晶屏显示彩色的图形、文字,具有更直观、更友好的视觉效果。SPI接口只用4根信号线就可以完成数据传输,即片选信号CS、时钟信号SCK、主机输出从机输入信号MOSI和命令数据选择信号DC,另外还需要复位信号RST和背光控制信号BLK,共占用了6个GPIO引脚,大大节省了主控芯片的引脚资源。图3-16 LCD液晶显示模块实物图。采用ILI9341驱动芯片,分辨率为240×320像素,SPI接口通信。
图3-16 LCD液晶显示模块实物图
图3-17 屏幕尺寸示意图。显示屏尺寸为2.4英寸,可视角度良好,适合显示滴速、温度、液位状态等信息。
图3-17 屏幕尺寸示意图
本系统选用TFT LCD与STM32的硬件SPI接口进行连接。将屏幕的CS引脚接STM32的PA4引脚,SCK接PA5引脚,MOSI接PA7引脚,DC接PA6引脚,RST接PA8引脚,BLK接PA9引脚。STM32的SPI1外设工作模式为主机模式,数据帧长度为8bit,时钟极性空闲低电平,时钟相位第一个边沿采样,通信速率设置为18MHz左右,可以保证显示刷新的流畅度。
TFT LCD的初始化流程是硬件复位、退出睡眠模式、设置像素格式、设置显示方向、开启显示等几个过程。初始化之后,用SPI接口向屏幕发送显示数据。为了提高显示效率,本系统用直接内存填充方式完成整个屏幕刷新。LCD_Fill2函数完成指定区域内快速填充,参数有起始坐标sx、sy,结束坐标ex、ey和颜色数组指针color。函数内首先调用LCD_Address_Set来设定显示窗口的位置,再用循环把每一个像素颜色数据送入SPI的数据寄存器中。对320乘240分辨率全屏刷新来说,就要写入76800个像素数据。
显示界面设计以简明为主,不复杂。主界面顶部为系统标题,中部用大号字显示当前滴速和药液温度,下部显示液位正常或者过低、报警等状态。当液位过低或者滴速异常的时候,界面背景色变为红色,并且会显示出相应的警告图标以及文字。显示数据每隔500毫秒就刷新一次,保证信息是实时的。
3.7 电源电路设计
电源电路给整个系统提供稳定的电能保证。本系统需要三种电压等级,STM32F411CEU6工作电压为3.3V,SD01水滴传感器、非接触式液位传感器和舵机工作电压为5V,PTC加热片工作电压为5V至12V。结合成本和可靠性能,本系统使用USB 5V做为主电源,用低压差线性稳压器产生出3.3V电压。
电源电路主要使用的器件是AMS1117系列的低压差线性稳压器。AMS1117-5.0用来将输入电压稳压成5.0V,但是本系统输入已经是5V,因此该芯片可以省略掉,5V直接来自USB输入。AMS1117-3.3用于将5V降压至3.3V,供给STM32主控芯片和TFT LCD显示屏使用。AMS1117系列芯片外围电路简单、输出电压精度高、纹波小、热保护功能好。
AMS1117-3.3典型应用电路图如下所示:输入引脚接5V电源,输出引脚输出3.3V,公共端接地。输入、输出引脚都与地并联一个10微法的电解电容和一个0.1微法的陶瓷电容,用作滤波、稳压。10微法电容滤除低频纹波,0.1微法电容滤除高频噪声。为减小压降,输入电压应不低于4.5V,输出电流最大可达到1A,可以满足本系统功耗要求。
5V电源由USB接口提供给SD01水滴传感器、非接触式液位传感器、舵机和PTC加热片供电。由于舵机、PTC加热片启动时电流大,在5V电源线上并联100微法以上电解电容,缓冲启动瞬间的电流冲击,防止由于突然降压造成系统电源电压下降,影响主控芯片正常工作。
电源电路还有总电源开关和电源指示灯。在USB输入端口后面加上一个自锁式按键开关,可以用来控制整个系统是否上电和断电。开关后面并联一个LED指示灯,串联一个1千欧的限流电阻,来指示系统电源的状态。当开关闭合系统上电的时候,指示灯亮起。图3-18 电源稳压电路图。采用AMS1117-3.3将5V输入转换为3.3V,为主控芯片和LCD显示屏供电。
图3-18 电源稳压电路图
3.8 PCB设计与实物组装
在完成各个功能模块的电路原理图设计之后,还要做PCB印制电路板的设计和实物的组装。PCB设计就是把原理图上的电气连接关系转化为实际的物理铜箔走线的过程,合理的PCB布局布线对系统电磁兼容性、工作稳定性有着重要的作用。
本系统PCB设计为双层板,板厚1.6mm,尺寸不大于100mm×80mm,便于安装到输液架或者吊瓶挂架上。PCB布局以模块化为主,把STM32主控芯片放在板中央,各个功能模块的接口和器件都按照主控芯片分区来布置。电源电路靠近电源输入端,滤波电容靠近芯片电源引脚,减小电源环路面积。
布线时将信号线和电源线分开布设,防止平行长距离走线来减少串扰。时钟线以及高速信号线SPI走线尽量短,不能有过多的过孔和分支。地线用大面积敷铜的方式形成完整的地平面,减小地回路的阻抗。模拟地、数字地均采用单点接地方式,在电源输入端汇合,减小数字噪声对模拟信号的影响。
pcb设计完成之后,导出gerber文件交给pcb厂商打样生产。PCB裸板接收到以后做元器件焊接和组装工作。焊接顺序为先焊接STM32主控芯片等小封装器件,再焊接电阻电容等贴片元件,最后焊接接插件和传感器接口。焊接完毕后,用万用表测量电源和地之间的电阻是否为零,没有故障后再通电进行试验。
最后用焊接方式完成焊接好的电路板与SD01水滴传感器、DS18B20温度传感器、非接触式液位传感器、舵机、PTC加热片、TFT LCD显示屏等外围部件的连接,并组装成一个完整的系统样机。
4.1 RT-Thread操作系统移植
系统软件的设计是智能静脉输液自动监控系统的重要组成,质量的好坏直接影响到系统的反应速度、稳定性、可维护性。本系统采用RT-Thread嵌入式实时多线程操作系统作为软件平台,把滴速检测、温度采集和加热控制、液位检测和报警、舵机控制、LCD显示等作为一个任务线程,由RT-Thread内核来统一调度和管理。
RT-Thread全称为Real Time-Thread,是一个国产开源的嵌入式实时多线程操作系统。它具有一个主要属性就是支持多任务,可以同时执行多个任务。需要注意的是,多任务同时运行并不意味着处理器在同一时刻真正在执行多个任务。实际上,处理器核心在一个时间点上只能运行一个任务,因为每一个任务每次执行的时间都很短,所以任务调度器会很快地切换任务之间的执行顺序,使人们感觉到有多个任务是在同时运行的。在RT-Thread系统里,任务是用线程来实现的,而线程调度器也就是上文提到的任务调度器。
RT-Thread主要使用的是C语言编程方式,简单明了,便于移植。它将面向对象的设计方法应用于实时系统设计当中,从而产生出一种代码风格优良、架构分明、模块化结构强以及可以进行裁剪的程序集。为了使微控制器系统占用Flash 3KB、RAM 1.2KB,可以使用方便的工具将NANO进行裁剪。对于资源充足的物联网设备,RT-Thread可以使用在线的软件包管理工具、系统配置工具对模块进行裁剪,使开发者能方便地将各种丰富有用的软件功能包导入到系统中。
相比Linux系统来说,RT-Thread体积小、成本低、功耗低、启动速度快。除此之外,RT-Thread还具有实时性好、占用资源少等优点,很适合于各种资源受限的环境使用。虽然32位MCU是它的主要运行平台,但许多带有MMU、基于ARM9、ARM11甚至Cortex-A系列级别的应用处理器在特定的应用场合下也可以使用RT-Thread。
近几年来,物联网的概念逐渐普及,物联网市场的发展速度很快,嵌入式设备的联网已经是大势所趋。终端联网使软件复杂度大大增加,传统的RTOS内核越来越不能满足市场的需要。在这种情况下,物联网操作系统的概念应运而生。物联网操作系统是以操作系统内核为基础,包含文件系统、图形库等较为完整的中间件组件,具有低功耗、安全、通信协议支持和云端连接能力的软件平台,RT-Thread就是一个物联网操作系统。RT-Thread与其他很多实时操作系统FreeRTOS、uC/OS等相比最大的区别就是具有丰富的中间件库。
图4-1 RT-Thread系统架构图
RT-Thread启动过程是这样的,系统上电后首先会调用STM32的启动文件,初始化堆栈、中断向量表,之后就进入main函数。在main函数里,先做HAL库初始化、系统时钟配置、外设初始化这些底层硬件设置,接着调用rtthread_startup函数来启动RT-Thread内核。rtthread_startup函数完成系统滴答定时器初始化、内存堆初始化、根线程创建,最后启动调度器,开始多任务调度。
图4-2 RT-Thread系统启动流程图
本系统创建了多个任务线程,有数据采集线程、显示刷新线程、报警处理线程。数据采集线程定时采集滴速、温度、液位传感器的数据,其创建代码如下所示。
int data_acquisition_init(void){
{
rt_thread_t data_acq_thread = rt_thread_create("data_acq",
data_acquisition_thread_entry,
RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE);
if (data_acq_thread != RT_NULL)
{
rt_thread_startup(data_acq_thread);
rt_kprintf("数据采集线程启动成功\n");
return RT_EOK;
}
else
{
rt_kprintf("创建数据采集线程失败\n");
return -RT_ERROR;
}
}
线程创建函数rt_thread_create的参数有线程名、线程入口函数、线程入口参数、线程栈大小、线程优先级、时间片。线程创建之后就会触发rt_thread_startup函数的调用来启动线程,线程进入就绪状态等待调度器来调度。
4.2 滴速检测程序设计
滴速检测程序的主要任务就是用SD01水滴传感器输出脉冲频率来计算当前输液滴速(滴/分钟)。滴速检测精度与及时性关系密切,影响系统报警判断的准确性,程序的设计应该保证两种属性都达到良好的水平。
滴速检测的基本原理就是统计一定时间内脉冲的数量。SD01传感器每检测到一滴药液通过,就会使OUT引脚产生一个下降沿脉冲。STM32的GPIO引脚配置为外部中断触发模式,使用上升沿或者下降沿触发中断。中断服务程序里对滴速计数器进行加1操作。
为了使滴速读数更加稳定,防止由于偶然的因素造成数据的跳动,本系统使用滑动平均滤波算法。具体的实现方式就是创建一个长度为5的环形缓冲区,把最近五次每秒获取的滴速计数值存进去。系统每隔一秒读取一次滴速计数器,把当前计数值存入缓冲区,再算出缓冲区里五个数值的平均值,平均值乘以六十就得到了当前滴速,单位是滴每分钟。秒表清零后重新开始计数,循环反复。
该滑动平均滤波算法有如下优点,抑制了单次采样的随机误差,显示读数变得比较平滑稳定。第二,对滴速的突变反应比较快,每次计算时都包含了最新得到的采样值。第三,简单,计算量小,适合在嵌入式系统上使用。
滴速检测还要处理滴速异常报警。系统设定了滴速的正常范围,下限是40滴/分,上限是120滴/分。连续三次计算出来的滴速不在这个范围内,则认为滴速有误,并发出声光报警信号,在液晶显示屏上显示滴速异常报警。采用连续三次确认的方式可以有效地防止由于一次数据的突然变化所造成的误报。
滴速检测程序还具有滴速显示的功能。计算出新的滴速值之后,用消息队列把滴速值发送到显示刷新线程,显示刷新线程则会将滴速数值显示在LCD上。
图4-3 系统流程图
4.3 温度采集与加热控制程序设计
温度采集与加热控制程序负责读取DS18B20温度传感器的数值,根据目前温度和设定的阈值关系控制PTC加热片的启停,从而达到对药液温度闭环调节的目的。
DS18B20的通信协议为单总线协议,对于时序有着很高的要求。温度采集程序按下面步骤进行。第一步是发出复位脉冲。主控把数据线DQ拉低时间超过480微秒之后才能释放,等DS18B20的DS引脚DQ线被拉低的时间在60至240微秒之间为存在脉冲响应时再拉下DQ线。如果主控没有检测到有脉冲,那么说明传感器没有连接或者故障,程序就输出错误码。第二步写入跳过ROM命令0xCC。此命令告诉DS18B20接下来的指令会针对总线上所有的传感器,因为本系统只有1个传感器,使用跳过ROM命令可以简化操作。第三步写入温度转换命令0x44。本命令开始DS18B20的温度模数转换,转换时间大约为750毫秒。第三步转为结果。程序可采用延时750毫秒或者重复读取传感器状态的方法来实现等待转换结束的功能。第五步再发一个复位脉冲,把跳过ROM命令0xCC写入。第六步把暂存器写入读暂存器命令0xBE。该命令使DS18B20开始把温度数据放到暂存器里。第七步读取温度低字节和高字节。DS18B20 返回两个字节的温度数据,先回送低字节再回送高字节。第八步,把两个字节合在一起成十六位有符号整数,高五位为符号位,后十一位是温度绝对值。温度值计算公式为,温度=合并后整数×0.0625。
加热控制用滞回比较算法。温度下限设为32℃,温度上限设为36℃。程序在主循环中以一定的时间间隔不断地对当前温度值进行读取,并且与上、下限做比较。当温度小于TL且加热标志是关闭时,就将PA2引脚设为高电平,并向PTC加热片供电,加热标志置为开启。如果当前温度大于TH并且加热标志为开启状态,则将PA2引脚设为低电平,切断MOSFET使PTC加热片断电,同时将加热标志设为关闭。如果当前温度在TL到TH之间,就保持加热片的当前状态不变。
该种阻尼的特性就是抑制在阈值点附近的快速开合。如果使用单阈值控制,温度达到目标值后关闭加热器,温度会迅速下降,再次低于阈值,造成加热片反复启停,不但消耗了电能,缩短了MOSFET和加热片的寿命。但是滞回控制加入了温度死区,使加热片在达到最高温度之后才停止工作,只有当温度降到最低点之后才会重新启动,从而增大了开关时间。
温度采集的频率为一秒一次。药液温度变化较慢,一秒钟采集一次就足够用来控制了。DS18B20做一次温度转换大概需要750毫秒,加上通信时间,一秒一次采集频率合理。接收到的温度值用消息队列传送到显示刷新线程,实时更新屏幕上的温度显示。
4.4 液位检测与报警程序设计
液位检测及报警程序对吊瓶内药液的液位进行实时检测,液位过低时发出声音光报警以及舵机关断。液位检测的可靠性直接影响输液的安全,所以程序设计时要考虑到抗干扰、防误触发的措施。
液位检测用非接触式液位传感器的输出电平来读取。传感器输出高电平的时候表示液位正常,输出低电平的时候表示液位低于阈值。STM32把连接传感器的GPIO引脚设为输入模式,在主循环中以周期的方式读取这个引脚的电平状态。
为了提高液位检测的可靠程度,程序中用防抖确认的方法来保证。第一次读到低电平就代表液位过低信号,程序并不立刻发出警报,而是启动了一个防抖定时器。连续五次读取都为低电平之后才会认为是真实的液位过低事件。能够很好的解决由于传感器短暂误触发、电磁干扰、液面波动等造成的假报警问题。防抖时间为500毫秒,五次读取之间间隔时间为100毫秒,可以保证可靠性的同时也不会因为防抖时间太长而造成延迟报警。
液位过低事件确定之后,程序就执行报警处理程序。首先把报警标志设为“1”,防止再次触发报警。其次用PWM信号驱动蜂鸣器引脚输出声音报警。蜂鸣器报警频率设置为2千赫兹,持续3秒后自动停止,液位过低状态如果一直存在,每隔10秒就会发出一次蜂鸣器报警。第三,在液位恢复到正常状态之前点亮LED指示灯。在LCD屏幕上显示液位低于预警线时的警告信息,屏幕背景色由原来的蓝色变成红色,引起医护人员的注意。第五步调用舵机控制函数,使舵机关断位置转动至夹紧输液管。
液位检测程序还要对液位恢复正常的情况进行处理。传感器的输出电平由低变高的时候,程序也使用了防抖确认的方式来确认液位是否正常。此时清除报警标志,关掉LED指示灯,LCD屏幕上恢复正常的显示,但是舵机仍处于断电状态,需要医护人员手动复位之后才可重新开始输液。因此,在护士赶到现场之前,输液管是被关闭的。
4.5 舵机控制程序设计
舵机控制程序用来在液位过低的时候驱动舵机转动,使机械臂压紧输液管达到关断的效果。舵机的控制依靠PWM脉冲宽度调制信号来达成,不同的脉冲宽度会带来不一样的转动角度。
舵机控制程序首先要对TIM3定时器的PWM输出功能进行初始化。配置步骤如下:使能TIM3和GPIOB的时钟,将GPIOB的PB0引脚复用为TIM3的通道3输出。配置TIM3向上计数模式,ARR设为19999,PSC设为95,计数时钟频率为96MHz/96=1MHz。PWM频率=计数时钟频率÷ARR+1,即1MHz除以20000=50Hz,周期为20ms。将PWM模式设为模式1,即当CNT小于CCR的时候输出有效的电平为高电平。比较值CCR的起始值设为500,即0度位置。启用TIM3的自动重装载预装载功能,开启TIM3计数器,开启TIM3PWM输出通道。
舵机控制函数有两个基本操作,即正常位置操作和关断位置操作。正常位置设比较值CCR=500,输出脉宽0.5毫秒,舵机转动到0度位置,不干扰正常的输液。关断位置操作设定比较值CCR为1500,输出脉宽1.5毫秒,舵机转到90度位置,或者设置CCR为2000对应135度位置,机械臂压迫输液管使其闭合。考虑到不同的输液管壁厚不一样,因此可以程序设定一个关断角度来实现压迫效果。
舵机转动所需时间一般为0.12秒,从0°转到90°大约需要0.12秒。因此在调用关断位置操作之后,程序要延时200毫秒以上,使舵机有时间转到另一个位置。舵机的电源要保持稳定,舵机在转动的时候电流较大,程序不能在此期间做其他大电流的操作,否则会造成电源电压波动。
舵机控制程序有手动复位的功能。护士更换吊瓶后可以按键使舵机恢复到原来的位置上,重新开始输液。手动复位时,舵机从关断位置转到0度的位置,也必须等转动完成后才开始。
4.6 显示程序设计
显示程序主要用来把系统各方面的状态信息用图形和文字的方式呈现到TFT LCD屏幕上,给用户提供直观的监控界面。显示程序用LVGL轻量级图形库来开发,可以实现主界面、报警界面和设置界面的绘制和刷新。
显示程序的初始化过程如下所示,在调用LCD硬件初始化函数之后,设置好SPI接口及GPIO引脚,并且对ILI9341驱动芯片进行初始化,即进入睡眠模式,设定像素格式为RGB565,设定显示方向为横屏,开启显示。接着调用LVGL库的初始化函数lv_init,初始化LVGL的内存管理、显示驱动、输入设备驱动。最后创建定时器,每隔5毫秒就调用一次lv_tick_inc函数来给LVGL提供系统的心跳。
主界面上用分区布局方式来设计。屏幕上方有系统名称智能静脉输液监控系统。屏幕中部左边用大号字体显示滴速数值,单位为滴/分。屏幕中部右侧用大号字体显示温度数值,单位为摄氏度。屏幕底部左侧为液位状态显示区,在正常状态下显示液位正常绿色文字,在过低状态下显示液位过低红色文字并有闪烁。屏幕底部右侧为报警状态,正常时显示系统正常绿色文字,异常时显示具体报警信息红色文字。
显示数据更新使用消息队列完成。数据采集线程每采集到一个新的滴速、温度或者液位数据之后,就将数据封装成消息发送给显示刷新线程。当显示刷新线程接收到消息之后,会调用LVGL的标签控件更新函数,对相应标签的文本内容进行修改。对时间这样的需要周期性的刷新数据进行刷新,显示刷新线程每隔500毫秒就主动刷新一次。
显示程序也加入了报警界面弹出的功能。液位低或者滴速异常的时候,显示程序会在主界面出现一个半透明的报警窗口,显示报警类型及报警提示,并且设有消音按钮。护士按下消音按钮可暂时关闭蜂鸣器报警,但是LED指示灯以及屏幕上的报警信息仍会一直显示直到异常被排除为止。
5.1 测试方案
系统硬件和软件开发完成之后,必须对系统的各项功能进行测试和性能验证,看是否符合设计的要求。本系统测试方案由测试环境搭建、测试仪器准备、测试项目规划、测试步骤设计四大部分组成。
测试环境搭建时创建了一个模拟输液装置用作功能测试。该装置由一个输液架、一个500毫升输液吊瓶、一根一次性输液器、一个接水容器组成。吊瓶内注入纯净水或者生理盐水来模拟药液,输液器按照临床操作规范进行正确安装,滴壶内的液面高度要适当。整个装置放在稳定平台上,高度差模拟真实的输液情况。
测试仪器的准备包括以下几项,测试和校准所用仪器。红外测速仪用来测定真实的滴速,它是系统滴速检测精度的参照。数字温度计是用来测量药液的实际温度,给DS18B20温度检测精度做标准的。秒表可以用来测量响应时间并计时。万用表可以用来测量电压、电流等电气参数。数码相机是用来存放检测过程中及结果的。
按照系统功能要求制定出如下测试项目。第一,滴速检测精度测试,在三种滴速下做检测。第二,对温度检测、加热控制进行测试,验证温度检测的精度、加热启停的逻辑。第三,液位检测与报警试验,测试液位过低报警的准确性和响应时间。第四个步骤为舵机动作测试,即对舵机动作及停机进行检测。第五步是显示功能测试,测试显示内容是否完整、刷新速度是否流畅。第六,系统稳定性测试,测试系统的稳定可靠程度。
测试步骤的设计要符合以下的流程,即准备测试条件、执行测试操作、记录测试数据、重复测试多次、计算成功率、误差。每一个测试项目都要做十次以上的试验,以保证测试结果具有统计学的有效性。
5.2 功能测试与结果
按照上文所述的测试方案对系统各项功能进行测试,测试结果如下表所示。
滴速检测准确性的试验。设置输液器的滴速调节器,使滴速分别设置为约六十滴/分钟、九十滴/分钟和一百二十滴/分钟。在每一个档位下,同时用系统读数、红外测速仪读数和人工计数这三种方法测量滴速,一直测量一分钟,记录测量值。每个滴速档位10次重复试验。由上表可知,六十滴每分钟下系统测得的数据和人工数相差最大的是1滴每分钟,相差最小的是0滴每分钟。九十滴每分钟档位的误差最大为二滴每分钟,平均误差为一点一滴每分钟。在一百二十滴每分钟挡,最大误差为三滴每分钟,平均误差为一点六滴每分钟。误差随着滴速的增大而增大,是由于高速滴落时液滴通过传感器的时间间隔变短,传感器响应存在微小延迟造成的。因此,总体上来说,在临床常用滴速范围内系统滴速检测精度可以达到设计的要求。
温度检测以及加热控制测试。将DS18B20温度传感器探头和标准数字温度计并排放入吊瓶内水中,测量两者之间的读数差别。测试结果表明,在温度为二十摄氏度到四十摄氏度时,DS18B20测得的温度值和使用标准温度表测得的温度值误差不大于0.4℃,满足了设计要求。加热控制功能测试用冰水混合物使吊瓶内的水温降到二十五摄氏度左右,再启动系统来观察加热过程。系统当水温低于32摄氏度的时候就马上开启PTC加热片,水温以约0.5摄氏度每分钟的速度上升。当水温达到36℃的时候,系统就会自动关闭加热片。由于热惯性,水温会再上升约零点五摄氏度之后才开始下降。当水温降到32摄氏度以下时,就重新启动加温。测试时没有发现加热片在阈值点附近频繁启停的情况,滞回控制策略是有效的。
液位检测、报警试验。将非接触式液位传感器贴在吊瓶外壁上距离瓶底两厘米的高度处,向吊瓶中加满水,缓慢放水,观测系统报警触发时间。测试结果表明,当液面降到传感器安装高度的时候,系统可以在300毫秒内检测到液位过低并且发出报警。从液位触发到蜂鸣器响起来、LED亮起来、屏幕出现报警信息的时间<500ms,符合设计要求。连续做了十个实验,每次都能准确触发报警,没有出现漏报或者误报的现象,成功率百分之百。
舵机关断功能试验。液位报警触发之后,查看舵机是否可以正常转动从而压迫输液管。测试结果证明舵机从零度转动到九十度动作时间在零点一二秒左右,机械臂能可靠地将输液管压平闭合。用手挤捏滴壶,无药液向下流动。舵机处于关断状态是稳定的,不会出现蠕动或者回退的现象。连续进行十次测试后舵机都能正常工作,成功的次数为百分之百。
测试功能的显示。观测LCD屏幕在系统运行过程中所显示的结果。滴速、温度、液位以及报警信息等信息都可以清楚显示在屏幕上,字体大,颜色对比度高。从不同角度进行观察,屏幕可视角度为120°,可以满足使用上的要求。数据刷新速度很快,没有出现卡顿、闪屏等情况。
系统的稳定性测试。连续24小时,每隔两小时记录一次各种功能的状态。从测试结果可知,系统的整个测试期间没有出现死机、自动复位或者功能异常等情况。滴速检测、温度检测、液位检测均能保持正常工作,显示刷新正常。系统长时间工作稳定。
5.3 测试分析
根据以上的测试结果来对系统各个方面的性能指标加以分析并做出评价。
滴速检测的准确性,在低中速六十到九十滴每分钟范围内比较好,可以满足临床使用要求。在高速一百二十滴每分钟以上时误差略大,主要原因是SD01传感器的响应时间有上限,液滴间隔小于传感器恢复时间就会出现漏检。高速滴落的时候液滴可能连着连续出现,即两个液滴间隔很短,甚至部分重叠,造成传感器输出的波形异常。因此可以选用响应速度更快的光电传感器,在软件算法中加入连滴识别、补偿。
DS18B20温度检测精度可以达到设计要求,PTC加热片的加热功率适中,可将药液温度由低到高逐渐提高至舒适温度。滞回比较控制策略可以很好地防止加热片频繁地打开和关闭。目前的系统没有对加热速度进行控制,加热片一直工作在最大功率上,容易造成温度过冲。后面可以采用PWM的方式控制加热功率来达到更平滑的温度控制目的。
液位检测以及舵机关断部分,系统响应速度及可靠性满足设计要求。非接触式液位传感器安装简便,检测准确,不会造成交叉污染。舵机扭矩足够大,可以保证机械臂能夁住大部分常见的输液管。防抖确认机制很好地降低了误报的发生。
系统整体性能上RT-Thread多任务调度运行稳定,没有出现由于任务线程之间的冲突或者死锁造成的性能问题。系统的模块化设计利于以后功能的增加以及维护。本系统达到了设计要求,有实际应用的价值。











openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)