周團坤,張 瑩,楊曉明,張 尼,沈 坤
(西安西北有色地質(zhì)研究院有限公司,西安 710054)
步進電機的工作原理,是每接收一個電脈沖信號就按照設(shè)定的方向轉(zhuǎn)過一個固定的角度,可以通過控制電脈沖信號數(shù)量的方式來控制電機的角位移量,控制單位時間內(nèi)脈沖信號的數(shù)量來控制電機的速度[1]。但是在實際使用過程中,由于控制不合理,步進電機啟動和停止時會發(fā)生失步或過沖現(xiàn)象,因此電機啟動和停止時必須有一個加速和減速的過程。
常見的加減速算法有直線加減速、指數(shù)曲線加減速、S形曲線加減速等[2],這些算法各有特點。S形曲線加減速由于其加速度和速度曲線的連續(xù)性[3-4],能夠保證步進電機在運動過程中速度和加速度沒有突變,減小沖擊,提高步進電機的平穩(wěn)性,常被應(yīng)用于精確控制如數(shù)控系統(tǒng)、醫(yī)療器械和機器人系統(tǒng)等。
傳統(tǒng)的S形加減速曲線算法,需要控制器實時計算曲線得到電機的運行所需脈沖頻率,對控制器性能要求較高[5]。本文通過對S形加減速曲線進行離散化的方法,將電機運行加減速所需速度比值先行存進數(shù)組中,在控制電機運行以前即算出每一步所需的脈沖頻率,因此簡化了控制器的運算量。并且,采用了2個定時器的設(shè)計,一個定時器負責(zé)輸出脈沖,另一個定時器負責(zé)對脈沖計數(shù),從而達到精確控制步進電機的目的。
STM32F103RC是ST公司生產(chǎn)的一款使用ARM Cortex-M3 32位RISC內(nèi)核的高性能單片機。主時鐘頻率為72 MHz,片內(nèi)集成256 kB閃存和48 kB的 SRAM,STM32F103RC包含 2個 12位的 ADC、4個通用16位定時器、2個PWM定時器和2個普通16位定時器,還包含多種標(biāo)準(zhǔn)、先進的通訊接口。
STM32作為主控制器,通過Modbus通訊協(xié)議,接收上位機人機界面(HMI)的運動指令以及設(shè)定參數(shù),如位移、速度、方向等,使STM32按照設(shè)定的運動參數(shù)輸出相應(yīng)的控制脈沖至步進電機驅(qū)動器,繼而控制步進電機的運動狀態(tài)。Modbus協(xié)議功能完善、協(xié)議開放、使用簡單,已經(jīng)成為一種通用的工業(yè)標(biāo)準(zhǔn)[6]。系統(tǒng)中,使用Modbus協(xié)議中的RTU模式,人機界面(HMI)作為主機,可輸入方向、位移、速度、啟停等信息;STM32作為從機,接收HMI的指令與參數(shù),計算并輸出脈沖給步進電機驅(qū)動器從而控制步進電機。系統(tǒng)的構(gòu)成如圖1所示。
圖1 系統(tǒng)構(gòu)成Fig.1 System components
S形加減速曲線是目前較新的運動控制算法[7],它是由被控對象在加減速階段的速度曲線呈S形而得來的。S形加減速曲線算法并不是一種固定的算法,其中l(wèi)ogistic函數(shù)的圖形是一個連續(xù)光滑的S形,同時是一個嚴(yán)格的遞增函數(shù),在線性和非線性之間顯示出很好的平衡[8]。在此,利用該函數(shù)得到0~1之間的一段S形曲線,以此作為各時刻速度的系數(shù),構(gòu)建步進電機的加減速曲線。其定義公式為
式中:a為函數(shù)傾斜參數(shù),控制函數(shù)的斜率,a值越大曲線的線性部分斜率越大。當(dāng)x取一組對稱數(shù)列,如-5,-4.9,…,0,…,4.9,5 時,a 分別取值1.0,2.0,3.0,對應(yīng)的曲線如圖2所示。可以看出,曲線均呈S形且中心對稱,開始增長緩慢,然后在某一范圍內(nèi)迅速增長,達到一定程度后,增長又緩慢下來,最終趨于一個穩(wěn)定值。這正好適合電機的加速軌跡,既符合了加速曲線的形態(tài),又可以快速進入目標(biāo)速度。
圖2 具有不同傾斜參數(shù)a的logistic函數(shù)Fig.2 Logistic function with different cutting parameters
當(dāng)選取a=1時,x值從-5開始,以0.1作為步進,到5結(jié)束,可以得到101個從0到1遞增的值,其圖形如圖2中a=1曲線所示。這樣,就把加速曲線離散化為101個點,相當(dāng)于用100個臺階對曲線進行逼近,如此完成了對S形加減速曲線的離散化。離散化后各點對應(yīng)的線速度為
式中:vi為各點對應(yīng)的線速度;vp為目標(biāo)線速度;xi為各點對應(yīng)的x值。
由于步進電機屬于開環(huán)控制系統(tǒng),沒有信號反饋,為了更精確控制步進電機,采用由2個定時器共同控制步進電機的設(shè)計思路,如圖3所示。
圖3 定時器設(shè)置Fig.3 Timer setting
2個定時器分別稱為定時器P和定時器C。定時器P的作用是發(fā)出脈沖至與門Y輸入端YP,定時器C以定時器P的脈沖為時鐘源進行計數(shù),并輸出控制與門輸入端YC,步進電機運行時定時器C恒輸出高電平值與門YC端。與門輸出端直接連接驅(qū)動器,驅(qū)動步進電機。當(dāng)定時器C計數(shù)值達到設(shè)定值時,進入定時器C中斷,在中斷中設(shè)置與門輸入端YC為低電平,阻斷與門輸出,然后關(guān)閉定時器P和定時器C。
先選取高級定時器或者通用定時器作為定時器P,在此選取通用定時器3即TIM3為定時器P,設(shè)置定時器P工作于PWM模式2,使用系統(tǒng)時鐘源72 MHz,預(yù)分頻器設(shè)為71,允許自動重裝載預(yù)裝載,占空比設(shè)置為50%,設(shè)置完成后關(guān)閉定時器P。計算定時器輸出PWM頻率公式為
式中:SYSclk為72 MHz;PSC為 71;當(dāng)ARR取值范圍為0~65535時,TIM3輸出脈沖頻率范圍為16 Hz~1 MHz,基本滿足步進電機的需求。
然后,選取可以與定時器P搭配的定時器作為定時器C,設(shè)置定時器C時鐘源為定時器P的輸出。允許定時器C溢出中斷,設(shè)置完畢后關(guān)閉定時器C。
線速度與轉(zhuǎn)速的轉(zhuǎn)換公式為
式中:v為線速度;n為轉(zhuǎn)速;d為電機轉(zhuǎn)軸的直徑。根據(jù)式(4),人機界面HMI輸入的線速度,可以轉(zhuǎn)換為
式中:vp為設(shè)定的線速度。步進電機轉(zhuǎn)速公式為
可以得出步進電機轉(zhuǎn)速為
式中:f為步進電機接收到的脈沖頻率;θ為步進電機細分后的固有步距角。根據(jù)式(3),可以得出相應(yīng)線速度下的TIM3自動重裝寄存器值為
綜合式(5)、式(7)、式(8)可以得出相應(yīng)的線速度下,TIM3自動重裝值寄存器值為
然后建立一個數(shù)組TIM3_ARR[101],則根據(jù)式(2)可知:
式中:xi從-5開始,以0.1作為步進,到5結(jié)束。
最后,設(shè)人機界面輸入的線位移為S,則完成線
位移所需的脈沖數(shù)為
這樣,就得到了加速各階段TIM3自動重裝寄存器的值,以及完成位移所需的總脈沖數(shù)。
S形曲線加減速通常有2種情況,一種是3段式,包括加速階段、勻速階段及最后的減速階段,如圖4(a)所示;另一種是2段式,包括加速階段和減速階段,如圖 4(b)所示。
圖4 兩種S形曲線Fig.4 Two S-curves
這2種S形曲線的區(qū)別在于其勻速階段,因此在控制時應(yīng)區(qū)別對待。在控制器接收到HMI發(fā)送的線速度和線位移值后,可以根據(jù)式(10)得出各加速階段的定時器自動重裝寄存器值,根據(jù)式(11)得到所需的總脈沖數(shù)。然后,根據(jù)實際情況設(shè)置加速階段所需總時間T,則加速階段每段分配到的時間為。
整個軟件執(zhí)行過程如下:
過程1定時器P開始以加速第1階段的自動重裝寄存器值TIM3_ARR[0]啟動,開始輸出脈沖信號至驅(qū)動器從而驅(qū)動步進電機以加速第1階段的速度運行,并且定時器C開始計數(shù);
過程2經(jīng)過時間t后,先檢查定時器C統(tǒng)計到的脈沖數(shù)是否超過總脈沖數(shù)的1/2,如果已經(jīng)超過則表明本次加減速曲線為2段式曲線,然后轉(zhuǎn)到過程5;如果沒有超出,則將定時器P的自動重裝寄存器按順序依次重裝載,然后重復(fù)過程2;
過程3當(dāng)定時器P自動重裝寄存器值裝載到TIM3_ARR[100]時,即表示整個加速階段完成,此時讀取定時器C統(tǒng)計到的脈沖數(shù)Pac。由于加速階段和減速階段是一個對稱的結(jié)構(gòu),因此勻速階段的脈沖數(shù)Pun應(yīng)為Pun=Pall-2Pac。定時器C清零,開始重新計數(shù),并設(shè)置計數(shù)目標(biāo)為Pun,即勻速階段完成后定時器C溢出進入中斷;
過程4進入定時器C溢出中斷,此時勻速階段已完成,準(zhǔn)備開始進入減速階段,定時器P自動重裝寄存器值設(shè)為TIM3_ARR[99],定時器C清零,并將計數(shù)目標(biāo)設(shè)為Pac,溢出則說明減速階段完成;
過程5經(jīng)過時間t后,將定時器P的自動重裝寄存器值按降序依次裝載,然后重復(fù)過程5;
過程6進入定時器C溢出中斷或者定時器P自動重裝寄存器已裝載至最低位,首先將定時器C輸出至與門的YC設(shè)為低電平,阻斷驅(qū)動器接收脈沖,然后將定時器P、定時器C關(guān)閉。整個S形曲線加減速完成。
軟件流程如圖5所示。
圖5 軟件流程Fig.5 Software flow chart
為了驗證步進電機的實際運行速度變化是否符合S曲線,采用光電式脈沖編碼器配合上位機軟件示波器作為測試系統(tǒng)。設(shè)置步進電機線速度為120 mm/s,線位移為280 mm,步進電機型號為42BYGH101混合式步進電機,步距角1.8°,驅(qū)動器細分?jǐn)?shù)設(shè)為16細分,電機軸轉(zhuǎn)子直徑為6 mm。實測的速度曲線截屏如圖6所示,其中橫坐標(biāo)軸為時間,縱坐標(biāo)軸為電機線速度。由圖可見,加減速過程曲線S形特征明顯,曲線中間部分為勻速過程,速度保持在120 mm/s。驗證結(jié)果表明,符合試驗預(yù)期,該S形曲線離散化,能夠使步進電機快速平滑地按照S形曲線完成加/減速過程。
圖6 S形曲線加減速離散化驗證Fig.6 S-curve acceleration and deceleration discretization verification
在步進電機的加減速過程中,S形曲線是常用的一種較為精確的算法,啟動和停止時都比較平穩(wěn),可以根據(jù)不同的電機性能調(diào)整速度的變化率。本文在常用的S形曲線的基礎(chǔ)上提出了一種離散化的解決方法,簡化了S形曲線復(fù)雜的計算,并且通過雙定時器的應(yīng)用,提高了電機控制的精度。試驗證明,通過該方法STM32控制器很好地驅(qū)動步進電機,完成S形曲線加/減速過程,解決了步進電機失步、堵轉(zhuǎn)等問題。目前方法已應(yīng)用于步進電機實際控制工作中。
[1]坂本正文.步進電機應(yīng)用技術(shù)[M].王自強,譯.北京:科學(xué)出版社,2015:1-14.
[2]崔潔,楊凱,肖雅靜,等.步進電機加減速曲線的算法研究[J].電子工業(yè)專用設(shè)備,2013,43(8):45-49.
[3]蔡錦達,石恩琪,儲茂兵.基于單片機的步進電機S形曲線調(diào)速控制[J].包裝工程,2007,28(7):77-78.
[4]唐小琦,何王勇,李勇波.一種預(yù)判插補時間的S形加減速插補算法[J].中國機械工程,2011,22(23):2794-2797.
[5]王勇,王偉,楊文濤.步進電機升降速曲線控制系統(tǒng)設(shè)計及其應(yīng)用[J].控制工程,2008,15(5):576-579.
[6]朱懿,蔣念平.Modbus協(xié)議在工業(yè)控制系統(tǒng)中的應(yīng)用[J].微計算機信息,2006,22(10):118-120.
[7]李曉菲,胡鴻.步進電機加減速控制規(guī)律[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2006,19(1):122-123.
[8]陳愛國,黃文玲,楊紅紅.步進電機升降速曲線的研究[J].機電產(chǎn)品開發(fā)與創(chuàng)新,2003,16(2):47-49.