張 濱,杜啟亮,田聯(lián)房
(華南理工大學,廣東廣州510641)
步進電動機由于具有運動精確、易于控制、起停快、連續(xù)運行無累積誤差和能夠接收數(shù)字信號等特點,被廣泛應(yīng)用于數(shù)控機床、自動化儀表、機器人等控制系統(tǒng)中。其中,步進電動機常用于快速精確定位系統(tǒng)中,但在啟動和停止的過程中,若步進脈沖變化太快,轉(zhuǎn)子會由于慣性過大產(chǎn)生起停失步和起停沖擊大等問題,因此對步進電動機起停階段的加速度進行規(guī)劃,產(chǎn)生合理的步進電動機驅(qū)動頻率以減少沖擊具有很強的實際意義。
目前國內(nèi)外關(guān)于步進電動機加減速控制的算法主要有三種[1]:(1)梯形曲線算法。(2)指數(shù)曲線算法。(3)拋物線算法。三種算法各有各自的特點,適合不同的應(yīng)用場合。利用FPGA設(shè)計控制器不僅可以簡化設(shè)計過程,而且可以降低整個系統(tǒng)的成本和體積,提高系統(tǒng)的可靠性。本文針對二相雙四拍步進電動機,按照模塊化的設(shè)計思想,設(shè)計了系統(tǒng)各模塊,為了便于拋物線算法的硬件實現(xiàn),本文將此算法做了適當?shù)男薷?,并在單片Altera颶風一代FPGA中完成了各模塊的設(shè)計與布局布線,完成了控制系統(tǒng)的整體調(diào)試,實現(xiàn)了步進電動機的加減速控制系統(tǒng)的設(shè)計。
應(yīng)用于步進電動機的加速度控制算法是以速度曲線的形狀命名的,主要的控制算法包括梯形算法、指數(shù)算法和拋物線算法。梯形算法包括加速度正恒定階段、加速度零階段和加速度負恒定階段。此方法計算簡單,節(jié)省資源,但是三個階段不能光滑過渡,這會對電機的運行質(zhì)量和機械結(jié)構(gòu)造成不利的影響。如圖1所示。指數(shù)算法的加速度表現(xiàn)為指數(shù)特征。此算法適合系統(tǒng)的固有規(guī)律,適合對加減速要求較高的場合。如圖2所示。
拋物線算法包括加加速運動階段、加速運動階段、減加速運動階段、勻速運動階段、加減速運動階段、減速運動階段和減減速運動階段[2]。如圖3所示。由此可以看出加速度能夠平穩(wěn)地過渡,能夠平穩(wěn)地實現(xiàn)加速和減速。
圖3 拋物線算法
此算法的變加速度隨時間的變化規(guī)律如下:
加速度相對時間的變化規(guī)律:
對加速度進行積分,即可得到相應(yīng)的速度相對時間的變化規(guī)律:
再對速度進行積分,即可得到位移相對時間的變化規(guī)律。作為加減速控制系統(tǒng),接收的是步進電動機最終的位移,輸出的是步進電動機驅(qū)動芯片的邏輯脈沖,也就是位移隨時間的變化規(guī)律。但是不同位移要完全都轉(zhuǎn)換成上述七個加減速階段,必須要經(jīng)過復雜的數(shù)學運算和邏輯推理,此部分如果在FPGA中實現(xiàn),需要的代價是非常大的。
因此,本文假設(shè)[0,t3]和[t4,t7]是固定步進數(shù)的調(diào)整階段,大多數(shù)情況下步進電動機都要經(jīng)過這兩個階段的調(diào)整,只是勻速階段的步進數(shù)不同而已(即圖3中的時間段[t3,t4]不同)。但對于總步進數(shù)小于調(diào)整階段步進數(shù)的情況,則需省去中間的某些運行階段,由此可得以下四種情況:(1)無勻速運行階段,即去掉圖3的[t3,t4]時間段,如圖4(a)所示;(2)無勻速運行階段,僅運行部分減加速運動階段和部分加減速運動階段,即去掉全部的[t3,t4]時間段,部分[t2,t3]時間段和部分[t4,t5]時間段,如圖4(b)所示;(3)無勻速運行階段,無減加速運行階段和加減速運行階段,即省去全部的[t2,t3]、[t3,t4]和[t5,t6]時間段,如圖 4(c)所示;(4)僅有加加速運行階段和減減速運行階段,如圖4(d)所示。
圖4 其他調(diào)整曲線
整體控制結(jié)構(gòu)包括SPI通訊模塊、步進計數(shù)模塊、地址產(chǎn)生模塊、ROM模塊、脈沖計數(shù)模塊和步進邏輯發(fā)生模塊。SPI通訊模塊解析通訊協(xié)議以完成通訊數(shù)據(jù)的傳送。步進計數(shù)模塊對步進電動機的步進數(shù)實時統(tǒng)計。數(shù)據(jù)存儲模塊存儲步進電動機每個步進所需要的時間間隔。脈沖計數(shù)模塊則具體對系統(tǒng)頻率進行計數(shù),計數(shù)結(jié)束后產(chǎn)生信號以驅(qū)動步進邏輯發(fā)生模塊。步進邏輯發(fā)生模塊產(chǎn)生步進電動機驅(qū)動芯片所需要的驅(qū)動邏輯。各部分之間的關(guān)系如圖6所示。
圖5 整體控制框圖
此模塊解析SPI通訊協(xié)議,控制單元在spi_cs為低電平時,在spi_clk的上升沿對spi_data信號進行采樣,采集過程中將數(shù)據(jù)放入臨時寄存器,結(jié)束之后再將數(shù)據(jù)存入指定的寄存器中。此模塊設(shè)計兩個寄存器的目的是存取前后兩次步進電動機的目標位移,這樣此系統(tǒng)接收的是步進電動機的最終位移而不是相對位移。此控制系統(tǒng)設(shè)計的寄存器位寬為16位,即可以存取0~65 535之間的數(shù)據(jù),能夠滿足一般系統(tǒng)的要求??刂瓶驁D如圖6所示。
此模塊接收SPI通訊模塊發(fā)送的數(shù)據(jù),根據(jù)接收到的數(shù)據(jù)計算出要行走的步進數(shù)。因為在加減速的過程中,步進間隔是不同的,所以此模塊需要脈沖計數(shù)模塊的計數(shù)滿信號作為反饋信號。另外值得注意的是SPI通訊模塊和步進計數(shù)模塊屬于不同時鐘域,為了避免亞穩(wěn)態(tài)產(chǎn)生,此處采用雙跳技術(shù)[3]來解決此問題。此模塊框圖如圖7所示。
圖7 步進計數(shù)模塊框圖
此模塊要根據(jù)步進絕對值和當前步進電動機的計數(shù)值產(chǎn)生ROM地址。如果實際的步進數(shù)大于加減速調(diào)整階段的步進數(shù),則會存在加速度為零、速度不變的時刻,那么在此階段每一步的步進間隔是相同的,ROM中的數(shù)據(jù)也是相同的,所以在ADDR就不會發(fā)生變化。如果實際的步進數(shù)小于加減速調(diào)整階段的步進數(shù),則根據(jù)大小省去中間的運行階段,由此可得addr的變化符合以下規(guī)律。
圖8 addr變化規(guī)律
此模塊存儲的是每一步的時間間隔,對應(yīng)的是時間對位移的關(guān)系。此處我們設(shè)定標準的七段拋物線的時間段是相同的,加速與減速階段是對稱的,則ROM存儲的時間間隔也是對稱的,因此此處只需要計算其中一段即可。根據(jù)式(3),積分可得到時間對位移的關(guān)系,由于步進電動機的每一步都是相同的,所以我們需要根據(jù)上述關(guān)系得到相同位移下的時間間隔。首先假設(shè)步進電動機的步進距離為Δs,則從零開始依次計算出每個步進距離所需要的時間Δt1,Δt2,…,Δtn,再根據(jù)相鄰兩個 ROM 中的數(shù)據(jù)是對應(yīng)成比例的,即:
同時,ROM中的數(shù)據(jù)對應(yīng)著步進時間,即:
這樣如果我們已知勻速時每個步進所需要的時間ΔTn和系統(tǒng)頻率 f,由式(5)可得 Xn,再根據(jù)式(4)和 Δt1,Δt2,…,Δtn,即可得到 X1,X2,…,Xn-1。
此模塊根據(jù)對ROM發(fā)送的數(shù)據(jù)進行計數(shù),如果計數(shù)結(jié)束,則表示步進電動機需要行進一步,同時發(fā)出計數(shù)滿信號以指示其他模塊。
本文電機的控制方式為二相雙四拍。步進電動機的兩相繞組為:A(+)、B(-)、C(+)、D(-),AB為一相,CD為一相。驅(qū)動方式為AC-BC-BDAD。選擇 TI的步進電動機驅(qū)動芯片DRV8833[4],此芯片包括兩個H橋,每個H橋控制一相,如果AB相連接第一個橋,CD橋連接第二個橋,且每個H橋輸入與輸出之間的對應(yīng)關(guān)系如表1所示。則可以得到H橋的輸入(AIN1 AIN2 BIN1 BIN2)為:1010、0110、0101、1001。另外當電機處于空閑狀態(tài)時,設(shè)置輸入為1111,使電機處于剎車狀態(tài)。
表1 H橋邏輯表
所以步進電動機邏輯發(fā)生模塊在電機正轉(zhuǎn)時,輸出為1010-0110-0101-1001-1010-…;電機反轉(zhuǎn)時,輸出為1010-1001-0101-0110-1010-…。空閑時輸出1111。
由仿真圖可以看出,系統(tǒng)復位之后,F(xiàn)PGA通過SPI通訊模塊接收到十六進制數(shù)據(jù)0X50,并且存儲在spi_Y2寄存器中。接收結(jié)束之后,步進計數(shù)模塊中的motor_cnt寄存器開始對步進電動機進行計數(shù),地址產(chǎn)生模塊根據(jù)motor_cnt和abs_value產(chǎn)生相應(yīng)的地址,此地址連接 ROM,最后脈沖計數(shù)模塊對ROM發(fā)送的數(shù)據(jù)進行計數(shù),計數(shù)結(jié)束之后產(chǎn)生計數(shù)滿信號,最后驅(qū)動步進邏輯發(fā)生模塊及其他模塊。從stepdrive可以看出,系統(tǒng)空閑時產(chǎn)生1111,系統(tǒng)工作時產(chǎn)生1010-0110-0101-1001-1010-…。同時每一步的時間間隔是由脈沖計數(shù)模塊對ROM中的數(shù)據(jù)計數(shù)得到的,從大變小變化,表明步進電動機的速度在變快。
經(jīng)過若干步之后,addr的數(shù)據(jù)不再發(fā)生變化,這屬于前面提到的地址產(chǎn)生模塊的第一種情況,即步進電動機進入勻速運行階段。
最后步進電動機在接近步進終點時,步進時間間隔逐漸變大,即步進電動機速度逐漸變小,最后停止。第一次運行結(jié)束之后,F(xiàn)PGA通過SPI通訊接口重新接收到新的數(shù)據(jù)0X40,并且存儲在spi_Y2寄存器中,同時將以前的數(shù)據(jù)存儲在spi_Y1寄存器中。由于系統(tǒng)采用的是絕對計數(shù)方式,所以在接收結(jié)束之后,abs_value變?yōu)?X10,dir信號變?yōu)榈碗娖?,表示方向為負,同時stepdrive產(chǎn)生1010-1001-0101-0110-1010-…。
經(jīng)過若干步之后,addr的數(shù)據(jù)由0X0008突變?yōu)?X0038,這屬于前面提到的地址產(chǎn)生模塊的第二種情況,即步進數(shù)較小,運行過程中無中間調(diào)整階段。
圖11為示波器測量結(jié)果,由圖可以看出FPGA依次輸出1111-1010-0110-0101-1001-1010-…,表示驅(qū)動邏輯為電機正轉(zhuǎn),并且周期遞減,表示電機正處于加速運行階段。
圖11 示波器測量結(jié)果
基于FPGA的步進電動機控制系統(tǒng)能夠?qū)崿F(xiàn)標準的拋物線加減速算法和修改后的加減速算法。實現(xiàn)了對步進電動機起動和停止階段的加減速控制,有效避免了步進電動機由于慣性產(chǎn)生的起停失步和起停沖擊大等問題,大大提高了步進電動機的運行性能。
[1] 王玉琳,王強.步進電機的速度調(diào)節(jié)方法[J].電機與控制應(yīng)用,2006,33(1):53-64.
[2] 王勇,王偉,楊文濤.步進電機升降速曲線控制系統(tǒng)設(shè)計及其應(yīng)用[J].控制工程,2008,15(5):576-579.
[3] Steve Kilts.高級FPGA設(shè)計:結(jié)構(gòu)、實現(xiàn)和優(yōu)化[M].北京:機械工業(yè)出版社,2009.68-70.