向云峰 ,王秀蓮
(沈陽理工大學自動化與電氣工程學院,遼寧 沈陽 110159)
步進電機是一種用電脈沖信號控制,并將其轉換成角位移的執行機構[1]。由于其具有低成本、易控制、無累計誤差等優點,其一直以來被廣泛應用于各個領域,如工業、農業、航空航天等。隨著控制系統的復雜化以及動態性能要求的提高,常用的開環控制在定位系統中存在振蕩、跟蹤精度低的問題,對系統突加負載可能導致出現失步、堵轉的現象。
為解決上述問題,近年來對步進電機的閉環控制的研究愈加火熱。在實際設計步進電機驅動控制中,大多數采用單片機進行驅動。呂穎利等[2]、余智勇等[3]采用單片機研究步進電機控制系統,實現簡單且易于控制。但眾多應用實踐顯示,單片機在一些復雜的實時性高的控制系統中,其電機的控制性能有所下降。FPGA 具有計算速度快、可靠性高以及邏輯資源豐富等特點[4],本文基于FPGA 進行了步進電機驅動控制系統的研究與設計。
步進電機驅動系統的整體結構主要由電源、主控制器、驅動芯片、編碼器等組成。根據本系統的設計以及實現功能,系統硬件設計可以劃分為以下幾個部分。
在主控芯片電路設計方面,以A3PE600 為核心的電路主要包括兩個方面:一個是控制器本身工作所需的最小系統電路,另一個是指向機構驅動系統正常運行時所需器件的電路。其中,最小系統設計主要包括電源電路(3.3 V,1.5 V)、復位電路、時鐘電路以及仿真接口部分,而外圍電路則根據系統要求設計。
本研究選擇TMC5130 驅動芯片驅動步進電機,此芯片具有高精度無傳感器負載檢測、靜音平穩運動、失速檢測等功能,更加符合電機運動時的要求,它也可以設置成位置模式、速度模式和上電保持模式[5-6]。SPI 通信接口串聯33 Ω 電阻為了阻抗匹配,由于信號源的阻抗低,與信號線阻抗不匹配,串聯一個小電阻后,可以改善匹配狀況,減少反射和振蕩的干擾,同時可以保證信號的完整性,特別是讀寫信號線。
采用DS-25 系列編碼器,其數據輸出與時鐘傳輸采用差分RS422 的接線標準,串口通信也采用此類傳輸方式。RS422 差分傳輸的特點很明確,它是四線類型的接口,全雙工、差分傳輸[7]。本研究利用DS26LV32 高速四路差動線路接收器和DS26LV31 高速四路差動線路驅動器,它們功耗低,且工作電壓滿足3.3 V。在編碼器以及串口接口電路中,考慮到差分傳輸,因此信號的穩定性、抗共模干擾能力等性能必不可少。當阻抗不匹配時,可以考慮使用串聯/并聯電阻的辦法。一般來說,一些驅動器的阻抗比較低,可以串聯一個合適的電阻來跟傳輸線匹配,而一些接收器的輸入阻抗則比較高,可以使用并聯電阻的方法來跟傳輸線匹配。例如,RS422 總線接收器,常在數據線終端并聯1 000 Ω 的匹配電阻。
采用Verilog語言結合自頂向下的設計思路,實現驅動控制系統的軟件部分設計。自頂向下指的是先從系統的整體功能要求開始,規劃系統整體結構并分別劃分為各個小規模、功能簡單的子模塊,然后確立各個子功能模塊之間的相互關系和模塊接口,進而繼續這種形式劃分,最終整個系統被細分為多個最小單元。
2.1.1 串口通信設計
本研究采用RS422 串口通信實現與上位機通信,完成數據信息的傳輸,同時串口通信相對而言具有較好的穩定性和抗干擾能力[8]。其子功能模塊結構圖如圖1 所示。在設計時考慮到數據傳輸的準確性,本次設計通過“幀頭+數據+幀尾”的方式實現一段數據的傳輸,同時增加奇偶校驗位以加強對數據傳輸準確性的判斷。

圖1 串口通信模塊結構圖
串口接收控制模塊主要功能是將串口接收模塊收到的數據組成完整的數據包,并進行幀頭與幀尾的校驗,將校驗正確的數據輸出給控制寄存器模塊(圖1 中Recv_Data 模塊)。串口發送控制模塊的功能是將下位機向上位機發送的數據經過解碼成8bit 的數據依次傳送給RS422_TX 模塊。串口發送模塊的功能是將串口發送控制模塊輸出的數據,通過UART_TX 信號傳輸給上位機,其數據傳輸形式與串口接收模塊類似。
2.1.2 Netzer編碼器數據采集設計
角度反饋量由絕對式電編碼器得到,其接口電路已在1.3 小節詳細介紹,根據DS-25 系列的數據手冊得知:采集到的角度值可以通過SSI 和BISS 兩種傳輸協議將當前角度傳輸到寄存器里[9-10]。在本研究中,采用SSI 傳輸協議完成角度值的采集,若要將角度值返回到上位機,則可以通過RS422_RX 發送一個指令使能編碼器數據采集傳輸功能,然后將編碼器接口接收到的數據轉存到寄存器里,再通過發送控制模塊對數據進行解碼,解碼為8bit 的數據,最后通過RS422_TX模塊將數據發送到上位機。
基于SSI 傳輸協議的角度值采集功能模塊如圖2所示,這里主要對SSI_INTERFACE 模塊進行研究。首先,系統時鐘頻率為32 MHz,程序中設計SSI傳輸時鐘頻率為4 MHz。因此,可以對系統時鐘進行8 分頻,本研究主要利用某個定義的寄存器的3bit(如sd_cnt[2]),當sd_cnt[2]為1 時,SSI_SCK(SSI_SCK 初始狀態為1)相對于原狀態取反,從而實現4 MHz 的時鐘頻率。其次,數據采集精度定義為17 位,因此整個數據幀結構為“17bit 數據+1bit 停止位”,并且在SSI_SCK 時鐘上升沿時傳輸數據,下降沿時采集數據,依次完成數據的傳輸。最后,將傳輸的最后一位通過右移位計算移除停止位,剩下17 位為當前角度值,再通過串口通信模塊將其傳輸到上位機或者傳輸到步進電機驅動控制模塊。本模塊的設計用到三段式狀態機,以便于后期的查閱與復用。

圖2 基于SSI傳輸協議的角度值采集功能模塊圖
2.1.3 TMC5130驅動設計
此模塊編寫程序時可以分為兩個功能模塊,其一是數據傳輸模塊,其二是數據控制模塊。
1)數據傳輸模塊主要功能是SPI 通信協議的編寫,使用三段式狀態機編寫,設置五個狀態,分別為IDLE、WAIT0、SPI_W_R、WAIT1、STOP。IDLE狀態到WAIT0 狀態依據數據控制模塊的SPI_EN 使能信號;WAIT0 轉換到SPI_W_R 狀態,等待計時器到達即可。SPI_W_R 狀態實現數據的傳輸,傳輸完成標志信號產生時,進入下一個狀態。數據之間來回傳輸只需多次使能SPI_EN 信號即可。依據數據手冊,主機向從機發送數據的格式為:“8bit 地址值+8’h80+32bit 的數據”;在從機向主機發送數據時,主機需要先向從機發送讀取數據寄存器的地址一次,此時主機接收的數據為無效數據,第二次發送該寄存器地址后,才能讀取到有效數據,且讀取有效數據的高8位為SPI狀態寄存器的數據。
2)數據控制模塊主要功能是TMC5130 芯片的寄存器賦值以及實現主機與從機之間多數據的傳輸;上位機向下位機發送一段指令,使能SPI_EN,同時將數據存入輸出寄存器中。
2.2.1 開環驅動模式
將上述2.1 節中各個模塊的設計在頂層中例化,在頂層實現接口連接,然后利用美高森美的開發軟件Libero SoC 對程序進行綜合、管腳分配,并將程序下載到FPGA 里實現電機的開環驅動控制。基于TMC5130的驅動模塊結構圖如圖3所示。

圖3 基于TMC5130的驅動模塊結構圖
2.2.2 定位控制模式
根據上述研究內容,將串口通信模塊、角度值采集模塊、電機驅動模塊等子功能模塊分別例化到頂層模塊中,然后進行綜合、管腳分配以及程序下載,通過發送指令使指向機構可以執行開環驅動的工作模式。在開環驅動模式的基礎上進一步對驅動芯片進行開發與研究,可實現閉環控制的定位模式。具體設計思路為:首先,通過Netzer 讀取上電鎖定狀態時電機的位置,注意此時編碼器讀取的值不是對應的角度,需要經過以下關系轉換:
式中,current_deg 表示當前電機角度;cur_ssi_recvdata表示當前Netzer 讀取的角度值由16 進制轉換為10進制的數值。
根據以上公式,規定此時的值為初始位置。定義電機需旋轉的角度,然后通過對上式的變形可得到電機到達目標位置后的值與到達目標位置所對應Netzer 的值相同(理想條件下)。經過多次試驗測試,理論計算的數值與實際電機到達目標后采集的數值之間相差角度范圍為±0.07°。此值不滿足設計期望。這里設定一個閾值,使其差值范圍約為0.007°。通過對理論計算角度值和實際角度值的差值與閾值的比較,判斷下次電機的運行方式。當差值大于閾值時,說明電機運動的角度超過給定角度,電機需要反方向運行;當差值小于閾值時,說明電機運動的角度未超過給定角度,電機需要繼續當前方向運行。運行具體步數根據以下關系轉換:
當ssi_position﹥target_position時,
式中,ssi_position為Netzer 采集的角度數值(十六進制表示),target_position為給定角度數值(經過數值轉換),spi_xactual為TMC5130 驅動芯片完成一次運動后所對應位置寄存器的值(TMC5130驅動芯片上電后每次運行時,需要計算絕對位置,不能隨意給定位置寄存器的值),DR為減速比120,K為25,M為64。
加速度與最大速度的計算,可以根據TMC5130芯片所給的速度曲線控制算法計算得到對應的數值,斜坡發生器速度相關電機控制如圖4 所示。通過設置V1=0禁用A1與D1階段,只使用AMAX和DMAX階段,因此構成一個梯形速度曲線控制方式。再設置總運行時間為20 s,加減速時間相等且預設為4 s,因此可以根據以下關系計算電機對應的VMAX、AMAX。

圖4 斜坡發生器速度相關電機控制
依據本設計選用的晶振為16 MHz,則速度與加速度時間的轉換公式如下:
假設設置X/Y軸運動12°,總步數為204 800微步,根據以上的預設關系,可以得到VMAX=13 421μstep/t,AMAX=DMAX=27μstep/t_a^2。
研究團隊以FPGA 為主控制器,結合TMC5130驅動芯片、Netzer 編碼器等,設計了步進電機驅動控制系統,首先滿足步進電機驅動控制的基本性能要求,其次結合驅動芯片的特點,設置了幾種運動模式,相較于其他芯片,此芯片更適用于具有高精度定位、靜音運動控制系統的場合。