APP下载

基于FPGA的以太网激光振镜控制器设计与实现

2019-08-23袁小军张李超张楠

现代电子技术 2019年16期

袁小军 张李超 张楠

摘  要: 为了提高系统的兼容性、可移植性以及设备的网络化管理,提出并设计了一种基于FPGA的以太网激光振镜控制器。控制器采用FPGA作为主控芯片,利用FPGA并行执行的特性实现了对XY2?100协议的精确驱动,解决了在MCU的实现方案中,占用系统资源高和四路输出信号存在延时等问题。同时基于FPGA设计并开发了UDP模块和SDRAM模块用于数据的收发与缓存,以保证控制器稳定持续地输出控制信号。经测试结果表明:控制器能够精确控制振镜的转角,并且可以灵活支持异构的上位机环境,解决了传统基于PCI接口进行数据传输的振镜控制卡在硬件与软件兼容性上存在的问题,提高了上位机应用程序的可移植性。

关键词: 激光振镜控制器; FPGA; 协议驱动; UDP模块设计; SDRAM模块设计; 信号延时

中图分类号: TN249?34; TP23                     文献标识码: A                     文章编号: 1004?373X(2019)16?0159?05

在3D打印领域,振镜控制方案基本都采用德国ScanLab的RTC控制板卡,该控制板卡虽然功能强大,但同时价格也很昂贵。而且其使用传统的PCI接口来进行数据传输,一般情况下只在PC机上使用,因此就上位机硬件的兼容性而言,RTC控制板卡存在明显的局限性。此外ScanLab只提供Windows平台下的驱动程序,所以决定了基于RTC控制板卡开发的应用程序的不可移植性[1]。现阶段XY2?100协议的实现方案中,廖平等提出基于STM32定时器中断并通过I/O口模拟的方案系统,系统将以4 MHz的频率不断响应定时器中断,导致占用系统过多资源,无法有效处理控制模块[2]。王文毅等提出基于DSP的I/O模拟方案,从给出的示波器输出图来看,其实现的XY2?100协议的频率并未达到2 MHz,故使得振鏡扫描频率降低[3]。

在本控制器中采用以太网实现与上位机的数据传输,极大地增强了系统的可扩展性,对于上位机而言,它可以是支持以太网的任意操作系统与硬件设备,且通过网络组播的方式能实现一台上位机设备控制多个控制器,从而进一步降低系统整体成本。对于上位机应用程序,基于QT框架下的GUI程序也将获得源代码级的可移植性。此外在大规模工厂以及物联网的环境下,基于以太网的控制器将有利于设备的网络化、集群化管理。

基于FPGA的XY2?100模块采用硬件描述语言设计,利用其并行执行的特性,不仅使得协议的驱动更加高效和精确,而且模块化的设计也带来更好的移植性。

1  控制器系统总体设计

控制器与上层数据提供者组成上下位机的系统结构。控制器主要包括UDP模块、脉冲信号同步模块、应用层数据处理模块、SDRAM模块、XY2?100模块以及数据请求模块。其中,UDP模块提供了整个系统的数据传输保证,内部由以太网数据接收模块、以太网数据发送模块、CRC32检验模块组成;脉冲信号同步模块提供了在不同时钟域下的信号同步服务;SDRAM模块作为系统的数据缓存,防止当前网络出现较大的延时或丢包时导致数据中断的情况;XY2?100模块主要对XY2?100协议进行了实现,并行输出4路差分信号,保证了输出信号的准确性和稳定性。数据请求模块不断地检测系统当前剩余的数据容量,在一定条件下向上位机请求数据以及使能XY2?100模块的输出。控制器系统整体结构框图如图1所示。

2  硬件方案与开发环境

控制器主要通过FPGA控制器、PHY芯片以及SDRAM来实现与上位机的数据传输、缓存以及相关硬件模块的设计。

硬件方案如下:Altera公司Cyclone IV系列EP4CE10F17C8作为硬件电路的FPGA控制器,该芯片是极具功耗和性价比优势,拥有10 320个逻辑单元、414 Kbit的嵌入式存储资源;选用Realtek公司的RTL8201CP 作为PHY芯片,并采用MII接口和PHY芯片进行数据通信,最大支持100 Mb/s的通信速率;选用容量为256 Mbit的SDRAM芯片W9825G6KH?6用作数据缓存。 控制器的各个硬件模块基于Altera的可编程逻辑设计环境Quartus II 13.1并使用Verilog硬件描述语言开发。

3  UDP模块

3.1  UDP简介

UDP协议位于TCP/IP协议栈的传输层,相对于面向连接的可靠TCP服务,UDP是面向数据报的不可靠传输协议。但正因为UDP没有建立连接、断开连接、确认重传以及拥塞控制,因而UDP的实时性更强,具有较高的传输效率而且对系统造成的负载低[4]。在振镜控制中,传输的实时性极其重要,如果不能满足特性的实时性要求,那么在加工过程中将会出现加工卡顿的情况。而UDP提供的高效、低延迟的服务就能够满足加工中的实时性要求。

3.2  UDP的收包处理

针对UDP数据包的接收,因其是一个流程化的处理过程,所以在FPGA下能够很容易用状态机的方式来实现。因发送只是接收的逆过程,故在此只介绍UDP收包过程。其中以太网包数据格式如图2所示。

首先,接收前导码,如果接收到8d55则表示开始接收一个UDP数据报,并依次接收MAC地址、IP地址并判断是否与请求的MAC地址和IP地址一致以及使能CRC32校验;然后,接收UDP首部,得到需要接收的真实数据大小,再按照32位的数据格式传输至接收缓冲区当中。当全部的数据传输完成后再判断CRC32的校验结果是否一致[5]。需要注意的是,在中间的状态,如前导码错误、MAC地址错误以及IP地址错误时,应该是跳转到RECV_END状态而不是跳转到IDLE状态。因为中间状态在解析数据出错时,UDP数据报的接收还没有结束,如果此时跳转到IDLE状态会误把有效数据当成前导码来解析,所以一旦出错就将状态跳转到RECV_END状态并等待该数据报传输的结束。图3为UDP接收模块状态跳转图,在上述过程中,如果所有步骤都无误,控制器将发送确认报文告知上位机发送成功,否则发送失败报文,上位机根据实际情况选择是否重发数据报。

因为MII接口的数据输入总线为四位,所以在进入状态机的判断之前必须先将两个四位数据组装成一个完整的字节。图4为UDP数据接收过程中SignalTap抓取的波形图,表示当上位机发送4 B字符串1212时,UDP模块接收到的数据。其中,eth_rx_valid表示以太网数据输入有效信号;eth_rx_data表示MII的四位数据总线;rx_fs_en表示四位转八位完成信号;rx_data表示转换完成的8位数据;ren_en表示缓冲区写使能脉冲信号,将组装好的32位数据缓存到缓冲区中。

3.3  CRC32校验

CRC校验用于对以太网数据进行检验,以确保数据的正确性。需要注意的是CRC校验的数据不包括前导码和帧起始界定符。在FPGA中,相比传统的串行CRC校验,为了提高校验速度,采用并行CRC校验,对数据每次一个字节8位并行输入进行校验[6]。CRC32校验在FPGA实现的原理是LFSR(Linear Feedback Shift Register),其思想是各个寄存器储存上一次CRC32运算的结果,寄存器的输出即为CRC32的值。CRC32生成的多项式为:

[G(X)=X32+X26+X23+X22+X16+X12+X11+               X10+X8+X7+X5+X4+X2+X1+1]

4  SDRAM数据缓冲模块

为了能够保证在加工过程中XY2?100的输入数据不中断,必须为系统增加数据缓冲区,因为EP4CE10F17C8 FPGA芯片只有414 Kbit嵌入式RAM块,故无法满足设计的要求。又因为SDRAM具有空间存储量大、读写速度快、价格便宜等特点,在本控制器中添加SDRAM芯片作为数据缓存[7]。由于驱动SDRAM的时序电路较为复杂,在此就不展开。另外为了方便对SDRAM的读写,本控制器在封装时将SDRAM的读写操作封装为FIFO的形式[8]。SDRAM驅动框架如图5所示,其中读FIFO和写FIFO都是由FPGA 的FIFO IP核生成。因为考虑到在不同网络环境缓冲区的大小应该不同并且不可能一次性将所有的加工数据存入缓冲区中。另外根据XY2?100协议,实际上数据更新的频率为100 kHz,综合分析后将缓冲区的大小设置为1 MB,这样即使上位机网络2.5 s内无法响应数据也能够保证加工不会被中断。

5  数据请求与XY2?100模块

5.1  XY2?100模块

在数字振镜的运动控制中,XY2?100协议已经成为了行业里的默认标准。XY2?100协议由四路差分信号组成,包括:时钟信号(SENDCK)、同步信号(SYNC)、CHANNELX(X偏转镜数据)、CHANNELY(Y偏转镜数据)。其中,时钟信号为2 MHz,当处于上升沿时,数据位被写入,当处于下降沿时数据位被振镜反射系统采样。经试验表明,当时钟频率小于2 MHz时,振镜也是能够正常工作的。只不过振镜单位时间内能够偏转的次数将降低,同时当上位机需要使用振镜扫描跳转延时功能时,延时的精度也会降低。协议的时序图如图6所示,当同步信号处于上升沿时,第一个数据位被发送。当同步信号处于下降沿时,最后一位奇偶校验位被发送。数据通道的20位数据中,前三位为控制头,一般默认为001,最后一位为偶校验位,中间的16位数据位为最终应用在振镜转动轴上的坐标数据[9]。

XY2?100模块原理图见图7,模块有4个输入信号,分别是2 MHz的时钟、复位信号、输出使能信号以及32位加工数据。其中,32位加工数据中,高16位为CHANNEL_X的坐标数据,低16位为CHANNEL_Y的坐标数据。5个输出信号分别是RD_REQ数据请求脉冲信号和四路XY2?100协议的驱动信号。其中RD_REQ在SYNC信号拉高时拉高并在下一个时钟周期拉低。协议的实现在一个时序逻辑中完成,因为协议的一个控制周期由20个时钟周期组成,故模块使用一个8位的计数器控制CASE语句的分支跳转,依次进行协议控制头输出,数据部分按位输出以及校验位的计算与输出。

5.2  数据请求模块

控制器的数据请求模块也由状态机实现,其中状态跳转图如图8所示。

初始状态处在IDLE状态,当由上位机发送加工使能时跳转到EMPTY状态。因为设置的缓冲区大小为1 MB,所以当处于EMPTY时就立马向上位机请求缓冲区大小,即1 MB的数据量。对于上位机而言,如果所需加工的数据小于1 MB,那么剩下的数据就由加工数据中最后一个坐标点来进行填充,这样就可以使得振镜能够停在最后一个加工点。当缓冲区被填满时,在下一个时钟周期进入ST_FULL状态,并且将输出使能置1。

随着缓冲区内的数据以100 kHz的速率被消耗,缓冲区中的数据将会小于512 KB,那么此时该模块将向上位机请求512 KB的数据量并在下一个时钟周期进入HALF_FULL状态。此时缓冲区中的数据不仅在不断地被XY2?100模块消耗,而且也在不断的被UDP模块写入数据,并且写入速度远大于消耗速度,所以当全部收到512 KB数据后将再次进入FULL状态。如果已经加工完成了,那么上位机将不会发送数据,同时会将加工使能置0,那么当缓冲区为空时,HALF_FULL状态将进入IDLE状态,整个状态循环回到起始点并等待下一次加工使能[10?11]。

5.3  脉冲信号同步模块

因为在不同的时钟域下,如果直接将不同频率下的信号直接连接在一起,那么就有可能出现亚稳态,即a频率模块下的信号可能不会被b频率模块正确地采集到。所以在这种情况下,就需要将一种频率下的脉冲信号转换为另一个频率下的脉冲信号,即脉冲信号的同步[12?13]。在本控制器中,UDP模块的接收数据使能脉冲信号、数据请求模块的数据请求脉冲信号、XY2?100模块的读数据脉冲信号都需要经过脉冲信号同步模块的处理后才能够发送到对应的接收端。图9为脉冲同步模块工作原理图。

图9中,首先将CLK_A时钟下的PULSE_A转换为取反后的电平信号PULSE_INV_D0,以确保在CLK_B时钟下能够采集到,转换后的电平信号PULSE_INV_D0在CLK_B时钟下进行打拍;再对打拍后的信号PULSE_INV_D2和PULSE_INV_D3进行异或处理;最后就能得到在CLK_B时钟下持续一个时钟周期的脉冲信号PULSE_B。

6  实验验证及分析

图10表示上位机发送两个4 B的字符串1212和1213,最终由XY2?100模块输出的波形。因为字符1,2,3的ASCII码分别是31,32,33,对应的二进制数为001100001,00110010和00110011,且通道X的数据为32位数据中的高16位,通道Y的数据为低16位,所以最终的波形输出与输入数据相符。

在其他文献对XY2?100的实现中利用MCU的定时器中断通过I/O口来模拟,这种方式使得系统一直处于频繁的响应定时器中断,不仅极大地占用系统资源,而且因为MCU的串行执行使得XY2?100四个输出信号的上升沿存在延时。从图10中可以得出本控制器能够精确地同步输出四路信号。通过搭建由振镜控制器、振镜SG7210、P20QE脉冲光纤激光器,并采用F?theta透镜方式聚焦的振镜测试平台进一步对输出的准确性进行验证。因为振镜SG7210的最大扫描角度为[±15]°,根据XY2?100协议可知,振镜的扫描频率为100 kHz,最大的扫描数值为65 535,故该测试平台下的扫描分辨率能达到[4.5×10-4](°)。图11表示基于上述测试平台在黑纸板上加工得到的简单图形。其中图形数据的准备、矫正、插补,以及实际坐标与振镜转角的转换全部由上位机实现。

7  结  语

本文设计一种基于FPGA的以太网激光振镜控制器。该控制器以EP4CE10F17C8为控制核心,实现了XY2?100数字振镜控制协议,使得振镜的控制精度和稳定性都得到提高并能够进行实际扫描。经测试结果表明,基于UDP协议实现的以太网数据传输方式极大地改善了上位机软硬件的兼容性以及应用程序的可移植性。因此该控制器将在3D打印的控制系统中有广泛应用。

参考文献

[1] 张花信.基于FPGA的三维激光扫描控制系统的设计研究[D].西安:西安电子科技大学,2017.

ZHANG Huaxin. Design and research on the control system of three?dimensional laser scanning based on FPGA [D]. Xian: Xidian University, 2017.

[2] 王文毅,吕勇,陈青山,等.基于XY2?100协议的振镜控制转换板的设计与实现[J].自动化与仪器仪表,2014(12):147?148.

WANG Wenyi, L? Yong, CHEN Qingshan, et al. Design and implementation the galvanometer control transfer board based on XY2?100 protocol [J]. Automation and instrumentation, 2014(12): 147?148.

[3] 廖平,陈永坤.基于STM32的激光打标机控制系统设计[J].激光与红外2016,46(12):1447?1451.

LIAO Ping, CHEN Yongkun. Design of laser marking control system based on STM32 [J]. Laser & infrared, 2016, 46(12): 1447?1451.

[4] 谢希仁.计算机网络[M].4版.北京:电子工业出版社,2005.

XIE Xiren. Computer network [M]. 4th ed. Beijing: Electronic Industry Press, 2005.

[5] 吴长瑞,徐建清,蒋景红.基于FPGA的千兆以太网接口应用研究与实现[J].现代电子技术,2018,41(9):1?5.

WU Changrui, XU Jianqing, JIANG Jinghong. Applied research of Gigabit Ethernet interface and its implementation based on FPGA [J]. Modern electronics technique, 2018, 41(9): 1?5.

[6] 付高原,郭臣,潘进勇,等.基于FPGA的UDP点对点传输协议实现[J].电子设计工程,2017,25(2):181?184.

FU Gaoyuan, GUO Chen, PAN Jinyong, et al. Implementation of point?to?point transmission based on UDP protocol with FPGA [J]. Electronic design engineering, 2017, 25(2): 181?184.

[7] 齐佳硕,王洪岩.基于FPGA的SDRAM接口设计及实现[J].电子测量技术,2018(19):141?144.

QI Jiashuo, WANG Hongyan. Design and implementation of the SDRAM interface based on the FPGA [J]. Electronic measurement technology, 2018(19): 141?144.

[8] 宗凯.基于FPGA的DDR3控制器设计[J].电子测量技术,2017(1):118?122.

ZONG Kai. Design of DDR3 controller based on FPGA [J]. Electronic measurement technology, 2017(1): 118?122.

[9] 王守辉.高精度高速振镜控制系统设计[J].光电技术应用,2015(2):7?10.

WANG Shouhui. Design of high precision and speed galvanometer control system [J]. Electro?optic technology application, 2015(2): 7?10.

[10] 闫伟强.基于ARM+FPGA的激光打标机控制器设计[D].南京:南京理工大学,2010.

YAN Weiqiang. Design of laser marking machine controller based on ARM + FPGA [D]. Nanjing: Nanjing University of Science and Technology, 2010.

[11] 文世峰.选择性激光烧结快速成形中振镜扫描与控制系统的研究[D].武汉:華中科技大学,2010.

WEN Shifeng. Study of galvanometric scan and control system in selective laser sintering [D]. Wuhan: Huazhong University of Science and Technology, 2010.

[12] 宋文强,胡毅.FPGA跨时钟域信号同步设计方法研究[J].单片机与嵌入式系统应用,2018,18(9):24?27.

SONG Wenqiang, HU Yi. Signal synchronization design method of cross clock domain in FPGA [J]. Microcontrollers & embedded systems, 2018, 18(9): 24?27.

[13] 王利祥.FPGA设计中跨时钟域的问题与方法[J].电子技术与软件工程,2017(24):97.

WANG Lixiang. Problems and methods of cross clock domain in FPGA design [J]. Electronic technology & software engineering, 2017(24): 97.