柯幫維,楊志軍,彭 皓,陽志林,白有盾
(1.廣東工業(yè)大學(xué),精密電子制造技術(shù)與裝備國家重點(diǎn)實(shí)驗(yàn)室,廣東廣州 510006;2.佛山市華道超精科技有限公司,廣東佛山 528225)
隨著科學(xué)技術(shù)的進(jìn)步,高端機(jī)器人、數(shù)控機(jī)床、雷達(dá)等行業(yè)對伺服控制系統(tǒng)要求越來越高[1-2]。位置編碼器反饋精度直接影響伺服控制系統(tǒng)的定位精度,因此在高精密運(yùn)動領(lǐng)域?qū)ξ恢镁幋a器要求越來越高。常用的位置編碼器有增量式、絕對式和混合式編碼器[3-5]。增量式編碼器價(jià)格相對便宜,然而每次掉電后都要重新找零點(diǎn),并且有誤差累積現(xiàn)象。另外,受到采集卡截止頻率限制,增量式編碼器存在速度與精度的矛盾,無法應(yīng)用在高速度高精度運(yùn)動控制場合。相比較而言,絕對式編碼器每一個(gè)位置都有固定的編碼值,零點(diǎn)固定、無累積誤差、數(shù)據(jù)可靠性高。
絕對式位置編碼器主要有SSI、Biss-C、EnDat等傳輸協(xié)議[5-8]。其中EnDat協(xié)議可靠性高、傳輸速度快、抗干擾性強(qiáng)。
通常,單片機(jī)、FPGA或者ASIC都可以與EnDat編碼器通訊。然而,單片機(jī)一般適用于EnDat時(shí)鐘頻率較低的場合。ASIC對于確定功能和大規(guī)模批量生產(chǎn)的產(chǎn)品有優(yōu)勢,但是編程靈活性較低。FPGA具有并行特性、靈活性高和快速處理數(shù)據(jù)的能力。綜合考慮,本文采用FPGA來實(shí)現(xiàn)EnDat協(xié)議通訊。
本文分別從EnDat協(xié)議的時(shí)序分析、硬件電路設(shè)計(jì)和軟件各模塊設(shè)計(jì)進(jìn)行介紹,并把位置信息和部分參數(shù)通過串口發(fā)送到上位機(jī)顯示。實(shí)驗(yàn)測試結(jié)果表明FPGA與EnDat協(xié)議的光柵尺正常通信。
EnDat接口是面向編碼器應(yīng)用的雙向數(shù)字接口,帶有錯誤檢測位和CRC校驗(yàn)功能,并且EnDat 2.2協(xié)議可以發(fā)送附加數(shù)據(jù)的位置值,以便系統(tǒng)實(shí)時(shí)監(jiān)控編碼器反饋狀態(tài),使得編碼器的數(shù)據(jù)傳輸可靠性高[9]。
EnDat 2.2協(xié)議有14種指令,如表1所示,F(xiàn)PGA可以通過這些模式指令讀取編碼器的位置、存儲器信息、OEM等參數(shù)[10-11]。EnDat 2.2協(xié)議在EnDat 2.1協(xié)議上擴(kuò)展了7個(gè)指令,使得附加信息可以和位置信息一起傳輸。
表1 EnDat指令表
如表1所示,本文把EnDat 2.2協(xié)議的模式指令劃分為第一類、第二類和第三類。其中主機(jī)發(fā)送第一類模式指令后只接收位置或測試值;而通過第二類和第三類模式指令可以讀取或者修改編碼器的參數(shù)。本文以第一類為例介紹,時(shí)序如圖1所示。傳輸過程為主機(jī)發(fā)送模式指令給光柵尺后,光柵尺返回“Start”位和“Error 1”位,緊接著是nbit的位置值或40 bit的測試值,最后是5 bit的CRC碼。
圖1 第一類時(shí)序圖
具體通信請求如下:
(1)空閑時(shí),主機(jī)保持時(shí)鐘線為高電平,當(dāng)光柵尺保持低電平時(shí)表示光柵尺已經(jīng)準(zhǔn)備就緒。
(2)位置請求信號到來時(shí),主機(jī)拉低時(shí)鐘信號并保持tst時(shí)間的低電平后,連續(xù)輸出固定頻率的時(shí)鐘信號。同時(shí)主機(jī)在第2個(gè)時(shí)鐘信號的下降沿開始發(fā)送模式指令。
(3)等待光柵尺準(zhǔn)備數(shù)據(jù),直到光柵尺返回1個(gè)“Start”位后,主機(jī)在時(shí)鐘的下降沿讀取光柵尺返回的數(shù)據(jù)。
(4)光柵尺發(fā)送完數(shù)據(jù)后,主機(jī)拉高時(shí)鐘信號,并一直保持高電平。
(5)當(dāng)光柵尺返回?cái)?shù)據(jù)信號為低電平時(shí),則主機(jī)可以進(jìn)行下一次讀取請求。
硬件系統(tǒng)由FPGA(Cyclone IV系列芯片EP4CE10F17C8)和絕對式光柵尺構(gòu)成,該絕對式光柵尺的時(shí)鐘信號和數(shù)據(jù)信號都是RS485差分驅(qū)動信號,因此需要電平轉(zhuǎn)換電路。
硬件電路如圖2所示,采用電平轉(zhuǎn)換芯片MAX485對時(shí)鐘和數(shù)據(jù)信號進(jìn)行處理,使得TTL電平與差分信號RS485電平得以相互轉(zhuǎn)化。光柵尺的時(shí)鐘線和數(shù)據(jù)線經(jīng)過電平轉(zhuǎn)換芯片后再與FPGA控制板連接,F(xiàn)PGA端生成的CLOCK、DATA信號經(jīng)過MAX485芯片把TTL電平轉(zhuǎn)為差分信號輸出給光柵尺。另一方面,光柵尺返回的DATA信號經(jīng)過MAX485芯片把差分信號轉(zhuǎn)為TTL電平發(fā)給FPGA。FPGA通過串口與上位機(jī)進(jìn)行通訊,上位機(jī)可以發(fā)送命令給FPGA,F(xiàn)PGA接收命令后把采集到的位置和參數(shù)依次發(fā)送給上位機(jī),上位機(jī)把接收到的位置進(jìn)行描點(diǎn)畫圖。
圖2 差分信號轉(zhuǎn)換電路
本文設(shè)計(jì)的數(shù)據(jù)采集系統(tǒng)控制流程如圖3所示。系統(tǒng)主要由時(shí)鐘控制器、數(shù)據(jù)控制器、CRC校驗(yàn)?zāi)K、上傳控制模塊和串口控制器構(gòu)成。時(shí)鐘控制器作用是產(chǎn)生光柵尺需要的不同頻率的時(shí)鐘信號。數(shù)據(jù)控制器根據(jù)時(shí)鐘信號同步發(fā)送模式指令、MRS碼、存儲器地址、參數(shù)給光柵尺,以及接收光柵尺返回來的位置、參數(shù)、附加數(shù)據(jù)。時(shí)鐘控制器與數(shù)據(jù)控制器都是在狀態(tài)機(jī)預(yù)設(shè)的狀態(tài)下產(chǎn)生時(shí)鐘和收發(fā)數(shù)據(jù)。FPGA把從光柵尺采集到的數(shù)據(jù)經(jīng)過CRC校驗(yàn)后,再通過串口控制器發(fā)送到上位機(jī)顯示。上傳控制模塊作用是控制數(shù)據(jù)上傳到上位機(jī)的頻率,使其滿足串口的通訊速率要求。
圖3 采集系統(tǒng)框圖
根據(jù)EnDat 2.2協(xié)議的時(shí)序特點(diǎn),本設(shè)計(jì)用狀態(tài)機(jī)實(shí)現(xiàn)光柵尺數(shù)據(jù)采集過程,總共分為8個(gè)狀態(tài),狀態(tài)機(jī)的工作方式如圖4所示。系統(tǒng)在默認(rèn)情況下處于空閑狀態(tài),輸出高電平的時(shí)鐘信號。當(dāng)接收到請求信號en_flag時(shí),狀態(tài)跳轉(zhuǎn)到同步狀態(tài),同時(shí)拉低CLOCK信號。同步狀態(tài)下CLOCK一直保持低電平,直到計(jì)數(shù)到給定的tst后跳轉(zhuǎn)到模式指令發(fā)送狀態(tài)。在模式指令發(fā)送狀態(tài)下,F(xiàn)PGA在第2個(gè)時(shí)鐘的下降沿開始發(fā)送模式指令或地址、參數(shù)。
圖4 系統(tǒng)采集狀態(tài)機(jī)
FPGA發(fā)送完模式指令后,狀態(tài)跳轉(zhuǎn)到等待狀態(tài)。當(dāng)光柵尺返回來一個(gè)“Start”位,狀態(tài)跳轉(zhuǎn)到數(shù)據(jù)接收狀態(tài)。由于光柵尺在CLOCK的上升沿開始返回?cái)?shù)據(jù),因此FPGA應(yīng)當(dāng)在CLOCK的下降沿讀取數(shù)據(jù),防止在電平轉(zhuǎn)換期間讀出錯誤的數(shù)據(jù)。第1、第2類EnDat 2.2模式指令在接收完數(shù)據(jù)后拉高CLOCK信號,直接進(jìn)入恢復(fù)狀態(tài)。當(dāng)光柵尺DATA信號從高電平轉(zhuǎn)換為低電平,表明光柵尺可以進(jìn)行下一次位置請求。此時(shí)狀態(tài)機(jī)跳轉(zhuǎn)到默認(rèn)狀態(tài),等待下一次請求信號。第3類模式指令(除了111000)在接收完位置和附加數(shù)據(jù)后進(jìn)入地址發(fā)送狀態(tài),F(xiàn)PGA在CLOCK的下降沿發(fā)送地址、MRS碼、參數(shù)值,發(fā)送完成后進(jìn)入恢復(fù)狀態(tài)。在恢復(fù)狀態(tài)下,如果檢測到錯誤位Error 1置1,或者Error 2置0,說明有錯誤出現(xiàn),狀態(tài)跳轉(zhuǎn)到復(fù)位狀態(tài),復(fù)位完成后進(jìn)入默認(rèn)狀態(tài)。
FPGA接收完數(shù)據(jù)后會產(chǎn)生一個(gè)done信號,并把接收到的位置、CRC碼傳輸?shù)较乱粚覥RC校驗(yàn)?zāi)K。CRC校驗(yàn)?zāi)K在接收到done信號后開始對位置值進(jìn)行CRC校驗(yàn)運(yùn)算。光柵尺的CRC多項(xiàng)式為6’b101011。為了提高數(shù)據(jù)處理的效率,充分利用FPGA并行處理的特性,CRC校驗(yàn)?zāi)K采用并行CRC校驗(yàn)算法,只需1個(gè)系統(tǒng)周期就完成CRC碼的校驗(yàn)[12-13],主要代碼如下:
crc_out[0]= d[32]^ d[30]^ d[27]^ d[26]^ d[24]^ d[23]^ d[22]^ d[17]^ d[15]^ d[12]^ d[11]^ d[9]^d[8]^ d[7]^ d[2]^ d[0]^ c[2]^ c[4];
crc_out[1]=d[32]^d[31]^d[30]^d[29]^d[27]^d[25]^d[24]^d[21]^d[17]^d[16]^d[15]^d[14]^d[12]^d[10]^d[9]^d[6]^d[2]^d[1]^ d[0]^ c[2]^ c[3]^ c[4];
crc_out[2]= d[31]^ d[30]^ d[29]^ d[28]^ d[26]^ d[24]^ d[23]^ d[20]^ d[16]^ d[15]^ d[14]^ d[13]^ d[11]^ d[9]^ d[8]^ d[5]^ d[1]^ d[0]^ c[3]^ c[4];
crc_out[3]= d[32]^ d[29]^ d[28]^ d[26]^ d[25]^ d[24]^ d[19]^ d[17]^ d[14]^ d[13]^ d[11]^ d[10]^ d[9]^ d[4]^ d[2]^ c[0]^ c[2];
crc_out[4]= d[31]^ d[28]^ d[27]^ d[25]^ d[24]^d[23]^d[18]^d[16]^d[13]^d[12]^ d[10]^ d[9]^ d[8]^ d[3]^ d[1]^ c[1]^ c[3];
其中d[32∶0]是接收的數(shù)據(jù)從高位到低位是32 bit position+Error 1。c[4:0]初始值為5’b11111;crc_out[4∶0]是用CRC校驗(yàn)?zāi)K對數(shù)據(jù)d[32∶0]進(jìn)行計(jì)算得到的校驗(yàn)碼。把接收到的crc_code與取反的crc_out比較,如果兩者一致,則輸出一個(gè)高電平脈沖的crc_done信號,同時(shí)把接收正確的數(shù)據(jù)輸出給下一模塊。否則丟棄該數(shù)據(jù),等待下一次校驗(yàn)。
MATLAB-GUI圖形化界面設(shè)計(jì)工具提供各種基本控件和各種函數(shù)庫接口、支持RS232/RS485串口通信,可以直接利用按鈕、可編輯文本、坐標(biāo)區(qū)等控件直接組成上位機(jī)的圖形界面,并利用回調(diào)函數(shù)實(shí)現(xiàn)上位機(jī)的功能[14-16]。因此本文利用MATLAB-GUI設(shè)計(jì)上位機(jī)實(shí)現(xiàn)串口通信、圖形顯示、發(fā)送命令等功能,并提供良好的人機(jī)交互界面。
由于光柵尺的位置有32位,而串口通信一次只能發(fā)送8位數(shù)據(jù),因此在FPGA端把位置值拆分為4組8位的數(shù)據(jù),分4次依次通過串口發(fā)送給上位機(jī),上位機(jī)再把接收到的數(shù)據(jù)進(jìn)行拼接。最后把拼接完的數(shù)據(jù)在坐標(biāo)區(qū)繪制圖形。
為了驗(yàn)證FPGA程序的正確性,編寫測試文件模擬光柵尺,通過Modelsim仿真工具驗(yàn)證各模塊是否正常工作。本文以模式指令為000111為例,在測試文件中模擬光柵尺準(zhǔn)備了2組數(shù)據(jù),如表2所示。分別為2組32位的位置值+1位的Error 1+5位的CRC,其中第1組的CRC校驗(yàn)碼的最低位與第2組是相反的,并且第2組CRC碼是正確的。因此可以根據(jù)接收的位置和CRC碼測試數(shù)據(jù)控制器以及CRC校驗(yàn)?zāi)K是否正常工作。
表2 Modelsim仿真數(shù)據(jù)表
仿真結(jié)果如圖5所示,當(dāng)en_flag信號使能時(shí),時(shí)鐘控制器輸出5 MHz的clk信號給光柵尺。數(shù)據(jù)控制器在時(shí)鐘的下降沿通過data_out發(fā)送模式指令,測試文件接收到指令后,在時(shí)鐘的上升沿通過data_in返回?cái)?shù)據(jù)。當(dāng)數(shù)據(jù)控制器接收完數(shù)據(jù)后會產(chǎn)生一個(gè)done信號,并進(jìn)入CRC校驗(yàn)?zāi)K。
圖5 模式指令為000111的Modelsim仿真圖
圖5的check_data為接收到的數(shù)據(jù),check_data由32位的位置值+1 bit 的Error 1組成,高位在前、低位在后。從圖中可得,數(shù)據(jù)控制器正確接收位置狀態(tài)信息和CRC碼,由于第1組接收到的CRC碼和實(shí)際的CRC碼不一樣,所以第1組數(shù)據(jù)沒有產(chǎn)生crc_done信號。而第2組數(shù)據(jù)產(chǎn)生crc_done脈沖。綜上分析,CRC校驗(yàn)?zāi)K、時(shí)鐘、數(shù)據(jù)控制器各模塊正常工作。因此設(shè)計(jì)的EnDat協(xié)議程序通過仿真驗(yàn)證。
把仿真測試成功后的程序下載到FPGA板卡上,并把光柵尺連接到FPGA上。本次實(shí)驗(yàn)通過發(fā)送模式指令000111,讀取光柵尺的位置值,驗(yàn)證程序。本實(shí)驗(yàn)通過Quartus Prime的Signal Tap Logical Analyzer抓取FPGA內(nèi)部信號,如圖6所示。圖6的data_in和data_out分別代表光柵尺發(fā)送給FPGA的數(shù)據(jù)信號、FPGA發(fā)送數(shù)據(jù)給光柵尺的串行數(shù)據(jù)信號。
圖6 Signal Tap Logical Analyzer捕獲圖(模式指令為000111)
從圖6可知,當(dāng)FPGA接收到請求信號en_flag時(shí),clk信號立刻拉低并正常工作;當(dāng)接收到完成信號done后,clk停止工作并一直保持高電平。數(shù)據(jù)控制器控制data_out和data_in正常工作,并把接收到的位置信息輸入到CRC校驗(yàn)?zāi)K,CRC校驗(yàn)?zāi)K產(chǎn)生crc_done信號,說明接收到正確的位置并且整個(gè)采樣周期在40 μs之內(nèi)。經(jīng)過以上分析,圖6的波形圖符合EnDat協(xié)議的時(shí)序,校驗(yàn)?zāi)K也能正常工作,程序驗(yàn)證成功。
為了更直觀觀察采樣的位置信息,通過串口控制器把校驗(yàn)正確的位置發(fā)送到上位機(jī)顯示。如圖7所示,上位機(jī)能夠正確接收數(shù)據(jù)并描點(diǎn)繪圖。
圖7 上位機(jī)采集數(shù)據(jù)圖
本文根據(jù)光柵尺的EnDat協(xié)議時(shí)序設(shè)計(jì)了硬件電路和FPGA控制程序,并開發(fā)了上位機(jī)實(shí)現(xiàn)位置數(shù)據(jù)采集和繪圖功能。FPGA控制程序適用于EnDat 2.1、EnDat 2.2的模式指令,具有并行CRC校驗(yàn)功能,這樣不僅提高了程序的通用性還縮短了工作周期。由于FPGA具有并行的特性和強(qiáng)大的數(shù)據(jù)處理能力,還可以在該程序的基礎(chǔ)上擴(kuò)展采集多路光柵尺數(shù)據(jù)。實(shí)驗(yàn)結(jié)果表明,設(shè)計(jì)的FPGA程序可以與EnDat協(xié)議的光柵尺進(jìn)行通訊,并且能夠把采集到的位置值通過串口發(fā)送到上位機(jī)進(jìn)行顯示。