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