引言
就 DC 馬達而言,通過(guò)升高電壓(如果使用脈寬調制,則增加占空比),可以控制馬達傳動(dòng)軸達到某個(gè)指定速度的快慢。但是,如果是步進(jìn)馬達,則改變電壓不會(huì )對馬達速度產(chǎn)生任何影響。沒(méi)錯,改變電壓大小可以改變繞組電流電荷的速率,從而改變步進(jìn)馬達的最大速度,但是,馬達速度是由繞組電流開(kāi)關(guān)或者整流的速率所決定。
我們可以做這樣的假設嗎:步進(jìn)馬達是一些不需要受控加速過(guò)程的機器?如果可以,那么我們就可以無(wú)所顧忌地讓步進(jìn)馬達工作在任何目標速度下嗎?事實(shí)是,相比其他馬達拓撲結構,步進(jìn)馬達更加需要通過(guò)加速和減速過(guò)程來(lái)激勵。以任意速度啟動(dòng)步進(jìn)馬達,可能會(huì )帶來(lái)可怕的后果。
本文中,我們假設讀者已熟悉如何利用市場(chǎng)上已有集成微步進(jìn)驅動(dòng)器,對步進(jìn)馬達進(jìn)行控制。步進(jìn)驅動(dòng)器(例如:TI DRV8818等)的輸出與方波(“步進(jìn)輸入”)頻率成正比。每個(gè)“步進(jìn)”脈沖均等于驅動(dòng)器步進(jìn)邏輯定義步進(jìn)(即微步進(jìn))。因此,改變方波頻率,也會(huì )相應改變步進(jìn)馬達的速率。
圖 1 顯示了某個(gè)馬達制造廠(chǎng)商的傳統步進(jìn)速率/扭矩曲線(xiàn)圖,其中起始頻率fs為一個(gè)重要參數。我們必須知道,要想正常啟動(dòng)這種特殊的馬達,必須使用一個(gè)小于 fs 的步進(jìn)速率。使用大于 fs 的步進(jìn)速率啟動(dòng)馬達,可能會(huì )使馬達停轉,并失去同步性。一旦出現這種情況,馬達轉動(dòng)控制將受到嚴重的影響。表面看起來(lái),這是一個(gè)嚴重的問(wèn)題,但實(shí)際卻很容易解決。您需要做的只是讓馬達以某個(gè)低于fs的步進(jìn)速率啟動(dòng),然后提高速度,直到達到目標速度為止。遵循這一原則以后,步進(jìn)馬達便可以通過(guò)遠超 fs 的步進(jìn)速率來(lái)驅動(dòng)—只要速度保持在所示扭矩/速度曲線(xiàn)以下。
圖 1 雙極恒流步進(jìn)馬達的扭矩/速度曲線(xiàn)

同樣重要的是,不能簡(jiǎn)單地通過(guò)停止“步進(jìn)”脈沖來(lái)讓馬達停止。相反,應把步進(jìn)速率從目標速度降至某個(gè)能使馬達停止下來(lái)且沒(méi)有傳動(dòng)軸慣性的更低速率,因為傳動(dòng)軸慣性會(huì )引起多余、無(wú)用的步進(jìn)。請記住,如果在定位應用中使用步進(jìn)馬達,則如果馬達在應該停止時(shí)還繼續轉動(dòng),馬達傳動(dòng)軸便會(huì )失去定位。由于閉環(huán)位置反饋很少用于驅動(dòng)步進(jìn)馬達,因此確保僅執行指令性步進(jìn)至關(guān)重要。
加速/減速過(guò)程
為了使步進(jìn)馬達從起始速度加速至某個(gè)期望目標速度,只需以周期性間隔改變當前速度。大多數工程師都使用微控制器來(lái)實(shí)現步進(jìn)馬達控制。最常見(jiàn)的實(shí)現方法是只使用兩個(gè)定時(shí)器。第一個(gè)是每秒步進(jìn) (SPS) 定時(shí)器,用于產(chǎn)生一種精確的步進(jìn)速率計時(shí)功能。另外一個(gè)是加速定時(shí)器,用于周期性地改變第一個(gè)定時(shí)器。由于速度受到周期性改變,在本質(zhì)上得到與時(shí)間相關(guān)的角速度 (dv/dt)。這一過(guò)程被稱(chēng)作加速度,即速度隨時(shí)間變化情況。圖 2 顯示了一個(gè)典型的基于微控制器的加速度分布圖放大圖,并描述了步進(jìn)馬達加速至目標速度的過(guò)程。
圖 2 典型加速過(guò)程放大圖

SPS 是我們希望獲得的每秒步進(jìn)數,即馬達轉動(dòng)的步進(jìn)速率。必須對 SPS 定時(shí)器編程,實(shí)現以該速率發(fā)出脈沖。根據定時(shí)器的振蕩器頻率,典型方程式為:

其中SPS_timer_register 為一個(gè) 16 位數字,它告訴定時(shí)器產(chǎn)生后續“步進(jìn)”脈沖的所需時(shí)長(cháng),而 timer_oscillator 為一個(gè)常量,表示定時(shí)器的兆赫單位運行速度。
以函數形式將該方程式存儲起來(lái),因為經(jīng)常會(huì )用到它。為了理解它的工作過(guò)程,我們假設定時(shí)器振蕩器工作在 8 MHz 下,并且期望的馬達步進(jìn)速率為 200 SPS。根據該方程式,程序代碼使 SPS_timer_register 值等于 40000。那么,定時(shí)器每計時(shí)到 40000,便產(chǎn)生一次“步進(jìn)”脈沖。這會(huì )產(chǎn)生每秒 200 脈沖的定時(shí)器型輸出以及 200SPS 的傳動(dòng)軸旋轉。
這種事件每次發(fā)生時(shí),都會(huì )產(chǎn)生一次中斷,并且定時(shí)器被清空!安竭M(jìn)”輸入上升沿計時(shí)對于微步進(jìn)驅動(dòng)器精確度至關(guān)重要,但只要其在下一個(gè)“步進(jìn)”上升沿之前,下降沿幾乎隨時(shí)會(huì )出現。
定義加速度曲線(xiàn)需要兩個(gè)參數:(1)SPS 值變化頻率;(2)SPS 值變化程度。加速度曲線(xiàn)與這兩個(gè)參數成正比;也就是說(shuō),SPS 值變化越頻繁,其值也越大,而加速度曲線(xiàn)也會(huì )越大起大落。加速度定時(shí)器同時(shí)控制這兩個(gè)參數:定時(shí)器函數起作用的次數與 SPS 值每秒的變化次數相同,另外,定時(shí)器的中斷服務(wù)程序 (ISR) 通過(guò)一個(gè)預先確定的因數定期增加當前SPS,從而確定新的速度。
使用每秒每秒步進(jìn) (SPSPS),或者當前 SPS 速率改變的每秒次數,來(lái)測定加速速率。如果通過(guò)增加 1 來(lái)改變 SPS 值,則每次加速速率改變都必須調用(觸發(fā))加速度定時(shí)器的 ISR。例如,加速速率為 1000 SPSPS 時(shí),馬達速度以 200SPS 開(kāi)始,并周期性增加 1,直至其達到 1200SPS。那么,加速度定時(shí)器的 ISR 需要調用 1000 次。
另外一種方法是,加速度定時(shí)器調用頻率減半,然后 SPS 周期性增加 2。相比前一個(gè)例子,加速度定時(shí)器的 ISR 僅調用了 500 次,但馬達仍然以 200SPS 啟動(dòng),并在 1 秒內達到 1200SPS。兩者的差別是更實(shí)時(shí)的可用性,但代價(jià)是分辨率下降。換句話(huà)說(shuō),為了達到 999 SPSPS 的精確加速速率,必須使用第一種方法。
必須在兩種方法之間進(jìn)行權衡,因為您的選擇決定了可以達到什么樣的馬達工作質(zhì)量。例如,如果要求有很多粒度以達到所有可能的加速度過(guò)程,則需要盡可能地調用加速度定時(shí)器的 ISR。
但是,在前面的 SPS 定時(shí)器方程式中,存在除運算。根據所使用處理器內核的不同,這種除運算可能會(huì )極大限制 ISR 被有效調用并正確產(chǎn)生新 SPS 速率的次數。在使用 TI MSP430™ 且 CPU 運行在 16 MHz下的實(shí)現中,一次除運算耗時(shí)約 500 µs。結果,ISR 每秒被調用的最大次數為 2000 次。這種限制決定了增量因數的大小。加速速率大于 2000 時(shí),必須使用大于 1 的增量。
在馬達啟動(dòng)前不久,便進(jìn)行一次加速速率計算。負責該計算的軟件,確定加速度定時(shí)器的時(shí)間間隔和增量因數大小,然后對各變量進(jìn)行相應的配置。同時(shí)使用這些變量,直到對 SPS 速率的修改足以達到目標速度為止。一旦達到目標速度,加速終止。
減速過(guò)程與加速過(guò)程基本一致,但增量因數為負而非正的情況除外。另外,必須規定一個(gè)馬達能夠安全停止的新目標速度。
圖 3 顯示了一個(gè)加速/減速過(guò)程,其中,加速和減速速率對稱(chēng)。也可以使用非對稱(chēng)速率。
圖 3 加速/減速過(guò)程

位置控制
到目前為止,在速度控制環(huán)路中操作馬達看似十分簡(jiǎn)單。馬達達到某個(gè)目標速度,然后在某個(gè)時(shí)刻收到停止指令。但是,當需要在某段預定時(shí)間內執行某個(gè)預定步進(jìn)數時(shí),結果會(huì )怎樣呢?加速/減速過(guò)程變得比任何時(shí)候都要重要。在這種運行控制拓撲結構中,所有計劃步進(jìn)都執行完畢后馬達便停止,這一點(diǎn)至關(guān)重要。規定步進(jìn)數的變量被稱(chēng)作 number_of_steps。
必須對馬達運動(dòng)情況編碼,以使馬達在規定時(shí)間停止,不用等待減速命令。實(shí)現這個(gè)目標的一個(gè)方法是對一個(gè)名叫steps_to_stop的變量編程,使其小于number_of_steps。之后,軟件通過(guò)監測steps_to_stop,確定需要開(kāi)始減速的時(shí)機。 在達到目標速度以前,加速會(huì )一直執行。達到目標速度后,在達到steps_to_stop計數(開(kāi)始減速之時(shí))以前,仍允許步進(jìn)馬達運行。例如,1000步進(jìn)運行時(shí),steps_to_stop設置為800。因此,馬達通過(guò)一個(gè)加速過(guò)程啟動(dòng),持續運行至步進(jìn)800,此時(shí)馬達開(kāi)始減速,直到停止運行。
根據所有系統變量的配置,我們需要研究下列5種情況(參見(jiàn)圖 4):
情況1:在馬達達到目標速度以前所有步進(jìn)結束。
情況2:馬達達到目標速度時(shí)所有步進(jìn)結束。
情況3:達到停止速度以前所有步進(jìn)結束。
情況4:達到停止速度時(shí)所有步進(jìn)結束。
情況5:達到停止速度后所有步進(jìn)結束。
圖 4 5 種加速/減速情況

恰好在達到停止速度時(shí)馬達停止(情況4)是一種理想情況。在達到停止速度前不久(情況3)或者以后(情況5)馬達停止是可以接受的,具體取決于出現這些情況時(shí)距離理想情況還差多少個(gè)步進(jìn)。例如,如果馬達轉動(dòng)過(guò)快時(shí)所有步進(jìn)結束,則馬達傳動(dòng)軸可能會(huì )因轉動(dòng)慣量而失去位置。但是,如果在所有步進(jìn)執行完以前達到停止速度,則執行該次馬達運動(dòng)控制所需的總時(shí)間會(huì )過(guò)長(cháng)。
情況1和2僅為說(shuō)明需要,應該不會(huì )出現,因為設計人員應始終確保steps_to_stop小于number_of_steps。了解所有可能出現的情況以后,設計人員可以簡(jiǎn)單地對系統進(jìn)行微調,以獲得最佳響應。
只需少許微調的另一種方法是,將步進(jìn)總數分割成幾個(gè)百分數,分配給每個(gè)加速/減速過(guò)程特定區域。在這種算法實(shí)現中,可選擇步進(jìn)總數的20%用以對馬達加速,60%用以使馬達恒速運行,其余20%用以對馬達減速(參見(jiàn)圖5)。如果number_of_steps為1000,則馬達以預設加速度加速200個(gè)步進(jìn),然后無(wú)論它達到何種步進(jìn)速率都停止加速。之后,以這種速率執行600個(gè)步進(jìn),并且最后200個(gè)步進(jìn)執行完全部減速過(guò)程。
圖 5 基于百分比的加速/減速過(guò)程

請注意,使用這種算法時(shí),假設正確選擇百分比的情況下,步進(jìn)不可能在馬達運動(dòng)過(guò)程的錯誤部分耗盡。就圖5所示例子而言,由于加速和減速部分都很平衡,因此馬達最可能以相同速度開(kāi)始和停止。這種方法的缺點(diǎn)是,很難保證達到目標速度。如果目標速度不那么重要,則可以使用這種算法來(lái)確保馬達始終在安全速度下停止。
如果速度達到對應用來(lái)說(shuō)過(guò)慢,使用這種算法加速馬達傳動(dòng)軸的唯一方法是,提高加速速率,或者增加加速/減速區域中使用的步進(jìn)數百分比。但是,設計人員必須小心操作,不要讓馬達運行速度違反馬達扭矩/速度曲線(xiàn)。
結論
雙極步進(jìn)馬達加速和減速,是所有步進(jìn)馬達應用設計的關(guān)鍵部分。盡管在過(guò)去十年里,功率級控制已得到極大簡(jiǎn)化,但是加速和減速過(guò)程應用程序仍未從應用處理器領(lǐng)域銷(xiāo)聲匿跡。由于各色步進(jìn)馬達解決方案的存在,能夠正確處理應用步進(jìn)馬達運動(dòng)控制的一些算法,更加容易編碼和微調。通過(guò)正確地對馬達加速和減速,設計人員可以確保應用高效運行,并達到各種規范要求。
加速/減速型實(shí)現的代碼結構詳情,請參閱《參考文獻1》。這種實(shí)現圍繞一個(gè)類(lèi)似于DRV8818的功率級,并使用一個(gè)MSP430微控制器。
|