【作 者】杨成训,柏祖军,张世武,金虎
中国科学技术大学 精密机械与精密仪器系,合肥市,230027
为了观察患者病灶的相关情况,需要将高浓度的造影剂注射到患者体内,再通过X光的分层扫描,最后通过计算机重建解剖图像。但由于人体的某些部位具有较为特殊的生理结构,加之某些病灶具有一定的隐匿性,因而若想进行有效的诊断,则需要对患者予以增强扫描,为获得清晰、高质量的扫描图像,则需要使用高压注射器为患者注射造影剂[1]。
与传统注射器相比,高压高速注射器对驱动系统的驱动能力和控制系统的稳定性提出了更高的要求。位于操作间的注射器的显示端运行基于安卓开发的人机交互程序,负责输入用户指令,注射状态的实时显示及回放,以及故障自我诊断。显示端通过屏蔽线缆与位于CT室内的注射端相连。注射端以指令解析芯片和驱动电路为核心,驱动电机按照预设参数平稳运行。
注射器的注射模式分为手动模式、智能模式、自定义模式。每个模式最多由六个时相构成。时相按照顺序依次执行。每个时相又可以分成A相定速、B相定速、A相变速、AB定比混合+定速四个子模式。其中A相为造影剂,B相为生理盐水。用户可以通过触摸屏操作交互程序输入每一相的注射模式及注射参数(注射速度、注射量、注射间隔等)。指令打包后通过屏蔽线缆发送到注射端主控板。主控板实时返回注射端当前状态(注射信息、故障信息、传感器信息)。注射端负责解析并执行指令,驱动基于六步方波的无刷电机的驱动电路。其中升级版使用基于FOC(Field Oriented Control,磁场定向控制)和SVPWM(Space Vector Pulse Width Modulation,空间矢量脉宽调制)的控制驱动模式,运行更加平稳,噪声更小。同时非程序注射状态下,可以通过机身按键直接控制电机运转。同时为了安全考虑,显示端与注射端都留有暂停(急停)按键。注射器整体架构如图1所示,根据空间分布分为显示端与注射端两个模块。
图1 注射器整体架构Fig.1 System framework of the injector
显示端显示器采用分辨率为1 024×768的液晶触摸屏。液晶屏通过LVDS接口与安卓主板相连。主板运行定制安卓5.1系统,RAM为600 MB,ROM为8 GB。屏幕下方为按键板,上有五个实体按键。包括模式按键(模式切换)、程序按键(显示设备信息)、记录按键(查看历史注射记录)、电源按键(开关机)以及暂停(急停)按键。其中电源按键信号由低成本单片机STM32C8T6采集,再经由光耦控制继电器,控制三路电源(5 V、12 V、24 V)的通断,最后利用软件延时实现点按开机及长按关机。按键信号直接与安卓主板板载的I/O口相连。手柄虽然看似从显示端引出,实际信号来自注射端。包括一个执行按键,一个暂停按键和一个四位显示注射时长信息的共阳极数码管。安卓主板只有板载串口,而注射端两个电机互相独立,故采用串口转CAN模块,有利于简化控制。显示端最终引出包含信号线(CAN、STOP、START)与电源线(12 V、24 V、GND)的屏蔽线缆,与注射端相连。
注射端主要由两个直流无刷电机及传动机构、机身按键板、编码器、压力传感器以及主控板组成。无刷电机型号为24 V供电,四极对,峰值扭矩为0.45 N·m,并配有减速比为15的减速器,通过皮带传动及蜗轮蜗杆传动驱动推杆前进后退。根据峰值扭矩估算,电机的最大母线电流约为11.7 A。机身按键包括前进、后退、微动、加速、自动吸药、确认、开始、暂停等按键。主要用来直接操作针筒吸药或者排气。增量式光栅编码器一圈60线,固定在螺杆轴末端,用来确定当前推杆位置。压力传感器嵌入在推杆最前端,量程为5~500 kg,校准后误差在5 psi(1 psi=6.89 kPa)内。主控板为对称结构,分别对应两个电机的控制。每侧有微处理器STM32f103ret6挂在CAN总线上,负责解析注射指令和发送反馈信息。还有微处理器STM32f103c8t6对前级留有速度控制接口,对后级生成六路PWM信号,经由三个半桥驱动器IR2101S控制六个NMOS开关驱动电机。此外,主控板上还有处理压力传感器的调理电路,霍尔信号上拉电路,限位开关接口,电流/电压采集电路等。其中基本版采集母线电流和母线电压,用于过流和失压保护,升级版因为使用FOC+SVPWM的方案,需要额外对相电流和相电压进行采样,因而有源器件(比如运放)会明显增多,成本会明显上升。
限位开关由光电门加固定在推杆上的挡片组成,除了用来限定推杆的极限位置,防止推杆撞击机架外,还有剩余量校准作用。预留的串口是方便调试。编码器由60线的增量式光栅和光电门组成,其中光电门固定在机架上而光栅固定在螺杆尾端,随推杆移动而转动。配合FLASH的掉电数据保留特性即可确定当前推杆的绝对位置。压力传感器输出为一对差分信号,使用仪用运放AD623放大20倍后接微处理器ADC引脚。板子上留有Jlink程序烧录接口,通过跳线帽选择烧写对象。无刷电机内部的霍尔传感器为开集输出,故需要配套上拉滤波电路,才能接入微处理器引脚。STM32f103ret6与STM32f103c8t6之间通过串口连接。栅极驱动器选用IR2101S,带有自举功能,保证上桥臂的NMOS管能按照目标持续导通。一个IR2101S驱动器可以控制一对桥臂。开关元件是型号为IRFR2407的NMOS管,最大漏源电流为42 A,漏源额定电压为75 V,典型电平翻转时间为150 ns。根据测算单个电机最大电流约为12 A,而PWM频率为10 kHz,故皆满足要求。注射端主控板主要接口和元件分布,如图2所示。
图2 注射端主控板主要接口与元件分布Fig.2 Distribution of main interface and elements on the main board
在升级版需要额外用于FOC的电压/电流采集电路。相电流采集方案为下桥臂采样,使用三个0.05 Ω、1 W的高精度采样电阻串联在UVW三相的下桥臂NMOS的源极与GND之间,之后再用LM321运放对电阻两端的电压信号进行偏置和放大。相电压先由电阻分压,再经过二极管钳位到3.3 V以内。母线电流采样放大后,使用电压比较器LMV311,通过与分压电阻和电压跟随器产生的参考电平作比较,最终实现过流时输出刹车信号。通过调整分压电阻值,调节参考电平值。
注射器的状态分为四种(空闲、准备就绪、等待执行、执行中),显示端需要根据对应状态位的变化调整界面元素的显隐,后台数据的处理。以典型注射过程为例,用户先在界面上更改注射参数,然后注射端确认按键被按下(代表注射端准备就绪),随后按下注射端或者显示端的手柄上的执行按键就可以开始自动注射了。空闲时候显示端只发送心跳信号,准备就绪状态时发送注射指令,如果注射端校验通过则返回等待执行状态,否则返回空闲状态;执行开始后,加载绘图界面,将压力曲线实时绘制到屏幕上,等待注射结束后,变为空闲状态,使能保存按钮,供用户选择是否保存此次记录。根据以上注射逻辑设计显示端和注射端的程序。
注射器的显示端首先需要负责注射模式的切换,参数的输入,指令的打包发送,然后是反馈数据(主要是剩余量、压力、注射状态和错位类型)的解析与显示。此外,显示端还需要有参数修改、保存、恢复和压力数据保存、回放、导出的功能。程序全程使用Java编写,基于安卓系统5.1,对应目标SDK版本22。如图3所示,程序主要由主进程(负责交互)和三个后台常驻进程(串口通信、按键监听、异常监听)组成。串口通信进程负责将注射指令按照约定的通信协议打包和发送,以及反馈数据包的解析。按键进程负责定时扫描实体按键信号。异常监听进程定时检测和复位系统反馈的错误代号(例如,通讯连接失败,24 V供电电压过低等)。所有的后台进程处理数据和信号的结果都将交由主进程(UI进程)显示到屏幕。程序中分别使用轻量化本地数据库SQLite,Shared Preferences与文本形式保存压力曲线图数据,用户设置参数以及界面当前注射信息。此外还有一些辅助性功能,例如自定义键盘、多语言支持、参数手动校准、系统时间修改等等。
图3 显示端安卓程序架构Fig.3 Framework of Android program on display side
注射器的注射端程序分成两个部分,一个运行于微处理器STM32f103ret6,一部分运行于微处理器STM32f103c8t6。前者负责业务逻辑处理,后者负责驱动电机。业务逻辑处理程序包括按键、LED、蜂鸣器、编码器、限位开关、ADC采样、片上Flash等外设处理程序,还包括CAN通信,串口通信,数据解析、校验等数据处理程序,最后是与电机驱动芯片STM32f103c8t6通信的程序接口。
微处理器STM32f103c8t6上的程序根据不同驱动方式分成两个版本(六步方波版和FOC版本)。六步方波就是将电机电周期根据霍尔信号(代表转子位置)分成六个扇区,每个扇区对应一种MOS管的开关状态。程序中以10 kHz频率扫描霍尔信号,检测到变化后根据预先设定好的霍尔信号-开关寄存器对照表打开或关闭某一桥臂。然后通过脉宽调制+PID控制实现速度闭环。速度闭环中实际速度大小是由单位时间内霍尔信号的变化次数转换而来,速度方向是由霍尔信号变化顺序对比而来。FOC的基本原理是在普通的三相交流电动机上设法模拟直流电动机转矩控制的定向坐标上,将电流矢量分解成为产生磁通的励磁电流分量和产生转矩的转矩电流分量,二者相互垂直,彼此独立,然后分别进行调节[2]。FOC版本的驱动程序结构稍加复杂,基于Simulink的FOC+SVPWM仿真示意,如图4所示。FOC程序主要包括Clark、Park变化与反变换,三ADC同步触发的电流电压采样,用于估计转子速度和位置的反电动势滑膜观测器,以及电流环和速度环的PID控制器。SVPWM的基本原理是根据MOS管的导通状态定义七个基本电压矢量,将前级FOC生成的目标电压矢量分解成这七个基本电压矢量的和,然后计算各个矢量的工作时间,最终实现实际电压矢量末端轨迹为近似圆形。相比于六步方波,显著减小了转矩脉动和噪声。SVPWM程序包括扇区判断,中间变量计算,占空比计算和基本矢量分解。在实际程序中,电流采样需要在对应下桥臂MOS管导通时进行,为了保证采样准确性,使用三个独立ADC在MOS管导通时间段的中间点同步采样。综合芯片的运算性能和控制需求,系统的控制频率为10 kHz较好(STM32f407zgt6上实际测得)。
图4 基于Simulink的FOC+SVPWM仿真示意Fig.4 Sketch map of FOC and SVPWM based on Simulink
系统软硬件搭建完成后进行了联合调试与功能及参数验证。功能主要包括业务逻辑能否正常运行,关键参数主要包括速度和位置定位精度、压力采集精度(校准后)、持续工作速度范围等。注射器关键参数实际与预期的对比,如表1所示。
表1 注射器关键参数实际与预期的对比Tab.1 Comparison between actual key parameters and expectations of the injector
本研究在注射端主控板上设计实现了业务逻辑处理和电机驱动软硬件,结合外部传感器,实现了电机的速度闭环和位置伺服,使电机按照指令平稳运行。在显示端安卓主板上设计开发了交互程序和通讯机制,将注射指令分解成电机控制指令。经过测试,双相高压造影剂注射器的所有预期功能皆已实现。