何昌俊, 楊自棟, 閆珍奇, 曾 恒
(浙江農(nóng)林大學(xué) 工程學(xué)院, 浙江 杭州 311300)
步進(jìn)電機(jī)是一種可將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。工作時(shí),每輸入一個(gè)脈沖,電機(jī)轉(zhuǎn)軸即可轉(zhuǎn)過(guò)一個(gè)相應(yīng)的步進(jìn)角,具有精度高、運(yùn)行可靠及無(wú)累計(jì)誤差等優(yōu)點(diǎn),因而被廣泛應(yīng)用于數(shù)字控制系統(tǒng)中。理論上,步進(jìn)電機(jī)的工作狀況只和脈沖數(shù)和脈沖頻率相關(guān)。在實(shí)際中,隨著脈沖頻率的升高,步進(jìn)電機(jī)轉(zhuǎn)矩隨之降低,當(dāng)頻率高到一定程度時(shí),電機(jī)提供的轉(zhuǎn)矩在一個(gè)脈沖周期里不能使電機(jī)轉(zhuǎn)過(guò)一個(gè)步進(jìn)角,此時(shí)電機(jī)將發(fā)生失步或堵轉(zhuǎn),所以步進(jìn)電機(jī)存在一個(gè)最大工作轉(zhuǎn)速。在步進(jìn)電機(jī)速度發(fā)生突變時(shí),若脈沖頻率變化不合理,電機(jī)提供的轉(zhuǎn)矩在一個(gè)脈沖周期里不能使電機(jī)轉(zhuǎn)過(guò)一個(gè)步進(jìn)角或超過(guò)一個(gè)步進(jìn)角,電機(jī)將會(huì)發(fā)生失步、堵轉(zhuǎn)或過(guò)沖,為此可以在步進(jìn)電機(jī)變速時(shí)引入一個(gè)合理的加減速過(guò)程以解決這個(gè)問(wèn)題。
常見的步進(jìn)電機(jī)加減速控制方法主要有:直線型加減速曲線、指數(shù)型加減速曲線和S型加減速曲線。直線型加減速曲線在加速、勻速和減速過(guò)程中不能光滑過(guò)渡,主要適用于控制系統(tǒng)處理速度較慢且對(duì)升降速過(guò)程要求不高的場(chǎng)合;指數(shù)型加減速曲線的平滑性好,運(yùn)動(dòng)精度高,但在加減速的起點(diǎn)存在加減速突變;S型加減速曲線的加速度和速度曲線具有連續(xù)性特性,能夠保證步進(jìn)電機(jī)在運(yùn)動(dòng)過(guò)程中速度和加速度沒(méi)有突變,減小沖擊,從而提高步進(jìn)電機(jī)的平穩(wěn)性[1-2]。課題組根據(jù)ARM的STM32F103ZET6芯片,提出一種基于七段加減速S曲線的改進(jìn)S曲線加減速算法,將其用于步進(jìn)電機(jī)的動(dòng)態(tài)調(diào)速中,提高步進(jìn)電機(jī)運(yùn)行時(shí)的穩(wěn)定性和可靠性。
步進(jìn)電機(jī)加減速S曲線,指的不是某一特定的算法,而是對(duì)加減速曲線呈S型算法的統(tǒng)稱。常用的S型曲線主要有2種:一種是引入Sigmoid函數(shù)曲線作為加減速的速度曲線;另一種是在加減速階段引入加加速度來(lái)控制加速度,以防止加速度突變出現(xiàn)柔性沖擊而影響步進(jìn)電機(jī)的平穩(wěn)運(yùn)行。
Sigmoid函數(shù)在生物學(xué)和信息工程學(xué)中是常見的函數(shù)。將Sigmoid函數(shù)圖像向右平移a個(gè)單位,可作步進(jìn)電機(jī)加速段的速度S曲線圖,函數(shù)的表達(dá)式為式(1),其導(dǎo)函數(shù)曲線可作步進(jìn)電機(jī)S曲線的加速度曲線圖,函數(shù)表達(dá)式為式(2)。圖1所示的是a取5時(shí)Sigmoid曲線圖和其導(dǎo)函數(shù)曲線圖。
(1)
(2)
由圖1(b)Sigmoid導(dǎo)函數(shù)曲線圖可以看出,步進(jìn)電機(jī)在加速階段,加速度沒(méi)有突變且沒(méi)有拐點(diǎn),整條加速度曲線光滑。說(shuō)明Sigmoid函數(shù)做加減速S曲線可使電機(jī)避免加速過(guò)程出現(xiàn)剛性沖擊和柔性沖擊,有利于電機(jī)的加減速過(guò)程的平穩(wěn)工作。但是在Sigmoid函數(shù)里含有ex項(xiàng),當(dāng)計(jì)算機(jī)處理這類函數(shù)時(shí)要花費(fèi)遠(yuǎn)超加法和乘法運(yùn)算的時(shí)間,故在STM32微控芯片上計(jì)算Sigmoid函數(shù)需要更長(zhǎng)的時(shí)間。當(dāng)芯片計(jì)算函數(shù)值的時(shí)間超過(guò)變頻的時(shí)間時(shí),會(huì)導(dǎo)致加速曲線出現(xiàn)不可預(yù)測(cè)的變化,從而導(dǎo)致電機(jī)運(yùn)行的不平穩(wěn)。
引入加加速度的加減速S曲線一般可分為包含加加速段、減加速段、勻速段、加減速段和減減速段的5段加減速控制曲線,以及包含加加速段、勻加速段、減加速段、勻速段、加減速段、勻減速段和減減速段的7段加減速控曲線。常見的5段加減速曲線圖如圖2(a)所示;常見的7段加減速曲線圖如圖2(b)所示。
由圖2(a)的加速度曲線圖可以看出,在加、減速階段,加速度圖存在拐點(diǎn),拐點(diǎn)的存在可能在運(yùn)動(dòng)中會(huì)引起柔性沖擊。7段加減速曲線是基于5段加減速曲線的改進(jìn),由圖2(b)和圖2(a)加速度曲線圖對(duì)比可知,在完成同樣的加速過(guò)程的情況下,若加速時(shí)間相同,7段加速曲線中的最大加速度會(huì)更小,運(yùn)行更穩(wěn)定;若最大加速度相同,7段加速曲線會(huì)用更短的時(shí)間完成加速過(guò)程,即7段加速度曲線能更好地兼顧效率和平穩(wěn)性。但7段加減速曲線,在加速度曲線上仍舊存在拐點(diǎn),而且分段區(qū)間增多,控制算法變復(fù)雜,會(huì)影響實(shí)時(shí)控制系統(tǒng)的運(yùn)算效率[3]。
課題組針對(duì)7段加減速S曲線加速階段中加速度存在拐點(diǎn)和加速階段分段區(qū)間多,影響實(shí)時(shí)控制系統(tǒng)運(yùn)算效率的問(wèn)題,提出一種基于多項(xiàng)式擬合S加減速曲線的方法,在保留7段加減速曲線的優(yōu)異加減速性能的同時(shí),消除7段加減速曲線中加速度存在的拐點(diǎn),使加速段或減速段成為單一的函數(shù)曲線。因此,課題組采用了大于三次多項(xiàng)式擬合加減速階段的速度曲線。這樣既可以保證速度曲線和加速度曲線連續(xù)可導(dǎo),又能避免電機(jī)在運(yùn)行過(guò)程中出現(xiàn)柔性沖擊。
從圖2(b)可知,曲線圖上存在6個(gè)拐點(diǎn),并以此為分界線。0~T1時(shí)間段內(nèi),速度由起始v0加速至拐點(diǎn)T1,加加速度a′為常數(shù)z,加速度a由0逐漸增加;T1~T2時(shí)間段,速度恒定增加,加速度為最大加速度amax;T2~T3時(shí)間段,速度減速增加,加加速度a′為常數(shù)-z,加速度a由amax逐漸減到0;T3~T4時(shí)間段,速度為恒速;T4~T5,T5~T6和T6~T7為減速段,與加速段類似,加速度變化為負(fù)值。
加速段S曲線方程如下:
1) 0~T1時(shí)間段內(nèi)
加加速度為z(z>0),加速度和速度方程分別為:
a=zt;
(3)
(4)
2)T1~T2時(shí)間段內(nèi)
加速度為最大加速度,加速度和速度方程分別為:
a=amax;
(5)
(6)
3)T2~T3時(shí)間段內(nèi)
加加速度為-z,加速度和速度方程分別為:
a=amax-z(t-T1);
(7)
(8)
4)T3~T4時(shí)間段內(nèi)
速度為恒定值。
減速段T4~T5,T5~T6和T6~T7與加速段一致,可看作加速段的逆過(guò)程[4]。
對(duì)構(gòu)造出的加速S曲線在隔開拐點(diǎn)處均勻取點(diǎn),該取點(diǎn)方式可以更好地優(yōu)化拐點(diǎn)處的函數(shù)曲線,采集的點(diǎn)集用數(shù)組的方式表示,記作pi(xi,yi)。對(duì)采集的數(shù)據(jù)點(diǎn)用多次多項(xiàng)式擬合,即對(duì)采集的數(shù)據(jù)點(diǎn)集做線性回歸處理。
2.2.1構(gòu)造優(yōu)化模型
對(duì)擬合的近似曲線進(jìn)行假設(shè),其假設(shè)的線性回歸模型的函數(shù)表達(dá)式為
(9)
式中:hθ(x)表示擬合曲線的函數(shù)值,θj表示函數(shù)多項(xiàng)式系數(shù)。
采用均方誤差(MSE)作為線性回歸模型的損失函數(shù)。損失函數(shù)的表達(dá)式為
(10)
式中:J(θ0,…,θn)表示均方誤差,hθ(xi)表示在點(diǎn)xi處擬合曲線的函數(shù)值。
損失函數(shù)式(10)表示線性回歸模型(擬合曲線上)的點(diǎn)與采集數(shù)據(jù)點(diǎn)偏差值的平方和,可用來(lái)描述線性回歸模型與數(shù)據(jù)點(diǎn)集之間的差異。如果損失函數(shù)J(θ0,…,θn)=0,表示完全沒(méi)有差異,則說(shuō)明此線性回歸模型完全描述數(shù)據(jù)之前的關(guān)系。如果需要找到最佳擬合的線性回歸模型,就需要使對(duì)應(yīng)的損失函數(shù)最小;求解最小損失函數(shù)的參數(shù)組,得到擬合曲線的函數(shù)表達(dá)式。
2.2.2求解最小損失函數(shù)
計(jì)算最小損失函數(shù)有2種實(shí)現(xiàn)方式:①梯度下降求損失函數(shù)最小值;②正規(guī)方程求解損失函數(shù)最小值。
2.2.2.1梯度下降原理
當(dāng)選擇梯度下降計(jì)算損失函數(shù)最小值時(shí),開始隨機(jī)選擇一個(gè)參數(shù)的組合(θ0,θ1,…,θn),計(jì)算損失函數(shù);然后尋找下一個(gè)能讓損失函數(shù)下降最多的參數(shù)組合,將該過(guò)程迭代,直到損失函數(shù)收斂到一個(gè)局部最小值。批量梯度下降的算法公式為
(11)
式中:“:=”是賦值符號(hào),表示對(duì)左邊變量進(jìn)行賦值;β表示損失函數(shù)每次沿下降方向下降的程度。
2.2.2.2正規(guī)方程
求解損失函數(shù)最小值,即損失函數(shù)極值問(wèn)題。對(duì)損失函數(shù)的參數(shù)(θ0,θ1,…,θn)求偏導(dǎo)數(shù),令其為零,即可得到滿足條件的參數(shù)組(θ0,θ1,…,θn):
(12)
采用單個(gè)方程逐一求解參數(shù)組中各參數(shù)的值,其求解的效率很低,因此可以采用矩陣的方式進(jìn)行求解。用列向量θ表示損失函數(shù)的參數(shù)組(θ0,θ1,…,θn),用m行n+1列的矩陣X表示m組n+1維的特征向量。用列向量Y表示(y1,y2,…,ym);列向量HθX表示(hθ(x1),hθ(x2),…,hθ(xm));J(θ)表示損失函數(shù)的值。擬合曲線的線性回歸模型用矩陣可表示為
HθX=Xθ。
(13)
損失函數(shù)矩陣為
(14)
式(14)展開為
(15)
對(duì)各參數(shù)求偏導(dǎo),得到
(16)
化簡(jiǎn)為
(17)
θ=(XTX)-1XTY。
(18)
式(18)為正規(guī)方程的表達(dá)式。
由于擬合曲線采用6次多項(xiàng)式,即擬合曲線只有7項(xiàng)特征,梯度下降和正規(guī)方程都能很快求解出損失函數(shù)最小值的參數(shù),但相較而言梯度下降更擅長(zhǎng)求解多特征的函數(shù)(特征值大于10 000),正規(guī)方程更適合求特征值較少的函數(shù)。用MATLAB計(jì)算正規(guī)方程求解得到θ參數(shù)的組:
θ0=86.339 127;θ1=245.822 054;θ2=508.687 301;θ3=0.573 600;θ4=-3.256 022;θ5=0.197 272;θ6=-0.003 721。
擬合曲線的方程為
(19)
截取0~22.4 s內(nèi)的頻率導(dǎo)數(shù)擬合曲線,如圖4所示。
在實(shí)際運(yùn)行過(guò)程中,頻率的變化是離散的,需要對(duì)曲線離散取值。課題組采用等時(shí)間間隔數(shù)值的階梯逼近升速S曲線取值,等脈沖數(shù)為階梯實(shí)際維持長(zhǎng)度的方案,示意圖如圖5所示[6-9]。
對(duì)于階梯的維持時(shí)間的長(zhǎng)度有等時(shí)長(zhǎng)和等脈沖數(shù)2種方案。
1) 等時(shí)長(zhǎng)方案。每個(gè)階梯維持相同的時(shí)間,它能很好地反映S曲線的特性,但是第1個(gè)階梯的脈沖數(shù)和最后1個(gè)階梯的脈沖數(shù)相差很大。步進(jìn)電機(jī)在調(diào)速時(shí),步進(jìn)電機(jī)的轉(zhuǎn)子轉(zhuǎn)過(guò)第1個(gè)步進(jìn)角停下的位置時(shí),轉(zhuǎn)子會(huì)出現(xiàn)一定程度的震蕩。為解決該震蕩,需要增加幾個(gè)同頻脈沖使轉(zhuǎn)子運(yùn)行平穩(wěn),但同頻脈沖過(guò)多并不會(huì)繼續(xù)提高其平穩(wěn)性。
2) 等脈沖數(shù)方案。每個(gè)階梯維持相同的脈沖數(shù)。在選取了合適的同頻脈沖數(shù)后,能對(duì)S曲線的性能進(jìn)一步優(yōu)化,提高運(yùn)行的效率。
選取同頻等脈沖數(shù)作為階梯維持時(shí)間,能在保持近乎相同的性能下,提高運(yùn)行效率。經(jīng)試驗(yàn)測(cè)得,5作為同頻脈沖數(shù)是一個(gè)較合適的值[10]。
取圖5中S曲線與階梯的接觸點(diǎn)為離散的取值點(diǎn),記為(tk,fk)。k表示S曲線上取的第k個(gè)點(diǎn),fk表示第k個(gè)點(diǎn)運(yùn)行的頻率,tk表示第k個(gè)點(diǎn)時(shí)間的數(shù)值。圖5中Δt表示等時(shí)間間隔數(shù)值,Δtk表示以(tk,fk)為起點(diǎn)的實(shí)際階梯時(shí)間維持長(zhǎng)度,即圖中第k個(gè)灰柱條的寬度。
第k個(gè)階梯實(shí)際的維持時(shí)間為
Δtk=w·tplusek。
(20)
在tk點(diǎn)的實(shí)際運(yùn)行時(shí)間為
(21)
式中:tplusek表示第k個(gè)點(diǎn)單個(gè)脈沖持續(xù)的時(shí)間;tplusem表示第m個(gè)點(diǎn)單個(gè)脈沖持續(xù)的時(shí)間;w表示同一頻率脈沖的個(gè)數(shù)。
在動(dòng)態(tài)調(diào)速過(guò)程中,脈沖頻率(速度)增加的數(shù)值可以是0~90 000 Hz之間的任意值,所以不可能為每一個(gè)調(diào)速建立一個(gè)S曲線。為了實(shí)現(xiàn)范圍調(diào)速,可以先建立一個(gè)通用的S曲線模型,然后對(duì)其進(jìn)行拉伸、壓縮以對(duì)應(yīng)不同的調(diào)速。拉伸和壓縮后的曲線仍會(huì)保留大部分原曲線特性。
通過(guò)給S曲線函數(shù)乘以一個(gè)系數(shù)ε得到需要的增速,即在縱軸上對(duì)實(shí)際S曲線進(jìn)行壓縮[11]。針對(duì)不同的增速,可選取相對(duì)應(yīng)的等時(shí)間間隔數(shù)值Δt和同頻脈沖數(shù),保證動(dòng)態(tài)調(diào)速的效率和穩(wěn)定性。經(jīng)多次試驗(yàn)表明,此方法有良好的動(dòng)態(tài)調(diào)速性能。
經(jīng)過(guò)試驗(yàn)發(fā)現(xiàn),可以先獲得某一同頻脈沖數(shù)下步進(jìn)電機(jī)不發(fā)生堵轉(zhuǎn)的初速度、增速和等時(shí)間間隔數(shù)值Δt的臨界關(guān)系表。然后取臨界等時(shí)間間隔數(shù)值Δt′的1/4為穩(wěn)定等時(shí)間間隔數(shù)值Δt″,可得到初速度、增速和等時(shí)間間隔數(shù)值Δt穩(wěn)定關(guān)系表。
將初速度、增速和等時(shí)間間隔數(shù)值Δt穩(wěn)定關(guān)系圖表作為動(dòng)態(tài)選擇等時(shí)間間隔數(shù)值Δt的依據(jù),協(xié)同優(yōu)化后的S曲線算法寫入內(nèi)存,即可作為動(dòng)態(tài)調(diào)速控制的核心,實(shí)現(xiàn)對(duì)步進(jìn)電機(jī)進(jìn)行平穩(wěn)的動(dòng)態(tài)調(diào)速。
課題組通過(guò)優(yōu)化七段加減速S曲線,在保留其優(yōu)良特性的同時(shí),消除加速度曲線存在的拐點(diǎn),并將加或減速過(guò)程中的3段函數(shù)用1段函數(shù)替代,降低算法的復(fù)雜性,同時(shí)精簡(jiǎn)了代碼。基于優(yōu)化后的S曲線,采用等時(shí)間間隔數(shù)值的階梯逼近升速S曲線取值,等脈沖數(shù)為階梯實(shí)際維持長(zhǎng)度的方案用于實(shí)際控制步進(jìn)電機(jī)。經(jīng)試驗(yàn)得到初速度、增速和等時(shí)間間隔數(shù)值Δt使電機(jī)平穩(wěn)運(yùn)行的關(guān)系。試驗(yàn)表明,采用本研究所述方法,步進(jìn)電機(jī)在指定的范圍內(nèi)能進(jìn)行平穩(wěn)的動(dòng)態(tài)調(diào)速。