摘要:介绍了一种基于USB通讯的高速硬件精插补器的设计,设计中采用FPGA实现精插补,并通过USB接口实现与上位PC机的高速数据通讯。该精插补器具有设计简单、易于实现、插补速度高等特点,可适用于高速数控系统的开发。 关键词:USB通讯;FPGA;精插补器
数控系统发展到90年代后,基于个人计算机(PC)的数控系统(简称PCNC)成为CNC发展的主要方向[1]。目前PC和NC的连接主要采用两种形式,一是通过PC机的串口、并口,这种方式接口简单、连接方便,开发费用低,但由于传输速度低,已不能满足现代数控系统的实时性要求。二是采用ISA和PCI插卡的形式,NC功能插卡化,并将其插入PC机的标准ISA/PCI插槽,可方便实现与用户接口、主机系统通讯的开放化,这是PCNC系统的一种主流形式,但PCI总线接口复杂,驱动程序、硬件接口开发难度大,开发成本较高,开发周期也较长,而ISA总线由于速度较慢已随着计算机的发展逐渐被淘汰。
随着计算机总线结构的变革,必将影响数控系统的体系结构,串行总线的应用将极大地改变现有的传统数控系统的结构形式。串行总线连接引脚数量少,连接简单,成本较低,系统可靠性高,USB作为一种新的通用串行总线标准,应用越来越广泛[2]。USB总线具有较强的纠错能力、速度快、不占用系统资源、驱动程序开发简单的特点,较好地满足了现代数控系统的要求,因此,本文把USB这种新型接口和通讯方式应用到数控系统,设计了一种基于USB通讯的硬件高速精插补器。
硬件精插补器通过USB接口从上位PC机获取粗插补数据,由FPGA实现高速精插补输出。精插补器主要由USB接口芯片、微控制器、数据缓存、FPGA等部分组成,如图1所示。各部分功能如下:
·微控制器通过USB从上位PC机获取粗插补数据和机床控制信息,通过数据缓存传送给FPGA;
·USB接口芯片负责处理所有与USB总线事务有关的任务,如总线唤醒、数据接受/发送、打包、CRC校验等;
·FPGA通过微控制器获取粗插补数据及机床控制信息,实现精插补输出;
·数据缓存用于缓存粗插补数据,以协调微控制器和精插补控制器的速度差异。
精插补器通过微控制器的固件程序和上位PC机应用程序及驱动程序的协调处理,完成高速的数据通讯。
2 硬件设计
2.1 USB通讯接口设计
USB 外围接口芯片采用Philips公司的支持USB1.1协议的芯片PDIUSBD12(以下简称D12), 该芯片性价比高,集成了320字节的FIFO内存、SIE(Serial Interface Engine)、收发器以及电压调整器, 主端点有双缓存配置,增加吞吐量,容易实现实时数据传输[3]。由于其为纯粹的USB外设接口芯片仅处理USB总线相关事务,必须有一个外部微处理器来进行协议处理和数据交换,设计中采用PHILIPS.html" target="_blank" title="PHILIPS">PHILIPS公司内核基于8位80C51单片机增强型派生产品P89C58X2FN ,它完全保留了80C51指令系统和硬件结构的大框架,而且它在多个方面进行了加强、扩展和创新。如片上的FLASH EPROM扩展到32KB,满足当今用嵌入式高级语言对片上大存储容量的需要;6个中断源和4个中断优先级满足数控系统的多级中断要求;速度高达33M有利于提高对D12的读写速度。
D12采用数据/地址总线复用方式和P89C58X2FN相连接,D12相当于一位(两个地址)的外部RAM,对D12的操作就像对外部RAM操作一样,低位地址线P0.0通过373地址锁存后与D12的A0相连,高位P2.5产生片选信号,这样D12的地址为2000H和2001H, D12的通信采用这样的方式:一个偶数地址表示送往D12的是读/写数据,一个奇数地址表示往D12 写入一个命令,这是由D12的内部逻辑来实现的,即D12的数据地址为2000H,命令地址为2001H。D12的中断引脚接P89C58X2FN的外部中断1,要注意的是中断只能采用电平触发方式,低电平有效。
2.2 FPGA设计
随着集成度高、速度快的可编程门阵列FPGA(FILED ROGRAMABLE GATE ARRAY)的出现和EDA工具的完善,使得硬件电路的设计过程大大简化,并可通过波形仿真工具验证电路的功能正确性,有效地缩短了电路的开发周期,提高了设计的灵活性,可弥补传统硬件插补器的缺点。因此,本文采用FPGA来实现精精插。具体设计中采用了ALTERA公司的FPGA芯片EPF10K10LC84-4,可实现三轴直线、两轴圆弧联动精插补,产生进给序列脉冲,用于三轴步进或伺服电机的驱动控制。
2.2.1 精插补原理
精插补器的功能是接收通过粗插补计算得到的一个插补周期内各轴的进给量(微段直线),并将其转化成频率均匀的进给脉冲,输出给各轴的位置伺服控制器。脉冲转换常用的方法是采用计数器和分频器,其主要优点是频率均匀,但存在脉冲截断误差。本文采用了基于DDA(数字微分分析器)插补原理的脉冲转换算法,它不仅实现简单,消除了脉冲截断误差,而且易于实现多坐标进给的同步[4]。
DDA插补的原理是通过对进给量X的不断累加、溢出,产生相应的进给脉冲。具体的说,在累加脉冲△T控制下,存储在N位寄存器中的进给量X不断累加,累加的溢出脉冲即为驱动坐标轴的进给脉冲。当累加次数达到2N时,溢出脉冲的数据量恰好等于进给量X,一次脉冲转换完成。此时,完成一次脉冲转换的周期是T=2N/fin,产生的溢出脉冲频率为fout=fin*X/2N,其中fin为累加控制脉冲频率。
2.2.2 FPGA实现
精插补器内部结构原理图如图3所示。其工作过程如下:精插补的启动、停止是由单片机来控制的,开始插补时,单片机把本次插补周期的粗插补数据发送给FPGA后,发出插补开始信号。插补开始信号一到,插补控制逻辑就把插补数据送入累加寄存器,并启动累加器进行累加,同时输出插补方向信号,然后就向单片机申请中断,发送下一个插补周期的数据到插补数据缓冲区中。插补周期未到时,累加器不断累加进行脉冲输出,计数器控制每个插补周期脉冲转化的累加次数,一旦本次插补周期一到,计数器对累加器清零,以免给下一次插补带来偏差,并重新开始下一个周期的插补。当单片机发出停止插补信号后,控制逻辑立即封锁插补脉冲源,停止插补脉冲输出。为了提高溢出脉冲均匀性,减少溢出脉冲的频率误差,本文使累加次数增加Q倍,再对溢出脉冲进行Q倍分频。
2.2.2精插补器最高输出脉冲频率分析
设插补周期为0.5ms,若硬件精插补器采用8位累加器,4位分频器,则每次脉冲转换的累加次数应为212。累加脉冲的输入频率是fin=212/T=8.192MHZ,则最高输出脉冲频率可达fout=fin*X/212=510KHZ。当伺服进给的脉冲量为lum时,最大进给速度可达30.6m/min,而且通过提高累加的频率还可获得更高的速度。可见本文提出的硬件精插补器完全可满足高速加工的进给速度控制要求。
固件程序(firmware)除了完成USB设备初始化、USB协议标准请求处理外,主要的任务是实现粗插补数据及机床控制命令和状态反馈信息的传输。D12共有3个端点,端点0、端点1和端点2。在设计中,端点0通过控制传输实现设备的枚举;端点1通过中断传输方式实现数控系统的控制信号及数据请求信号的传输,端点2配置为普通传输端点,通过批量传输实现数控系统粗插补数据的传输工作。数据交换是采用中断机制来实现。微控制器与USB的数据交换由外部中断1来处理,微控制器与FPGA的数据交换由外部中断0来处理。现主要介绍固件程序实现NC粗插补数据传输的方法。
由于NC粗插补数据量较大,不适合于采用中断传输,尽管同步传输速度快,速度恒定,但由于其数据传输的准确性差也满足不了要求,因此NC粗插补数据采用批量传输。由于批量传输方式优先级最低,系统响应具有不确定性,传输速度也具有一定的不确定性。解决的方法是采用数据缓冲,在系统中配置了一个8k的外部RAM,设置两个4000字节的粗插补数据缓冲区。一个插补周期的数据占4个字节,可缓冲1000段数据,系统插补周期为0.5ms,即一次传输加工时间为500ms,若按40k/s的批量传输速度计算(实际传输的速度远大于此速度),传输4000字节只需100ms左右,加上NC数据请求等待延时,还有足够的时间余量。另外,系统中没有同步传输,中断传输的数据量少,也保证了USB总线为批量传输提供足够的带宽。因此,本文采用双缓冲区的方式完全可满足高速加工的插补数据通讯要求。
具体实现时,粗插补数据通过端点2的批量传输来完成的。在一个缓冲区的数据精插补完后,通过端点1向PC主机发出数据请求,PC主机即向该缓冲区传输数据,固件程序通过端点2 OUT中断接收该数据,并存入数据缓冲区。
高速加工是当代数控加工的发展趋势,高速硬件精插补器是实现高速加工进给控制的关键技术之一。本文采用可编程逻辑器件FPGA实现高速精插补器,充分发挥了FPGA速度快、设计灵活、集成度高、性能可靠、开发成本低等一系列优点。采用USB接口实现通讯,完全满足精插补器的高速数据传输要求。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』