基于ARM与FPGA的嵌入式开放性运动控制器的设计与开发

2011-02-03 03:05万林唐厚君贺超黄维芳
电气自动化 2011年3期
关键词:双口寄存器嵌入式

万林 唐厚君 贺超 黄维芳

(上海交通大学,上海 200240)

0 引言

在国内市场上已经出现了许多种类的运动控制器,这些运动控制器有着各自的硬件平台和软件平台,这一方面反映了国内运动控制器市场的活跃,但另一方面暴露了阻碍国内运动控制器向开放式、模块化方向发展的原因。随着计算机技术和现代电子技术迅速发展与广泛应用,深入研究基于新体系架构、新技术、高性能、低成本、开放式多轴联动运动控制器具有重要的理论意义和应用价值[1,2]。本文基于ARM和FPGA的硬件平台,研发了一种适用于现代制造系统需求的低成本的开放式嵌入式多轴运动控制器,其模块化的设计思想使得该控制器非常适合于二次开发。

1 系统硬件方案的设计

嵌入式运动控制器通常有两个控制核心。一个是MCU,主要负责人机交互部分并且与运动控制器的运算单元进行通信,另一个控制核心主要负责运动控制过程中的大量复杂的运算工作。这个核心的运动控制单元大致可以分为三种:DSP、专用运动控制芯片、FPGA。利用DSP通过软件的方式实现运动控制中的插补运算,具有编程简单、灵活等方面的优势,但是无法达到像专用运动控制芯片那样的高实时性,高可靠性,特别是对多轴控制更是如此;专用运动控制芯片虽然具备易使用,稳定性好,功能强大,实时性强等优点,但是专用的控制芯片可塑性和灵活性较差,很难根据客户的具体要求定制;FPGA则是通过软件代码的方式生成对应的硬件电路,它兼备DSP和专用运动控制芯片的优点,同时随着FPGA制造工艺的进步,FPGA芯片的集成度越来越高,单位逻辑资源的价格大幅下降,因此使用FPGA作为运动控制器的一个控制核心是一个非常好的选择。对于运动控制器的另外一个核心MCU,本系统选用ARM,ARM在嵌入式市场上占有率非常高,具有非常出色的性能以及价格优势,同时有许多第三方工具、软件对ARM提供支持。

系统硬件结构如图1所示。

图1 运动控制器硬件结构图

2 系统软件方案的设计

在该系统中ARM需要完成人机交互和与运动控制器的运算单元进行通信等多任务,这些可以借助于Linux实现。Linux是一种开源的操作系统,它以高效性和灵活性著称,具有多任务的能力,同时Linux内核提供了对常规设备的支持:键盘、鼠标、SD卡等等;在该系统中人机交互界面通过Qt实现,Qt是一个跨平台的C++图形用户界面的程序框架,同时是开源的,具有非常强的可移植性,并且Qt提供多达250个以上的C++类,可重用性非常好,给用户的开发带来了极大的方便。并且Linux和Qt都可以在一定的许可权限下免费获得,这极大地降低了系统成本以及提高系统的开放性。

由于ARM上移植了Linux操作系统,因此ARM需要通过驱动程序才能够访问FPGA的硬件资源。FPGA具有非常丰富的硬件资源,可以实现各种硬件接口协议。实现接口较简单的一种方法是在FPGA上实现一个双口RAM,并借助于在Linux中编写双口RAM的驱动程序,ARM便能够方便地和FPGA进行通信。ARM按照用户的运动控制要求将规划化好的运动代码通过双口RAM发送给FPGA,并且从双口RAM处获取运动单元的状态信息。

在该系统中FPGA通过双口RAM从ARM处获取规划好的运动代码,而后通过插补算法将运动代码转化成一定数目且频率可调的脉冲来驱动步进电机完成相应的运动,同时FPGA将运动单元的状态信息通过双口RAM反馈给ARM。

运动控制器系统的软件整体结构如图2所示。

图2 运动控制器软件整体结构图

3 ARM和FPGA通信的设计

FPGA内部的双口RAM分成两部分:上行区和下行区。首先ARM会将规划好的运动代码写到双口RAM的下行区中,并且通知FPGA数据已经准备好,这时FPGA从双口RAM的下行区中读取数据,当FPGA取完数据之后便给ARM发出信号,之后ARM才能够继续向双口RAM的下行区写入数据。当FPGA处理完一段运动代码后便将运动单元的状态——当前坐标、误差、速度、加速度等信息写到双口RAM的上行区,并且通知ARM准备获取运动单元的状态信息,这时ARM从双口RAM的上行区中读取数据,在此过程中FPGA停止向双口RAM的上行区中写入数据,当ARM取完数据之后便给FPGA发送数据已取完的信号,这时FPGA才能够继续向双口RAM的上行区写入运动单元的状态信息。

图3、图4分别说明了当FPGA从ARM处读取运动控制信息时FPGA和ARM的程序流程:(注:ARM从 FPGA处获得运动单元的状态信息时ARM和FPGA的程序流程和该情况类似,这里不再详述)

图3 FPGA从ARM读运动信息时FPGA程序流程

图4 FPGA从ARM读运动信息时ARM程序流程

4 运动控制器插补算法的设计

常见的插补方法有数字脉冲相乘法,逐点比较法,最小偏差法,数字积分法,目标点跟踪法。其中数字积分法具有逻辑功能强的特点,可以实现一次、两次甚至高次曲线的插补,适合于多坐标轴联动控制[3]。本文利用数字积分法设计了多轴运动控制器的S/T型加减速的插补算法。

T型加减速的插补算法较简单,本文主要讨论S型加减速的插补算法,其具体的算法流程图如图5所示:(其中VACC为总轴的累加寄存器,RiACC(i=1,2,3...)为各个实际轴的累加寄存器,CurSpeed为总轴当前的运动速度,DV为运动总轴要运行的距离,Di(i=1,2,3...)为各个实际轴要运行的距离)

首先,FPGA通过双口RAM从ARM那读取规划后的运动控制信息,包括各个轴合成的总轴的末速度,最大速度,最大加速度,加加速度,运动距离以及各个分轴的运动距离等。在每个插补周期中总轴累加寄存器累加当前时刻运动控制器总轴的运动速度,当总轴累加寄存器溢出时,各个分轴累加寄存器累加各个分轴的运动距离,当其中某个分轴累加寄存器中的值大于等于运动控制器总轴的运动距离时,此时该轴就会发出一个脉冲。在插补过程中必须在每个插补周期中对运动总轴的的速度,加速度以及运动距离进行控制。

另外一个要讨论的是在S型加减速中如何判断运动单元何时该进入S型加减速的下一阶段。S型加减速通常有七个阶段,其中比较典型的是由S型加减速的第一阶段进入S型加减速的下一阶段,程序流程图如图6所示:(Cur Speed,Cur Acc,J,Init Speed,Max Speed和Max Acc分别为总轴当前速度,当前加速度,加加速度,初始速度,最大速度和最大加速度)

图5 S型加减速程序流程图

图6 S型加减速由第一阶段进入下一阶段流程图

5 结束语

本文讨论了一种基于ARM和FPGA的嵌入式开放性运动控制器的硬件和软件方案设计,在ARM上移植了Linux和Qt,利用Qt设计了人机交互界面,重点讨论了ARM和FPGA之间通信的实现以及运动控制中S型加减速插补算法的实现。该控制器可根据用户的要求很方便的裁剪,例如可以根据用户的要求在FPGA模块内部多增加一个不对称型加减速插补模块,而不需要对硬件电路以及FPGA的其他模块的代码做任何修改,再者可以在ARM上面实现网络通信的功能,这样就能够远程对运动控制器进行在线操作和诊断。

[1] GOODWIN G G,GRAeBE S F,SALGADO M E.Control System Design[M].International,Prentice-Hall International Englewood Cliffs,New Jersey,2001.

[2] 吴宏,龚小云,等.运动控制器的现状与发展[C].CMES年会专辑.2004,(1):24-27.

[3] 李恩林.数控系统插补原理通论[M].北京:国防工业出版社,2008:75.

猜你喜欢
双口寄存器嵌入式
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
双口RAM在航天伺服系统中的应用
搭建基于Qt的嵌入式开发平台
Matching mechanism analysis on an adaptive cycle engine
嵌入式软PLC在电镀生产流程控制系统中的应用
双口RAM读写正确性自动测试的有限状态机控制器设计方法
双口RAM在无人机三余度飞控计算机数据交换中的应用
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器