向云峰 ,王秀蓮
(沈陽理工大學自動化與電氣工程學院,遼寧 沈陽 110159)
步進電機是一種用電脈沖信號控制,并將其轉換成角位移的執(zhí)行機構[1]。由于其具有低成本、易控制、無累計誤差等優(yōu)點,其一直以來被廣泛應用于各個領域,如工業(yè)、農(nóng)業(yè)、航空航天等。隨著控制系統(tǒng)的復雜化以及動態(tài)性能要求的提高,常用的開環(huán)控制在定位系統(tǒng)中存在振蕩、跟蹤精度低的問題,對系統(tǒng)突加負載可能導致出現(xiàn)失步、堵轉的現(xiàn)象。
為解決上述問題,近年來對步進電機的閉環(huán)控制的研究愈加火熱。在實際設計步進電機驅動控制中,大多數(shù)采用單片機進行驅動。呂穎利等[2]、余智勇等[3]采用單片機研究步進電機控制系統(tǒng),實現(xiàn)簡單且易于控制。但眾多應用實踐顯示,單片機在一些復雜的實時性高的控制系統(tǒng)中,其電機的控制性能有所下降。FPGA 具有計算速度快、可靠性高以及邏輯資源豐富等特點[4],本文基于FPGA 進行了步進電機驅動控制系統(tǒng)的研究與設計。
步進電機驅動系統(tǒng)的整體結構主要由電源、主控制器、驅動芯片、編碼器等組成。根據(jù)本系統(tǒng)的設計以及實現(xiàn)功能,系統(tǒng)硬件設計可以劃分為以下幾個部分。
在主控芯片電路設計方面,以A3PE600 為核心的電路主要包括兩個方面:一個是控制器本身工作所需的最小系統(tǒng)電路,另一個是指向機構驅動系統(tǒng)正常運行時所需器件的電路。其中,最小系統(tǒng)設計主要包括電源電路(3.3 V,1.5 V)、復位電路、時鐘電路以及仿真接口部分,而外圍電路則根據(jù)系統(tǒng)要求設計。
本研究選擇TMC5130 驅動芯片驅動步進電機,此芯片具有高精度無傳感器負載檢測、靜音平穩(wěn)運動、失速檢測等功能,更加符合電機運動時的要求,它也可以設置成位置模式、速度模式和上電保持模式[5-6]。SPI 通信接口串聯(lián)33 Ω 電阻為了阻抗匹配,由于信號源的阻抗低,與信號線阻抗不匹配,串聯(lián)一個小電阻后,可以改善匹配狀況,減少反射和振蕩的干擾,同時可以保證信號的完整性,特別是讀寫信號線。
采用DS-25 系列編碼器,其數(shù)據(jù)輸出與時鐘傳輸采用差分RS422 的接線標準,串口通信也采用此類傳輸方式。RS422 差分傳輸?shù)奶攸c很明確,它是四線類型的接口,全雙工、差分傳輸[7]。本研究利用DS26LV32 高速四路差動線路接收器和DS26LV31 高速四路差動線路驅動器,它們功耗低,且工作電壓滿足3.3 V。在編碼器以及串口接口電路中,考慮到差分傳輸,因此信號的穩(wěn)定性、抗共模干擾能力等性能必不可少。當阻抗不匹配時,可以考慮使用串聯(lián)/并聯(lián)電阻的辦法。一般來說,一些驅動器的阻抗比較低,可以串聯(lián)一個合適的電阻來跟傳輸線匹配,而一些接收器的輸入阻抗則比較高,可以使用并聯(lián)電阻的方法來跟傳輸線匹配。例如,RS422 總線接收器,常在數(shù)據(jù)線終端并聯(lián)1 000 Ω 的匹配電阻。
采用Verilog語言結合自頂向下的設計思路,實現(xiàn)驅動控制系統(tǒng)的軟件部分設計。自頂向下指的是先從系統(tǒng)的整體功能要求開始,規(guī)劃系統(tǒng)整體結構并分別劃分為各個小規(guī)模、功能簡單的子模塊,然后確立各個子功能模塊之間的相互關系和模塊接口,進而繼續(xù)這種形式劃分,最終整個系統(tǒng)被細分為多個最小單元。
2.1.1 串口通信設計
本研究采用RS422 串口通信實現(xiàn)與上位機通信,完成數(shù)據(jù)信息的傳輸,同時串口通信相對而言具有較好的穩(wěn)定性和抗干擾能力[8]。其子功能模塊結構圖如圖1 所示。在設計時考慮到數(shù)據(jù)傳輸?shù)臏蚀_性,本次設計通過“幀頭+數(shù)據(jù)+幀尾”的方式實現(xiàn)一段數(shù)據(jù)的傳輸,同時增加奇偶校驗位以加強對數(shù)據(jù)傳輸準確性的判斷。
圖1 串口通信模塊結構圖
串口接收控制模塊主要功能是將串口接收模塊收到的數(shù)據(jù)組成完整的數(shù)據(jù)包,并進行幀頭與幀尾的校驗,將校驗正確的數(shù)據(jù)輸出給控制寄存器模塊(圖1 中Recv_Data 模塊)。串口發(fā)送控制模塊的功能是將下位機向上位機發(fā)送的數(shù)據(jù)經(jīng)過解碼成8bit 的數(shù)據(jù)依次傳送給RS422_TX 模塊。串口發(fā)送模塊的功能是將串口發(fā)送控制模塊輸出的數(shù)據(jù),通過UART_TX 信號傳輸給上位機,其數(shù)據(jù)傳輸形式與串口接收模塊類似。
2.1.2 Netzer編碼器數(shù)據(jù)采集設計
角度反饋量由絕對式電編碼器得到,其接口電路已在1.3 小節(jié)詳細介紹,根據(jù)DS-25 系列的數(shù)據(jù)手冊得知:采集到的角度值可以通過SSI 和BISS 兩種傳輸協(xié)議將當前角度傳輸?shù)郊拇嫫骼颷9-10]。在本研究中,采用SSI 傳輸協(xié)議完成角度值的采集,若要將角度值返回到上位機,則可以通過RS422_RX 發(fā)送一個指令使能編碼器數(shù)據(jù)采集傳輸功能,然后將編碼器接口接收到的數(shù)據(jù)轉存到寄存器里,再通過發(fā)送控制模塊對數(shù)據(jù)進行解碼,解碼為8bit 的數(shù)據(jù),最后通過RS422_TX模塊將數(shù)據(jù)發(fā)送到上位機。
基于SSI 傳輸協(xié)議的角度值采集功能模塊如圖2所示,這里主要對SSI_INTERFACE 模塊進行研究。首先,系統(tǒng)時鐘頻率為32 MHz,程序中設計SSI傳輸時鐘頻率為4 MHz。因此,可以對系統(tǒng)時鐘進行8 分頻,本研究主要利用某個定義的寄存器的3bit(如sd_cnt[2]),當sd_cnt[2]為1 時,SSI_SCK(SSI_SCK 初始狀態(tài)為1)相對于原狀態(tài)取反,從而實現(xiàn)4 MHz 的時鐘頻率。其次,數(shù)據(jù)采集精度定義為17 位,因此整個數(shù)據(jù)幀結構為“17bit 數(shù)據(jù)+1bit 停止位”,并且在SSI_SCK 時鐘上升沿時傳輸數(shù)據(jù),下降沿時采集數(shù)據(jù),依次完成數(shù)據(jù)的傳輸。最后,將傳輸?shù)淖詈笠晃煌ㄟ^右移位計算移除停止位,剩下17 位為當前角度值,再通過串口通信模塊將其傳輸?shù)缴衔粰C或者傳輸?shù)讲竭M電機驅動控制模塊。本模塊的設計用到三段式狀態(tài)機,以便于后期的查閱與復用。
圖2 基于SSI傳輸協(xié)議的角度值采集功能模塊圖
2.1.3 TMC5130驅動設計
此模塊編寫程序時可以分為兩個功能模塊,其一是數(shù)據(jù)傳輸模塊,其二是數(shù)據(jù)控制模塊。
1)數(shù)據(jù)傳輸模塊主要功能是SPI 通信協(xié)議的編寫,使用三段式狀態(tài)機編寫,設置五個狀態(tài),分別為IDLE、WAIT0、SPI_W_R、WAIT1、STOP。IDLE狀態(tài)到WAIT0 狀態(tài)依據(jù)數(shù)據(jù)控制模塊的SPI_EN 使能信號;WAIT0 轉換到SPI_W_R 狀態(tài),等待計時器到達即可。SPI_W_R 狀態(tài)實現(xiàn)數(shù)據(jù)的傳輸,傳輸完成標志信號產(chǎn)生時,進入下一個狀態(tài)。數(shù)據(jù)之間來回傳輸只需多次使能SPI_EN 信號即可。依據(jù)數(shù)據(jù)手冊,主機向從機發(fā)送數(shù)據(jù)的格式為:“8bit 地址值+8’h80+32bit 的數(shù)據(jù)”;在從機向主機發(fā)送數(shù)據(jù)時,主機需要先向從機發(fā)送讀取數(shù)據(jù)寄存器的地址一次,此時主機接收的數(shù)據(jù)為無效數(shù)據(jù),第二次發(fā)送該寄存器地址后,才能讀取到有效數(shù)據(jù),且讀取有效數(shù)據(jù)的高8位為SPI狀態(tài)寄存器的數(shù)據(jù)。
2)數(shù)據(jù)控制模塊主要功能是TMC5130 芯片的寄存器賦值以及實現(xiàn)主機與從機之間多數(shù)據(jù)的傳輸;上位機向下位機發(fā)送一段指令,使能SPI_EN,同時將數(shù)據(jù)存入輸出寄存器中。
2.2.1 開環(huán)驅動模式
將上述2.1 節(jié)中各個模塊的設計在頂層中例化,在頂層實現(xiàn)接口連接,然后利用美高森美的開發(fā)軟件Libero SoC 對程序進行綜合、管腳分配,并將程序下載到FPGA 里實現(xiàn)電機的開環(huán)驅動控制。基于TMC5130的驅動模塊結構圖如圖3所示。
圖3 基于TMC5130的驅動模塊結構圖
2.2.2 定位控制模式
根據(jù)上述研究內容,將串口通信模塊、角度值采集模塊、電機驅動模塊等子功能模塊分別例化到頂層模塊中,然后進行綜合、管腳分配以及程序下載,通過發(fā)送指令使指向機構可以執(zhí)行開環(huán)驅動的工作模式。在開環(huán)驅動模式的基礎上進一步對驅動芯片進行開發(fā)與研究,可實現(xiàn)閉環(huán)控制的定位模式。具體設計思路為:首先,通過Netzer 讀取上電鎖定狀態(tài)時電機的位置,注意此時編碼器讀取的值不是對應的角度,需要經(jīng)過以下關系轉換:
式中,current_deg 表示當前電機角度;cur_ssi_recvdata表示當前Netzer 讀取的角度值由16 進制轉換為10進制的數(shù)值。
根據(jù)以上公式,規(guī)定此時的值為初始位置。定義電機需旋轉的角度,然后通過對上式的變形可得到電機到達目標位置后的值與到達目標位置所對應Netzer 的值相同(理想條件下)。經(jīng)過多次試驗測試,理論計算的數(shù)值與實際電機到達目標后采集的數(shù)值之間相差角度范圍為±0.07°。此值不滿足設計期望。這里設定一個閾值,使其差值范圍約為0.007°。通過對理論計算角度值和實際角度值的差值與閾值的比較,判斷下次電機的運行方式。當差值大于閾值時,說明電機運動的角度超過給定角度,電機需要反方向運行;當差值小于閾值時,說明電機運動的角度未超過給定角度,電機需要繼續(xù)當前方向運行。運行具體步數(shù)根據(jù)以下關系轉換:
當ssi_position﹥target_position時,
式中,ssi_position為Netzer 采集的角度數(shù)值(十六進制表示),target_position為給定角度數(shù)值(經(jīng)過數(shù)值轉換),spi_xactual為TMC5130 驅動芯片完成一次運動后所對應位置寄存器的值(TMC5130驅動芯片上電后每次運行時,需要計算絕對位置,不能隨意給定位置寄存器的值),DR為減速比120,K為25,M為64。
加速度與最大速度的計算,可以根據(jù)TMC5130芯片所給的速度曲線控制算法計算得到對應的數(shù)值,斜坡發(fā)生器速度相關電機控制如圖4 所示。通過設置V1=0禁用A1與D1階段,只使用AMAX和DMAX階段,因此構成一個梯形速度曲線控制方式。再設置總運行時間為20 s,加減速時間相等且預設為4 s,因此可以根據(jù)以下關系計算電機對應的VMAX、AMAX。
圖4 斜坡發(fā)生器速度相關電機控制
依據(jù)本設計選用的晶振為16 MHz,則速度與加速度時間的轉換公式如下:
假設設置X/Y軸運動12°,總步數(shù)為204 800微步,根據(jù)以上的預設關系,可以得到VMAX=13 421μstep/t,AMAX=DMAX=27μstep/t_a^2。
研究團隊以FPGA 為主控制器,結合TMC5130驅動芯片、Netzer 編碼器等,設計了步進電機驅動控制系統(tǒng),首先滿足步進電機驅動控制的基本性能要求,其次結合驅動芯片的特點,設置了幾種運動模式,相較于其他芯片,此芯片更適用于具有高精度定位、靜音運動控制系統(tǒng)的場合。