雷琳 李克俭 蔡启仲 潘绍明
摘 要:针对医用的微量注射需定时、定量,流量速度范围可调节等控制问题,提出一种基于FPGA的微量注射泵设计方法:以FPGA为控制核心,以压力传感器和光电编码器作为检测装置的微量注射泵,采用步进电机驱动器2MD320控制步进电机带动丝杆旋转,丝杆旋转一圈推动滑块移动1 mm.分析研究了驱动脉冲个数、注射容量、检测计数值之间的关系,给出了脉冲补偿的方法,实现对微量药液的智能精密注射.经验证,该微量泵能按需设定注射时间,控制设定注射流量速度范围为0.001 mL/min~0.999 mL/min,可匹配不同容量的注射器.
关键词:微量注射泵;FPGA;步进电机;光电编码器
中图分类号:TP332;R197.39 文献标志码:A
0 引言
微量注射泵是应用于工业生产、实验室以及医院的一种微流量供给装置,主要用于精密流体传输,可避免人为操作的误差和不确定性[1].微量注射泵操作便捷、定時、定量,可准确、安全、有效地配合医生抢救,亦可用于兽药注射;因此,注射泵的市场前景广阔[2].
国内外微量注射泵,面临的难点是精度不够和成本比较高.市面上微量泵的基本功能有:快速推注功能,总量查询功能,报警提示功能,流速选择功能[3-4].技术指标为:以容量为10 mL注射器为例,最大流速为200 mL/h,注射速率为0.1 mL/h~199.9 mL/h,流速精确度1%以内.本文应用FPGA研究与开发的微量注射泵的技术指标:以10 mL注射器为例,最大流速为642.85 mL/h,可设定的注射速率为0.001 mL/min~0.999 mL/min(0.06 mL/h~59.94 mL/h),误差小于1%.本文设计的微量注射泵满足市面上微量泵的基本功能,并且增加了定时注射功能,通过定时可方便了解注射时间,定时定速可有效控制注射总量,是一种具有操作简单,流速稳定,定时定量精度高,速度可调节等特点的新型医疗仪器.
1 系统总体设计
设计的微量注射泵由输入键盘,传感器,FPGA控制模块,步进电机驱动及步进电机,液晶显示,声光报警状态显示,存储模块和USB通信接口等组成,其整体连接如图1所示.
图1中,4×4键盘、液晶显示和声光报警状态显示模块构成人机界面.4×4键盘主要用于设定注射时长与注射流速v,选定注射器型号与时间单位,运行控制与暂停注射.暂停注射时可以更改设定速度值.可自定义10组常用的注射设定值通过键盘选择快捷操作.
设定参数过程中通过液晶显示和led灯观测当前的设定值与系统的运行状态,电机运行过程中,液晶显示已注射总量和剩余时间.注射完成后led灯亮和蜂鸣器发出蜂鸣声予以提醒.
FPGA内部设计一个存储模块,用于存储设定的速度值和时间值.USB通信接口可以与计算机通信[5-7],用于传输设定的值与注射总量.
传感器模块包括光电编码器[8-13]和压力传感器.光电编码器与步进电机构成闭环系统,采用OMRON公司的E6A2-CWZ6C编码器,光电编码器精度为1 000脉冲/转.
压力传感器采用电阻应变式压力传感器,应用LM358放大调理,再经过ADS1242进行AD采样传输给FPGA主控芯片.根据不同的注射器容量设定不同的阈值,当压力值超过阈值时触发堵塞保护的功能,蜂鸣器报警,电机停转.
采用2MD320步进电机驱动器控制步进电机的运转,丝杆旋转推动滑块和压力传感器模块移动.
2 FPGA控制模块设计
2.1 注射精度控制
注射过程中要求电机匀速运转,流速稳定,对不同容量的注射器其注射的流量速度应与设定速度一致.
设计选用的丝杆导程为1 mm,步进电机转动一圈推动滑块水平移动1 mm. 2MD320步进电机驱动器能够实现1/128细分,步进电机每转一圈需要25 600脉冲,一个脉冲转动1.8°/128.
不同容量注射器长度与容量对应关系如表1所示.根据设定的注射速度值(即流量速度)与注射器容量确定控制步进电机的期望脉冲数.由于不同容量的注射器横截面积不同,所以对于设定的流量速度v(v=横截面积×单位时间的水平位移)对应的单位时间脉冲数pul也不同.v的取值范围为0~999,单位为μL/min.设定步进电机驱动模块的基准时钟为25.6 kHz,则对应基准时钟,驱动模块每min可输出25 600×60个脉冲,步进电机每min转60圈,对应的滑块移动的水平距离为60 mm, 即滑块移动的速度为60 mm/min, 对容量为1mL注射器,其流量速度v=(1 mL/58 mm)×60 mm/min, 即: 对应基准时钟的流量速度最大且vmax=60/58(mL/min), 同理, 对容量为2 mL,5 mL,10 mL注射器流量速度最大值vmax分别为60/16,60/8.4,60/5.6(mL/min),流量速度最大值即快速推注时的系统最大速度.在流速选择功能下要求注射泵按照设定速度值v注射,因此需要对输出的脉冲进行处理,每s需要的脉冲数应该为基准时钟的v/vmax倍,即对应速度值v,电机驱动每秒输出的脉冲数pul应为:
为了保证注射流速稳定,将 pul/s个脉冲分为25.6个周期输出,参照基准时钟每1 000个脉冲输出v个脉冲.据此,设定速度值计数器cnt1,计数范围为0~1 000,当cnt1
由于步进电动机自身及所带负载存在惯性,电机有可能在起动时出现丢步,在停止时发生越步.为了监测电机运转情况并进行注射总量统计,利用光电编码器记录电机运转圈数,计算实际的水平位移,用来统计注射总量.光电编码器精度为1 000脉冲/转,然而步进电机每转一圈需要25 600个脉冲,有10次2 560个脉冲,根据设定的速度值v,pul每发出2 560个脉冲读取一次编码器的计数值y,即电机运转1/10圈读取一次编码器的计数值y,理想值y=100,若读入的值y≠100,则电机可能出现失步,待下一次读入y值时判断是否补脉冲或发出异常报警.判断流程图如图2所示.
若连续2个周期采到的计数值均小于设定值,且误差增大,则电机运转异常,有堵转的可能,应发出报警;若采集的计数值不等于设定值,且误差不大于1%,即光电编码器计数器计数值范围为99~101,对应的步进电机驱动输出脉冲误差为±25.6个脉冲.判断是否进行补脉冲,若下一個采样周期累计恢复正常,则不需要补脉冲,若两周期均值仍不等于设定值,进行补脉冲操作, 从第3个周期开始补脉冲, 因此采样得到误差个数的累计值应小于3.需要补脉冲时每个采样周期补±12.8个脉冲,约为±pul/200, 即:改变脉冲控制量v, 当v>200时,令u(k)=v±v/200,当v<200时,对每个采样周期只在采样周期的前1/4时间补u(k)=v±v/50,采样周期后3/4时间内u(k)=v.补脉冲时电机的脉冲信号pul为:
由于光电编码器可识别的角度为0.36°,因此系统容许的最大累计误差为±0.36°,补脉冲前步进电机驱动脉冲误差为±(1~25.6)个脉冲.补脉冲之后,步进电机驱动脉冲误差为±(1~12.8)个脉冲,对应丝杆上的水平位移为3.9×10-5 mm~5×10-4 mm.对应不同容量的注射器,最大误差如表2所示.
步进电机驱动信号有pul,dir,en.根据控制模块输出的stop信号控制,en可控制电机的起停,当状态机处于run状态时,en置0,低电平使能,接收相应脉冲即可运转.状态为pause或idle时en置1,电机停止运行.利用按键选择电机正转或反转实现注射泵的注射或抽取功能.
2.2 状态机设计
FPGA控制模块[14-17]是微量注射泵的控制核心,为强化系统稳定性、构成性能良好的同步时序逻辑模块,设计状态机控制整个系统的运行,根据键盘输入的译码值设定状态机的状态转移,由状态机的状态决定输出的信号指示灯及电机运行的起停.状态转移图如图3所示.
状态转移敏感信号含义如下:
1)set_t_pro:时间设置过程标志. set_t_pro为1时进入设置时间值与时间单位的过程,为0时跳出时间设置过程;
2)set_v_pro:设置速度过程标志,set_v_pro为1时进入设置速度值与选择注射器容量的过程,为0时跳出速度设置过程;
3)set_time:设置时间完成标志位.当时间设置完成时set_time置1,当运行结束时set_time清0;
4)set_v:设置速度完成标志位.意义与set_time相同;
5)complete:运行完成标志位.当倒计时结束时complete标志位置1,维持1 s后清0;
6)pressure:压力报警标志.压力传感器检测到压力过大时pressure置1,按下报警清除键pressure清0;
7)pause_ flag:暂停标志.按下暂停键,pause_ flag取反.
开机复位时默认状态为idle,当按下设定时间或设定速度键时,状态转移为pause,进入设定状态,时间与速度设定完成后,状态转移为run,电机开始运行,运行过程中按下暂停或有压力报警时,状态转移为pause,待处理完压力报警问题或更改运行速度后,再按下暂停键,注射泵继续按照剩余注射时间运行,运行完成时状态转移为默认状态idle.
状态机的pause状态为设定状态,设定过程流程图如图4所示.
控制模块根据键盘译码的键值做出相应的控制,判断键值为设置时间或速度,若是设置时间,set_t_ pro置1,进入时间设置过程,根据键值进行设置:按键为设定时间功能键时设定时间单位,时间单位可选s,min,h,按键为数字键时设定时间数值,时间值范围为0~999,时间设定完成时按下确定键set_time置1;设置速度过程与设置时间相同.当set_time与set_v都为1时,进入run状态.
在pause状态中可进行时间单位与注射器容量的选择.用户可选时间单位为s,min,h,由信号灯t_st观测. 市场上常见的注射器容量为1 mL,2 mL,5 mL,10 mL,据此,设定了4个注射器容量匹配档位,所选注射器容量由led灯v_st观测,t_st和v_st的含义如表3所示.
只需选定注射器容量设定注射速度与时间,微量注射泵就能按照设定的流量速度值与运行时间匀速输出药剂.
3 功能实现与验证
采用Verilog HDL语言完成硬件描述,编写testbench.v模拟外部输入信号,使用ModelSim软件进行综合后功能仿真,观测状态机的变化及各个控制信号的输出.控制模块状态机状态转移过程仿真图如图5所示.各端口含义如下:
set_t_pro,set_v_pro,set_time,set_v,complete,pressure,pause_ flag见2.2节.
clk:系统时钟,采用100 Hz,周期为10 ms;
n_rst——系统复位;
scan_key——键盘输入的译码值;
c_state——状态机状态,001:idle;010:pause;100:run;
clk_1hz——频率为1 Hz的时钟;
rest——剩余运行时间,用于倒计时;
stop——电机起停信号,stop=1时电机停止;
t——设置的时间值;
v——设定的注射速度值,即流量速度值.
开机状态为idle,无按键按下时键盘译码值为15,采集到译码值为10表示当前按键为设置速度,进入速度设置状态,set_v_pro置1,在下个clk上升沿状态转移为pause.
在速度设置过程中,v_st为2b01,所选注射器容量为2 mL,键盘译码值1,3,13,将数字键1,3暂存到速度数值寄存器,键盘译码值13表示按键为确定,set_v置1,set_ v_pro清0,速度设置完成,跳出速度设置状态.键盘译码值为11表示按键为设置时间,进入时间设置状态,set_ t _ pro置1,在时间设置过程中,时间单位t_st为2b01,设定的时间单位为s,键盘译码值为5,13,将数字键5存入时间数值寄存器,键值13表示确定,set_t_pro清0,set_time置1,时间设置完成,此时set_v与set_time均为1,状态转移为run.
当状态机进入run状态,速度数值寄存器将暂存的3个速度数字0,1,3(未满3位时默认高位为0)计算为三位十进制数存入速度寄存器v用来控制电机运转速度,图中v=13;时间数值寄存器将3个时间数字0,0,5计算为三位十进制数存入t,进入倒计时和电机运行阶段.t赋值完成后在clk_1hz上升沿将t赋值给rest,rest开始按设定的时间单位自减,当前设定时间单位为s,当rest减到1时,下一个clk_1hz的上升沿complete置1,信号维持1 s,状态机检测到运行完成,状态转移为idle,状态转移过程正常,但电机运行的时间比设定的时间长.
时间误差分析:c_state控制stop,complete控制c_state,rest控制complete,所以状态转移到run时,stop清0先于rest赋值,时间误差为0~99个clk周期.状态由run转移为idle时,stop置1比complete晚1个~2个clk周期,即电机在倒计时开始前启动,倒计时结束后停止.运行时间比设定时间多2个~101个clk周期,多运行20 ms~1 010 ms.为了严格控制电机运行的时间,减小不同时钟时序延时引起的时间误差,提出改进方案:将电机运行的起停信号stop与rest用相同的时钟clk_1hz控制.改进之后的控制模块如图6所示.
由图6可知,待rest信号赋值后的一个clk_1hz周期,stop信号清0,电机开始运行;待complete置1后延时一个clk_1hz周期stop信号再置1.改进后stop为0的时长与倒计时rest时长一致,有效降低了时间误差.
4 结论
以FPGA为核心开发的微量注射泵,整机主要技术参数为:线性速度范围0~60 mm/min;1 mL,2 mL,5 mL,10 mL注射器快速推注速度1.03 mL/min,3.75 mL/min,7.14 mL/min,10.714 mL/min;可設定的流量速度为0.001 mL/min~0.999 mL/min,误差小于1%.本设计充分利用了FPGA并行处理的特点,实现了旋转检测、步进电机脉冲产生、与时间倒计时并行处理,有效提高了采集数据的准确度.通过脉冲补偿,实现了注射泵的精密注射.
参考文献
[1] 刘辉,李佾正,胡强.多通道微量注射泵的设计与实现[J].现代电子技术,2011,34(7):167-169.
[2] 龙燕君.便携式自动挤压输液器设计研究[D].成都:西南交通大学,2014.
[3] 沈亚斌,张晨东,赵涛.多通道微量注射泵控制系统的设计[J].计算机测量与控制,2014,22(10):3220-3222.
[4] 陈曦,王清,蔡姗姗.宽范围注射流量的微量注射泵的设计与开发[J].自动化技术与应用,2014, 33(6):77-81.
[5] 裴向东,陈箫,谭秋林,等.基于USB-FIFO的FPGA与上位机通信的设计与实现[J].计算机测量与控制,2012,20(4):1073-1075.
[6] 吕骏,王仁波,汤彬,等. 基于USB总线的多点数据采集系统的设计[J].电子测量技术,2015, 38 (11):88-91.
[7] 李霞,蔡启仲,陈文辉.基于CAN的嵌入式PLC和监控系统通信设计[J].仪表技术与传感器,2011(10):41-43.
[8] 陈燕,刘守山.基于CPLD的光电编码器四倍频电路的设计[J].国外电子测量技术,2015,34(1):45-48.
[9] 何可人.医用微量注射泵设计和仿真研究[D].上海:华东理工大学,2014.
[10] 张剑霜.输液泵/注射泵检测系统的设计与实现[D].成都:电子科技大学,2014.
[11] 周良杰,赵治国.方向盘转角传感器误差成因与补偿的研究[J].仪表技术与传感器,2013(11):7-10.
[12] 李静,蔡启仲,张炜,等.基于FPGA的PLC输入存储与读取控制器的设计[J].仪表技术与传感器,2014(6):33-36.
[13] 冯英翘,万秋华.小型光电编码器细分误差校正方法[J].仪器仪表学报,2013,34(6):1374-1379.
[14] 张松,李筠.FPGA的模块化设计方法[J].电子测量与仪器学报,2014,28(5):560-565.
[15] 李克俭, 付杰, 蔡启仲, 等. 基于FPGA的串行定时器设计[J].广西工学院学报,2012,23(3):61-65.
[16] 周曙光,李克俭,蔡启仲, 等.基于FPGA的PLC并行数据输出控制器设计[J].广西工学院学报,2013,24(1):14-18.
[17] 任杰,李克俭,潘绍明, 等.双口RAM读写正确性自动测试的有限状态机控制器设计方法[J].广西科技大学学报,2015,26(4):36-41.
Abstract:Aiming at the problems of micro-injection pump on timing, quantity and flow speed range and so on, a micro-injection pump design method based on FPGA is put forward. The design uses FPGA as the control core, pressure sensor and photoelectric encoder as detection devices, and stepping motor to drive screw rotation. When screw rotates a single revolution, slider moves 1 mm. Pulse compensation method is provided by analyzing and research on the relationship among the number of pulses, the injection capacity and the value of the detector, which realizes intelligent precision of trace liquid injection. It is verified that the trace pump can set the injection time and control flow speed with the range of 0.001 mL/min~0.999 mL/min according to the need, and the trace pump can match different capacity of the syringe.
Key words: micro-injection pump; FPGA; stepping motor; photoelectric encoder
(學科编辑:黎 娅)