嵌入式Linux数控系统设计与实现

时间:2022-09-24 09:37:39

嵌入式Linux数控系统设计与实现

摘要:研究基于嵌入式的数控系统。采用单CPU架构进行设计,系统基于Linux和ARM,软件平台采用Linux,从而丰富了ARM处理器的片上资源。为满足数控系统高精度控制需求,基于Xenomai对Linux完成了实时性改造,并对系统软件结构进行设计,以确保数控系统功能的实现。

关键词:Linux系统;嵌入式;数控系统;实现路径

装备制造业对数控机床的要求逐渐提高,设备总体功能和性能离不开高效的数控系统,嵌入式系统具备小型化、低功耗、稳定可靠等优势,应用在数控系统中,可根据实际需要对计算机控制系统进行配置,实现智能控制、远程控制、故障检测等功能,作为数控机床的控制中枢,目前主流数控系统多采用单核ARM平台,数控系统性能的提升受到单核处理器自身不足的限制,因此对于多核平台的应用成为优化嵌入式数控系统的有效手段。

1现状分析

数控系统的硬件平台的构建目前多通过上位机同下位机协调工作的方式实现,上位机的主要功能在于代码解释、数据处理等,控制具体的运动以及采集信号则由下位机负责完成,但这种方式存在开发周期过长、成本较高,难以满足经济型数控系统的控制需求,随着嵌入式微处理器的发展与完善,可在同一个处理器上完成所有的数控任务,同时通过接口电路的设计,显著简化了数控系统的规范化研发过程,使系统具备较高的拓展性和稳定性[1]。

2系统设计

2.1系统硬件设计。在嵌入式数控系统中使用了S3C2440A,基于ARM920T核的S3C2440A嵌入式微处理器提供完整的通用系统外设,无需配置额外组件,能够降低整体系统成本,该芯片上集成了丰富的资源,系统硬件设计具体如图1所示。操作系统及软件程序都运行在S3C2440A上,系统总线上挂接存储设备(NANDFLASH,256M),用于存贮各数控程序、文件系统等,采用同步动态随机存储器(SDRAM,64M)作为内存,开机后,操作系统及数控程序在开机后会被依次装入SDRAM中运行,前期硬件可通过JTAG接口实现在线调试,对伺服电动机的控制则通过滤波处理4路PWM(分别控制x,y,z轴及主轴转速)实现,PWM信号经反相器转换成两路差分信号后再通过运算放大器电路得到具有负极性幅值的PWM信号,经滤波放大得到模拟量电压信号[-10V,10V],从而实现对驱动器转矩指令的控制(电动机在PWM输出占空比超过一半时正转)。采用FPGA进行扩展,转换编码器信号(相差90°相位)为计数脉冲信号和方向信号后,经过FPGA的双向计数器输出后得到当前编码器的计数值,控制单元通过读取相应地址即可完成编码器信号的采集,从而实现了闭环控制[2]。2.2软件平台的建立。软件平台是数控系统运行的基础,搭建工作在PC机上完成,采用Fedora9系统(RedHat公司)作为交叉开发环境,编译工作通过在PC机上指定的交叉编译器(arm-l4inux-gcc工具)完成,使其可在ARM处理器中运行,在此基础上即可完成Bootloader、Linux内核和文件系统的移植过程,系统的软件平台如图2所示。主要由引导装载程序、Linux内核、GUI(图形用户接口)等构成,作为软件平台的核心Linux内核的功能在于调度进程、内存管理及通信等;系统运行所需的文件和数控软件都包含在文件系统内;引导装载程序(u-boot)的作用功能在于硬件设备的初始化处理、内存空间映射表的建立等,以便于操作系统的后续运行;GUI提供了丰富的接口,显著降低了软件实现的难度[3]。2.3实时性改进的实现。由于Linux内核时钟粒度较为粗糙且不支持完全的抢占,且IRQ中断需经常关闭,导致Linux的实时性较差,为满足实时多任务控制要求需对其进行改进,本文采用双内核法对Linux进行实时扩展,将一个硬件抽象层加入到Linux内核与硬件间(使系统有两个内核),负责系统所有的硬件中断,根据进程对实时性的要求分配给实时内核或Linux内核进行处理和调度,采用该方法的Xenomai专注于实时性,兼容性较好可支持多平台使用,采用基于ADEOS的Xenomai使linux更好的满足工业实时性的需求,同时使操作系统建的灵活性和可扩展性得以提升,各操作系统运行于独立的域中,重点在于重新编译Linux内核及制作Xenomai库,具体的实时扩展工作流程为:先下载好Xenomai源代码,在Xe-nomai_root中执行scripts(脚本子目录)中prepare-kernel.sh,为linux内核源代码(位于linux_tree目录中)打上Xeno-mai补丁,指定目标平台为ARM架构,在此基础上完成Linux内核的配置及相关所需Xenomai选项的选取(如是否关闭FPU或开启n-ativeAPI等),makebzImage命令在获取正确的config文件后即可执行,通过编译实现最终嵌入式实时Linux内核(支持enomai)的获取,通过对Xenomai源码进行编译即可使用其API编写实时任务,从而得到相应的实时库文件,再将库文件拷贝到/lib目录中(位于目标平台文件系统),从而完成了数控系统实时化改造过程[4]。

3数控系统的实现

数控系统软件结构如图3所示。控制部分负责完成对实时性要求较高的相关数控加工任务,管理部分负责提供实时性要求低的支持。3.1控制模块的实现。该模块决定着系统的加工性能,需在读取相应数控程序代码的基础上完成一系列的处理,伺服电动机的驱动器接收到最终数据后,对电动机运转过程进行控制完成加工任务,其中位置控制对实时性的要求最高,可采用Xenomai提供的API编写实现,以位置控制模块为例具体实现过程如下[5]。(1)首先调用实时任务创建函数(位于XenomaiAPI中),函数在线程创建成功后返回0,具体的函数表达式如下:rt_task_create(task,constchar*name,intstksize,intprio,mode);(2)位置控制的处理函数表示如下:voidcontrol_process(void){/*程周期设为1000μs*/rt_task_set_periodic(NULL,TM_NOW,1000000);while(1)/*处理位置控制的代码*/……}(3)运行位置控制线程所调用的函数表示如下:rt_task_start((void*)control_process,void*arg);接下来开始运行control_process()函数,利用Xenomai的实时管道实现各控制模块的数据通信(实时性要求高),创建如下:intrt_pipe_create(constchar*name,intminor,pool-size)读写管道数据时实施层调用函数如下:ssize_trt_pipe_read(void*buf,size_tsize,timeout);ssize_trt_pipe_write(constvoid*buf,size_tsize,intmode);3.2管理模块的实现。采用Linux提供的系统调用API实现管理任务的处理,各管理模块的连接通过友好的交互界面实现以便于用户操作,本文采用Qt/Embedded实现,具体结构如图4所示。嵌入式领域的开源GUI项目中的Qt/Em-bedded支持多平台,基于C++面向对象,提供各种图形用户界面所需元素,窗口间相互依存关系在编程时可通过C++的继承来实现,能够使界面程序代码的重复部分得以有效降低;窗口中各控件间的通信则可使用Qt中的信号槽机制实现,简化界面程序编写过程[6]。

4系统测试

为检测本文所设计系统的有效性,对系统各模块的功能进行检测,检测结果表明系统具备友好的人机界面,在PC机上搭建的软件平台能够根据实际需要调度进程、管理内存等保证了通信质量,系统运行所需的文件和数控软件都包含在文件系统内,结合提供丰富接口的GUI,使数控系统调度任务的实时性得以有效提高,为缩短插补周期、提高加工效率打下基础,通过Xenomai提供的API编写可有效实现代码解释、刀具补偿、速度规划、逻辑运算及位置控制等子模块的功能,具备较高的实用性和稳定性。

5总结

本文主要研究了基于嵌入式数控系统,采用单CPU架构进行设计,系统基于Linux和ARM,系统的硬件平台采用FPGA实现相关控制与应用接口的扩展,软件平台采用Linux系统,从而丰富了ARM处理器的片上资源,为满足数控系统高精度控制需求,基于Xenomai对Linux完成了实时性改造,从而使系统的实时多任务控制要求得以有效满足,并利用Xenomai提供的丰富API对系统软件结构进行设计,以确保数控系统功能的实现,使其具备较高的灵活性和可靠性。

作者:赵明 单位:烟台汽车工程职业学院