FPGA与USB技术在纺织品数字印刷机系统中的应用
摘 要: 介绍了纺织品数字印刷机的设计概况以及USB控制器CY7C68013A的特性,阐述了通过Verilog HDL语言设计FPGA对 USB 控制器的访问控制操作、USB控制器固件程序设计、USB驱动程序设计及PC端的应用程序设计。测试结果表明, FPGA通过USB接口实现了高速可靠的数据传输。
关键词: FPGA; USB2.0; CY7C68013A; 纺织品数字印刷机
工业化纺织品数字印刷机系统分为印刷机和上位主控PC机两部分, 纺织品印刷机不是一套独立的系统,是接收上位主控PC机的指令和图像数据, 依据指令和图像数据完成印刷动作并将自身工作状态反馈给上位主控PC 机的设备。接口部分是实现印刷机中的前端控制器与上位主控PC 机之间通信的桥梁。
纺织品数字喷墨印刷机在实时工业现场,要求达到较高的传输速度,传统的数字喷墨式印刷机与主机的通信主要通过主机主板提供的串行接口、并行接口或通过接口卡来实现,因其传输速度较低已不能满足工业生产过程高速化的需求。USB技术很好地解决了上述问题,虽然最近发布的USB3.0协议理论上可达到5 Gb/s的极限传输速度,但因目前集成USB3.0的微处理器仍处在实验测试阶段,有待全面优化后发布市场。因此支持USB2.0协议的微处理芯片依然是工业高速印染设备中所选择的主要通信微处理器。
FPGA是一种现场可编程门阵列电子集成器件,由于其集成度高,用中小规模集成电路实现的几大块印刷电路板缩小至一两片超大规模集成电路,不仅使控制系统的体积大为缩小,而且系统的可靠性得到大大提高。 FPGA的可编程性还可以使纺织品数字印刷机控制系统的设计、调试、生产和维护更加灵活方便。随着大规模可编程逻辑器件 FPGA的飞速发展,FPGA器件可以在这样的运动控制系统中发挥优越的性能和较大的作用。它作为纺织品数字印刷机控制系统的辅助电路,可代替许多传统的逻辑电路 ,简化系统设计,并且可提高系统的可靠性,减小电路板体积,使产品小型化,同时也有利于保护知识产权[1]。如何优化USB2.0设备的传输性能,突破速度瓶颈,最大限度地提高传输速度,是印刷机设计中急需解决的问题。 本文设计了基于USB2.0的高速工业化纺织品数字喷墨印刷机数据传输系统,进而研究FPGA在印刷机系统中的设计优化以及实现USB2.0接口数据传输速度的全面提升的方法。
1 系统设计
针对纺织品印刷机系统的特点,本系统可实现由一台PC机控制运行,采用IJA模式喷绘机喷头,每喷头510孔,180 dpi。为了提高喷绘速度,采用分组喷头,每组6色或者8色,共3~6组可选。支持打印1~4灰度等级的图像。系统的主控制器由数据传输板与运动控制板组成,主要由S3C2440为处理器的ARM核心板构成,400 MHz的工作主频,64 MB的SDRAM,16 MB的Flash,支持LCD接口,支持IIC接口,支持16 bit的外部总线寻址,支持DMA。主控制器接收来自PC的控制命令和图像数据,检测并控制系统中的各个运动环节,同步运动与喷头的喷射,并将喷头需要的图像数据传输到喷头板上。
主控制器在联机工作时要能与PC双向通信,接收PC发来的图像数据和各种配置信息以及控制命令,同时要将系统的状态传送给PC,可考虑采用USB2.0的接口协议。由于S3C2440不支持USB2.0协议,系统扩展CY7C68013A的USB扩展接口芯片,为缓冲该芯片与ARM总线,系统扩展了一片FPGA。由FPGA负责USB的接口缓冲、运动控制、位置、速度检测、二级墨盒液位检测、二级墨盒液泵控制、喷头板的图像数据格式转换和传输、按喷头位置及颜色顺序点火喷头的控制。
本文主要讨论PC主机与印刷机主控制板的数据通信。鉴于系统的需求,本通信模块采用支持USB2.0高速数据传输的EZ-USB FX2LP单片机CY7C68013A作为接口芯片。采用FPGA EP1C6Q-240做为USB接口芯片的外部逻辑,完成FPGA与USB接口芯片之间的通信。当上位机发出控制信号,经接口芯片CY7C68013A解析后与FPGA进行通信。系统主控制器检测到上位机发出的启动数据传输、选择数据格式等命令时,启动数据传输,经由SIE解析的数据包通过USB接口芯片CY7C68013A以同步从属FIFO的模式将数据经由CY7C68013A内部乒乓控制的FIFO缓存后快速存入FPGA内部的FIFO中,然后由主控制器ARM控制FPGA将主机通过USB传递的数据由喷头控制器读取数据,再分配给6色喷头。系统结构框图如图1所示。
2 硬件设计
2.1 USB接口部分
纺织品数字印刷机的喷印以行为单位,每行喷印过程中必须以恒定的速度喷印。在每行的行端,喷头小车要进行加减速和换向,要卷动卷布辊进布,以便进行下一行的喷印。恒定速度的喷印必须有恒定的图像数据传输率来保证。喷印速度要求越高,对图像数据的传输速度要求也越高。在本通信系统中,选用CY7C68013A芯片,其采用的构架是EZ-USB FX2LP,是在 FX2 的基础上改进而成的一款 USB2.0 芯片,它集成了增强型的8051内核,并采用了低功耗设计,代表了业界的领先水平,是新一代符合USB2.0高速控制器的构架,完全兼容FX2[2]。
在PC与FX2LP的前端控制系统中,FX2LP的内置CPU负责接收上位PC机发来的命令对印刷机的运动进行操控, 并同步图像数据, 图像数据通过FPGA和ARM送到喷头, 并在合适时机命令喷头做一次点火动作。如果用传统的方法, 由FX2LP的内置CPU直接寻址存储由上位机发来的图像数据的图像存储器, 并将图像数据与运动控制同步发送到FPGA, 然后FPGA配合ARM控制喷头点火,这些动作需要复杂的指令序列, 多次的存储器访问, 需要耗费大量的时间,要实现较高的数据传输率几乎是不可能的。
分析纺织品喷墨印刷机的工作机制发现, 前端控制系统不需要理解上位机传来的图像数据,它所要做的仅是对这些图像数据的同步, 在适当的时机将图像数据传送到喷头。因此, 图像数据可以不通过FX2LP的内置CPU存取, 可直接在CPU的同步下送到喷头。由于EZ-USB FX2提供了一种独特的架构,EZ-USB的CPU可不在USB主机和外部逻辑的数据通道上。为了达到最大的数据带宽,EZ-USB将USB主机和外部逻辑直接连接,从而将CPU旁路掉,使USB接口和外部应用环境直接共享FIFO,而微处理器可不参与数据传输[4],此时无需执行USB接口芯片内部8051固件程序便可直接实现端点FIFO与外部的数据交换,这种被称为“量子FIFO”的处理构架,很好地解决了普通微处理器转发方式造成的带宽瓶颈[3]。
通过以上的分析, 系统采用了一种将图像数据旁路的方法。用CY7C68013A内部共享的4 K端点FIFO作为图像暂时的存储器。FIFO存储器的输入端点直接接收USB主机端的图像像素数据。FIFO存储器的输出端点数据由FPGA同步读取, 读取的数据经过ARM的控制指令和硬件通道发送到喷头。因而图像数据的传输速度不再与EZ-USB的CPU的存储器寻址周期紧密相关,从而利用这种旁路的快速通路实现PC 机与喷头之间的高速数据传输。FIFO 的作用也表现为在高速的USB传输与中速连续的喷印需求之间建立一个缓冲。
2.2 FPGA桥接部分
由于选用CY7C68013A芯片作为USB2.0接口芯片,而该芯片的接口频率与系统主控制器的总线时序不同,不能直接将该芯片与主控制器总线连接,所以考虑用FPGA作为桥接,这样就需要该芯片与FPGA内部的总线进行接口,考虑数据传输速率的不同,同时在FPGA内部建立USB的数据缓冲区,该缓冲区由FIFO构成,完成与主控制器的信息交换。同时,FPGA作为Slave FIFO模式的外部控制逻辑,提供USB的片选、写数据时钟和端点选择等信号,实现对数据读写的控制,桥接电路的接口图如图2所示。
(1)与USB芯片的接口
FPGA内部总线是同步32 bit总线,总线信号包括11位地址线addr、32 bit数据输入data_i、32 bit数据输出data_o、写控制输入we、总线周期信号cyc、锁存信号stb、响应信号输出ack,以及系统时钟信号clk和系统复位信号rst、字节选择信号sel。
(2)FIFO的选择与建立
由于FIFO的两端要以不同的速率操作,因此采用的FIFO以不同的时钟工作,写入以USB_IFCLK为同步时钟,读出以系统时钟clk_i为同步时钟。写入请求线SLRD与写入时钟同步,当FIFO没有满且USB芯片非空时,始终产生写入请求。这样保证FIFO自动将USB芯片内的数据读出,减少软件判断的负担。
由于采用不同时钟的FIFO模块不能自动产生接近满和接近空信号,故使用一个半满信号,该信号由读使用字rdusedw的最高位获得。这样只要适当选择FIFO的容量,就可由ARM判断半满信号,一旦有半满信号,ARM就可不再判断,连读读出FIFO中一半容量的数据。考虑喷头每次喷射需要至少1 KB的数据,故选择FIFO至少为16 bit,2 KB的容量。当ARM检测到FIFO没有达到半满时,如果FIFO没空,仍然可以读出数据,只是这时每读出一个字就必须检测一下FIFO是否为空,读出的速率不可能达到很高。
3 软件设计
3.1 USB固件程序
USB固件是运行在CY7C68013A中集成的微控制器上的程序,Cypress公司的EZ-USB FX2开发套件提供给用户一个固件函数库(Ezusb.lib)和固件框架(Framework),两者均是基于KEIL C51开发的。在使用固件框架进行特定的固件开发时,固件框架已经实现了初始化、重枚举、电源管理等功能。对用户而言,只需要在固件架构的预留位置处添加代码,就可以完成特定的功能[4]。
在本系统的固件程序设计中,利用初始设置函数TD_Init()和描述符表文件Dscr.a51完成系统的初始化以及端点配置等工作。为了优化数据传输速度,配置双端点组合的方式实现高速批量传输,设置相关特殊功能寄存器的初值以实现本系统的同步Slave FIFO的自动传输功能[5]。
固件程序在接到上位机传来的喷印请求命令时, 开启一次USB传输。在ARM发起控制信号启动小车运动 到达喷印位置时, ARM从FPGA内部FIFO读取图像数据并启动喷头点火信号, 完成一个像素点的喷印。然后继续小车运动, 开始下一次喷印。当一次喷印结束,ARM将系统状态经由CY7C68013A反馈给PC后, CY7C68013A结束本次数据传输。ARM主控程序命令小车减速、停止并启动卷布动作。待卷布完成后, 一个动作流程结束,等待接收下一个命令。
3.2 驱动程序
USB设备驱动程序负责建立起主机端和设备端的联系。在Cypress公司提供的EZ-USB FX2LP 开发包里包含了CyUSB.sys文件,这是一个符合WDM规范支持 USB2.0的通用设备驱动程序,开发应用时只需对VID、PID等几处修改即可满足本系统的应用需求。
通过对该驱动程序的CyUSB.inf文件进行客户化设计并随后采用Windows设备管理程序的做法,任何 USB设备均可与CyUSB.sys驱动程序相匹配。该驱动程序面向通用型用途的一个重要特点是其无需重新编译即可进行客户化设计,通过修改该驱动程序的.inf文件,能够使其通告一个与众不同的全局唯一标识符(GUID)。这将允许该驱动程序的不同副本在一台PC上适度地共存。此外,该.inf文件还使得驱动程序能够执行一连串预先记录的控制端点传送。这便允许根据与其相连设备的Vendor ID和 Product ID来对该驱动程序的启动特性进行客户化设计[6]。
3.3 应用程序
主机与设备一般通过主从方式进行数据通信,主机应用程序向设备发送命令数据包,设备接收到命令数据后,接收主机传送过来的数据。主机应用程序通过设备驱动程序完成对设备的控制和通信,采用 VC++6.0编写。
为了提高传输速度与效率,也为防止应用程序在读写数据时产生的“假死机 ”现象,应用程序采用多线程方法编写,一般要把数据传输放在另外一个线程里,即单独开启一个批量传输线程作为区别于主线程的辅助线程。批量传输线程负责向设备写入数据,并通过消息传送机制与主线程通信。主线程负责界面管理、数据处理、向设备发送命令数据包以及启动/停止批量传输线程。
在线程循环中,主要调用BeginDataXfer()、WaitForXfer()、FinishDataXfer()3个函数。其中BeginDataXfer()为发起异步传输,并且立即返回。即发起此次需要传输字节后,并不会等待传输完毕,而是立即开始下一次字节数据的传输;WaitForXfer()为异步传输最大等待时间;执行FinishDataXfer()时才开始真正地将传输数据写入设备存储器中。另外,如果要传输非512 B整数倍的数据,而且不是一次传输完,则应在批量传输线程中利用SetXferSize()函数重新设置传输大小,否则会导致数据不同步。
该系统经过测试,达到了预想的喷绘效果和速度要求。通过对 FPGA器件的使用,减少了分立元件的数量,同时简化了系统设计,增强了系统的可编程性能,使系统易于维护和升级,并有利于技术保密和知识产权保护。该设计方案已应用于实际开发的项目中。
pid控制相关文章:pid控制原理
fpga相关文章:fpga是什么
pid控制器相关文章:pid控制器原理
存储器相关文章:存储器原理
评论