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