孫大海,艾 華
(1. 中國科學院 長春光學精密機械與物理研究所,吉林 長春 130033;2. 中國科學院大學,北京 100049)
光電編碼器是一種光、機、電緊密結合的精密數字位移傳感器,已經廣泛應用于數控機床、回轉臺、伺服傳動、機器人、雷達、軍事目標測定等裝置和設備中,并在工業、國防、航天等部門起著關鍵作用[1-2]。光電編碼器主要分為增量式和絕對式2種。增量式編碼器通過計數設備確定其位置,而絕對式編碼器的每個機械位置對應于一個惟一的絕對編碼,所以它無需記憶。絕對式編碼器在抗干擾和可靠性方面大大優于增量式編碼器, 所以絕對式編碼器在測量系統中的應用更廣泛。但是絕對式編碼器每一次輸出的數據量較增量式編碼器多而復雜,由于精度高、位數多的特點決定絕對式編碼器通信方式只能采取串行傳輸方式,而且還要遵循一定的通信協議。目前世界上幾大主要的編碼器生產廠商都有自己的一套通信協議,如Heidenhain公司的EnDat協議,Danaher公司的Biss協議,SICK|STE- GMANN公司的HIPERACE協議等等[3]。其中Heid enhain公司推出的EnDat接口因其高可靠性、低成本而得到世界各大數控廠商的認同,現在EnDat2.2接口已經發展成為絕對式編碼器的標準協議。
Heidenhain公司為其編碼器配套了相應的接收板卡,自動完成串行編碼到并行編碼的轉換,方便了控制器的讀取操做。但該板卡價格昂貴,大約占絕對式編碼器價格的四分之一。為滿足了對EnDat2.2接口的需要和代替價格高昂的專業接口板卡,本文先是分析了EnDat2.2協議的傳輸格式,基于FPGA(現場可編程邏輯器件)設計了雙通道EnDat2.2接口電路,可以同時對兩個支持EnDat2.2協議的絕對式光電編碼器進行控制和讀取。
海德漢公司的EnDat數據接口是用于編碼器的數字式、全雙工同步串行接口。電氣連接需要一對電源線,一對差分的數據線,一對差分的時鐘線,數據傳輸與FPGA發出的時鐘信號保持同步[4],采用“一問一答”的主從通信方式。圖1是Endat2.2的典型時序圖。

圖1 包括附加信息的位置值數據包Fig.1 Packet including position values with additional information
傳輸周期從第一個時鐘下降沿處開始啟動,編碼器開始計算位置值并保存測量值。兩個時鐘脈沖(2T) 后,FPGA開始發送模式指令。編碼器的絕對位置值成功計算完后,編碼器從起始位開始向FPGA傳送數據。緊接著的錯誤位,“F1”和“F2”是監測信號,用于監測故障。這兩位信號是相互獨立產生的,它顯示編碼器是否發生了可導致不正確位置值的故障。然后絕對位置值從最低有效位(LSB) 開始傳送。它的長度取決于所用的編碼器。每次傳輸位置值均以CRC 結束,在附加信息1 和2的數據傳輸結束后也進行循環冗余檢查。存儲區域碼( MRS碼) 決定了附加信息的內容。在數據傳輸結尾處,時鐘信號必須置為高電平。10~30 μs后或1.25~3.75 μs后數據線返回低電平。當檢測到時鐘信號的下降沿時,將啟動下一次的數據傳輸[4]。
系統電路原理圖如圖2所示,其中使用FPGA開發的雙路獨立EnDat2.2譯碼模塊,可以連接兩個編碼器,而且兩個模塊彼此獨立,互不占用對方資源,可以同時工作,保證了編碼器的通信速度和可靠性。用FPGA實現接口電路功能,不但可以使控制器只專注于相關的控制算法運算而且接口電路本身也具有很好的獨立性。

圖2 接口電路原理圖Fig.2 Interface circuit diagram
編碼器與FPGA的收發電路采用RS485電氣接口標準規范,RS-485接口是采用平衡驅動器和差分接收器的組合,具有抗干擾能力強,通信速率快,傳輸距離長等優點。本文使用專門用于RS485接口的SN75176B芯片,如圖2所示,該芯片是一種半雙工的器件。每一路編碼器使用2個SN75176B芯片,一個用于向編碼器傳輸同步的差分時鐘信號CLOCK,該SN75176B芯片只工作在發送模式;另一個用于編碼器和FPGA之間的數據信號(DATA)傳輸,該SN75176B芯片處在半雙工工作模式。

圖3 接口電路功能框Fig.3 Function block of interface circuit
如圖3所示,為了方便FPGA程序的設計和調試,將整個接口電路按照功能進行模塊化,主要由發送模塊、接收模塊、時鐘發生器、校驗模塊、各種功能寄存器及并行接口、順序控制器等功能模塊組成[5]。發送模塊、接收模塊和時鐘發生器主要負責與編碼器的通信,框圖的左側是EnDat接口的4根通信引腳,產生符合Endat2.2協議的數據傳輸時序和波特率。順序控制器是頂層模塊,用于協調各個模塊的工作流程,使得負責不同功能的模塊按照一定順序和條件工作,該模塊既要實現配置寄存器對發送模塊和接收模塊的配置,又要將接收模塊接收的數據經過CRC校驗后送到相應的接收寄存器中。接下來從3個方面介紹FPGA的程序設計。
在上電或復位后,時鐘線TCLK為保持高電平,當順序控制器啟動數據傳輸后,首先使能時鐘發生器產生0.5 μs的方波信號作為通訊的同步時鐘信號。對于每一次數據傳輸,在時鐘的第二個下降沿激活FPGA內發送模塊,按照時鐘的下降沿通過引腳DATA_DV依次發送6位模式指令,或6位模式指令和24位參數,在緊接著的下一個時鐘下降沿發送模塊被關閉,接收模塊被激活,開始檢測輸入引腳DATA_RC的上升沿,當檢測到起始位S的上升沿后,開始接收2個“錯誤位”F1、F2,25個位置值和5位CRC校驗碼,或接收24位參數和5位CRC校驗碼,并在時鐘的下降沿保存輸入的數據。最后關閉時鐘發生器,但時鐘線和數據線仍要維持高電平,經過恢復時間3 μs后數據線返回低電平,時鐘線的高電平一直持續到下一次數據傳輸。接收到的位置值經過校驗模塊檢測后,從A端口寫入雙口RAM中,從而FPGA與編碼器的一次通訊過程就結束了。

圖4 AHB總線讀寫操作時序圖Fig.4 AHB bus timing diagram for read and write operations
圖4為并行總線的讀、寫操作時序圖。并行總線時序的設計就是并行接口的設計,使FPGA內部寄存器能被控制器訪問到。在FPGA內部實現了64個字節的雙口RAM空間,本文采用了對雙口RAM的A端口進行封裝實現并行總線接口的設計,設計方法如圖5所示,在圖5的左側是并行接口的通信控制信號,它提供5位地址信號和16位數據信號與控制器進行16位的數據傳輸。圖6為該端口的ModelSim讀和寫時序仿真圖,由圖可知該端口的讀寫符合并行總線的時序。

圖5 AHB接口設計圖Fig.5 AHB interface design schematics

圖6 AHB接口的ModelSim仿真波形圖Fig.6 AHB interface’s ModelSim simulation waveform
為了提高數據傳輸的可靠性,EnDat2.2在傳輸數據時,其后面還跟隨著5位CRC校驗碼,接收端通過校驗碼,判斷數據在傳輸過程中是否由于干擾等原因而出現誤碼。

圖7 循環冗余碼編碼原理Fig.7 Coding theory of cyclic redundancy code
循環冗余碼原理:
編碼器輸出的循環冗余碼分為信息碼和校驗碼兩個部分,如圖7所示。設K(X)為信息碼多項式,R(X)為校驗碼多項式,G(X)為預先約定的生成多項式。信息碼長為k位,校驗碼長為r位,則循環冗余碼長為n=k+r位。
(1)發送端的編碼過程:
通過xr-1K(X)/G(X)=Q(X)+R(X)/G(X),求得R(X)的值,令T(X)=xr-1K(X)+R(X)作為循環冗余碼發送出去。
(2)接收端的校驗過程:
接收方收到循環冗余碼后,做如下處理:
T(X)/G(X) =xr-1K(X)/G(X)+R(X)/G(X)=
Q(X)+R(X)/G(X)+R(X)/G(X)=Q(X)
此時T(X)/G(X)余數為0。所以判斷數據在傳輸過程是否出錯依據就是判斷T(X)/G(X)的余數是否為0。如果T(X)/G(X)的余數為0,則T(X)傳輸正確,若不為0,T(X)傳輸時出錯了。
下面是用 Verilog HDL代碼實現接收端循環冗余校驗的主要源程序,生成多項式為G(x)=x5+x2。
……
always @(posedge CLK)
begin
data=input;
if(data[25])data[25:20]=data[25:20]^6'b100100;
……
if(data[6])data[6:1]=data[6:1]^6'b100100;
if(data[5])data[5:0]=data[5:0]^6'b100100;
if(data[4:0]^crc5) begin error<=1;end
else begin error<=0;end
end
利用ModelSim仿真工具對程序進行了仿真, 如圖8所示,輸入26位信息碼0x363c9a9和5位校驗碼00101,通過error=0顯示該信息碼是準確的,這與理論計算的結果一致,當校驗碼為01101時,error=1提示信息碼是錯誤的。

圖8 CRC校驗程序的仿真圖Fig.8 Simulation diagram for procedure of CRC checksum
一次完整的接口電路工作流程如圖9所示,首先控制器對配置寄存器進行配置,設置串口傳輸速率和編碼器的位數;向發送寄存器寫入模式指令及參數,然后通過軟件觸發方式(向觸發寄存

圖9 EnDat接口工作流程圖Fig.9 Flow chart of EnDat interface
器寫入任意數),FPGA開始向編碼器發送指令及參數,接下來等待接收編碼器反饋回來的位置值或參數值,該值經過CRC校驗后存入接收寄存器中,并更新狀態寄存器,使相應的狀態位置位,控制器通過查詢狀態寄存器查看是否接收到編碼器的位置值或參數,接收到后控制器從接收寄存器中讀取并顯示,最后復位狀態寄存器準備下一次的數據傳輸。
本文從軟件仿真、準確性對比、傳輸速度3個方面對該接口進行了測試。由于兩路接口功能一樣,所以只列出FPGA接口中的一路接口的Modelsim軟件仿真圖,圖10為FPGA的工作時序波形圖。由圖可知,首先是通過AHB總線向發送寄存器發送模式指令(編碼器接收參數011100)及參數(0x345678),然后向觸發寄存器寫入任意數來啟動FPGA,使之按照EnDat2.2的時序傳輸指令及參數,最后從接收寄存器中讀出編碼器反饋回來參數值。如圖可知此參數值與寫入參數值一致,說明FPGA的AHB接口和EnDat2.2接口設計達到了通信目的。

圖10 FPGA的ModelSim仿真波形圖 Fig.10 ModelSim simulation waveform of FPGA
本文設計的接口在海德漢公司生產的支持EnDat2.2協議的絕對式光柵尺LC181上進行了應用,LC181是一種測量線性位移的25位編碼器,測量步距從1~0.1 μm,量程為2 040 mm,最大移動速度120 m/min。海德漢公司制作的IK220是一個借助個人計算機進行直線和角度測量用的計數卡。可連接兩個海德漢EnDat2.2接口的編碼器。用它與本論文設計的接口電路同時測量絕對式光柵尺LC181的位置值,當游標拉到不同位置時,觀察兩個測量裝置的測量值,經過隨機測量對比后,除了最末位數字由于擾動等原因發生跳變外,整個測量結果基本一致,說明本文的接口電路達到了準確傳輸數據的目的。
圖11為用示波器捕捉到的波形圖,中間的圖是一幀完整的測量波形圖,左右兩邊是放大后的圖形,左圖為接口發送的模式指令(編碼器發送位置值000111),右圖為編碼器發送的位置值和5位CRC校驗碼。在測量中,波特率最大可以達到2 Mbit/s,1 s中平均可以傳輸40個位置值,足可以滿足一般應用的需求。這個測試證明了此編碼器接口的可行性、可靠性和實時性。

圖11 實際應用中的通信時序圖Fig.11 Communication timing diagram in the practical application
絕對式編碼器和光柵尺作為位移傳感器,在自動化領域中應用越來越廣泛,它們的發展也向著高精度、高速度,高可靠性發展。系統的實時性的提高,對數據采集、傳輸和處理帶來更高的要求。EDA技術和DSP技術的發展足可以滿足這個要求,在本文數據接口設計中,FPGA使電路設計小型化和集成化,大幅減少了電路板的尺寸,降低了成本[6]。在功能上適合于不同位數的編碼器,因此具有通用性,具有CRC校驗功能,提高了系統的可靠性。如今海德漢公司的EnDat2.2接口的時鐘頻率最高可達到16 MHz,帶有電纜長度補償,優化了時間條件,提高了對編碼器的數據傳輸速率,使其能用于高精度、高性能的數控領域中[7]。因此,可以看出EnDa2.2協議在高實時性領域里的應用將更受關注。
[1] 劉琳,陳建平.通過ENDAT接口獲取絕對編碼器位置[J].微電機,2009,42(12):77-79.
Liu L,Chen J P. Access absolute encoder position values via ENDAT interface based on DSP [J].MicromotorsServoTechnique,2009,42(12): 77-79.(in Chinese)
[2] 左洋,龍科慧,喬克,等.航天編碼器調試系統顯示功能設計[J].液晶與顯示,2012,27(6):795-799.
Zuo Y, Long K H, Qiao K,etal.The design of display of debugging system of space encoder [J].ChineseJournalofLiquidCrystalsandDisplays,2012,27(6):795-799. (in Chinese)
[3] 彭雨.基于FPGA的絕對式光電編碼器通信接口研究[D]. 武漢:華中科技大學, 2008.
Peng Y. Research about absolute optical encoder communication interface based on FPGA [D]. Wuhan: Huazhong University of Science and Technology, 2008.(in Chinese)
[4] EnDat2.2-bidirectional interface for position encoders [R].Dr.Johannes Heidenhain GmbH,2008.
[5] EnDat2.2-Softmacro For Master Component [R].MAZeT GmbH,2008.
[6] 熊文彬,蔣泉,曲建軍,等.基于FPGA實現的視頻顯示系統[J].液晶與顯示,2011,26(1):92-95.
Xiong W B, Jiang Q, Qu J J,etal.Realization of the video display system based on FPGA [J].ChineseJournalofLiquidCrystalsandDisplays,2011,26(1):92-95..(in Chinese)
[7] 謝禮忠.EnDat接口編碼器數據采集設計方案[J].金屬加工(冷加工),2009(2):59-60.
Xie L Z. Design of data collection about EnDat interface encoder [J].MachinistMetalCutting,2009(2):59-60.(in Chinese)