0.引言
随着PC技术的迅速发展,其在工业控制领域得到广泛应用。用PC技术开发的数控系统可以得到强有力的硬件和软件支持,避开专有技术的制约,在较短时间内达到较高水平[ 1 ]。USB 自问世以来,就以其速度快、成本低廉等诸多优点逐步占领了PC及其外围设备市场。随着大量支持USB的个人电脑的普及, USB 逐步成为PC机的标准接口已经是大势所趋。本文介绍了一种基于USB 接口进行数据传输和控制的数控雕刻机的软硬件设计方案。
1.系统硬件结构
整个系统的硬件结构如图1所示。
图1 系统硬件结构框图
系统硬件主要由以下几个部分组成:
(1) PC主机-CAD/CAM 建模,生成文本形式的G2Code,读入G2Code对其进行解释,调用直线或者圆弧插补,进行插补运算,将各种插补转换为一系列相应的电机脉冲信息,并往USB通讯模块传输。
(2)USB通讯模块—接收主机传输来的包含电机运动的使能,方向,速度,脉冲信息的各种字节,将这些逻辑控制电平和控制脉冲在相应的控制线上实现。
(3)运动控制卡—接收通讯模块发出的控制电平和脉冲,将其放大并转换为步进电机的控制脉冲。
(4) X, Y, Z向步进电机—接收运动控制卡的输出脉冲,朝某个方向运转,并带动相应的执行机构运动。整个机构的运行方式是:雕刻头在直流电机的带动下做高速旋转,并在Z 方向做上下运动, X 2Y工作台带动工件做X、Y方向的进给运动,刀具和工件的运动的合成就可以得到文字和图案的轮廓。
2.系统软件结构
此雕刻系统中的软件结构如图2所示。运动控制程序负责实现步进电机的基本动作所需要的输入信号。USB固件程序实现设备的枚举和端点与主机的通信。USB设备驱动程序为应用程序和底层驱动程序之间提供接口。PC机底层驱动负责处理总线枚举、电源管理以及USB 事务的其它方面,Windows操作系统提供这类驱动程序。Windows操作系统还提供AP I函数,来启动应用程序与设备驱动程序之间的通信。USB应用程序的功能是提供操作和仿真界面、进行插补运算并和底层进行通信。可见,编程者需要开发的程序有PC机的USB 应用程序、USB 设备驱动程序以及单片机程序(包括PD IUSBD12的固件程序和运动控制程序) 。
图2 系统的软件结构框图
3.插补控制的实现
3.1 步进电机的基本动作
对于各种复杂的运动轨迹,可以通过各种基本的插补来拟合的,而各种基本插补又是由步进电机的最基本的一些动作来完成的,这些基本的动作包括(以三维加工为例) : (0, 0, 0) 、(0, 0, n) 、( 0, n, 0) 、( n, 0, 0) 、(0, n, n) 、( n, 0, n) 、( n, n, 0) 、( n, n, n)其中n表示某路电机往某个方向步进的步数,是一个整数。在PC主机客户软件中,将各种插补运动分解为了一系列的电机的基本动作,往往需要实现的基本动作中n = ±1。
3.2 电机基本动作的实现
用运动控制卡来控制步进电机,其输入控制信息有三类:使能,方向,一定频率的脉冲。据此将PC主机发往USB设备的数据进行一定的格式定义,以进行分类,然后在单片机中将接收到的数据按照此类格式进行分析,并实现其功能。
图3 单片机处理接收到的数据
图3是单片机程序内处在主循环程序中的处理接收到的数据的流程。据此流程图,可以看出要使电机沿某方向运转一定的步数,只需依次发送电机的使能方向信息,速度信息和一系列的步数信息,所接收的步数信息往往是n= ±1的电机的基本动作。为了避免电机的基本动作间因为接收数据的时间而变得不连续,单片机采用了定时器中断编程来控制脉冲输出,而单片机前台则负责接收主机发送过来的数据,并等待上一个脉冲输出的完成。AT89S52单片机片内有3 路定时器中断,刚好可以满足雕刻机3个电机的控制需求,每路定时器中断负责控制1个电机的控制脉冲输出。
3.3 插补运算
直线插补和圆弧插补是两种最重要的插补,许多复杂的曲线可以通过这两种插补来拟合,根据数字积分器(DDA)的原理可以写出这两种插补运算的实现函数。图4,图5是在主机中客户软件层实现它们的流程图。
对于其它类型的插补,实现的思路与上述的两种类似,都需要根据插补的原理和算法来得到插补过程的每小段的增量,此增量就是步进电机的某个基本动作,将此基本动作序列依次发送到单片机底层即可实现刀具的插补运动。
图4 DDA直线插补流程
图5 DDA圆弧插补流程
3.4 与单片机的USB通讯
对于在客户软件层的插补运算,必须将电机的运动使能、方向、速度和运动步数信息发往底层单片机,实现发送的通讯方式是通过USB传输,USB传输速度快,可以满足插补运算过程中的大量插补数据传输的需求。
(1) 电路连接图
系统采用AT89S52控制PD IUSBD12传输数据,并将控制信号实时输出。其电路连接示意图如图6所示。
图6 电路连接示意图
(2) USB固件程序开发
USB支持4种传输类型:中断,控制,块和同步[ 3 ]。雕刻机系统可靠性是关键,在满足数据传输速度要求的前提下,系统采用了控制传输和中断传输两种传输方式。
PD IUSBD12的固件设计成完全的中断驱动,采用KeilC51进行编写。USB的传输可在后台进行,它的基本思想是:后台ISR (中断服务程序)和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现[ 4 ]。整个单片机程序中,对电机的控制脉冲的输出的实时性要求最高,所以设定了定时器中断的级别为高级别,对于单片机内部的循环缓冲区,定时器中断程序检查循环缓冲区的填充情况,并在允许的时候重新打开低级的中断服务。
(3) USB设备驱动程序开发
开发USB 接口设备驱动程序必须遵守WDM(Windows驱动程序模型)规范。WDM驱动程序有两个主要的初始化入口点—DriverEntry和AddDevice例程。DrvierEntry主要工作是把各种函数指针填入驱动程序对象,以注册其它回调例程[ 5 ]。PnP管理器将为每个硬件实例调用一次AddDevice例程,AddDevice函数的主要工作是创建一个设备对象并把它连接到设备堆栈中。驱动程序与应用程序和硬件之间通信都是IRP ( I/O请求包)完成的。在运行过程中,内核会调用不同的回调例程来完成不同的IRP。DriverUnload则是在设备卸载时的清除例程。
(4) USB应用程序开发
完成了USB 固件程序开发和USB 设备驱动程序开发后,就可以编写上层的USB 主机客户程序,真正发挥USB设备的作用。应用程序通过访问AP I通信函数,使位于上层的应用程序与位于下层的设备驱动程序进行数据交换。
1)与USB设备建立通讯
采用了GU ID接口方式来打开设备, GU ID是在编写设备驱动程序时获得的,也可以通过AP I函数调用来获得。依次调用AP I函数SetupDiGetClassDevs, SetupDi2 EnumDevice Interfaces, SetupDiGet2Device InterfaceDetail获得设备接口元素的接口详细信息中包含的设备路径名,选择相应的USB 端点和管道,调用AP I函数Cre2ateFile可以打开这个设备,获取设备的句柄。至此,与USB设备的通讯就建立起来了,调用AP I函数Read2 File,WriteFile即可读写USB设备,而要关闭设备则是调用CloseFile函数。
2)客户程序的整体结构
整个PC主机客户程序采用Visual C ++. net作为开发环境,并且运用了多线程的编程思想和DLL (动态链接库)模块化设计方法。程序中设置了2个线程,一个是主线程,负责用户界面,保持中枢地位,它的生存周期也就是整个程序的生存期,而另一个线程则是读入以文本文件形式提供的G代码,翻译G代码,调用直线或者圆弧插补子程序,将脉冲信息写入USB设备,并将刀路进行实时3D图形化仿真显示。程序分为三大模块:主界面、虚拟机和机床控制,其中虚拟机(VirtualMachine)和机床控制(Machine Control)以dll的形式来实现,整个客户软件结构如图7。
图7 客户软件模块结构
通过这套基于USB的雕刻机我们可以雕刻图案和文字等,如图8。
图8 雕刻样品
4.结束语
整个系统的设计思路是:利用PC主机的强大的运算功能,迅速运算出刀具所运动的轨迹的脉冲信息序列,并将这些脉冲信息序列通过USB总线发往USB设备,由于上层客户程序的运算速度是远远大于底层单片机实现这些脉冲序列的速度的,基本上客户软件都是在等待USB设备芯片数据缓冲区的数据被单片机读出了一部分才发出了数据,所以不会存在因为底层单片机等待脉冲信息传输到来而破坏系统控制的连续性的情况。
此系统采用USB 传输,无需外加存储器来存储G代码,只要改变单片机内的循环缓冲区的大小,就能适应不同的加工速度要求的数控系统,由于各种插补运算在上层客户软件实现,可以应用于较复杂的数控系统中。