一种肌力训练设备的动力控制系统设计与实现
2021-11-30林鑫李玉榕陈建国
林鑫,李玉榕,陈建国
1. 福州大学 电气工程与自动化学院,福建 福州 350108;2. 福建省医疗器械和医药技术重点实验室,福建 福州 350108
引言
肌力是反映人体运动功能的重要指标,一些肌肉骨骼系统受损的患者通常会导致肌力减弱,进而影响肢体的运动功能[1]。针对这种情况,适当地做一些肌力训练,可以促进患者运动功能的康复[2]。有相关研究将肌力训练应用于疾病的治疗中,也取得了良好的治疗效果[3-5]。训练的模式有等长、等速、等张以及被动模式。等长模式是通过设备使得受试者关节能够固定在指定位置。等速模式是通过设备使得受试者关节保持恒定的速度运动。等张模式是由设备输出一个恒定的阻力矩进行训练。被动模式是由设备带动受试者关节以设定的速度运动[6]。
早期的肌力训练设备由于缺乏动力控制系统,不仅训练的效率低下,而且只能依靠经验来制定训练计划。现在的肌力训练设备大部分都引入控制系统,但是设备的功能也存在差异。比如法国BodyGreen公司开发的实用型等速训练机只能实现单一的等速训练模式,不带有计算机系统。美国Biodex公司设计的多关节等速力量测试及训练系统可以进行多关节多模式的训练,所配备的计算机系统功能也很完善,但是上位机显示的数据比较繁琐,不方便观察。广州一康公司生产的肌力训练设备虽然可以实现多种模式的训练,但是等长模式下,无法选择角度。综合来看,国外设计的肌力训练设备还是比较稳定、可靠,大部分的研究也都是基于国外的产品,比如Biodex 、Isomed[7-8]。
本文利用伺服电机作为执行机构,以STM32作为控制器, 并加入伺服驱动器,利用驱动器的转速模式以及位置模式,实现电机的转速闭环和位置闭环控制。还加入角度传感器和扭矩传感器,用于采集训练过程中的角度、力矩数据。同时,基于JAVA语言设计了对应的上位机软件用于训练参数的设置以及数据的显示。
1 硬件设计
1.1 动力控制系统结构
本文设计的动力控制系统组成部分有计算机、控制器STM32、伺服驱动器ASDA-B2、伺服电机、扭矩传感器、角度传感器。信号连接如图1所示,以控制器STM32为核心,上位机、角度传感器、扭矩传感器以及伺服驱动器都连接到控制器上。其中,上位机连接到控制器的串口1,角度传感器连接到控制器的SPI接口,扭矩传感器连接到控制器的CAN接口,伺服驱动器连接到控制器的串口2。
图1 动力控制系统信号连接图
为了便于操作,搭建了一个平台用来放置伺服电机、传感器等硬件,机械结构如图2所示。由伺服电机、传感器等硬件所组成的动力头是肌力训练控制系统的执行部位,主要是利用伺服电机来带动主传动轴转动。伺服电机到主传动轴的动力传递是采用同步带轮以及涡轮蜗杆实现的,然后在主传动轴的输出轴上安装训练支架就可以实现对应关节的训练。扭矩传感器通过螺丝与主传动轴固定连接,并将扭矩传感器的底座固定在涡轮中,当主传动轴与扭矩传感器底座之间产生相对运动,扭矩传感器的弹性轴会产生形变,粘贴在弹性轴上的应变电桥的阻值也就会发生变化,再将应变电桥电阻的变化转变为电信号的变化并通过放大器放大,然后经过CAN控制芯片输出数字信号,控制器通过CAN通信就可以读取扭矩的数字信号,实现扭矩的测量。角度传感器固定在距离主传动轴后方约2 mm处,且芯片正对主传动轴轴心,并将磁钢放置在主传动轴上,当主传动轴转动时,会导致磁钢的磁场发生变化,角度传感器首先检测磁钢的磁场,然后利用集成芯片将磁场的变化转变成数字信号输出,控制器就可以利用SPI或者IIC通信读取角度的数字信号,实现角度的测量[9]。动力控制系统实物如图3所示。
图2 动力头机械结构图
图3 动力控制系统实物图
1.2 串口通信
要实现控制器和上位机、控制器和伺服驱动器之间的数据传输,首先需要配置通信的相关协议。本文选择串口通信,利用串口1实现控制器和上位机的通信,利用串口2实现控制器和伺服驱动器的通信。首先根据用到的串口号,开启对应的时钟信号,然后将引脚设置为串口功能,并设置引脚的工作模式、串口波特率、数据位数和停止位等。接着对串口中断进行配置,包括中断优先级、相关的串口中断服务函数等。最后使能对应的串口号,就完成串口的基础配置。
来自上位机的数据就是通过串口中断服务函数接收,通过读取串口状态寄存器USART_SR的值来判断是否有串口中断发生,当值为1时,表示上位机有数据到来,然后就进入串口中断服务函数中,将本次接收到的字符数据转化为整形数保存在定义的整形数组buf中。然后先判断第一个元素的值确定接收到的数据是控制指令还是训练参数。比如为1,表示接收到的是训练参数,就先将模式标志位Mode_Flag置1,并依次读取数组的元素,将速度、力矩等训练参数保存在定义的变量中。比如为7,表示这是启动指令,将启动标志位Start_Flag置1。
1.3 伺服控制系统原理
伺服电机与控制器、伺服驱动器组成一个伺服系统,控制框图如图4所示,有位置环、速度环以及电流环。位置环可以使伺服系统准确的定位,速度环可以使电机的转速保持设定值,电流环可以使电机电枢绕组电流准确地跟踪电流指令[10-11]。伺服驱动器的三种工作模式:位置模式、转速模式以及扭矩模式分别对应伺服系统的位置环、速度环以及电流环控制,因此可以通过给伺服驱动器发送指令选择工作模式实现对电机的闭环控制。本文选用伺服驱动器的转速模式来实现等长训练模式、等速训练模式和等张训练模式,选择伺服驱动器的位置模式实现被动训练模式。伺服驱动器ASDA-B2可支持Modbus协议,这个协议有两种工作模式:ASCII模式和RTU模式。两种模式的数据格式不一样,ASCII模式传送一个字节的数据要转化为2个ASCII码,比RTU数据量多,但是对数据格式的表达更加直观、清楚[12-14]。因此,本文选择了ASCII模式进行通信。
图4 伺服系统控制框图
根据伺服驱动器ASDA-B2在ASCII模式下的ModBus协议的数据格式,定义了长度为27位的字符数组Send[27],结构如表1所示。STM32发送给伺服驱动器的指令,实际上就是按照约定的数据格式对字符数组Send写入数据。当伺服驱动器识别该数据后,就会控制电机执行相应的指令。
表1 字符数组Send结构
1.4 传感器数据采集
角度传感器AS5048A支持SPI或者IIC通信,本文将角度传感器连接到STM32的SPI接口。SPI 接口一般使用 4 条线通信:MISO 主设备数据输入,从设备数据输出。MOSI 主设备数据输出,从设备数据输入。SCLK 时钟信号,由主设备产生。CS 从设备片选信号,由主设备控制。根据AS5048A的数据手册,对AS5048A的控制需要在下降沿读数据,在上升沿写数据,而且每发送一次指令后片选信号需要拉高一次。通过改变片选信号的电平,再发送角度对应的寄存器地址,就可以读取角度对应的数字信号,再将这个信号通过公式(1)换算成角度,XA是角度传感器输出的14位数字信号。
扭矩传感器的信号输出端连接到一个CAN控制器,CAN的数据接收由FIFO来完成,CAN 接收到的有效数据都被存储在3 级邮箱深度的 FIFO 中。FIFO 完全由硬件管理,从而节省了 CPU 的处理负荷。STM32通过查询FIFO是否为空来判断有没有力矩数据传输过来,如果为空,就表示FIFO中没有数据。如果不为空扭矩传感器会返回两个字节的数据,分别定义了两个整形变量A、B用来保存高字节、低字节的数据,并利用公式(2)计算出力矩。
1.5 训练模式控制算法
训练模式的控制算法在主函数中完成,通过对上位机、传感器的数据解析处理实现四种训练模式。主函数首先进行串口、SPI等协议配置的初始化,然后进入一个While()循环,利用Switch语句判断模式标志位Mode_Flag的值,然后进入对应的分支结构执行对应的功能。
如果Mode_Flag的值为4,就进入等长训练模式的分支,程序流程如图5所示。首先设置驱动器的工作模式为转速模式,然后将转速设置为0,并启动电机开始训练。训练的过程中一直循环读取角度、扭矩传感器的值,并发送到上位机显示。当上位机发送了停止指令,即停止电机。
图5 等长训练模式程序流程图
如果Mode_Flag的值为3,就进入等张训练模式的分支,程序流程如图6所示。首先设置驱动器的工作模式为转速模式,再读取角度、扭矩传感器的值,并发送到上位机显示。并将检测到的力矩与上位机设定的阻力矩作比较,如果比设定的阻力矩大,就给伺服电机转速,两者之间的差值越大,给定的转速值就越大,最后启动电机开始训练。如果到达限定的位置,就设定转速为0,再判断是否接收到停止指令,如果是,就停止电机,否则就读取下一时刻的角度、力矩。
图6 等张训练模式程序流程图
如果Mode_Flag的值为2,就进入等速训练模式的分支结构,程序流程如图7所示。首先设置驱动器的工作模式为转速模式,并将上位机设定的转速值写入驱动器,然后检测关节的用力情况。如果力矩不为0,就启动电机开始训练。当到达限定的位置时,就设定转速为0,然后读取下一时刻的角度、力矩,直到接收到停止指令时,就停止电机。
图7 等速训练模式程序流程图
如果Mode_Flag的值为1,就进入被动训练模式的分支结构,程序流程如图8所示。首先设置伺服驱动器的工作模式为位置模式,利用STM32的定时器生成脉冲来控制伺服电机的转动。其中,输入的脉冲个数确定转动的角度,脉冲频率确定转动的速度。上位机设定好活动范围以及训练速度后,先将其转化为脉冲个数以及脉冲频率,然后再发送脉冲给伺服驱动器。当到达上位机设定的次数后,就关闭定时器。
图8 被动训练模式程序流程图
2 软件设计
上位机软件的整体设计采用JAVA的Swing组件,即用于开发JAVA图形界面的工具包,包含了构建图形界面的各种组件如窗口、标签、文本框等[15]。Swing工具包主要包含两种元素:组件和容器。界面的设计过程首先是创建一个容器,然后在容器里面放置组件如按钮、文本框等,再通过合理的布局就组成了一个图形界面。
设计的上位机程序结构如图9所示,src文件夹用于存放设计的JAVA文件。其中,Chart.java是曲线绘制程序,SerialPortManager.java是串口通信程序,SetFrame.java是设置界面设计程序,MainFrame.java是训练界面设计程序。Referenced libraries 中包含了用到的jar包,jar包就是官方把一些常用的驱动类、方法等压缩成一个文件包,通过调用这个jar包就可以实现对应的功能,比如串口通信程序的设计就是基于RXTXcomm.jar,曲线的框架绘制则是基于jfreechart.jar。
图9 上位机程序结构
2.1 设置界面设计
上位机设置界面如图10所示,界面设计时,首先调用窗体类JFrame创建一个窗体,然后再调用按键类JButton、文本框类JTextArea,生成按键与文本框,并调用标签类JLabel添加对应的标签用于说明文本框的内容。
图10 上位机设置界面
为实现和STM32的数据传输,首先在这个界面的初始化中约定好波特率、数据的位数以及停止位数,再调用相关的串口类函数实现和STM32的通信。然后利用监听函数将用户所填写的训练信息保存在定义的字符数组Set中,字符数组Set结构如表2所示。第一个字节表示训练模式,比如模式选择中的四个按键分别对应四种模式,每个模式对应一个值,当点击按键时,会将按键对应的值保存在Set[0]中。接着读取速度、力矩等内容并依次保存,最后将字符数组Set通过串口发送到STM32。
表2 字符数组Set结构
2.2 训练界面设计
上位机训练界面如图11所示,界面的设计与设置界面类似,同样是创建窗体,然后放置按键、文本框等组件。与设置界面不同的是多调用了面板容器类JPanel,将生成的面板嵌套在窗体中,用于曲线的绘制。曲线的绘制是利用JAVA的Graphics2D类,这是一种用于绘制几何图形的类,可以画直线、矩形、圆等基本图形。首先创建串口的监听类函数用于接收控制器发送的角度、力矩数据,并保存在定义的整形数组Ang、Tor里面。然后绘制坐标轴以及刻度线,再将数组中的数据画在坐标轴里面,并通过刷新面板实现数据的动态显示。
图11 上位机训练界面
3 测试结果
本文以肘关节为例对四种训练模式进行了测试,在上位机设置界面中选择训练的模式、设定活动的范围、输入训练的速度、力矩等参数,然后进入上位机训练界面,点击“开始”按键进行训练,点击“停止”按键结束训练。
3.1 等长训练模式测试
选择了三个位置进行测试,角度值分别为50°、100°以及150°。其中角度值为100°时的力矩、位置与时间的关系曲线如图12所示,从图12中可以看出当力矩值为0时,对应的角度值没有发生变化。当力矩值不为0时,对应的角度值也没有发生变化,表明肘关节的位置不随肘关节的用力情况而发生变化,可以保持在设定的位置静止不动,符合等长训练模式的需求。
图12 角度值为100°时的力矩、位置曲线
3.2 等速训练模式测试
选择了三个训练速度进行测试,分别设定为12°/s、18°/s以及30°/s,肘关节支架速度的最大误差如表3所示。可以看出,肘关节支架速度的最大误差为0.4~1.2°/s,在合理的波动范围内[16]。造成速度波动的原因在于速度校正和负载波动之间存在时间差,而交流伺服系统的响应时间较快,影响系统响应的主要原因还是在于机械连接装置的传递时间。伺服电机所带传动机构的响应速度根据所采用材料的刚性差异而不同,如果刚性较低其响应速度也就比较慢,就会导致一定的速度波动。
表3 等速训练模式下肘关节支架速度最大误差(°/s)
其中训练速度为30°/s时的力矩、位置与时间的曲线关系如图13所示,从图中可以看出当力矩值为0时,角度值会保持不变,说明肘关节没有用力的时候,肘关节的位置不会发生变化。当肘关节顺时针用力时,角度值会线性减小,说明此时肘关节保持设定的速度顺时针转动。当肘关节逆时针用力时,角度值会线性增大,说明此时肘关节保持设定的速度逆时针转动。当肘关节到达限定的位置时,即使继续往前用力,但是角度值会保持不变,说明此时停止在限定的位置,只有往相反方向用力才可以转动。测试情况符合等速训练模式的需求。
图13 训练速度为30°/s时的力矩、位置曲线
3.3 等张训练模式测试
选择了三个阻力级别进行测试,分别设定为5、8、10 N.m。其中阻力矩为10 N.m时的力矩、位置与时间的曲线关系如图14所示,从图中可以看出当肘关节用力情况小于设定的阻力矩时,角度值是保持不变的,说明肘关节的位置没有发生变化。当肘关节用力情况大于设定的阻力矩时,角度值会发生变化,而且力矩值越大,角度值变化越大,说明肘关节转动的速度随着肘关节用力地增加而变大。当肘关节到达限定的位置时,即使肘关节的用力情况大于设定的阻力矩,但是角度值仍然保持不变,说明此时停止在限定的位置,只有往相反方向用力才可以转动。测试情况符合等张训练模式的需求。
图14 阻力矩为10 N·m时的力矩、位置曲线
3.4 被动训练模式测试
被动训练模式是由设备带动受试者关节运动,因此训练时在上位机设定好训练的速度以及活动范围,并设定训练的次数为3次,然后点击开始。选择了三个训练速度进行测试,分别设定为30°/s、42°/s以及60°/s,肘关节支架速度的最大误差如表4所示。可以看出,肘关节支架速度的最大误差在0.9°/s到2.0°/s之间,在合理的波动范围内[17]。被动训练模式由于采用的是伺服驱动器的位置模式,运算量大,驱动器对控制信号的响应会相对慢一点。影响速度稳定的主要原因在于伺服电机与机械传动结构不匹配,机械响应速度不够及时,导致速度校正存在延时。
表4 被动训练模式下肘关节支架速度最大误差(°/s)
其中训练速度为30°/s时的力矩、位置与时间的曲线关系如图15所示,从图中可以看出,角度值先线性减小,接着又线性增大回到初始的角度,然后重复这个过程3次。说明肘关节在设定的活动范围内保持设定的速度做了3次训练,测试情况符合被动训练模式的需求。
图15 训练速度为30°/s时的力矩、位置曲线
4 讨论与总结
在硬件上,本文采用伺服电机作为执行机构,具备过载能力强、转动惯量低等优点。并且电机的控制方案相对简单,而等速设备采用电磁摩擦制动器作为执行机构,由于电磁制动器是高度非线性的电磁器件,导致控制方案比较复杂[18]。本研究选用的控制器STM32具备高性能、低成本、低功耗的特点,芯片的外设接口较多,可以和多种传感器对接。机械连接上,部分设备采用联轴器直接连接,需要配备对应的谐波减速器,成本比较高。本文采用同步带轮以及涡轮蜗杆实现伺服电机到输出轴的动力传递,提高输出扭矩的同时达到减速的目的。
在软件上,本文基于JAVA语言设计了对应的上位机操作界面。JAVA语言作为解释型语言,可以实现跨平台运行,具有较好的移植性。程序包也比较丰富,通过调用jar包,可以提高程序的开发效率。后期还可以引入数据库,通过JDBC接口函数实现和数据库的连接,方便管理用户数据[19]。有的肌力训练设备缺乏上位机软件,只通过人机交互界面进行操作,数据的存储量有限,而且传输数据不便捷[20]。
目前,用于肌力训练的设备主要依靠进口国外的产品,这些设备不仅价格昂贵,而且资料有限,所以自主设计肌力训练设备就显得尤为重要。本文利用JAVA上位机以及STM32控制伺服驱动器,进而控制伺服电机,能够实现等长、等速、等张以及被动训练模式,通过更换不同的支架可以实现多关节的训练,所设计的动力控制系统满足应用需求。下一步工作将在医院进行临床试用,对硬件、算法、上位机软件进行优化,如硬件上可以增加控制芯片专门处理传感器的信号,提高数据传输的实时性,上位机软件引入数据库管理功能。