孫大海,艾 華
(1. 中國(guó)科學(xué)院 長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,吉林 長(zhǎng)春 130033;2. 中國(guó)科學(xué)院大學(xué),北京 100049)
光電編碼器是一種光、機(jī)、電緊密結(jié)合的精密數(shù)字位移傳感器,已經(jīng)廣泛應(yīng)用于數(shù)控機(jī)床、回轉(zhuǎn)臺(tái)、伺服傳動(dòng)、機(jī)器人、雷達(dá)、軍事目標(biāo)測(cè)定等裝置和設(shè)備中,并在工業(yè)、國(guó)防、航天等部門(mén)起著關(guān)鍵作用[1-2]。光電編碼器主要分為增量式和絕對(duì)式2種。增量式編碼器通過(guò)計(jì)數(shù)設(shè)備確定其位置,而絕對(duì)式編碼器的每個(gè)機(jī)械位置對(duì)應(yīng)于一個(gè)惟一的絕對(duì)編碼,所以它無(wú)需記憶。絕對(duì)式編碼器在抗干擾和可靠性方面大大優(yōu)于增量式編碼器, 所以絕對(duì)式編碼器在測(cè)量系統(tǒng)中的應(yīng)用更廣泛。但是絕對(duì)式編碼器每一次輸出的數(shù)據(jù)量較增量式編碼器多而復(fù)雜,由于精度高、位數(shù)多的特點(diǎn)決定絕對(duì)式編碼器通信方式只能采取串行傳輸方式,而且還要遵循一定的通信協(xié)議。目前世界上幾大主要的編碼器生產(chǎn)廠(chǎng)商都有自己的一套通信協(xié)議,如Heidenhain公司的EnDat協(xié)議,Danaher公司的Biss協(xié)議,SICK|STE- GMANN公司的HIPERACE協(xié)議等等[3]。其中Heid enhain公司推出的EnDat接口因其高可靠性、低成本而得到世界各大數(shù)控廠(chǎng)商的認(rèn)同,現(xiàn)在EnDat2.2接口已經(jīng)發(fā)展成為絕對(duì)式編碼器的標(biāo)準(zhǔn)協(xié)議。
Heidenhain公司為其編碼器配套了相應(yīng)的接收板卡,自動(dòng)完成串行編碼到并行編碼的轉(zhuǎn)換,方便了控制器的讀取操做。但該板卡價(jià)格昂貴,大約占絕對(duì)式編碼器價(jià)格的四分之一。為滿(mǎn)足了對(duì)EnDat2.2接口的需要和代替價(jià)格高昂的專(zhuān)業(yè)接口板卡,本文先是分析了EnDat2.2協(xié)議的傳輸格式,基于FPGA(現(xiàn)場(chǎng)可編程邏輯器件)設(shè)計(jì)了雙通道EnDat2.2接口電路,可以同時(shí)對(duì)兩個(gè)支持EnDat2.2協(xié)議的絕對(duì)式光電編碼器進(jìn)行控制和讀取。
海德漢公司的EnDat數(shù)據(jù)接口是用于編碼器的數(shù)字式、全雙工同步串行接口。電氣連接需要一對(duì)電源線(xiàn),一對(duì)差分的數(shù)據(jù)線(xiàn),一對(duì)差分的時(shí)鐘線(xiàn),數(shù)據(jù)傳輸與FPGA發(fā)出的時(shí)鐘信號(hào)保持同步[4],采用“一問(wèn)一答”的主從通信方式。圖1是Endat2.2的典型時(shí)序圖。
圖1 包括附加信息的位置值數(shù)據(jù)包Fig.1 Packet including position values with additional information
傳輸周期從第一個(gè)時(shí)鐘下降沿處開(kāi)始啟動(dòng),編碼器開(kāi)始計(jì)算位置值并保存測(cè)量值。兩個(gè)時(shí)鐘脈沖(2T) 后,F(xiàn)PGA開(kāi)始發(fā)送模式指令。編碼器的絕對(duì)位置值成功計(jì)算完后,編碼器從起始位開(kāi)始向FPGA傳送數(shù)據(jù)。緊接著的錯(cuò)誤位,“F1”和“F2”是監(jiān)測(cè)信號(hào),用于監(jiān)測(cè)故障。這兩位信號(hào)是相互獨(dú)立產(chǎn)生的,它顯示編碼器是否發(fā)生了可導(dǎo)致不正確位置值的故障。然后絕對(duì)位置值從最低有效位(LSB) 開(kāi)始傳送。它的長(zhǎng)度取決于所用的編碼器。每次傳輸位置值均以CRC 結(jié)束,在附加信息1 和2的數(shù)據(jù)傳輸結(jié)束后也進(jìn)行循環(huán)冗余檢查。存儲(chǔ)區(qū)域碼( MRS碼) 決定了附加信息的內(nèi)容。在數(shù)據(jù)傳輸結(jié)尾處,時(shí)鐘信號(hào)必須置為高電平。10~30 μs后或1.25~3.75 μs后數(shù)據(jù)線(xiàn)返回低電平。當(dāng)檢測(cè)到時(shí)鐘信號(hào)的下降沿時(shí),將啟動(dòng)下一次的數(shù)據(jù)傳輸[4]。
系統(tǒng)電路原理圖如圖2所示,其中使用FPGA開(kāi)發(fā)的雙路獨(dú)立EnDat2.2譯碼模塊,可以連接兩個(gè)編碼器,而且兩個(gè)模塊彼此獨(dú)立,互不占用對(duì)方資源,可以同時(shí)工作,保證了編碼器的通信速度和可靠性。用FPGA實(shí)現(xiàn)接口電路功能,不但可以使控制器只專(zhuān)注于相關(guān)的控制算法運(yùn)算而且接口電路本身也具有很好的獨(dú)立性。
圖2 接口電路原理圖Fig.2 Interface circuit diagram
編碼器與FPGA的收發(fā)電路采用RS485電氣接口標(biāo)準(zhǔn)規(guī)范,RS-485接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,具有抗干擾能力強(qiáng),通信速率快,傳輸距離長(zhǎng)等優(yōu)點(diǎn)。本文使用專(zhuān)門(mén)用于RS485接口的SN75176B芯片,如圖2所示,該芯片是一種半雙工的器件。每一路編碼器使用2個(gè)SN75176B芯片,一個(gè)用于向編碼器傳輸同步的差分時(shí)鐘信號(hào)CLOCK,該SN75176B芯片只工作在發(fā)送模式;另一個(gè)用于編碼器和FPGA之間的數(shù)據(jù)信號(hào)(DATA)傳輸,該SN75176B芯片處在半雙工工作模式。
圖3 接口電路功能框Fig.3 Function block of interface circuit
如圖3所示,為了方便FPGA程序的設(shè)計(jì)和調(diào)試,將整個(gè)接口電路按照功能進(jìn)行模塊化,主要由發(fā)送模塊、接收模塊、時(shí)鐘發(fā)生器、校驗(yàn)?zāi)K、各種功能寄存器及并行接口、順序控制器等功能模塊組成[5]。發(fā)送模塊、接收模塊和時(shí)鐘發(fā)生器主要負(fù)責(zé)與編碼器的通信,框圖的左側(cè)是EnDat接口的4根通信引腳,產(chǎn)生符合Endat2.2協(xié)議的數(shù)據(jù)傳輸時(shí)序和波特率。順序控制器是頂層模塊,用于協(xié)調(diào)各個(gè)模塊的工作流程,使得負(fù)責(zé)不同功能的模塊按照一定順序和條件工作,該模塊既要實(shí)現(xiàn)配置寄存器對(duì)發(fā)送模塊和接收模塊的配置,又要將接收模塊接收的數(shù)據(jù)經(jīng)過(guò)CRC校驗(yàn)后送到相應(yīng)的接收寄存器中。接下來(lái)從3個(gè)方面介紹FPGA的程序設(shè)計(jì)。
在上電或復(fù)位后,時(shí)鐘線(xiàn)TCLK為保持高電平,當(dāng)順序控制器啟動(dòng)數(shù)據(jù)傳輸后,首先使能時(shí)鐘發(fā)生器產(chǎn)生0.5 μs的方波信號(hào)作為通訊的同步時(shí)鐘信號(hào)。對(duì)于每一次數(shù)據(jù)傳輸,在時(shí)鐘的第二個(gè)下降沿激活FPGA內(nèi)發(fā)送模塊,按照時(shí)鐘的下降沿通過(guò)引腳DATA_DV依次發(fā)送6位模式指令,或6位模式指令和24位參數(shù),在緊接著的下一個(gè)時(shí)鐘下降沿發(fā)送模塊被關(guān)閉,接收模塊被激活,開(kāi)始檢測(cè)輸入引腳DATA_RC的上升沿,當(dāng)檢測(cè)到起始位S的上升沿后,開(kāi)始接收2個(gè)“錯(cuò)誤位”F1、F2,25個(gè)位置值和5位CRC校驗(yàn)碼,或接收24位參數(shù)和5位CRC校驗(yàn)碼,并在時(shí)鐘的下降沿保存輸入的數(shù)據(jù)。最后關(guān)閉時(shí)鐘發(fā)生器,但時(shí)鐘線(xiàn)和數(shù)據(jù)線(xiàn)仍要維持高電平,經(jīng)過(guò)恢復(fù)時(shí)間3 μs后數(shù)據(jù)線(xiàn)返回低電平,時(shí)鐘線(xiàn)的高電平一直持續(xù)到下一次數(shù)據(jù)傳輸。接收到的位置值經(jīng)過(guò)校驗(yàn)?zāi)K檢測(cè)后,從A端口寫(xiě)入雙口RAM中,從而FPGA與編碼器的一次通訊過(guò)程就結(jié)束了。
圖4 AHB總線(xiàn)讀寫(xiě)操作時(shí)序圖Fig.4 AHB bus timing diagram for read and write operations
圖4為并行總線(xiàn)的讀、寫(xiě)操作時(shí)序圖。并行總線(xiàn)時(shí)序的設(shè)計(jì)就是并行接口的設(shè)計(jì),使FPGA內(nèi)部寄存器能被控制器訪(fǎng)問(wèn)到。在FPGA內(nèi)部實(shí)現(xiàn)了64個(gè)字節(jié)的雙口RAM空間,本文采用了對(duì)雙口RAM的A端口進(jìn)行封裝實(shí)現(xiàn)并行總線(xiàn)接口的設(shè)計(jì),設(shè)計(jì)方法如圖5所示,在圖5的左側(cè)是并行接口的通信控制信號(hào),它提供5位地址信號(hào)和16位數(shù)據(jù)信號(hào)與控制器進(jìn)行16位的數(shù)據(jù)傳輸。圖6為該端口的ModelSim讀和寫(xiě)時(shí)序仿真圖,由圖可知該端口的讀寫(xiě)符合并行總線(xiàn)的時(shí)序。
圖5 AHB接口設(shè)計(jì)圖Fig.5 AHB interface design schematics
圖6 AHB接口的ModelSim仿真波形圖Fig.6 AHB interface’s ModelSim simulation waveform
為了提高數(shù)據(jù)傳輸?shù)目煽啃?,EnDat2.2在傳輸數(shù)據(jù)時(shí),其后面還跟隨著5位CRC校驗(yàn)碼,接收端通過(guò)校驗(yàn)碼,判斷數(shù)據(jù)在傳輸過(guò)程中是否由于干擾等原因而出現(xiàn)誤碼。
圖7 循環(huán)冗余碼編碼原理Fig.7 Coding theory of cyclic redundancy code
循環(huán)冗余碼原理:
編碼器輸出的循環(huán)冗余碼分為信息碼和校驗(yàn)碼兩個(gè)部分,如圖7所示。設(shè)K(X)為信息碼多項(xiàng)式,R(X)為校驗(yàn)碼多項(xiàng)式,G(X)為預(yù)先約定的生成多項(xiàng)式。信息碼長(zhǎng)為k位,校驗(yàn)碼長(zhǎng)為r位,則循環(huán)冗余碼長(zhǎng)為n=k+r位。
(1)發(fā)送端的編碼過(guò)程:
通過(guò)xr-1K(X)/G(X)=Q(X)+R(X)/G(X),求得R(X)的值,令T(X)=xr-1K(X)+R(X)作為循環(huán)冗余碼發(fā)送出去。
(2)接收端的校驗(yàn)過(guò)程:
接收方收到循環(huán)冗余碼后,做如下處理:
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)
此時(shí)T(X)/G(X)余數(shù)為0。所以判斷數(shù)據(jù)在傳輸過(guò)程是否出錯(cuò)依據(jù)就是判斷T(X)/G(X)的余數(shù)是否為0。如果T(X)/G(X)的余數(shù)為0,則T(X)傳輸正確,若不為0,T(X)傳輸時(shí)出錯(cuò)了。
下面是用 Verilog HDL代碼實(shí)現(xiàn)接收端循環(huán)冗余校驗(yàn)的主要源程序,生成多項(xiàng)式為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仿真工具對(duì)程序進(jìn)行了仿真, 如圖8所示,輸入26位信息碼0x363c9a9和5位校驗(yàn)碼00101,通過(guò)error=0顯示該信息碼是準(zhǔn)確的,這與理論計(jì)算的結(jié)果一致,當(dāng)校驗(yàn)碼為01101時(shí),error=1提示信息碼是錯(cuò)誤的。
圖8 CRC校驗(yàn)程序的仿真圖Fig.8 Simulation diagram for procedure of CRC checksum
一次完整的接口電路工作流程如圖9所示,首先控制器對(duì)配置寄存器進(jìn)行配置,設(shè)置串口傳輸速率和編碼器的位數(shù);向發(fā)送寄存器寫(xiě)入模式指令及參數(shù),然后通過(guò)軟件觸發(fā)方式(向觸發(fā)寄存
圖9 EnDat接口工作流程圖Fig.9 Flow chart of EnDat interface
器寫(xiě)入任意數(shù)),F(xiàn)PGA開(kāi)始向編碼器發(fā)送指令及參數(shù),接下來(lái)等待接收編碼器反饋回來(lái)的位置值或參數(shù)值,該值經(jīng)過(guò)CRC校驗(yàn)后存入接收寄存器中,并更新?tīng)顟B(tài)寄存器,使相應(yīng)的狀態(tài)位置位,控制器通過(guò)查詢(xún)狀態(tài)寄存器查看是否接收到編碼器的位置值或參數(shù),接收到后控制器從接收寄存器中讀取并顯示,最后復(fù)位狀態(tài)寄存器準(zhǔn)備下一次的數(shù)據(jù)傳輸。
本文從軟件仿真、準(zhǔn)確性對(duì)比、傳輸速度3個(gè)方面對(duì)該接口進(jìn)行了測(cè)試。由于兩路接口功能一樣,所以只列出FPGA接口中的一路接口的Modelsim軟件仿真圖,圖10為FPGA的工作時(shí)序波形圖。由圖可知,首先是通過(guò)AHB總線(xiàn)向發(fā)送寄存器發(fā)送模式指令(編碼器接收參數(shù)011100)及參數(shù)(0x345678),然后向觸發(fā)寄存器寫(xiě)入任意數(shù)來(lái)啟動(dòng)FPGA,使之按照EnDat2.2的時(shí)序傳輸指令及參數(shù),最后從接收寄存器中讀出編碼器反饋回來(lái)參數(shù)值。如圖可知此參數(shù)值與寫(xiě)入?yún)?shù)值一致,說(shuō)明FPGA的AHB接口和EnDat2.2接口設(shè)計(jì)達(dá)到了通信目的。
圖10 FPGA的ModelSim仿真波形圖 Fig.10 ModelSim simulation waveform of FPGA
本文設(shè)計(jì)的接口在海德漢公司生產(chǎn)的支持EnDat2.2協(xié)議的絕對(duì)式光柵尺LC181上進(jìn)行了應(yīng)用,LC181是一種測(cè)量線(xiàn)性位移的25位編碼器,測(cè)量步距從1~0.1 μm,量程為2 040 mm,最大移動(dòng)速度120 m/min。海德漢公司制作的IK220是一個(gè)借助個(gè)人計(jì)算機(jī)進(jìn)行直線(xiàn)和角度測(cè)量用的計(jì)數(shù)卡??蛇B接兩個(gè)海德漢EnDat2.2接口的編碼器。用它與本論文設(shè)計(jì)的接口電路同時(shí)測(cè)量絕對(duì)式光柵尺LC181的位置值,當(dāng)游標(biāo)拉到不同位置時(shí),觀(guān)察兩個(gè)測(cè)量裝置的測(cè)量值,經(jīng)過(guò)隨機(jī)測(cè)量對(duì)比后,除了最末位數(shù)字由于擾動(dòng)等原因發(fā)生跳變外,整個(gè)測(cè)量結(jié)果基本一致,說(shuō)明本文的接口電路達(dá)到了準(zhǔn)確傳輸數(shù)據(jù)的目的。
圖11為用示波器捕捉到的波形圖,中間的圖是一幀完整的測(cè)量波形圖,左右兩邊是放大后的圖形,左圖為接口發(fā)送的模式指令(編碼器發(fā)送位置值000111),右圖為編碼器發(fā)送的位置值和5位CRC校驗(yàn)碼。在測(cè)量中,波特率最大可以達(dá)到2 Mbit/s,1 s中平均可以傳輸40個(gè)位置值,足可以滿(mǎn)足一般應(yīng)用的需求。這個(gè)測(cè)試證明了此編碼器接口的可行性、可靠性和實(shí)時(shí)性。
圖11 實(shí)際應(yīng)用中的通信時(shí)序圖Fig.11 Communication timing diagram in the practical application
絕對(duì)式編碼器和光柵尺作為位移傳感器,在自動(dòng)化領(lǐng)域中應(yīng)用越來(lái)越廣泛,它們的發(fā)展也向著高精度、高速度,高可靠性發(fā)展。系統(tǒng)的實(shí)時(shí)性的提高,對(duì)數(shù)據(jù)采集、傳輸和處理帶來(lái)更高的要求。EDA技術(shù)和DSP技術(shù)的發(fā)展足可以滿(mǎn)足這個(gè)要求,在本文數(shù)據(jù)接口設(shè)計(jì)中,F(xiàn)PGA使電路設(shè)計(jì)小型化和集成化,大幅減少了電路板的尺寸,降低了成本[6]。在功能上適合于不同位數(shù)的編碼器,因此具有通用性,具有CRC校驗(yàn)功能,提高了系統(tǒng)的可靠性。如今海德漢公司的EnDat2.2接口的時(shí)鐘頻率最高可達(dá)到16 MHz,帶有電纜長(zhǎng)度補(bǔ)償,優(yōu)化了時(shí)間條件,提高了對(duì)編碼器的數(shù)據(jù)傳輸速率,使其能用于高精度、高性能的數(shù)控領(lǐng)域中[7]。因此,可以看出EnDa2.2協(xié)議在高實(shí)時(shí)性領(lǐng)域里的應(yīng)用將更受關(guān)注。
[1] 劉琳,陳建平.通過(guò)ENDAT接口獲取絕對(duì)編碼器位置[J].微電機(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] 左洋,龍科慧,喬克,等.航天編碼器調(diào)試系統(tǒng)顯示功能設(shè)計(jì)[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的絕對(duì)式光電編碼器通信接口研究[D]. 武漢:華中科技大學(xué), 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實(shí)現(xiàn)的視頻顯示系統(tǒng)[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接口編碼器數(shù)據(jù)采集設(shè)計(jì)方案[J].金屬加工(冷加工),2009(2):59-60.
Xie L Z. Design of data collection about EnDat interface encoder [J].MachinistMetalCutting,2009(2):59-60.(in Chinese)