基于ARM快速中断的多轴联动控制

2018-04-08 09:35张智河黄菊英
中国医疗设备 2018年3期
关键词:步数寄存器指针

张智河,黄菊英

首都医科大学 生物医学工程学院,北京 100069

引言

化学发光免疫分析仪是通过检测患者血清从而对人体进行免疫分析的医学检验仪器,通过单光子计数技术实现免疫反应微弱荧光的测量[1],通过抗体或抗原包被铁氧体磁颗粒进行磁分离清洗[2],而步进电机控制是自动化学发光免疫分析测控系统的核心内容之一[3]。整个系统一般有步进电机十几、甚至二十几部,一个动作需要多部步进电机联合工作,如加样针动作就需要升降、旋转、吸打液体等至少3部步进电机联合工作。为了进一步提高整机的运行速度,多部步进电机联动控制成为必然,这就给固件编程提出了更高的要求。

文中基于ARM7TDMI-S的脉宽调制技术(Pulse Width Modulation,PWM)支持多个单边沿匹配输出[4],经整形电路得到高分辨率的脉冲,实现了多部步进电机同步脉冲输出,即多轴联动。利用快速中断的顶级中断优先级优势,快速中断模式独有的独立寄存器优势,及不跳转在顺延地址空间直接编写中断处理函数的优势,实现了占用MCU最短、脉冲稳定可靠的输出[5]。在中断中实时读取相应电机位置光电信息,达到了步进与位置监测的同步性,确保了运动部件动作准确、快速。

如何提高脉冲控制分辨率是一个普遍课题[6],文中方法改变原固件程序定时在主循环中直接控制IO口脉冲输出,解决了逻辑控制及中断事件对脉冲输出的不确定性影响,脉冲输出完全由硬件控制,同时充分利用高分辨时钟提高脉冲前沿的时间分辨率,至少比原控制方式提高1800倍,从而使电机运行平稳性和多轴联动定位精度上提高一个层次[7]。文中的电机控制方法是通用的方法,同样适用于脉冲控制的伺服电机,可以用于数控机床,数控雕刻机、机器人、3D打印机等。文中实现的方法是基于ARM系统,同样适用于有多匹配PWM输出的其他嵌入式系统,如DSP[6]。

文中给出匀速运动、梯形运动周期的推算,可以满足大部分数控应用,如果运动轨迹确定,则可参考已有研究的方法实现S形加减速[8]。

1 ARM控制系统简介

ARM7TDMI-S是32位RISC结构处理器,高达72 MHz主频、512 KB片内Flash存储器、32 KB SRAM。支持多达32个中断向量,可将其一分配为快速中断请求FIQ,FIQ具有最高的优先级,可实现最短的中断等待时间,起始地址0x1C,可直接后续中断处理程序,节省跳转时间,快速中断模式专有寄存器进一步发挥其独有的优势[9]。

一个PWM模块,带可编程32位预分频器的32位定时器/计数器。有7个匹配寄存器,可实现6个单边沿控制或3个双边沿控制的PWM输出,或两种类型的混合输出。单边沿控制的PWM输出在每个周期开始时全部置高,除非输出保持恒定低电平。匹配寄存器的更新与脉冲的输出同步,以防止错误脉冲的产生。而软件必须在新的匹配值生效之前将它们释放。匹配寄存器PWMMR0通过匹配时自动重新加载计数值来控制PWM的频率,其他的匹配寄存器控制单边沿PWM输出[4]。

电机控制总方案,见图1。由CAN通讯中断接收运动指令,在主循环中初始化运动周期、方向列表。定时标记启动主循环中推算运动周期、方向列表。快速中断中查询周期、方向列表,设置PWM匹配寄存器,经脉冲整形电路输出到驱动器驱动电机运行。

图1 电机控制总方案

2 脉冲整形电路设计

本研究采用ARM控制脉冲、方向输出,电机驱动器,电机3部分结构。ARM默认启动时管脚为高电平,为不引起启动脉冲冗余,配置PWM匹配输出时置低。由于PWM驱动输出是单边下降沿,需整形成完整单脉冲(图2),设计脉冲宽度为20 μs,示波器无限余辉方式实测为14~17 μs(图3),脉冲前沿有效,不受脉宽波动影响。

图2 单边沿整形脉冲电路图

图3 无限余辉测量脉冲宽度

3 PWM驱动数据结构

PWM时钟分辨率72 MHz,PWM0匹配中断周期设置为50 μs,最大驱动速度20 kHz,最小驱动速度80 Hz。

驱动数据结构如下,为便于应用指针推算数据位置最好设计成4字节对齐的数据结构:

typedef struct

{

INT8U StepMotorEnable; //按位标识启动

INT8U StepMotorNum; //电机个数

INT8U LgtRead [6]; //读光电信息指针

INT32U LgtPort [6]; //光电端口地址

struct

{

INT8U PWMRead; //PWM读指针 也是光电写指针

INT8U PWMWrite; //PWM写指针

}Prw[6];

INT8U LgtData [6] [256]; //光电数据采集

struct

{

INT8U PWMTimers; //PWM周期整数部分

INT8U DIR; //电机运动方向

INT16S PWMMatch ; //PWM周期小数部分

}Ctr[6] [256];

}pPWMMotor;

其中PWMTimers为脉冲时间经过50 μs中断周期的次数,PWMMatch为脉冲输出匹配比较值。

下面以单路数据结构阐述,即去掉维数[6],驱动周期推算过程如下:

初始化PWMTimers[0]=0,PWMMatch[0]=1800,PWMMatch[1]=0为补偿量。

当前读位置PWMRead=0,写位置PWMWrite=1。设本次驱动周期为t,相对上次时间点驱动时刻

PWMTimers[1] = PulseTime/3600; //取整数部分

PWMMatch [1] = PulseTime%3600; //取余数部分

由于PWM中断复位匹配值为0时无法输出脉冲,需对0匹配进行修正,将时间顺延1个系统时钟,即在本周期加1,在下一周期减1。

PWMMatch [1] =1;

对顺延量进行补偿

PWMMatch [2] =-1;

修正公式(1):

写指针相对读指针最少保留26个缓冲区间,一次计算最多写入15条数据,由定时器每隔500 μs推算一次,保证快速中断数据的消耗。

4 PWM简单驱动曲线

初始参数:起始速度、最高速度、加速度、减速度、匀速速度、平稳步数、运动总步数。平稳步数为起步、末尾的匀速运动步数,及最高速运动时的最小步数。

4.1 匀速运动过程

4.2 梯形运动过程

加减速过程步数计算

其中a为加速度或减速度,v0为始末速度,vH为最高速度。

当加速步数+减速步数+3×平稳步数>运动总步数时

当 3×平台步数≥运动总步数 时,匀速运动。

当前速度

其中t为新脉冲时间,为简化计算用上一次时间代替,由于加速时间t0>t,引起速度增加略带加加速,使速度提前达到预定高速。减速运动时t0<t,引起速度减少略带减减速,使速度推迟达到预定低速。在迭代计算中需检测是否达到预定高速、预定低速,相应增减步数。

t0为前一周期值,a为加速度或减速度(为负值)。

RuningStatus标识运动阶段,缓起、加速、高速、减速、缓停。

加减速过程时间间隔计算

计算过程采用整型64位乘除法,先算分母部分,取整后再计算整体。

5 快速中断程序数据加载

当某一通道PWM写指针与读指针相同时,置大于3600的任意匹配值一次,使无匹配值,停止脉冲输出。

设当前读指针PWMRead =0,读PWMTimers[0],当PWMTimers[0]为0时,加载PWMMatch[0]到PWM匹配寄存器,在下一个PWM周期时输出脉冲,PWMRead++,读取光电端口,记录位置光电信息。当PWMTimers[0]大于0时,PWMTimers[0]--,PWMRead不动,加载方向DIR[0]一次,置大于3600的任意匹配值一次,即无输出脉冲。中断过程,见图4,其中轴数为电机数,即StepMotorNum,计时为中断计时次数,即PWMTimers。

图4 快速中断流程图

6 PWM快速中断应用技巧

快速中断模式R8~R12为专有寄存器[9],可定义为常量或变量。R13为堆栈指针,R14为返回地址寄存器,当不调用子函数其值不变,可不用压栈保存。R0~R7为公用寄存器使用时必须压栈保护。

在调试期间可采用调用C函数方式,实现汇编与C函数之间相互跳转,发挥C语言灵 快速中断C处理函数PWM_isr()返回调用函数FIQReturn(),用于避开C处理函数PWM_isr()的弹出堆栈过程。

FIQReturn

ADD SP,SP,#0x04 ;跳转了1次,所以加4

LDMFD SP!, {R0-R7,LR} ;弹出寄存器,

SUBS PC, LR, #4

快速中断C处理函数

void PWM_isr(void) //快速中断处理函数

{

unsigned int k;

PWM1IR = 1; //复位PWM1MR0匹配中断,以免阻塞非FIQ中断响应。

...

PWM1LER = k; //锁存PWM1匹配更新

FIQReturn();

}

配置PWM匹配寄存器程序

n = (PWM1_BASE_ADDR + 0x1C);

if(i>=3)

n += 0x18;

__asm{str m,[n,i,lsl #2]};

其中n为PWM匹配寄存器地址,i为0~5的PWM输出序号,m为匹配值。

初始化快速中断模式寄存器函数FIQset(j),j为更新PWM匹配寄存器数据。

FIQset

MSR CPSR_c,#0xd1;//进入FIQ快速中断模式

MOV R10,r0 ;//PWM1LER = R10; 更新PWM匹配寄存器

MSR CPSR_c,#0xdf;//进入系统模式

MOVS PC, LR

当中断程序完全达到设计要求后,将其转换为汇编形式,去掉跳转,进一步压缩C语言的冗余代码,达到速度最优化[10]。

7 方案验证

在自动化学发光免疫分析测控系统中血清样本、试剂、磁珠等溶液的加载,需要液位探测,减小针管外壁的挂滴量,需要移液过程加减速顺滑,避免甩滴,尤其吸打液体时加减速更需要精准,减少震颤,提高移液量精准度。为验证上述方案的有效性,首先设计了柱塞泵单元,见图5,采用ARM加步进电机驱动IC方案,ARM芯片为LPC2368,开发环境ADS1.2,FIQ中断程序经优化得到50余条汇编代码。经示波器观测,匀速运动、梯形运动脉冲波形非常平稳,步进电机可以承载更大加减速率的平稳运行,进一步工作是需要在系统中在线带载能力测试。

图5 柱塞泵单元

下一步工作是运动轨迹生成与控制,方案:由三维软件绘制空间移动路径,利用机加工CAM软件生成G代码[11],在ARM中利用插补技术[12]形成驱动脉冲序列,完成多轴联动。

8 结语

步进电机控制是自动化学发光免疫分析测控系统的核心内容之一,上文给出的应用ARM快速中断加载PWM匹配数据同步控制多部步进电机的方案,是对自动化学发光免疫分析仪的固件程序升级的一部分。实验证明快速PWM匹配中断驱动多部步进电机是行之有效的方案[13]。加上编码器检测[14]等反馈,就形成了完整的闭环运动控制系统,彻底解决加速丢步、减速过冲及驱动时序杂乱引起失稳问题。

PC数控系统CNC的发展趋势是多轴联动、信息网络化[15],本文是多轴联动同步脉冲高分辨率分配方案,实现硬件自动匹配,对提高开环控制系统速度有重要意义,如与智能电机驱动器联网[16],实现运动数据前瞻插补,可以进一步提高柔性运动控制[17]。何均等[18]提出的随机周期独立轴自适应插补控制方案,进一步明确了本文多轴联动脉冲分配方案的重要意义,进一步提高进给系统精度有赖于将两相步进电机改为三相步进电机,步进电机闭环伺服驱动器的网络化,实现各分立轴自适应前瞻插补控制,从而加快系统级网络测控大趋势的进展。

[参考文献]

[1] 魏丽君.化学发光免疫分析仪测量系统的改进[J].光电子技术,2013,33(1):19-23.

[2] 赵建文,陈艳宁,路士州.化学发光免疫检测仪涉及的关键技术[J].发光学报,2012,33(12):1381-1388.

[3] 钱俊,张昕,白志红,等.全自动化学发光免疫分析仪取样平台运动控制器设计[J].软件,2011,32(3):84-87.

[4] 王泽泽,李文伟,张胜锰,等.基于PWM调制的高漏感变压器三相输出平衡控制[J].机电工程,2017,34(2):173-177.

[5] 蒋俊,钱光明.ARM中断处理的安全性与高效性研究[J].单片机与嵌入式系统应用,2009,5:78-81.

[6] 凌松,骆敏舟,王善杰.基于FPGA的五轴联动控制器的设计[J].制造业自动化,2014,36(6):138-140.

[7] 袁茂强,王永强,王力,等.基于蒙特卡洛法的3D打印机定位精度分析[J].机床与液压,2016,44(21):141-146.

[8] 蔡泽凡.基于STM32的步进电机S形加减速控制曲线的快速实现方法[J].信息技术与信息化,2014,4:27-29.

[9] 石骏.基于ARM7的光谱采集系统的设计[D].成都:电子科技大学,2016.

[10] 翁斌.ARM7内核的中断屏蔽方法[J].单片机与嵌入式系统应用,2011,6:71-73.

[11] 张纪宽,彭力,陈志勇.基于STM32的双轴监控云台精准控制系统设计[J].单片机与嵌入式系统应用,2016,6:32-35.

[12] 任强,罗泽林.基于插补算法与最优前瞻的数控运动轨迹控制研究[J].机械设计与制造工程,2016,45(4):63-66.

[13] 唐明,高琳,梁得亮,等.实时操作系统uC/OS-Ⅱ在永磁同步电动机矢量控制系统中的应用[J].微电机,2010,43(12):78-81.

[14] 周祺睿,杨斌.基于ARM7的轨道检测仪的嵌入式系统设计[J].微计算机信息,2008,24(2):121-122.

[15] 张建明,庞长涛.超精密加工机床系统研究与未来发展[J].航空制造技术,2014,11:47-51.

[16] 徐健,唐小琦,宋宝.基于ARM+FPGA的EtherCAT主站设计及实现[J].组合机床与自动化加工技术,2016,6:84-87.

[17] 李志嘉,徐志鹏.基于CANopen协议的双轴伺服电机同步控制研究[J].机床与液压,2016,44(1):14-16.

[18] 何均,游有鹏,王化明,等.脉冲进给系统的高平稳运动控制[J].机械工程学报,2011,47(3):116-123.

猜你喜欢
步数寄存器指针
楚国的探索之旅
垂悬指针检测与防御方法*
Lite寄存器模型的设计与实现
二进制翻译中动静结合的寄存器分配优化方法
微信运动步数识人指南
移位寄存器及算术运算应用
国人运动偏爱健走
为什么表的指针都按照顺时针方向转动
浅析C语言指针
Lx5280模拟器移植设计及实施