王 慶,周 鋒,郭乃宏,孔祥曄,王如剛
(1.鹽城工學院 信息工程學院,江蘇 鹽城 224051;2.鹽城雄鷹精密機械有限公司,江蘇 鹽城 224006)
隨著科學技術的飛速發展,步進電機因其精度高,響應快,誤差小等優點,所以在運動控制領域的應用十分廣泛,同時對其運動控制系統的要求越來越高。步進電機加減速控制是運動控制系統中的重要組成部分。在裁切機的加工中,對進給、啟停或軌跡轉換等一系列的刀具運動進行加減速控制,能夠提高加工效率和裁切精度。步進電機加減速常用的控制器有可編程邏輯控制器(PLC,programmable logic controller)、單片機[1-2]和現場可編程門陣列(FPGA,field programmable gate array)。但是,PLC和單片機的控制方法,不僅操作繁瑣,還會影響實際工作效率。FPGA具有并行處理,豐富的邏輯資源,在設計過程中可以根據實際的工作需求進行靈活更改。而研究人員發現FPGA可以對步進電機進行高效的控制,能夠實現步進電機的啟停和加減速。近些年,許多學者對用FPGA控制步進電機做了一系列研究[3-9]。劉鵬[3]提出了以FPGA和STM32單片機相結合的算法,實現了靈活的梯形加減速算法,但是研發成本高以及邏輯資源占用多。胡承祖[4]提出了基于FPGA采用查表法實現了梯形加減速算法,雖然減少了成本和資源占用,但是降低了靈活性。邱靜超[5]等人實現了傳統的梯形加減速算法,但需要計算每個階段的時間才能使步進電機達到最終位置,靈活性不高。桑彭[6]等人提出了基于FPGA的S型曲線加減速算法,解決了梯形算法中不平穩和不連續的現象,但是計算量大,實現困難,采用查表法實現,當步進電機位置改變時,需要重新設計速度表,操作較為繁瑣。因此,本文提出了一種基于FPGA實現步進電機的加減速控制,對比分析梯形加減速算法,指數加減速算法和S型加減速算法,選擇梯形加減速算法并對算法做出改進,用時間來確定減速點,并且算法能夠自動計算出減速點的位置。在保證精度和可靠性的前提下,能夠提高靈活性,使減速點的確定具有的自適應能力。
步進電機[10]是一種將脈沖信號轉換成角位移或線位移的開環控制元電動機。當輸入一個脈沖信號給步進電機,轉子就會轉動一個角度或者是前進一步,這個角度簡稱為步距角。步距角和輸入的脈沖數成正比,轉速與脈沖頻率成正比。因此,只需控制脈沖頻率就可以控制步進電機的運動快慢。
步進電機按結構可以分為反應式步進電機、永磁式步進電機、混合式步進電機等,其中最廣泛使用的是兩相混合式步進電機,主要是由定子鐵芯、定子組件、轉子鐵芯組成。步進電機的基本參數有空載啟動頻率、步距角和精度。其中步距角表示每個脈沖對應步進電機走一步所需要旋轉的角度,由公式(1)確定。
B=360°/ZKm
(1)
其中:B為步距角;Z為轉子齒數,K為通電系數;m為定子繞組相數。
本文使用的步進電機為兩相混合式42步進電機,步距角為1.8°,即步進電機轉一圈需要200個脈沖。
加減速控制是根據給定的步進電機目標位置、初始速度、最大速度和加速度等數據來計算出當前時間的速度值。常見的加減速算法有S型加減速[11-12]、指數加減速[13]和梯形加減速[14]等算法。
如圖1所示,S型加減速運動常用來解決運動控制中加速度突變的現象。S型曲線并不是一種固定的算法,一般分為7個部分,包括加加速階段、勻加速階段、減加速階段、勻速階段、加減速階段、勻減速階段和減減速階段。S型曲線的核心思想是讓加速度不產生突變,其加速平穩,柔性快速,。但是由于涉及階段較多,算法復雜,實現難度高。現階段的S型曲線多采用查表法,即事先規劃好速度數曲線,再將對應的曲線生成速度數據表放入ROM核中,再根據要求從ROM中讀取速度數據表。這種方式不僅操作繁瑣,而且靈活性低。

圖1 S型曲線加減速
如圖2所示,指數加減速運動,就是在加速階段和減速階段的曲線變化成指數函數。

圖2 指數函數加減速
指數加減速運動在起始速度時,它的加速度是最大的,隨后不斷衰減,在進入勻速運動時的加速度最小,勻速運動時候的加速度為0,并保持最大速度。隨后進入減速階段,在減速階段中,速度以最大的加速度減速,隨后加速度不斷衰減至最小,當速度為0時,運動停止。指數加減速的特點是速度平穩,運動精度較高,但是初始速度高,容易引起步進電機的沖擊,在加減速的起點存在加減速突變的現象,限制了加速度的提高。
梯形加減速原理:運動開始后,在加速階段以恒定的加速度加速至最大速度,在勻速階段以恒定的速度保持不變,在減速階段以恒定的加速度減速至最低速度。其速度曲線和加速度曲線如圖3所示。

圖3 速度曲線和加速度曲線
梯形加減速曲線算法簡單方便,占用時間少,響應快,實現簡單,但是在加速階段和減速階段容易產生速度突變。適用于頻繁啟停和速度變化范圍大的場合。梯形加減速控制可以分為3個階段:
1)加速階段。如果當前速度小于最大速度時,就會以某一恒定不變的加速度A加速,直至到達最大速度Vmax為止。
2)勻速階段。步進電機會保持最大速度Vmax不變,此時加速度A的值為0。
3)減速階段。加速度為-A,與加速階段的加速度大小相等,方向相反,直到減速至Vend停止運動。
綜上所述,針對裁切機工作時需要頻繁啟停的特性,梯形加減速算法相對于其它兩種算法可靠性高,實現簡單。但是傳統的加減速算法采用ROM查表法,該方法雖然實現簡單,但是需要先規劃好速度數據表,當步進電機位置改變后需要重新規劃速度表,操作繁瑣,不利于實際應用。或者通過計算每個階段的運動時間的方法來實現梯形加減速,該法在計算上比較復雜。
由圖3可知,路程等于時間乘速度,因此步進電機的最終位置為速度曲線的面積。每個階段面積由公式(2)確定:
(2)
其中:k為加速度A;S1為加速階段的面積;S2為勻速階段的面積;S3為減速階段的面積。
梯形加減速曲線與坐標軸的面積可由公式(3)確定:
S=S1+S2+S3
(3)
其中:S為梯形加減速曲線的面積。
但是,該方法在計算上比較復雜,在知道步進電機的目標位置后,需要計算出每個階段的運動時間,操作繁瑣,在實際應用中會降低工作效率。
針對上述傳統的梯形加減速的缺點,通過對減速點的確定改進梯形加減速算法。本文設計的梯形加減速算法的減速點是通過步進電機運動的時間來確定的。改進后的加減速圖如圖4所示。

圖4 改進后的速度曲線圖
為了便于確定減速點,需要將減速階段的面積S3剪切到加速階段的面積S1處。但是步進電機有一個啟動頻率的概念,因此,起始速度Vs不為0,這就導致將速度曲線分割后,把減速階段的面積拼湊到加速階段無法成為一個完整的矩形,會缺少一塊面積Sa。這樣就無法計算出減速點的時間。所以,需要對速度曲線修補,修補后的圖形為一個初始速度從0開始的等腰直角梯形。如圖4(a)所示,將減速階段的面積拼接到加速階段,如圖4(b)所示,拼接后的速度曲線為矩形。矩形的面積是由原先速度曲線面積圖和修補的面積相加得來的。新矩形的長由兩部分組成,分別為加速階段的時間與勻速階段的時間。修補的面積可以由公式(4)確定:
Sa=VSt0
(4)
其中:t0可由公式k(-t0)+VS=0求出。且t0只與起始速度Vs和加速度A有關。因此矩形的面積可以根據公式(5)得出:
Sn=Sa+S
(5)
其中:Sn為拼接后的速度曲線面積,S為梯形加減速曲線的面積。
根據公式(6)求出減速點的時間:
t2=Sn/Vmax-t0
(6)
這樣,無論步進電機的目標位置如何改變,該算法能夠自動確定減速點,從而確定步進電機每個階段的運動時間。相比于通過計算剩余減速距離的方法確定減速點,該算法確定減速點的過程簡單。

圖5 系統設計框圖
本文設計的控制系統由FPGA、步進電機驅動器和步進電機本體三部分組成[15-16]。其系統設計框圖如圖5所示。當按鍵按下時,按鍵消抖模塊首先會判斷按鍵是否按下,如果按下,會給步進電機模塊一個使能信號,步進電機模塊會根據標志位的狀態選擇運動模式,然后輸出脈沖。同時,迭代除法器模塊會根據最大速度和路程,計算出減速點的時間,送給步進電機模塊,步進電機模塊會根據減速點的時間給每個運動模式分配運動時間。
FPGA選用Xilinx公司的A7系列,芯片型號為XC7A35TFGG484I-2,利用串口通信將上位機的命令傳遞給FPGA,FPGA通過步進電機電機驅動器DM422驅動步進電機,從而控制步進電機的轉動。DM422兩相步進電機驅動器是基于PI電流控制算法設計的高性價比細分型驅動器,低噪音,低振動。FPGA與DM422之間通過數字IO接口對步進電機驅動控制。驅動器用于將FPGA發送給步進電機的電脈沖信號轉換為角位移量。本文使用的是42CM04型號步進電機,FPGA與驅動器DM422的數字IO接口連線如圖6所示。

圖6 FPGA與DM422的數字IO接口
其中,EN是步進電機的工作使能信號,該信號拉低時,DM422為使能狀態,電機正常運轉;EN信號為高電平時,DM422功率部分關斷,電機無勵磁。DIR是步進電機方向控制信號,當信號拉高時,則會使步進電機正轉;當信號拉低時,則會使步進電機反轉。PUL是驅動步進電機的脈沖信號。該信號的上升沿會給步進電機一個脈沖,步進電機接收到這個脈沖信號就會轉動一個步距角。A+和A-為步進電機的驅動線,代表A相;B+和B-為步進電機的驅動線,代表B相。
本文采用Vivado平臺,運用Verilog語言自頂向下進行程序設計。通過對步進電機原理的分析,脈沖頻率可以控制步進電機運行速度的快慢,而頻率的快慢取決于單位時間內脈沖數的多少,即在一個周期內,PWM高低電平的個數。每一個高電平輸出一個脈沖。FPGA采用的是模塊化設計,程序分為按鍵消抖模塊(key_fitter)、迭代除法器模塊(Divide)和步進電機模塊(PWM)。其中,數據通過迭代除法器模塊進行處理,得到所需的運動時間,寄存到quotient寄存器,再傳輸到步進電機模塊,步進電機模塊根據得到的運動時間確定減速點,即各個階段的運動時間。按照每個階段的脈沖需求,輸出脈沖(PUL)。按鍵消抖模塊用來消除開關的機械抖動。通過例化的方式將各個模塊的輸入與輸出進行連接。因此在FPGA中實例化這3個模塊,有利于代碼的簡化和修改,使整個系統的實時性以及靈活性得到顯著的提高,從而實現步進電機運動狀態的控制。程序例化后的RTL視圖如圖7所示。

圖7 改進后的梯形加減速算法RTL視圖
3.2.1 按鍵消抖模塊
按鍵消抖[17]模塊是為了消除按鍵的抖動。當按鍵按下時,一個按鍵不會立刻就穩定持續的接通,也不會一下徹底的斷開,而是在閉合和斷開的瞬間伴隨了一連串的抖動。抖動時間的長短是由按鍵的機械特性決定的,一般為5~10 ms。這樣會對步進電機運動時間t造成影響。本文采用延時消抖,首先定義一個記錄按鍵狀態的變量,然后讀取按鍵的狀態,延時后,再讀取按鍵狀態,如果兩次狀態一樣則判斷按鍵按下。
3.2.2 步進電機模塊
1)梯形加減速設計。
步進電機控制模塊需要實現梯形加減速,將梯形加減速分解成啟動、加速、勻速、減速、停止5個部分。因此,代碼的整體框架采用狀態機。一共分為5個狀態,分別為IDLE(空閑狀態)、ADD(加速狀態)、TOP(勻速狀態)、SUB(加速狀態)、STOP(停止狀態)。通過判斷標志位的狀態來實現5個狀態之間的跳轉。如果標志位信息為1,就跳轉至下一個狀態,否則就保持當前狀態。步進電機的啟動需要一個啟動頻率,即步進電機開始轉動的頻率。步進電機的工作頻率為零時,步進電機不會啟動,當工作頻率達到啟動頻率時,步進電機才開始啟動。因此,加速階段是從啟動頻率加速到Vmax對應的頻率,減速階段是從Vmax對應的頻率(最大頻率)減速到啟動頻率,然后步進電機停止運動[18]。
首先,判斷當前步進電機的當前頻率target是否與Vmax對應的頻率target_max一致,若當前頻率小于最大頻率,則進行加速操作,加速度為100 Hz,此時設計一個計時器cnt_add_time用來記錄加速操作的時間。若當前頻率等于最大頻率,則保持當前頻率不變,此時,步進電機進入勻速階段,勻速階段的運行時間為cha=number-cnt_add_time。這里的number為迭代除法器計算出的減速點的時間點。該減速點為加速階段時間和勻速階段時間的和。勻速階段結束后進入減速階段,減速階段的加速度為-100 Hz,并且減速階段的運動時間和加速階段的運動時間保持一致。減速階段結束后進入停止狀態。本系統設計的加減速周期為10 ms,即每過10 ms加速一次或者減速一次。因此需要設定參數CNT_10MS,當計數器計數的值和這個參數一致時,就執行一次加減速操作。CNT_10MS的數值和加減速周期有關。本系統所使用FPGA的晶振時鐘頻率為50 MHz,時鐘周期為20 ns,因此CNT_10MS的數值為5000000。
2)分頻器設計。
步進電機的持續運轉需要一系列的脈沖來維持。因此分頻器的設計可以產生連續的脈沖信號,獲得所需要的脈沖頻率。使用verliog語言進行分頻計數設計,實現方式如下所示:
assign FRE_CNT=(50000000/target_fre)>>1;
其中50000000為FPGA晶振頻率,target_fre為速度對應下的脈沖頻率。再定義一個計數器cnt_pul,當cnt_pul計數的值為FRE_CNT-1’b1時,PUL進行翻轉。在一個周期內,PUL的高低電平形成了一個個脈沖,如此重復下去,可以產生連續不斷的脈沖信號。通過此法,可以將所需的脈沖數在10 ms這個周期內產生并發送給步進電機的驅動器。
3.2.3 迭代除法器模塊
通過迭代除法器[19]可以將減速點計算出來。除法是乘法的逆運算,包括一系列移位和條件減法運算,其流程圖如圖8所示。先把除數左移一位,然后用被除數減去移位后的除數,結果為正,商的位置為1。再將余數左移一位減除數,判斷結果的正負,如果結果為正,商數左移一位,最低位置為1;如果結果為負,商數左移一位,最低位置為0,舍棄余數。重復該移位操作直到移位次數達到設定的值,最后輸出結果。在本文的設計中,根據步進電機模塊中參數的位寬,設置被除數、除數和商的位寬都為48位。因此移位計數器的值為47,移位次數達到47次后輸出結果。判斷移位后做減法所得結果最高位的值,分辨結果的正負,從而進行與結果正負對應的操作。具體實現代碼如下:
if(!remainder_temp[47]) begin
quotient_reg <= (quotient_reg << 1) + 1;
remainder_reg <= remainder_temp << 1;
end
else if(remainder_temp[47])begin
quotient_reg <= quotient_reg << 1;
remainder_reg = remainder_reg << 1;
end
count <= count + 1'b1;
迭代除法器模塊的作用是根據接收到的步進電機位置信息計算出梯形加減速減速點,即步進電機何時進入減速。因此,步進電機可以根據實際工況,改變自己的位置信息,從而提高步進電機控制的靈活性,提高工作效率。

圖8 迭代除法器流程圖
本文針對速度曲線的精度和減速點自適應確定分別進行仿真與實驗。仿真平臺為Vivado 2019.2。
實驗設定目標位置為1085脈沖,起始速度為5脈沖/10 ms,最大速度的脈沖值為20脈沖/10 ms,加速階段的加速度和減速階段的加速度均為1脈沖/10 ms。仿真圖如圖9所示。從圖9中可以看出整個脈沖頻率曲線呈梯形,說明步進電機的加減速控制可以由該系統實現。

圖9 梯形加減速仿真圖
本文采用的實驗平臺由達芬奇A7系列FPGA、DM422驅動器、42步進電機和編碼器組成,仿真實驗平臺如圖10所示。

圖10 仿真實驗平臺框圖
當按下FPGA上的啟動按鍵時,FPGA會將脈沖信號發送給驅動器,驅動器會控制步進電機運動,步進電機和編碼器通過梅花聯軸器連接,將編碼器與控制板的引腳相連接,編碼器會將步進電機的轉速轉換成脈沖信號通過UART串口發送到PC端。實驗結果如圖11所示。

圖11 實驗結果
由圖11可知,在加速階段和減速階段,轉速的誤差較小。到達最大速度時的數值和理想數值誤差小。整個速度曲線平滑。在符合步進電機轉矩特性下,改進的梯形加減速算法能夠很好地實現步進電機梯形加減速。再對編碼器反饋的數據進行處理和分析,得到理想速度曲線和實際速度曲線的轉速差值,如圖12所示。從圖12可以看出,在一次完整的運動過程中,當t的范圍為0~150 ms時,系統處于加速階段,轉速的最大誤差值為0.56 r/s;當t的范圍為150~500 ms時,系統處于勻速階段,轉速的最大誤差值為0.04 r/s;當t的范圍為500~650 ms時,系統處于減速階段,轉速的最大誤差值為0.67 r/s。由于梯形加減速算法自身的局限性,在加速階段和減速階段會出現速度突變的現象。但整個過程的誤差是偏小的,能夠滿足工況的精度要求。

圖12 理想轉速與實際轉速差值
實驗設定目標位置為1115脈沖,起始速度5脈沖/10 ms,最大速度的脈沖值為30脈沖/10 ms,加速階段的加速度和減速階段的加速度均為1脈沖/10 ms。仿真圖如圖13所示。由圖13可知,通過迭代除法器計算出來的整數部分NUMBER-R0=333_333_333(ns),實際減速點的時間為330_020_230.00 ns,理論減速點的時間為333_333_333.33 ns。由于步進電機有啟動頻率,在頻率跳躍時,計數器會重新計數,這就導致起始速度的脈沖發射周期出現誤差。但是,提高系統時鐘后,能夠減小這種誤差。表1是系統時鐘為200 MHz下測得的7個減速點。由表1可知,減速點的精確度最低為98.00%。說明減速點的確定精確度較高,能夠達到系統的設計要求。同時,減速點是由本系統的算法計算出來,這就說明本系統對于步進電機不同的目標位置,都能夠自行計算出減速點。在不同的工況下,該系統具有一定的自適應能力。

圖13 減速點仿真圖

表1 減速點的確定時間
本文通過對步進電機原有的梯形加減速算法分析,對其進行改進,改進后的梯形加減速算法通過時間來確定減速點。實驗結果表明,改進后的梯形加減速算法在加速階段和減速階段理想曲線和實際曲線誤差較小。改進后的步進電機梯形加減速控制能夠保證精度和可靠性,實時性高,代碼實現簡單。在步進電機的位置改變后,能夠自動計算出減速點,具有一定的自適應能力,大大提高了其靈活性,提高了加工效率,對于優化裁切機運動控制系統的軌跡,具有一定的意義。現階段該系統是開環控制,后續可以將編碼器的數據反饋給FPGA做成閉環控制的系統,能夠提高加減速控制的精度,同時可以利用FPGA并行處理的優點,把單軸拓展到多軸上實現裁切機的加減速控制。