《武汉工程大学学报》  2021年01期 114-118   出版日期:2021-02-28   ISSN:1674-2869   CN:42-1779/TQ
改进SPTA在ARM平台上的应用与分析


为了适应市场需要,电解质分析仪等对步进电机需求量大的设备,在增加功能的同时需要提高定时器资源利用率来满足对步进电机的控制。因此,提高原有芯片上的定时器资源利用率成为亟待解决的问题。步进电机作为一种常用的执行机构,它可以通过输入脉冲信号控制,定位精度高、控制可靠、定位保持力强、以及可实现开环控制[1]。因此,步进电机在智能控制系统中的多轴控制领域中具有广泛的应用[2-3]。传统的步进电机控制算法有梯形算法和S形算法。常见的S形算法有:7段式S形算法、5段式S形算法[4-5]。在传统控制中这类算法每个定时器只能控制一个步进电机,当资源紧缺的时候往往需要扩展芯片来协同处理,占用芯片资源较多。而时间片步数算法(steps-per-time-algorithm,SPTA)是在定时器中断内计算步进电机运动步数,当中断时间能够满足计算多个脉冲参数时,能在各自条件成立时改变芯片引脚输出状态达到输出多个步进电机脉冲的目的。这样在一个定时器内就可以发出多个脉冲信号,从而对多台步进电机进行控制。本文探讨了梯形算法、S形算法、普通SPTA算法与改进SPTA算法在精简指令集的芯片(advanced RISC machine,ARM)平台上的实现方法,实验结果表明,在频率段区间内改进SPTA算法在定时器资源利用率及控制效率等综合性能上优于其他控制算法。1 相关工作梯形算法主要优点在于算法简单易实现,梯形算法在STM32平台上运行时拥有较快的响应速度,可以实现步进电机的平稳运行[6-7]。但由于速度变化时曲线不够平滑,会导致电机产生柔性冲击,因此梯形加减速算法应用在对加减速变化要求不高的场合。为解决梯形算法的缺点,通过指数函数构造加减速运动模型提出7段S形算法,该算法相比于梯形算法,由于运动过程中速度变化平缓,在相同工作场合中S形算法控制下的步进电机基本无冲击导致丢步的现象[8]。但该算法在提高精度的同时增加了算法的复杂性,影响电机响应时间。5段S形算法由7段S形算法之上演变而来,5段S形算法使得程序更加轻量化,较好地降低了存储资源的占用[9-12]。因此这类S形算法被广泛应用于对精度要求高的场合。这类算法都是通过改变定时器预分频值来改变电机脉冲频率,实现步进电机的精确控制。但是传统的控制算法往往一个步进电机就需要单独的一个定时器来控制。在定时器资源占用这个问题上,一种新的控制算法被提出,SPTA算法是将运动时间分割成若干个合适的小时间片。在每个时间片内它都将速度参数加到位置参数上,如果位置参数溢出,它就会输出一个脉冲。速度参数溢出频率越高,电机运行的频率也就越高[13]。该方法很大程度地节省了芯片资源,SPTA算法采用4个状态转换来控制步进电机运动。ARM Corte-M4处理器在M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等,其高效的信号处理功能与Cortex-M4系列处理器的低功耗、低成本和易于使用的优点的组合[14-15]。该处理器在电动机控制、嵌入式系统以及工业自动化市场有着广泛的应用。本文基于ARM Cortex-M4平台上实现了改进SPTA算法与上述梯形算法、S形算法、SPTA算法的对比实验。2 改进算法控制方案改进SPTA控制算法是通过对7段式S形算法做改进,去掉匀加速、匀减速阶段,引入了Sigmiod函数曲线作为速度变化曲线。因此,改进SPTA算法的应用,一方面减少如梯形算法中频率突变带来柔性冲击;另一方面也减少了7段式S形算法的处理时间,提高了算法运行效率。控制状态如图1所示。[加速状态][加加速][减加速][空闲状态][匀速状态][减速状态][加减速][减减速][开始]                 图1  改进SPTA的状态切换图Fig. 1 State transition diagram of improved SPTAS形曲线模型是在原Sigmoid函数上转换为分段函数,各段对应其加减速控制过程,[t0~t2]段对应加加速阶段和减加速阶段;[t2~t3]段对应匀速阶段;[t3~t5]段对应加减速阶段和减减速阶段。对应[ν-t]曲线转换成通用表达式为:[ν(t)=νmin+b1+e-at,t∈(t0,t2)νmax,t∈(t2,t3)νmax-b1+e-at,t∈(t3,t5)] (1)式中[νmin]为电机起始速度,[νmax]为电机最大速度,[b]的值控制速度曲线在速度轴方向拉伸,且[b]值与频率差值正相关,关系为[b=νmax-νmin];[a]的值控制函数曲线在时间轴方向的拉伸,各运动状态时间段参数满足以下关系:[νmin=12νmin+νmax] (2)[Δt=t1-t0=t2-t1=t4-t3=t5-t4] (3)设置的加减速时间过长会导致启停速度变化慢,在实际应用上需要将公式(1)中[b=νmax-νmin]对应调整为[b=k1νmax-k2νmin],便于减少启动以及停止时间。通过设置参数[a]的值满足当[t=t2]时[ν→νmax]。结合公式1将[ν-t]函数转换为[f-t]函数表达式为:[f(t)=fmin+k1fmax-k2fmin1+e-a(t-t1),t∈(t0,t2)fmax,t∈(t2,t3)fmax-k1fmax-k2fmin1+e-a(t-t4),t∈(t3,t5)] (4)改进SPTA算法思想为:电机控制任务运行后根据提供的各项参数和算法处理时间设置最大定时器中断时间。频率调整后,根据相应参数调整若干次中断发一脉冲,并在中断里计算当前频率段脉冲个数。脉冲数发完后重新对相应频率段内脉冲数计数,直到设定的总步数运动完成。3 实验平台搭建控制系统的主控芯片采用ARM Cortex-M4内核的STM32F4系列32位微控制器,能够在复杂的控制场合很好的满足应用。上位机通过串口与硬件平台通信实现数据通信,下位机通过TB6560AHQ步进电机驱动器实现电机的控制,硬件平台系统框图如图2(a)所示。[电源模块][ARM平台][PUL][DIR][EN][A/D][电机驱动器][步进电机][上位机][步进电机位置传感器]                   [ b ][系统初始化][停止][获取上位机参数][N][Y][Y][计算发一个脉冲所需中断个数][N][运动步数加1当前频率下总步数减1][判断当前频率下总步数是否等于0][判断运动步数是否等于总步数]               [ a ]图2 (a)系统框图,(b)程序流程图Fig. 2 (a)System diagram, (b) program flowchart软件系统开发环境选用keil-MDK,该开发环境也是现在主流的开发环境之一,环境稳定、调试便捷。通过调试功能测试算法运行时间,配置一个常开的定时器,定时器最大频率能保证算法正常运行完成。设置计算加减速频率段来选择发一个脉冲所需的中断数,核心的函数和变量如表1所示。表1 核心变量/函数表Tab. 1 Core variable/function[类型 变量/函数 描述 uint32_t interruptCount 计算单脉冲的中断个数 void ParameterHandle() 计算频率段 uint32_t PulseCountAlgorithm() 计算频率段内脉冲数 uint32_t currentSectionAllStep 保存当前频率内总步数 uint32_t allStep 保存运动过程总步数 uint32_t currentStep 保存当前已运动步数 ]变量interruptCount用来计算最大中断频率下发一个脉冲所需要进中断数量。ParameterHandle()函数用来获取上位机传入的控制参数:电机编号、运动方向、最大频率、最小频率、台阶数、总步数、加速时间,并通过这些参数计算出各频率段频率值。函数PulseCountAlgorithm()为中断内处理函数,用于计算当前电机各频率段运动步数,从而实现对步进电机的加减速控制,程序流程图如图2(b)所示。4 实 验实验设置定时器中断频率为5 000 Hz,步进电机相关运动参数为:起始频率[fmin=500 Hz],运行最高频率[fmax=2 000 Hz],加速过程时间为[t3-t0=2 s],台阶数[n=20]。通过python工具仿真频率-时间曲线,如图3(a)所示,提取改进SPTA算法中每个频率下的脉冲数和所需时间得到离散数据如表2所示。[0 1 2 3 4 5 6 7 8t / s][2 0001 7501 5001 2501 000750500][f / Hz][2 0001 7501 5001 2501 000750500][f / Hz][0 1 2 3 4 5 6 7 8t / s][ b ][ a ]图3 (a)频率变化曲线图,(b)频率变化离散图Fig. 3 (a)Frequency curve, (b)frequency piecewise line表2 改进SPTA算法数据离散表Tab. 2 Discrete data of improved SPTA [编号 [fi] / Hz [ti / s] [Δti] 脉冲数 0 500 0.000 00 0.631 95 315 1 575 0.631 95 0.093 40 51 2 650 0.725 35 0.057 82 36 3 725 0.783 17 0.043 54 31 4 800 0.826 71 0.035 96 29 5 875 0.862 67 0.031 42 26 6 950 0.894 09 0.028 53 28 7 1 025 0.922 62 0.026 70 26 8 1 100 0.949 32 0.025 60 25 9 1 175 0.974 92 0.025 08 31 10 1 250 1.000 00 0.025 08 31 11 1 325 1.025 08 0.025 60 32 12 1 400 1.050 68 0.026 70 33 13 1 475 1.077 38 0.028 53 47 14 1 550 1.105 91 0.031 42 52 15 1 625 1.137 33 0.035 96 59 16 1 700 1.173 29 0.043 54 72 17 1 775 1.216 83 0.057 82 96 18 1 850 1.274 65 0.093 40 155 19 1 925 1.368 05 0.631 95 1053 20 2 000 2.000 00 ]表2记录了2 s内加速过程的相关数据,根据加速阶段的离散数据仿真出频率变化离散曲线,如图3(b)所示,其中加速和减速分为5个阶段,仿真的曲线与算法曲线一致。通过软件调试,中断定时器可设置最大中断频率为7 692 Hz,取整为7 500 Hz。通过在电解质分析仪上的实验分析,仪器所需步进电机频率范围为2 000~3 000 Hz。改进SPTA控制算法综合性能表现良好,仪器运行稳定、定位精度符合要求,如图4(a)、图4(b)所示。3台步进电机同时工作的情况下,各算法实验数据如表3所示。[ b ][ a ]图4 实验设备:(a)正视图,(b)采样针初始位Fig. 4 Experimental equipment: (a) front view,(b)initial position of sampling needle表3 实验数据表Tab. 3 Experimental data[控制方式 响应时间t / ms 最大频率响应时间tm / ms 运行状态 资源占用 梯形算法 0.064 740.000 启停有轻微抖动,位置传感器未反馈,存在丢步现象。 3个定时器和4×n+21字节存储空间。 S形算法 5.634 801.075 启停基本无抖动,工作稳定,无丢步现象。 3个定时器和4×n+21字节存储空间。 SPTA算法 0.019 740.000 启停有轻微抖动,位置传感器未反馈,存在丢步现象。 1个定时器和29字节存储空间。 改进SPTA算法 0.394 739.998 启停基本无抖动,工作稳定,无丢步现象。 1个定时器和4×n+21字节存储空间。 ]保证定位精度的前提下,通过设定不同工作频率,改进SPTA算法与S形算法在一个定时器资源下各频率段内控制步进电机数量的实验结果如图5所示。实验验证了改进SPTA算法的可行性。在电解质分析仪上步进电机在各频率段响应迅速、运行稳定、定位准确,未出现丢步现象。由于工作频率限制,算法更适用于脉冲频率不高且要求高精度的场合。图5 算法性能图Fig. 5 Algorithm performance diagram 5 结 论改进SPTA算法在ARM硬件平台上脉冲能稳定输出,实现了步进电机精确控制,并与其他传统步进电机控制方式在电解质分析仪上进行了实验对比。在2 000~3 000 Hz频率段内改进SPTA算法在芯片资源利用率上有明显优势,资源利用率提高1~2倍,响应速度接近梯形加减速算法,响应时间差仅为0.33 ms,连续循环运行24 h,过程中未出现丢步现象。改进SPTA算法适合在医疗行业中一些对运动频率要求不高,但对精度要求高的场合。改进SPTA算法的研究主要方向是降低算法的复杂性,提高算法的执行速度的上限将决定算法的控制能力上限。本文提供的控制算法在保证运行的稳定性外,芯片资源占用上较传统算法有明显优势,对多步进电机控制系统领域研究有参考价值。