袁小軍 張李超 張楠
摘? 要: 為了提高系統的兼容性、可移植性以及設備的網絡化管理,提出并設計了一種基于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]?,F階段XY2?100協議的實現方案中,廖平等提出基于STM32定時器中斷并通過I/O口模擬的方案系統,系統將以4 MHz的頻率不斷響應定時器中斷,導致占用系統過多資源,無法有效處理控制模塊[2]。王文毅等提出基于DSP的I/O模擬方案,從給出的示波器輸出圖來看,其實現的XY2?100協議的頻率并未達到2 MHz,故使得振鏡掃描頻率降低[3]。
在本控制器中采用以太網實現與上位機的數據傳輸,極大地增強了系統的可擴展性,對于上位機而言,它可以是支持以太網的任意操作系統與硬件設備,且通過網絡組播的方式能實現一臺上位機設備控制多個控制器,從而進一步降低系統整體成本。對于上位機應用程序,基于QT框架下的GUI程序也將獲得源代碼級的可移植性。此外在大規模工廠以及物聯網的環境下,基于以太網的控制器將有利于設備的網絡化、集群化管理。
基于FPGA的XY2?100模塊采用硬件描述語言設計,利用其并行執行的特性,不僅使得協議的驅動更加高效和精確,而且模塊化的設計也帶來更好的移植性。
1? 控制器系統總體設計
控制器與上層數據提供者組成上下位機的系統結構??刂破髦饕║DP模塊、脈沖信號同步模塊、應用層數據處理模塊、SDRAM模塊、XY2?100模塊以及數據請求模塊。其中,UDP模塊提供了整個系統的數據傳輸保證,內部由以太網數據接收模塊、以太網數據發送模塊、CRC32檢驗模塊組成;脈沖信號同步模塊提供了在不同時鐘域下的信號同步服務;SDRAM模塊作為系統的數據緩存,防止當前網絡出現較大的延時或丟包時導致數據中斷的情況;XY2?100模塊主要對XY2?100協議進行了實現,并行輸出4路差分信號,保證了輸出信號的準確性和穩定性。數據請求模塊不斷地檢測系統當前剩余的數據容量,在一定條件下向上位機請求數據以及使能XY2?100模塊的輸出??刂破飨到y整體結構框圖如圖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.