文 冬,王景存,蔡清清
(武汉科技大学 信息科学与工程学院,武汉430081)
随着医疗检验技术和设备的不断进步,医疗液体样本检验自动处理工作平台得到了越来越广泛的应用,离心机的主要作用是对医疗检验样本进行离心以达到分离样本细胞结构的目的,是全自动样本检验处理工作平台上的关键设备,目前平台系统中离心机的功能多数靠人工干预,不能完成完整的
自动化处理过程,在此,设计了搭建在医疗液体样本检验自动处理工作平台上的自动定位离心机控制系统,其主要功能是配合工作平台完成待检验样本的自动抓取、自动放置和自动离心功能,减少人工干预影响、提高工作效率。
自动定位离心机的简明机械结构如图1所示,其实物如图2所示,自动定位离心机的内部机械结构包括离心机托架、托架盒、槽型光电开关、光孔、圆盘、编码器码盘、编码器读头、步进电机、离心盒、转轴、皮带。
图1 自动定位离心机机械结构Fig.1 Mechanical structure of automatic positioning centrifuge
图2 医用自动定位离心机实物Fig.2 Real object of medical automatic positioning centrifuge
由图2可见,离心机顶部有一个开孔,为平台的机械臂手将离心盒取出或者放入离心机的通道;侧面有一块液晶显示屏,用于显示离心机的状态信息,转轴通过皮带与步进电机连接;离心机托架上设有多个离心盒(即试管盒),平台中的机械臂手可以将离心盒自动取出或者放入离心机。
在自动定位离心机工作前,需要对其进行初始化,初始化后,主要通过接收主控板发送的命令、参数,完成匀速找零点、自动定位、高速离心、状态显示和信号反馈等工作。
典型的运动控制系统主要由运动部件、传动机、执行机构、驱动器和控制器构成,在此,控制系统主要由基于STM32单片机的控制器、驱动器、增量型编码器、步进电机、LCD液晶显示屏、槽型光电开关等构成,控制系统硬件的结构如图3所示。
图3 控制系统硬件结构Fig.3 Hardware structure of control system
编码器起到记录离心机位置的作用,系统工作过程中,编码器读头读取编码器信号后,经过滤波和整形等处理,最终将读取的信号输出到单片机的CPU。
槽型关电开关的作用是记录离心机零点位置和离心机转速,系统工作过程中,槽型光电开关采集开关信号后,经过滤波和放大等处理,最终将开关信号输出到单片机的CPU。
LCD显示模块用于显示当前离心机的状态信息,包括当前离心机位置、离心速度、离心时间等。
图4 离心机控制系统程序流程Fig.4 Program flow chart of centrifuge control system
离心机控制系统程序流程如图4所示,控制系统在上电复位后进行初始化,然后进入等待458总线命令的状态,在等待一段时间后进入正常工作状态或手动工作状态,若在一定时间内接收到总线命令,此时离心机进入正常工作状态,然后对总线命令做进一步处理,否则离心机进入手动工作状态,主程序扫描键盘,等待按键,通过功能按键做进一步处理[1],在正常工作和手动工作状态下均可完成离心机参数设置、匀速找零、自动定位、高速离心等工作。
医用自动定位离心机的工作方式分为2种,低速定位方式和高速离心方式,低速定位方式能够实现以下功能:找零点,找离心盒位置1,找离心盒位置2,找位置离心盒3,找离心盒位置4。
1.企业核心能力整体上相当匮乏。具有自身独特核心能力的企业才是健康拥有活力的,然而,纵观国内众多企业,虽然有些时候一些企业也表现出很大优势,获得了很大利润,但对于企业核心能力,多数企业仍然没有建立起来。快速成立又快速破产的企业比比皆是,并由此造成我国就业市场持续严峻的形势。
找零点过程通过单片机控制器发送一个固定较低频率的脉冲,使步进电机带动离心机匀速旋转,当槽型缺口一侧到达槽型光电开关处时,开关信号的变化以输入捕获的方式进入单片机,反复确认3次后,此时单片机记录当前位置为初始零点,编码器数值清零。
离心机找离心盒位置1通过控制器发固定脉冲数来实现,步进电机以初始零点为起点,偏移一个固定脉冲数来确定离心盒位置1,偏移量(脉冲数)用参数OFFSET表示。该参数值为每台离心机的个性参数,不同离心机的参数值因机械装配差异而不同,当步进电机走完该偏移量后,单片机以编码器的数值作为反馈来判断找位置的精度,并在一定范围内进行参数调整,从而实现对自动定位离心机的定位控制。
同理,离心机可实现其他位置的定位控制。
医用自动定位离心机在离心状态下,步进电机转速从0 开始增加,经过加速阶段达到给定的速度值,并稳定在该速度即进入匀速阶段,匀速阶段保持值一段时间后进入减速阶段,直至速度为0。
电机常用的控制算法有LQR、模糊控制、PID等,其中,线性二次型调节器LQR(linear quadratic regulator)的控制对象,是现代控制理论中以状态空间方程给出的线性系统,需要通过MatLab计算最优反馈增益矩阵K=lqr(A,B,Q,R,N)[2],模糊控制依赖于模糊规则表的制定,模糊规则表则根据专家或自己在调试系统时的控制心得而定,模糊控制适用于非线性系统,鲁棒性好[3],PID是一种常规的反馈闭环控制,具有算法简单、控制可靠、鲁棒性较好等特点,P越大鲁棒性越好,若鲁棒性增强则会出现强烈的抖振现象,反之若减少抖振现象则系统的鲁棒性会降低,所以鲁棒性和抖振是一对矛盾[3],在达到控制目的的前提下,通过PID控制算法来控制离心机旋转,即使没有控制系统的数学模型,也能得到比较满意的控制效果,通过PID控制算法来编程,程序设计简单,参数调整方便;有较强的灵活性和适应性,根据被控对象的具体情况,可以采用P,PI,PID等方式。故在此系统选用PID 闭环的稳态控制方案。
传统的位置式PID算法公式为
式中:Kp,Ti,Td,e(t)分别为比例系数、积分系数、微分系数、误差值,位置式PID算法的最大缺点在于它的每次输出U(t)与过去的状态均有关,在计算时需要对过去的所有误差进行累加,工作量较大,此外PID控制器如果出现问题对系统造成的影响很大。
增量式PID算法公式为
由式(2)可知,增量式PID输出不需要对过去所有误差进行累加,输出的控制增量仅需要通过最近的3次采样值就能确定。当Kp,Ti,Td确定后,输出的控制增量也就确定了,相比位置式PID算法更容易计算,通过加权处理就能得到较好的效果,控制器出现问题时也不会对系统造成非常大的影响[4]。故在此所设计的离心机采用了增量式PID算法控制,易于实现且系统稳定,所采用的PID 闭环控制系统模型如图5所示。
编码器单圈线数为600,为了提高编码器的计数精度,实际将编码器4倍频处理,步进电机旋转一圈,步进电机运行的距离为5 mm,编码器变化的数值Encoder_SPR为2400。
图5 电机闭环控制系统框图Fig.5 Closed loop control system block diagram of motor
Vel_SetPoint为设定的电机目标速度,r/min;后续试验中电机速度设定值为1800 r/min,因编码器采样周期为20 ms,故需将其转化为20 ms内目标速度对应的编码器变化值Vel_Target,即
在STM32控制程序中,所用的增量式PID算法数学模型为
式中:TarVal为目标速度对应的20 ms内编码器变化值;CurVal为当前20 ms 编码器变化的反馈值;Kp为比例系数;Ki为积分系数;Kd为微分系数;e(k)为TarVal与CurVal的偏差值;e(k-1)为记录e(k)的上一次偏差;e(k-2)为记录e(k-1)的上一次偏差。由相邻3 组偏差计算一次输出的增量。
控制步进电机时,增量式PID算法每20 ms 执行1次,每次执行算法均会累积ΔUk,即
式中:Vel_Exp_Val为速度的输出值,其转换成电机的输出频率就可以控制电机的实际转速。
STM32单片机的通用定时器自带编码器接口。系统所使用的通用定时器Time 3输入通道口TI 1和TI 2作为编码器的接口,在使用时将Time 3配置为正交编码器计数模式,且在TI 1和TI 2 上升沿捕获。自动重装载值TIMx_ARR为65535,根据步进电机运行方向,或是0 至TIMx_ARR计 数,或是TIMx_ARR 至0计 数,并且设置URS 寄存器仅允许溢出才产生一次更新中断,Over 用于纪录电机旋转过程中编码器计数寄存器CNT 溢出的次数,电机正转溢出,Over值自加1,反之则Over值自减1,Getcount为当前计数寄存器CNT的计数值,则捕获编码器所走的脉冲值CapNum为
系统滴答定时器每隔20 ms对编码器的值进行一次采样,LastCapNum 用于记录上一个20 ms的CapNum的值,则本次20 ms内采样的值为MSF,为避免采样值出现负数,需对计算结果取绝对值,即
每20 ms内的MSF值进行一次累加,并将累加值保存到变量SUM,1 s内累积50次,得到前1 s内的步进电机编码器变化值,然后转化为1 min 电机旋转的圈数即Vel_Cur_Val,r/min,有
每隔1 s 将Vel_Cur_Val的值发送到LCD液晶屏上显示出来,用以记录步进电机的速度,发送后将SUM值清零。
3.4.1 输出比较脉冲产生原理
PUL脚产生脉冲原理如图6所示。
图6 PUL脚产生脉冲原理Fig.6 Schematic of PUL pin generate pulse
输出比较产生脉冲的原理如下:输出比较也为翻转输出,初始化设置通道的脉冲计数值为Toggle_Pluse(即500),在启动定时器运行后,定时器从0 开始计数,待计数到Toggle_Pluse(即500)值时就会产生中断,翻转PUL通道引脚,并且执行DelayCal 函数。在该函数内,读取当前定时器计数值保存到变量count(此时该值为500),并设置新的比较值为count+Toggle_Pluse(即500+500=1000),然后,定时器继续计数,待计数值达到1000时,又产生中断,翻转PUL通道引脚,并把比较值设置为1500(1000+Toggle_Pluse),……,如此循环执行,最终的效果即在定时器通道引脚输出持续的脉冲信号,因为一个完整的脉冲周期,PUL引脚通道电平需要翻转2次,所以一个完整的脉冲信号对应定时器的计数值为2(Toggle_Pluse),这样通过改变Toggle_Pluse值可以非常方便地改变脉冲信号频率。
3.4.2 步进电机运动控制
系统中,步进电机转1 周需要200个脉冲,步距角为1.8°。为提高步进电机的步距精度,将驱动器的细分数调为16 细分,即步进电机步距角变小,此时电机转一圈的脉冲数Motor_SPR为3200。
通过速度的输出值Vel_Exp_Val,计算出步进电机的频率为
定时器TIM1的系统时钟为72 MHz,在此进行4分频处理,驱动电机TIM1的实际时钟频率T1_Freq为18 MHz,则每20 ms 采样TIM 1的时钟频率为
那么TIM 1每个脉冲的计数值为
根据输出脉冲产生原理,一个完整脉冲需要翻转PUL脚电平2次,则PUL通道脉冲的设定值为
最终通过改变Toggle_Pluse的大小来调整脉冲频率的大小,从而改变步进旋转的转速。
整个PID 速度闭环控制的调整流程如图7所示,其中每20 ms对编码器的值进行一次采样。
试验过程中,速度目标值为步进电机所达到的实际速度值,在此,设定电机运行的最高速度为1800 r/min,速度的初始比例系数kp=0.001,然后逐渐增大kp值,经过调节,取其中4 组有代表性的数据进行绘制(如图8所示),其中kp分别为0.001,0.004,0.008,0.014。
由图可见,其中3 组曲线(kp为0.004,0.008,0.014时)的越大,步进电机运行到目标速度的调整时间越短。由实际测量的数据发现,kp=0.004时电机可以较快且比较稳定地达到目标速度1800 r/min。又由图可见,电机到达目标速度却不能稳定,存在稳态误差。
图7 PID 调整流程Fig.7 PID adjustment flow chart
图8 比例调节Fig.8 Proportional adjustment
为消除稳态误差,需要引入积分调节,固定速度的比例参数kp=0.004,调节积分参数ki(起始参数为0.001),反复调整ki,当ki=0.005时绘制的PI 调节曲线如图9所示。
图9与图8对比可见,积分参数ki的引入,使速度调节的稳态误差基本消除,电机在此之后一直以1800 r/min的速度匀速运行,由此表明速度调节采用PI 调节即可使离心机快速、稳定地达到目标速度。
图9 比例积分调节Fig.9 Proportional integral adjustment
所设计的医用自动定位离心机控制系统,通过增量型编码器和槽型光电开关采集信号,最终实现精确定位;通过增量式PID控制算法控制离心机旋转,实现对离心机转速的稳定控制;单片机输出状态信号并在显示设备上显示,多次模拟试验成功后,在随后的实际现场也得到了成功的验证,达到了预期的效果,该自动定位离心机具有定位精度高、可免除人工参与、工作效率高等优点。