王 慶,周 鋒,郭乃宏,孔祥曄,王如剛
(1.鹽城工學(xué)院 信息工程學(xué)院,江蘇 鹽城 224051;2.鹽城雄鷹精密機(jī)械有限公司,江蘇 鹽城 224006)
隨著科學(xué)技術(shù)的飛速發(fā)展,步進(jìn)電機(jī)因其精度高,響應(yīng)快,誤差小等優(yōu)點(diǎn),所以在運(yùn)動(dòng)控制領(lǐng)域的應(yīng)用十分廣泛,同時(shí)對(duì)其運(yùn)動(dòng)控制系統(tǒng)的要求越來(lái)越高。步進(jìn)電機(jī)加減速控制是運(yùn)動(dòng)控制系統(tǒng)中的重要組成部分。在裁切機(jī)的加工中,對(duì)進(jìn)給、啟?;蜍壽E轉(zhuǎn)換等一系列的刀具運(yùn)動(dòng)進(jìn)行加減速控制,能夠提高加工效率和裁切精度。步進(jìn)電機(jī)加減速常用的控制器有可編程邏輯控制器(PLC,programmable logic controller)、單片機(jī)[1-2]和現(xiàn)場(chǎng)可編程門陣列(FPGA,field programmable gate array)。但是,PLC和單片機(jī)的控制方法,不僅操作繁瑣,還會(huì)影響實(shí)際工作效率。FPGA具有并行處理,豐富的邏輯資源,在設(shè)計(jì)過(guò)程中可以根據(jù)實(shí)際的工作需求進(jìn)行靈活更改。而研究人員發(fā)現(xiàn)FPGA可以對(duì)步進(jìn)電機(jī)進(jìn)行高效的控制,能夠?qū)崿F(xiàn)步進(jìn)電機(jī)的啟停和加減速。近些年,許多學(xué)者對(duì)用FPGA控制步進(jìn)電機(jī)做了一系列研究[3-9]。劉鵬[3]提出了以FPGA和STM32單片機(jī)相結(jié)合的算法,實(shí)現(xiàn)了靈活的梯形加減速算法,但是研發(fā)成本高以及邏輯資源占用多。胡承祖[4]提出了基于FPGA采用查表法實(shí)現(xiàn)了梯形加減速算法,雖然減少了成本和資源占用,但是降低了靈活性。邱靜超[5]等人實(shí)現(xiàn)了傳統(tǒng)的梯形加減速算法,但需要計(jì)算每個(gè)階段的時(shí)間才能使步進(jìn)電機(jī)達(dá)到最終位置,靈活性不高。桑彭[6]等人提出了基于FPGA的S型曲線加減速算法,解決了梯形算法中不平穩(wěn)和不連續(xù)的現(xiàn)象,但是計(jì)算量大,實(shí)現(xiàn)困難,采用查表法實(shí)現(xiàn),當(dāng)步進(jìn)電機(jī)位置改變時(shí),需要重新設(shè)計(jì)速度表,操作較為繁瑣。因此,本文提出了一種基于FPGA實(shí)現(xiàn)步進(jìn)電機(jī)的加減速控制,對(duì)比分析梯形加減速算法,指數(shù)加減速算法和S型加減速算法,選擇梯形加減速算法并對(duì)算法做出改進(jìn),用時(shí)間來(lái)確定減速點(diǎn),并且算法能夠自動(dòng)計(jì)算出減速點(diǎn)的位置。在保證精度和可靠性的前提下,能夠提高靈活性,使減速點(diǎn)的確定具有的自適應(yīng)能力。
步進(jìn)電機(jī)[10]是一種將脈沖信號(hào)轉(zhuǎn)換成角位移或線位移的開(kāi)環(huán)控制元電動(dòng)機(jī)。當(dāng)輸入一個(gè)脈沖信號(hào)給步進(jìn)電機(jī),轉(zhuǎn)子就會(huì)轉(zhuǎn)動(dòng)一個(gè)角度或者是前進(jìn)一步,這個(gè)角度簡(jiǎn)稱為步距角。步距角和輸入的脈沖數(shù)成正比,轉(zhuǎn)速與脈沖頻率成正比。因此,只需控制脈沖頻率就可以控制步進(jìn)電機(jī)的運(yùn)動(dòng)快慢。
步進(jìn)電機(jī)按結(jié)構(gòu)可以分為反應(yīng)式步進(jìn)電機(jī)、永磁式步進(jìn)電機(jī)、混合式步進(jìn)電機(jī)等,其中最廣泛使用的是兩相混合式步進(jìn)電機(jī),主要是由定子鐵芯、定子組件、轉(zhuǎn)子鐵芯組成。步進(jìn)電機(jī)的基本參數(shù)有空載啟動(dòng)頻率、步距角和精度。其中步距角表示每個(gè)脈沖對(duì)應(yīng)步進(jìn)電機(jī)走一步所需要旋轉(zhuǎn)的角度,由公式(1)確定。
B=360°/ZKm
(1)
其中:B為步距角;Z為轉(zhuǎn)子齒數(shù),K為通電系數(shù);m為定子繞組相數(shù)。
本文使用的步進(jìn)電機(jī)為兩相混合式42步進(jìn)電機(jī),步距角為1.8°,即步進(jìn)電機(jī)轉(zhuǎn)一圈需要200個(gè)脈沖。
加減速控制是根據(jù)給定的步進(jìn)電機(jī)目標(biāo)位置、初始速度、最大速度和加速度等數(shù)據(jù)來(lái)計(jì)算出當(dāng)前時(shí)間的速度值。常見(jiàn)的加減速算法有S型加減速[11-12]、指數(shù)加減速[13]和梯形加減速[14]等算法。
如圖1所示,S型加減速運(yùn)動(dòng)常用來(lái)解決運(yùn)動(dòng)控制中加速度突變的現(xiàn)象。S型曲線并不是一種固定的算法,一般分為7個(gè)部分,包括加加速階段、勻加速階段、減加速階段、勻速階段、加減速階段、勻減速階段和減減速階段。S型曲線的核心思想是讓加速度不產(chǎn)生突變,其加速平穩(wěn),柔性快速,。但是由于涉及階段較多,算法復(fù)雜,實(shí)現(xiàn)難度高?,F(xiàn)階段的S型曲線多采用查表法,即事先規(guī)劃好速度數(shù)曲線,再將對(duì)應(yīng)的曲線生成速度數(shù)據(jù)表放入ROM核中,再根據(jù)要求從ROM中讀取速度數(shù)據(jù)表。這種方式不僅操作繁瑣,而且靈活性低。
圖1 S型曲線加減速
如圖2所示,指數(shù)加減速運(yùn)動(dòng),就是在加速階段和減速階段的曲線變化成指數(shù)函數(shù)。
圖2 指數(shù)函數(shù)加減速
指數(shù)加減速運(yùn)動(dòng)在起始速度時(shí),它的加速度是最大的,隨后不斷衰減,在進(jìn)入勻速運(yùn)動(dòng)時(shí)的加速度最小,勻速運(yùn)動(dòng)時(shí)候的加速度為0,并保持最大速度。隨后進(jìn)入減速階段,在減速階段中,速度以最大的加速度減速,隨后加速度不斷衰減至最小,當(dāng)速度為0時(shí),運(yùn)動(dòng)停止。指數(shù)加減速的特點(diǎn)是速度平穩(wěn),運(yùn)動(dòng)精度較高,但是初始速度高,容易引起步進(jìn)電機(jī)的沖擊,在加減速的起點(diǎn)存在加減速突變的現(xiàn)象,限制了加速度的提高。
梯形加減速原理:運(yùn)動(dòng)開(kāi)始后,在加速階段以恒定的加速度加速至最大速度,在勻速階段以恒定的速度保持不變,在減速階段以恒定的加速度減速至最低速度。其速度曲線和加速度曲線如圖3所示。
圖3 速度曲線和加速度曲線
梯形加減速曲線算法簡(jiǎn)單方便,占用時(shí)間少,響應(yīng)快,實(shí)現(xiàn)簡(jiǎn)單,但是在加速階段和減速階段容易產(chǎn)生速度突變。適用于頻繁啟停和速度變化范圍大的場(chǎng)合。梯形加減速控制可以分為3個(gè)階段:
1)加速階段。如果當(dāng)前速度小于最大速度時(shí),就會(huì)以某一恒定不變的加速度A加速,直至到達(dá)最大速度Vmax為止。
2)勻速階段。步進(jìn)電機(jī)會(huì)保持最大速度Vmax不變,此時(shí)加速度A的值為0。
3)減速階段。加速度為-A,與加速階段的加速度大小相等,方向相反,直到減速至Vend停止運(yùn)動(dòng)。
綜上所述,針對(duì)裁切機(jī)工作時(shí)需要頻繁啟停的特性,梯形加減速算法相對(duì)于其它兩種算法可靠性高,實(shí)現(xiàn)簡(jiǎn)單。但是傳統(tǒng)的加減速算法采用ROM查表法,該方法雖然實(shí)現(xiàn)簡(jiǎn)單,但是需要先規(guī)劃好速度數(shù)據(jù)表,當(dāng)步進(jìn)電機(jī)位置改變后需要重新規(guī)劃速度表,操作繁瑣,不利于實(shí)際應(yīng)用。或者通過(guò)計(jì)算每個(gè)階段的運(yùn)動(dòng)時(shí)間的方法來(lái)實(shí)現(xiàn)梯形加減速,該法在計(jì)算上比較復(fù)雜。
由圖3可知,路程等于時(shí)間乘速度,因此步進(jìn)電機(jī)的最終位置為速度曲線的面積。每個(gè)階段面積由公式(2)確定:
(2)
其中:k為加速度A;S1為加速階段的面積;S2為勻速階段的面積;S3為減速階段的面積。
梯形加減速曲線與坐標(biāo)軸的面積可由公式(3)確定:
S=S1+S2+S3
(3)
其中:S為梯形加減速曲線的面積。
但是,該方法在計(jì)算上比較復(fù)雜,在知道步進(jìn)電機(jī)的目標(biāo)位置后,需要計(jì)算出每個(gè)階段的運(yùn)動(dòng)時(shí)間,操作繁瑣,在實(shí)際應(yīng)用中會(huì)降低工作效率。
針對(duì)上述傳統(tǒng)的梯形加減速的缺點(diǎn),通過(guò)對(duì)減速點(diǎn)的確定改進(jìn)梯形加減速算法。本文設(shè)計(jì)的梯形加減速算法的減速點(diǎn)是通過(guò)步進(jìn)電機(jī)運(yùn)動(dòng)的時(shí)間來(lái)確定的。改進(jìn)后的加減速圖如圖4所示。
圖4 改進(jìn)后的速度曲線圖
為了便于確定減速點(diǎn),需要將減速階段的面積S3剪切到加速階段的面積S1處。但是步進(jìn)電機(jī)有一個(gè)啟動(dòng)頻率的概念,因此,起始速度Vs不為0,這就導(dǎo)致將速度曲線分割后,把減速階段的面積拼湊到加速階段無(wú)法成為一個(gè)完整的矩形,會(huì)缺少一塊面積Sa。這樣就無(wú)法計(jì)算出減速點(diǎn)的時(shí)間。所以,需要對(duì)速度曲線修補(bǔ),修補(bǔ)后的圖形為一個(gè)初始速度從0開(kāi)始的等腰直角梯形。如圖4(a)所示,將減速階段的面積拼接到加速階段,如圖4(b)所示,拼接后的速度曲線為矩形。矩形的面積是由原先速度曲線面積圖和修補(bǔ)的面積相加得來(lái)的。新矩形的長(zhǎng)由兩部分組成,分別為加速階段的時(shí)間與勻速階段的時(shí)間。修補(bǔ)的面積可以由公式(4)確定:
Sa=VSt0
(4)
其中:t0可由公式k(-t0)+VS=0求出。且t0只與起始速度Vs和加速度A有關(guān)。因此矩形的面積可以根據(jù)公式(5)得出:
Sn=Sa+S
(5)
其中:Sn為拼接后的速度曲線面積,S為梯形加減速曲線的面積。
根據(jù)公式(6)求出減速點(diǎn)的時(shí)間:
t2=Sn/Vmax-t0
(6)
這樣,無(wú)論步進(jìn)電機(jī)的目標(biāo)位置如何改變,該算法能夠自動(dòng)確定減速點(diǎn),從而確定步進(jìn)電機(jī)每個(gè)階段的運(yùn)動(dòng)時(shí)間。相比于通過(guò)計(jì)算剩余減速距離的方法確定減速點(diǎn),該算法確定減速點(diǎn)的過(guò)程簡(jiǎn)單。
圖5 系統(tǒng)設(shè)計(jì)框圖
本文設(shè)計(jì)的控制系統(tǒng)由FPGA、步進(jìn)電機(jī)驅(qū)動(dòng)器和步進(jìn)電機(jī)本體三部分組成[15-16]。其系統(tǒng)設(shè)計(jì)框圖如圖5所示。當(dāng)按鍵按下時(shí),按鍵消抖模塊首先會(huì)判斷按鍵是否按下,如果按下,會(huì)給步進(jìn)電機(jī)模塊一個(gè)使能信號(hào),步進(jìn)電機(jī)模塊會(huì)根據(jù)標(biāo)志位的狀態(tài)選擇運(yùn)動(dòng)模式,然后輸出脈沖。同時(shí),迭代除法器模塊會(huì)根據(jù)最大速度和路程,計(jì)算出減速點(diǎn)的時(shí)間,送給步進(jìn)電機(jī)模塊,步進(jìn)電機(jī)模塊會(huì)根據(jù)減速點(diǎn)的時(shí)間給每個(gè)運(yùn)動(dòng)模式分配運(yùn)動(dòng)時(shí)間。
FPGA選用Xilinx公司的A7系列,芯片型號(hào)為XC7A35TFGG484I-2,利用串口通信將上位機(jī)的命令傳遞給FPGA,F(xiàn)PGA通過(guò)步進(jìn)電機(jī)電機(jī)驅(qū)動(dòng)器DM422驅(qū)動(dòng)步進(jìn)電機(jī),從而控制步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)。DM422兩相步進(jìn)電機(jī)驅(qū)動(dòng)器是基于PI電流控制算法設(shè)計(jì)的高性價(jià)比細(xì)分型驅(qū)動(dòng)器,低噪音,低振動(dòng)。FPGA與DM422之間通過(guò)數(shù)字IO接口對(duì)步進(jìn)電機(jī)驅(qū)動(dòng)控制。驅(qū)動(dòng)器用于將FPGA發(fā)送給步進(jìn)電機(jī)的電脈沖信號(hào)轉(zhuǎn)換為角位移量。本文使用的是42CM04型號(hào)步進(jìn)電機(jī),F(xiàn)PGA與驅(qū)動(dòng)器DM422的數(shù)字IO接口連線如圖6所示。
圖6 FPGA與DM422的數(shù)字IO接口
其中,EN是步進(jìn)電機(jī)的工作使能信號(hào),該信號(hào)拉低時(shí),DM422為使能狀態(tài),電機(jī)正常運(yùn)轉(zhuǎn);EN信號(hào)為高電平時(shí),DM422功率部分關(guān)斷,電機(jī)無(wú)勵(lì)磁。DIR是步進(jìn)電機(jī)方向控制信號(hào),當(dāng)信號(hào)拉高時(shí),則會(huì)使步進(jìn)電機(jī)正轉(zhuǎn);當(dāng)信號(hào)拉低時(shí),則會(huì)使步進(jìn)電機(jī)反轉(zhuǎn)。PUL是驅(qū)動(dòng)步進(jìn)電機(jī)的脈沖信號(hào)。該信號(hào)的上升沿會(huì)給步進(jìn)電機(jī)一個(gè)脈沖,步進(jìn)電機(jī)接收到這個(gè)脈沖信號(hào)就會(huì)轉(zhuǎn)動(dòng)一個(gè)步距角。A+和A-為步進(jìn)電機(jī)的驅(qū)動(dòng)線,代表A相;B+和B-為步進(jìn)電機(jī)的驅(qū)動(dòng)線,代表B相。
本文采用Vivado平臺(tái),運(yùn)用Verilog語(yǔ)言自頂向下進(jìn)行程序設(shè)計(jì)。通過(guò)對(duì)步進(jìn)電機(jī)原理的分析,脈沖頻率可以控制步進(jìn)電機(jī)運(yùn)行速度的快慢,而頻率的快慢取決于單位時(shí)間內(nèi)脈沖數(shù)的多少,即在一個(gè)周期內(nèi),PWM高低電平的個(gè)數(shù)。每一個(gè)高電平輸出一個(gè)脈沖。FPGA采用的是模塊化設(shè)計(jì),程序分為按鍵消抖模塊(key_fitter)、迭代除法器模塊(Divide)和步進(jìn)電機(jī)模塊(PWM)。其中,數(shù)據(jù)通過(guò)迭代除法器模塊進(jìn)行處理,得到所需的運(yùn)動(dòng)時(shí)間,寄存到quotient寄存器,再傳輸?shù)讲竭M(jìn)電機(jī)模塊,步進(jìn)電機(jī)模塊根據(jù)得到的運(yùn)動(dòng)時(shí)間確定減速點(diǎn),即各個(gè)階段的運(yùn)動(dòng)時(shí)間。按照每個(gè)階段的脈沖需求,輸出脈沖(PUL)。按鍵消抖模塊用來(lái)消除開(kāi)關(guān)的機(jī)械抖動(dòng)。通過(guò)例化的方式將各個(gè)模塊的輸入與輸出進(jìn)行連接。因此在FPGA中實(shí)例化這3個(gè)模塊,有利于代碼的簡(jiǎn)化和修改,使整個(gè)系統(tǒng)的實(shí)時(shí)性以及靈活性得到顯著的提高,從而實(shí)現(xiàn)步進(jìn)電機(jī)運(yùn)動(dòng)狀態(tài)的控制。程序例化后的RTL視圖如圖7所示。
圖7 改進(jìn)后的梯形加減速算法RTL視圖
3.2.1 按鍵消抖模塊
按鍵消抖[17]模塊是為了消除按鍵的抖動(dòng)。當(dāng)按鍵按下時(shí),一個(gè)按鍵不會(huì)立刻就穩(wěn)定持續(xù)的接通,也不會(huì)一下徹底的斷開(kāi),而是在閉合和斷開(kāi)的瞬間伴隨了一連串的抖動(dòng)。抖動(dòng)時(shí)間的長(zhǎng)短是由按鍵的機(jī)械特性決定的,一般為5~10 ms。這樣會(huì)對(duì)步進(jìn)電機(jī)運(yùn)動(dòng)時(shí)間t造成影響。本文采用延時(shí)消抖,首先定義一個(gè)記錄按鍵狀態(tài)的變量,然后讀取按鍵的狀態(tài),延時(shí)后,再讀取按鍵狀態(tài),如果兩次狀態(tài)一樣則判斷按鍵按下。
3.2.2 步進(jìn)電機(jī)模塊
1)梯形加減速設(shè)計(jì)。
步進(jìn)電機(jī)控制模塊需要實(shí)現(xiàn)梯形加減速,將梯形加減速分解成啟動(dòng)、加速、勻速、減速、停止5個(gè)部分。因此,代碼的整體框架采用狀態(tài)機(jī)。一共分為5個(gè)狀態(tài),分別為IDLE(空閑狀態(tài))、ADD(加速狀態(tài))、TOP(勻速狀態(tài))、SUB(加速狀態(tài))、STOP(停止?fàn)顟B(tài))。通過(guò)判斷標(biāo)志位的狀態(tài)來(lái)實(shí)現(xiàn)5個(gè)狀態(tài)之間的跳轉(zhuǎn)。如果標(biāo)志位信息為1,就跳轉(zhuǎn)至下一個(gè)狀態(tài),否則就保持當(dāng)前狀態(tài)。步進(jìn)電機(jī)的啟動(dòng)需要一個(gè)啟動(dòng)頻率,即步進(jìn)電機(jī)開(kāi)始轉(zhuǎn)動(dòng)的頻率。步進(jìn)電機(jī)的工作頻率為零時(shí),步進(jìn)電機(jī)不會(huì)啟動(dòng),當(dāng)工作頻率達(dá)到啟動(dòng)頻率時(shí),步進(jìn)電機(jī)才開(kāi)始啟動(dòng)。因此,加速階段是從啟動(dòng)頻率加速到Vmax對(duì)應(yīng)的頻率,減速階段是從Vmax對(duì)應(yīng)的頻率(最大頻率)減速到啟動(dòng)頻率,然后步進(jìn)電機(jī)停止運(yùn)動(dòng)[18]。
首先,判斷當(dāng)前步進(jìn)電機(jī)的當(dāng)前頻率target是否與Vmax對(duì)應(yīng)的頻率target_max一致,若當(dāng)前頻率小于最大頻率,則進(jìn)行加速操作,加速度為100 Hz,此時(shí)設(shè)計(jì)一個(gè)計(jì)時(shí)器cnt_add_time用來(lái)記錄加速操作的時(shí)間。若當(dāng)前頻率等于最大頻率,則保持當(dāng)前頻率不變,此時(shí),步進(jìn)電機(jī)進(jìn)入勻速階段,勻速階段的運(yùn)行時(shí)間為cha=number-cnt_add_time。這里的number為迭代除法器計(jì)算出的減速點(diǎn)的時(shí)間點(diǎn)。該減速點(diǎn)為加速階段時(shí)間和勻速階段時(shí)間的和。勻速階段結(jié)束后進(jìn)入減速階段,減速階段的加速度為-100 Hz,并且減速階段的運(yùn)動(dòng)時(shí)間和加速階段的運(yùn)動(dòng)時(shí)間保持一致。減速階段結(jié)束后進(jìn)入停止?fàn)顟B(tài)。本系統(tǒng)設(shè)計(jì)的加減速周期為10 ms,即每過(guò)10 ms加速一次或者減速一次。因此需要設(shè)定參數(shù)CNT_10MS,當(dāng)計(jì)數(shù)器計(jì)數(shù)的值和這個(gè)參數(shù)一致時(shí),就執(zhí)行一次加減速操作。CNT_10MS的數(shù)值和加減速周期有關(guān)。本系統(tǒng)所使用FPGA的晶振時(shí)鐘頻率為50 MHz,時(shí)鐘周期為20 ns,因此CNT_10MS的數(shù)值為5000000。
2)分頻器設(shè)計(jì)。
步進(jìn)電機(jī)的持續(xù)運(yùn)轉(zhuǎn)需要一系列的脈沖來(lái)維持。因此分頻器的設(shè)計(jì)可以產(chǎn)生連續(xù)的脈沖信號(hào),獲得所需要的脈沖頻率。使用verliog語(yǔ)言進(jìn)行分頻計(jì)數(shù)設(shè)計(jì),實(shí)現(xiàn)方式如下所示:
assign FRE_CNT=(50000000/target_fre)>>1;
其中50000000為FPGA晶振頻率,target_fre為速度對(duì)應(yīng)下的脈沖頻率。再定義一個(gè)計(jì)數(shù)器cnt_pul,當(dāng)cnt_pul計(jì)數(shù)的值為FRE_CNT-1’b1時(shí),PUL進(jìn)行翻轉(zhuǎn)。在一個(gè)周期內(nèi),PUL的高低電平形成了一個(gè)個(gè)脈沖,如此重復(fù)下去,可以產(chǎn)生連續(xù)不斷的脈沖信號(hào)。通過(guò)此法,可以將所需的脈沖數(shù)在10 ms這個(gè)周期內(nèi)產(chǎn)生并發(fā)送給步進(jìn)電機(jī)的驅(qū)動(dòng)器。
3.2.3 迭代除法器模塊
通過(guò)迭代除法器[19]可以將減速點(diǎn)計(jì)算出來(lái)。除法是乘法的逆運(yùn)算,包括一系列移位和條件減法運(yùn)算,其流程圖如圖8所示。先把除數(shù)左移一位,然后用被除數(shù)減去移位后的除數(shù),結(jié)果為正,商的位置為1。再將余數(shù)左移一位減除數(shù),判斷結(jié)果的正負(fù),如果結(jié)果為正,商數(shù)左移一位,最低位置為1;如果結(jié)果為負(fù),商數(shù)左移一位,最低位置為0,舍棄余數(shù)。重復(fù)該移位操作直到移位次數(shù)達(dá)到設(shè)定的值,最后輸出結(jié)果。在本文的設(shè)計(jì)中,根據(jù)步進(jìn)電機(jī)模塊中參數(shù)的位寬,設(shè)置被除數(shù)、除數(shù)和商的位寬都為48位。因此移位計(jì)數(shù)器的值為47,移位次數(shù)達(dá)到47次后輸出結(jié)果。判斷移位后做減法所得結(jié)果最高位的值,分辨結(jié)果的正負(fù),從而進(jìn)行與結(jié)果正負(fù)對(duì)應(yīng)的操作。具體實(shí)現(xiàn)代碼如下:
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;
迭代除法器模塊的作用是根據(jù)接收到的步進(jìn)電機(jī)位置信息計(jì)算出梯形加減速減速點(diǎn),即步進(jìn)電機(jī)何時(shí)進(jìn)入減速。因此,步進(jìn)電機(jī)可以根據(jù)實(shí)際工況,改變自己的位置信息,從而提高步進(jìn)電機(jī)控制的靈活性,提高工作效率。
圖8 迭代除法器流程圖
本文針對(duì)速度曲線的精度和減速點(diǎn)自適應(yīng)確定分別進(jìn)行仿真與實(shí)驗(yàn)。仿真平臺(tái)為Vivado 2019.2。
實(shí)驗(yàn)設(shè)定目標(biāo)位置為1085脈沖,起始速度為5脈沖/10 ms,最大速度的脈沖值為20脈沖/10 ms,加速階段的加速度和減速階段的加速度均為1脈沖/10 ms。仿真圖如圖9所示。從圖9中可以看出整個(gè)脈沖頻率曲線呈梯形,說(shuō)明步進(jìn)電機(jī)的加減速控制可以由該系統(tǒng)實(shí)現(xiàn)。
圖9 梯形加減速仿真圖
本文采用的實(shí)驗(yàn)平臺(tái)由達(dá)芬奇A7系列FPGA、DM422驅(qū)動(dòng)器、42步進(jìn)電機(jī)和編碼器組成,仿真實(shí)驗(yàn)平臺(tái)如圖10所示。
圖10 仿真實(shí)驗(yàn)平臺(tái)框圖
當(dāng)按下FPGA上的啟動(dòng)按鍵時(shí),F(xiàn)PGA會(huì)將脈沖信號(hào)發(fā)送給驅(qū)動(dòng)器,驅(qū)動(dòng)器會(huì)控制步進(jìn)電機(jī)運(yùn)動(dòng),步進(jìn)電機(jī)和編碼器通過(guò)梅花聯(lián)軸器連接,將編碼器與控制板的引腳相連接,編碼器會(huì)將步進(jìn)電機(jī)的轉(zhuǎn)速轉(zhuǎn)換成脈沖信號(hào)通過(guò)UART串口發(fā)送到PC端。實(shí)驗(yàn)結(jié)果如圖11所示。
圖11 實(shí)驗(yàn)結(jié)果
由圖11可知,在加速階段和減速階段,轉(zhuǎn)速的誤差較小。到達(dá)最大速度時(shí)的數(shù)值和理想數(shù)值誤差小。整個(gè)速度曲線平滑。在符合步進(jìn)電機(jī)轉(zhuǎn)矩特性下,改進(jìn)的梯形加減速算法能夠很好地實(shí)現(xiàn)步進(jìn)電機(jī)梯形加減速。再對(duì)編碼器反饋的數(shù)據(jù)進(jìn)行處理和分析,得到理想速度曲線和實(shí)際速度曲線的轉(zhuǎn)速差值,如圖12所示。從圖12可以看出,在一次完整的運(yùn)動(dòng)過(guò)程中,當(dāng)t的范圍為0~150 ms時(shí),系統(tǒng)處于加速階段,轉(zhuǎn)速的最大誤差值為0.56 r/s;當(dāng)t的范圍為150~500 ms時(shí),系統(tǒng)處于勻速階段,轉(zhuǎn)速的最大誤差值為0.04 r/s;當(dāng)t的范圍為500~650 ms時(shí),系統(tǒng)處于減速階段,轉(zhuǎn)速的最大誤差值為0.67 r/s。由于梯形加減速算法自身的局限性,在加速階段和減速階段會(huì)出現(xiàn)速度突變的現(xiàn)象。但整個(gè)過(guò)程的誤差是偏小的,能夠滿足工況的精度要求。
圖12 理想轉(zhuǎn)速與實(shí)際轉(zhuǎn)速差值
實(shí)驗(yàn)設(shè)定目標(biāo)位置為1115脈沖,起始速度5脈沖/10 ms,最大速度的脈沖值為30脈沖/10 ms,加速階段的加速度和減速階段的加速度均為1脈沖/10 ms。仿真圖如圖13所示。由圖13可知,通過(guò)迭代除法器計(jì)算出來(lái)的整數(shù)部分NUMBER-R0=333_333_333(ns),實(shí)際減速點(diǎn)的時(shí)間為330_020_230.00 ns,理論減速點(diǎn)的時(shí)間為333_333_333.33 ns。由于步進(jìn)電機(jī)有啟動(dòng)頻率,在頻率跳躍時(shí),計(jì)數(shù)器會(huì)重新計(jì)數(shù),這就導(dǎo)致起始速度的脈沖發(fā)射周期出現(xiàn)誤差。但是,提高系統(tǒng)時(shí)鐘后,能夠減小這種誤差。表1是系統(tǒng)時(shí)鐘為200 MHz下測(cè)得的7個(gè)減速點(diǎn)。由表1可知,減速點(diǎn)的精確度最低為98.00%。說(shuō)明減速點(diǎn)的確定精確度較高,能夠達(dá)到系統(tǒng)的設(shè)計(jì)要求。同時(shí),減速點(diǎn)是由本系統(tǒng)的算法計(jì)算出來(lái),這就說(shuō)明本系統(tǒng)對(duì)于步進(jìn)電機(jī)不同的目標(biāo)位置,都能夠自行計(jì)算出減速點(diǎn)。在不同的工況下,該系統(tǒng)具有一定的自適應(yīng)能力。
圖13 減速點(diǎn)仿真圖
表1 減速點(diǎn)的確定時(shí)間
本文通過(guò)對(duì)步進(jìn)電機(jī)原有的梯形加減速算法分析,對(duì)其進(jìn)行改進(jìn),改進(jìn)后的梯形加減速算法通過(guò)時(shí)間來(lái)確定減速點(diǎn)。實(shí)驗(yàn)結(jié)果表明,改進(jìn)后的梯形加減速算法在加速階段和減速階段理想曲線和實(shí)際曲線誤差較小。改進(jìn)后的步進(jìn)電機(jī)梯形加減速控制能夠保證精度和可靠性,實(shí)時(shí)性高,代碼實(shí)現(xiàn)簡(jiǎn)單。在步進(jìn)電機(jī)的位置改變后,能夠自動(dòng)計(jì)算出減速點(diǎn),具有一定的自適應(yīng)能力,大大提高了其靈活性,提高了加工效率,對(duì)于優(yōu)化裁切機(jī)運(yùn)動(dòng)控制系統(tǒng)的軌跡,具有一定的意義。現(xiàn)階段該系統(tǒng)是開(kāi)環(huán)控制,后續(xù)可以將編碼器的數(shù)據(jù)反饋給FPGA做成閉環(huán)控制的系統(tǒng),能夠提高加減速控制的精度,同時(shí)可以利用FPGA并行處理的優(yōu)點(diǎn),把單軸拓展到多軸上實(shí)現(xiàn)裁切機(jī)的加減速控制。