林晓海,郑力新
(1.华侨大学 信息科学与工程学院,福建 厦门 361021;2.华侨大学 工学院,福建 泉州 362021)
当今运动控制卡多采用PCI接口作为运动控制卡与PC进行数据传输的接口,造成用户即使仅仅使用较少部分PC资源,也必须配备一台PC或工控机,未使用的PC资源不仅带来浪费的问题和维护上的麻烦,也不利于系统的小型化。使用以太网接口代替传统PCI接口可以实现几个运动控制卡共享同一台主机,不但可以降低成本,同时便于运动控制卡集中管理[1];随着运动控制的发展,越来越多的机械设备厂商希望能够提供一个通用的可编程环境,以方便对该领域较为熟悉的人员来完成编程任务。基于上述的两点需求,本文设计出一款可编程网络型运动控制卡,并给出软硬件的实现过程。
图1 系统的整体结构
图1为该系统的整体结构。通过对PLT格式的文件进行解析产生用于拟合运动轨迹的微小线段的顶点坐标,这些数据并没有将实际的运动特性考虑在内,因此必须在辅助开发软件内对这些数据进行前瞻规划、加减速控制,使得在满足系统实际运动特性的前提下更高速、更顺畅地加工。辅助开发软件将预处理后的加工数据通过以太网接口传送到运动控制卡,并存储在运动控制卡板卡上的Flash存储器中。开发人员就可以使用Keil集成开发环境对运动任务和可编程IO服务程序进行编写,运动任务与编写好的软件框架中的其他任务(如暂停、急停、回零等任务)构成系统多任务框架,运行在FreeRTOS实时操作系统环境中。
运动控制卡使用ARM Cortex M4系列的STM32F407-ZGT6以及Cyclone II系列的FPGA EP2C8Q208作为核心部分。ARM具有较强的运算能力、信号处理能力和事件管理与控制能力,并且具有较为丰富的外设,在运动控制卡中充当一个管理者的角色;FPGA具有较强的逻辑处理能力与并行处理能力,可以实现多轴同时插补,在该系统中负责完成DDA插补算法。ARM与FPGA之间采用FSMC接口进行数据通信,同时在FPGA内部使用内嵌的RAM模块例化出一个缓冲区,用来缓冲接收到的数据。与PC通信部分采用的是以太网接口,使用DP83848作为网卡芯片连接到ARM芯片的以太网控制器接口;同时为了方便调试,还提供了一个串口作为调试输出接口,该串口也可以作为可编程资源,提供给开发人员编程使用。电机驱动接口包括4组轴方向+脉冲输出接口和控制接口(驱动器报警、错误清除、使能接口),同时提供每个轴的正负限位及原点输入接口和16个可编程输入接口、16个可编程输出接口[2-3]。图2为硬件部分框图。
图2 硬件部分框图
该软件是基于Qt环境开发的,它与运动控制卡通过TCP协议进行通信,在C/S模式中充当服务器的角色。该软件有3个主要功能:
(1)提供一个可视化的方式来对系统的IP地址、正负限位、原点触发方式、系统最大速度、最小速度、最大加速度、最大加加速度等进行配置,根据配置结果产生对的头文件,并导入到开发人员的开发工程文件夹中,这些文件通过宏定义完成系统资源的配置,开发人员在开发时可以引用相应的宏来完成编程。
(2)提供简单的调试环境:启动、暂停、停止、系统回零等按钮。
(3)对轨迹顶点数据进行预处理。
图3~图6分别为软件的流程图、主界面、产生的头文件列表和头文件内容。
图3 软件流程图
图4 软件主界面
图5 产生的配置头文件列表
图6 头文件内容
对ARM开发采用KeilμVision4集成开发环境,Keil软件可以在编译之前运行外部程序[4],通过这个特性,可以在编译工程文件之前先运行辅助开发软件,利用辅助开发软件产生相应的头文件实现对系统参数的配置。
为了减轻开发人员的开发难度,在FreeRTOS的上层创建了多任务的软件框架,如图7所示。
图7 多任务的软件框架
在该框架中创建了6个默认的任务,分别是:数据包解析任务、存储器管理任务、暂停任务、停止任务、回零任务、运行任务。开始时存储管理任务、暂停任务、停止任务、回零任务和运行任务都在等待相应信号量而挂起。
辅助开发软件通过以太网接口将数据传送到运动控制卡,每个数据包由数据包类型、数据包内容所组成,数据包解析任务通过解析数据包类型码来分别发送不同的信号量唤醒不同的任务。存储管理任务是板上2 MB Flash存储器进行写的守护任务,负责存储器的读入,任何任务需要读存储器都需要请求该任务来完成,同时在写存储器时不允许任何任务读存储器,从而避免读到无效数据。
暂停、停止、回零,运行任务的功能是通过抢占机制来实现的,各个任务的优先级分配如表1所示[5]。当系统正在运行时如果发送暂停命令,由于暂停优先级比运行任务优先级高,所以会抢占运行任务的优先级。其他的优先级分配也是按照这个原则,其中在没有执行回零操作时优先级设置为5是为了能够抢占运行、暂停、停止这些任务的运行;而在执行回零过程中,将优先级降低为2是为了能够实现在回零过程中被暂停和停止。图8~图11分别是运行任务、暂停任务、回零任务和停止任务的流程图。
表1 优先级分配表
在系统运行过程中有时需要接收外围设备的输入信号,例如在一些设备中存在一些按钮,运动控制卡需要接收这些按钮信息,并对这些按钮的相应函数进行编程,例如调用暂停信号量来唤醒暂停任务,此时这个按钮就具备了暂停功能;又如在运动过程中可能需要给电磁阀一个触发信号来执行对外围设备的控制等,这部分就是可编程IO功能[6],可编程输入引脚连接到ARM的中断引脚中,当有外部输入时触发中断,进而调用外部中断服务函数,因此只需在中断服务代码中编写相应的程序就可以实现对应的功能。下面是连接设备暂停按钮的中断服务函数:
图8 运行任务
图9 暂停任务
图10 回零任务
图11 停止任务
可编程输出功能是通过软件中断来实现的,在运行任务中可以调用软中断指令,使得程序转到软件中断服务程序中。在转入软件中断服务程序之前,开发人员需给出触发引脚编号、脉冲模式或电平模式、电平类型等信息,需要使用如下的MC_PO类型来创建一个结构体变量,并对这个结构变量的对应成员变量赋值。为了实现多个引脚同时输出,在软件框架中定义了16个MC_PO类型的变量,每个变量对应一个可编程输出引脚的信息,同时创建一个16个元素的数组MC_PO_Pins[16]用于存放需要输出的引脚的标志。在软件中断服务程序中通过查询这个数组来调用需要输出信号引脚对应的函数。这样就使得耦合性较低,软件框架结构更为清晰。
开发人员需要调用可利用的函数库(ST公司提供的固件库函数以及系统已经封装好的API函数、FreeRTOS API等)来编写运行任务。在运行任务中,需要完成的工作是读取存储器中的数据,传到FPGA执行插补,由FPGA来输出给予驱动器的方向脉冲信号。同时编写希望响应的外部输入/输出的服务函数,这些函数借助已经编写好的软件框架就可以运行。
设计出一款可编程网络型运动控制卡,使用以太网接口作为数据传输接口,使得多运动控制卡可以共享同一台主机,结合辅助开发软件可以以直观的方式对板卡上的资源进行配置。同时将辅助开发软件集成到Keil μVision4中方便了开发过程,并建立了运行于FreeRTOS实时操作系统上的多任务软件框架,通过降低任务间的耦合性来使得框架结构更加清晰。
[1]云利军,孙鹤旭,雷兆明,等.工业网络的发展及其在运动控制中的应用[J].微型机与应用,2005,24(9):4-6.
[2]齐珊.多轴运动控制系统设计[D].天津:天津大学,2008.
[3]谢辉.基于以太网的分布式运动控制系统研究与实现[D].大连:大连理工大学,2008.
[4]李宁.ARM MCU开发工具 MDK使用入门 [M].北京:北京航天航空大学出版社,2012.
[5]BARRY R.Using the FreeRTOS real time kernel(A practical guide opened)[EB/OL].(2009-xx-xx)[2013-10-23].http://www.FreeRTOS.org.
[6]朱阁,郑力新,林晓海.基于ARM Cortex-M3的运动控制系统与算法设计[J].微型机与应用,2013,32(1):77-79.