- 首頁 >
步進電機加減速方法
步進電機加減速方法
只能夠由數(shù)字信號控制運行的,當脈沖提供給驅(qū)動器時,在過于短的時間里,步進電機控制系統(tǒng)發(fā)出的脈沖數(shù)太多,也就是脈沖頻率過高,將導致步進電機堵轉(zhuǎn)。要解決這個問題,必須采用加減速的辦法。就是說,在步進電機起步時,要給逐漸升高的脈沖頻率,減速時的脈沖頻率需要逐漸減低。這就是我們常說的“加減速”方法。
步進電機轉(zhuǎn)速度,是根據(jù)輸入的脈沖信號的變化來改變的。從理論上講,給驅(qū)動器一個脈沖,步進電機就旋轉(zhuǎn)一個步距角(細分時為一個細分步距角)。實際上,如果脈沖信號變化太快,步進電機由于內(nèi)部的反向電動勢的阻尼作用,轉(zhuǎn)子與定子之間的磁反應(yīng)將跟隨不上電信號的變化,將導致堵轉(zhuǎn)和丟步。
所以步進電機在高速啟動時,需要采用脈沖頻率升速的方法,在停止時也要有降速過程,以保證實現(xiàn)步進電機精密定位控制。加速和減速的原理是一樣的。
在步進電機控制中往往需要對步進電機進行加減速控制,以達到平緩啟停或者達到較高轉(zhuǎn)速而不失步停轉(zhuǎn)的目的,而在加減速控制中控制方法有兩類:
1.查表法;
查表法簡單來說就是通過曲線公式預先計算出加速過程的各個點,再將該點轉(zhuǎn)化為定時器的比較匹配值,載入數(shù)組中,查詢數(shù)組值即可達到加減速的目的。優(yōu)點是運算速度快,占用較少的CPU資源,缺點也很明顯。 1.占用較大的存儲空間,一般加速的點數(shù)都在300-2000點(細分更高的畫可能會更高),若想獲得更平滑的效果,點數(shù)甚至更高,這將會占用大量的單片機內(nèi)存或者程序存儲空間,如果系統(tǒng)支持一般推薦將數(shù)組保存在單片機的程序存儲空間,以節(jié)省寶貴的Ram資源,例如在Arduino uno 中,若直接采樣2000點放到數(shù)組里內(nèi)存直接爆滿(328的運行內(nèi)存2K....)!,好在他提供了 PROGMEM 的操作方式,可以將數(shù)組保存到程序存儲空間。再用 OCR1A = pgm_read_word_near(&AccStep[acc_count]);將數(shù)組讀出。具體實現(xiàn)方法文后有詳細說明。2.更改速度、加速度等不方便,每次更改速度都需要重新生成一次表格,加速度的值更是難以設(shè)置,對于我目前的水平是這樣的,應(yīng)該是可以通過算法增大或者縮放加減速表格的,貌似開源3D打印固件Marlin中是這樣的。
2.實時生成法;
實時生成法,可能會要求更高的CPU計算能力,比較出名的算法是AVR446:Linear speed control of stepper motor,里面提供了詳細的計算以及詳細的實現(xiàn)方法,加速過程中實時計算下一個比較匹配值,以實現(xiàn)加減速的實時控制,優(yōu)點挺多,控制加減速度,速度等參數(shù)更加方便,因為可以通過設(shè)定參數(shù)實時計算出來,缺點就是比較考驗單片機的運算能力,但在AVR446提到的算法中也能在運算能力較低的單片機中實現(xiàn)。具體AVR446的實現(xiàn)將在另一個文章中說明。
加速過程實現(xiàn)方法曲線一般有梯型曲線法以及S(Sigmoid)曲線法,其他接觸過的還有修正正弦曲線法(用在機械臂的軌跡規(guī)劃中),梯形曲線法一般通過加速度公式(S = a*t*t/2)直接求解,S曲線法則是通過SigMoid函數(shù)變形后求解。