步進(jìn)電機(jī)驅(qū)動(dòng)算法——梯形加減速算法
掃描二維碼
隨時(shí)隨地手機(jī)看文章
點(diǎn)擊上方「嵌入式云IOT技術(shù)圈」,選擇「置頂公眾號(hào)」第一時(shí)間查看嵌入式筆記!
步進(jìn)電機(jī)梯形加減速
電機(jī)的控制方式一般分為開環(huán)控制與閉環(huán)控制兩種控制方式,其中開環(huán)控制原理框圖如下:????這種種控制方式的特點(diǎn)是:控制簡單、實(shí)現(xiàn)容易、價(jià)格較低,這種開環(huán)控制方式,負(fù)載位置對(duì)控制電路沒有反饋。????對(duì)于步進(jìn)電機(jī),控制脈沖的輸入并不依賴于轉(zhuǎn)子的位置,而是按一固定的規(guī)律發(fā)出控制脈沖,如果勵(lì)磁變化太快,電機(jī)不能移動(dòng)到新的位置,那么實(shí)際負(fù)載位置與理想位置就會(huì)產(chǎn)生一個(gè)偏差,就有可能出現(xiàn)失步或者過沖現(xiàn)象,所以需要使用加減速算法。梯形加減速算法,S加減速算法等就是步進(jìn)電機(jī)開環(huán)控制的應(yīng)用。????使用步進(jìn)電機(jī)驅(qū)動(dòng)器驅(qū)動(dòng)步進(jìn)電機(jī)。當(dāng)脈沖提供給驅(qū)動(dòng)器時(shí),在過于短的時(shí)間里,控制系統(tǒng)發(fā)出的脈沖數(shù)太多,也就是脈沖頻率過高,將導(dǎo)致步進(jìn)電機(jī)堵轉(zhuǎn)。要解決這個(gè)問題,一般采用加減速的辦法。????就是說,在步進(jìn)電機(jī)起步時(shí),要給逐漸升高的脈沖頻率,減速時(shí)的脈沖頻率需要逐漸降低。????加速過程,是由基礎(chǔ)頻率(低于步進(jìn)電機(jī)的直接啟動(dòng)的最高頻率)與跳變頻率(逐漸加快的頻率)組成加速曲線(降速過程反之)。跳變頻率是指步進(jìn)電機(jī)在基礎(chǔ)頻率上逐漸提高的頻率,此頻率不能太大,否則會(huì)產(chǎn)生堵轉(zhuǎn)和丟步。????加減速曲線一般為直線(梯形)、指數(shù)或者S型曲線等。梯形加減速和S型曲線比較
????直線(梯形) 定義:指按直線方式(從啟動(dòng)速度到目標(biāo)速度的加減速),以一定的比例進(jìn)行加速/減速。????“S”型曲線定義:加速/減速開始時(shí)速度比較緩慢,然后逐漸加快。在加速/減速接近結(jié)束時(shí)速度再次減慢下來,從而使移動(dòng)較為穩(wěn) 定。S 字加減速的類型有 Sin 曲線、2 次曲線、循環(huán)曲線、3 次曲線。如何產(chǎn)生PWM波及TIMx定時(shí)器配置
????假設(shè)選型完畢,使用步進(jìn)電機(jī)驅(qū)動(dòng)器驅(qū)動(dòng)步進(jìn)電機(jī),細(xì)分?jǐn)?shù)為32,步進(jìn)電機(jī)步距角為1.8°,即200個(gè)脈沖轉(zhuǎn)動(dòng)一圈。????使用定時(shí)器來產(chǎn)生PWM波:定時(shí)器計(jì)數(shù)器,計(jì)數(shù)小于num值時(shí),輸出高電平,大于num值小于2*num值時(shí),輸出低電平。這樣就產(chǎn)生了一個(gè)脈沖。????定時(shí)器配置模式可以選擇輸出比較模式,使用此模式輸出PWM波,簡單來說就是當(dāng)計(jì)數(shù)器與捕獲/比較寄存器當(dāng)前值匹配時(shí),輸出比較功能做出不同的動(dòng)作。比如:當(dāng)計(jì)數(shù)器比捕獲/比較寄存當(dāng)前值小時(shí),輸出高電平,達(dá)到比較值(捕獲/比較寄存器當(dāng)前值)后,翻轉(zhuǎn)電平輸出低電平。再重新設(shè)置新的比較值,如此反復(fù),即可輸出PWM波。梯形加減速算法原理分析
1.梯形加減速
????為讓步進(jìn)電機(jī)盡量不出現(xiàn)丟步和過沖情況,在電機(jī)啟動(dòng)和停止過程使用加減速是非常有必要的。在加減速階段,加速度、速度、和位置對(duì)應(yīng)關(guān)系如圖1所示:圖 1 加速度、速度和位置對(duì)應(yīng)關(guān)系????δt是兩個(gè)脈沖之前的時(shí)間間隔,所以它的大小將決定著步進(jìn)電機(jī)轉(zhuǎn)速,為讓電機(jī)轉(zhuǎn)速符合加減速曲線,一個(gè)非常重要的步驟是計(jì)算合適時(shí)間間隔δt,在加減速階段,δt可以認(rèn)為是線性變化的,而在平穩(wěn)速度階段δt也是平穩(wěn)不變的。使用定時(shí)器的計(jì)數(shù)頻率來離散步進(jìn)控制步進(jìn)電機(jī)運(yùn)動(dòng)和處理時(shí)間間隔,見圖2:圖2 速度曲線與步進(jìn)電機(jī)脈沖/速度
2.步進(jìn)電機(jī)基礎(chǔ)方程
????如果要步進(jìn)電機(jī)以恒定的速度旋轉(zhuǎn),我們就需要以固定的頻率發(fā)送脈沖,我們通過控制器的定時(shí)器功能來實(shí)現(xiàn)脈沖的發(fā)送,如圖3所示:圖 3 步進(jìn)電機(jī)控制脈沖
??? t0 為脈沖發(fā)送的起始時(shí)刻,t1 為發(fā)送第二個(gè)脈沖的時(shí)刻,t2 為發(fā)送第三個(gè)脈沖的時(shí)刻。t0 與t1 之間的時(shí)間間隔(時(shí)間延時(shí))為 ,其中C0 為定時(shí)器在t0 與t1 這段時(shí)間的定時(shí)器計(jì)數(shù)值, 為定時(shí)器的計(jì)數(shù)周期。t1 與t2 之間的時(shí)間間隔為δt =C1tt,其中C1 為定時(shí)器在t1 與t2 這段時(shí)間的計(jì)數(shù)值,tt為定時(shí)器的計(jì)數(shù)周期。
????比如說我們?cè)诔绦蛑信渲枚〞r(shí)器預(yù)分頻器為35,那定時(shí)器時(shí)鐘頻率為72MHz/(35 1)=2MHz,那么周期值 就是1/2M,C就是以 為基本單位的一個(gè)完整步進(jìn)脈沖的定時(shí)器計(jì)數(shù)值。????假定產(chǎn)生脈沖的定時(shí)器的計(jì)數(shù)頻率為ft,那么 = 1/ft,可以推出以下公式(中括號(hào)里邊為單位,下同):公式 1 脈沖時(shí)間間隔
公式 2 步距角、位置和速度計(jì)算方法
其中:
spr:steps per round,
步進(jìn)電機(jī)旋轉(zhuǎn)一圈脈沖數(shù),
為與電機(jī)相關(guān)常數(shù)
n:脈沖數(shù)
rad:弧度單位
1rad/sec = 60/2π ≈ 9.55rpm
rpm:轉(zhuǎn)每分鐘(rounds per minutes),
常用轉(zhuǎn)速單位
3.精確計(jì)算步進(jìn)時(shí)間間隔
某個(gè)時(shí)刻的速度可以由加速度來求得:公式 3 加速度求出速度對(duì)應(yīng)的電機(jī)旋轉(zhuǎn)角度(即位置)也是可以求得:
公式 4 旋轉(zhuǎn)角度(位置)計(jì)算
????第 n 個(gè)步進(jìn)脈沖后產(chǎn)生的軸偏移角度θ= nα所以前 n 個(gè)脈沖的總時(shí)間和第 n 個(gè)步進(jìn)脈沖的脈沖周期時(shí)間:
公式 5 第n個(gè)脈沖相關(guān)時(shí)間計(jì)算
最終,可以求得第 n 個(gè)脈沖實(shí)際需求的定時(shí)器計(jì)數(shù)值:
公式 6 第n個(gè)脈沖實(shí)際需求的定時(shí)器計(jì)數(shù)值
那么,第1個(gè)脈沖的定時(shí)器計(jì)數(shù)值為 :
公式 7 第1和n個(gè)脈沖的定時(shí)器計(jì)數(shù)值
????由于一般控制器的計(jì)算能力是有限的,連續(xù)兩次計(jì)算開方根會(huì)很費(fèi)時(shí),因此考慮使用多項(xiàng)式來展開來減少運(yùn)算。根據(jù)泰勒公式的一個(gè)特例:麥克勞林公式:
公式 8 麥克勞林公式
????根據(jù)上式,可以對(duì)Cn進(jìn)行一些轉(zhuǎn)換出來,以期用簡單的計(jì)算方法得出Cn:
公式 9 Cn轉(zhuǎn)換計(jì)算
最后,可以得到Cn:
公式 10 第n個(gè)脈沖實(shí)際需求的定時(shí)器計(jì)數(shù)值
????這個(gè)公式比連續(xù)開兩次方的計(jì)算方式快很多,但是代入原式時(shí)發(fā)現(xiàn)當(dāng)n=1時(shí)有 0.4485的偏差,我們可以將C0乘一個(gè)系數(shù)0.676來解決這個(gè)誤差。
4. 加速度的變化
????????如果需要改變加速度或者減速度,那么就要重新計(jì)算一個(gè)n值。時(shí)間tn和脈沖數(shù)n(步數(shù))作為加速度 、速度ω和步距角α的參數(shù),反過來我們可以得到:公式 11 時(shí)間tn和脈沖數(shù)n聯(lián)合上面兩個(gè)式子,可以得到:
公式 12 達(dá)到最大速度需要的步數(shù)與加速度成反比
????這個(gè)式子表示當(dāng)達(dá)到給定的最大速度時(shí)需要的步數(shù)與加速度成反比,由于電機(jī)加速到最大時(shí)跟電機(jī)開始減速時(shí)的速度是一樣的,我們可以得到(減速過程從右往左看,建立新的坐標(biāo),也是一個(gè)加速過程):
公式 13 加速到最大速度等于開始減速速度
????這樣我們只需要改變n的值就可以改變加速度的值。其中n1、n2為加速步數(shù)和減速步數(shù),加速度1和減速度w(點(diǎn))2都為正值((w(點(diǎn))2)為正值而非常規(guī)的負(fù)值,是因?yàn)閺挠彝罂唇⑿碌淖鴺?biāo),減速過程變成了加速過程)。公式13推導(dǎo)方法可以由下面的不受最大速度限制的加減速曲線得來(將加速部分和減速部分拼在一起就和不受最大速度限制的加減速曲線一樣,所以放在下面一起推導(dǎo)了)。公式13對(duì)應(yīng)曲線圖4為:圖 4 受最大速度限制的加減速曲線
圖 5為不受最大速度限制的加減速曲線。黃線對(duì)應(yīng)的為最大速度speed。
圖 5 加減速斜線其中n1為加速步數(shù),n2為減速步數(shù)。
????步進(jìn)電機(jī)旋轉(zhuǎn)給定的步數(shù),必須在適當(dāng)?shù)牟綌?shù)時(shí)開始減速,使其結(jié)束的時(shí)候速度為 0。????在圖5這樣的加減速曲線中,由于不受最大速度限制,總步數(shù)僅由加速步數(shù)和加減速步數(shù),沒有勻加速步數(shù)存在。分析圖中圖像,以n1和n2為界限砍成兩個(gè)圖像,右邊的減速圖像,從右往左看建立坐標(biāo),它也是一個(gè)加速過程所以斜率標(biāo)注加速度w(點(diǎn))2為正值而不是常規(guī)理解的負(fù)值,需要切成兩個(gè)圖像從右往左看成加速過程。由斜率公式(K)=y/x推出y=K*x,兩個(gè)三角形高相等,對(duì)高列方程,聯(lián)立可解得:這說明了斜率(加速度)和脈沖數(shù)(步數(shù))的關(guān)系。等式兩邊同加?做一個(gè)變換可以得到公式14:
公式 14 加速段脈沖數(shù)
????此時(shí)總步數(shù)等于n1 n2,公式14是為了計(jì)算方便,列出了加速步數(shù)n1和總步數(shù)的關(guān)系。公式12計(jì)算的到達(dá)最大速度的步數(shù)n值和公式14的n1值(加速步數(shù))作比較,可以判斷曲線是情況1:勻加速、勻速、勻減速,受到最大速度限制。????還是情況2:勻加速、勻減速,受制于減速的開始,加速階段無法到達(dá)最大速度。
算法實(shí)現(xiàn)
????結(jié)合前幾點(diǎn)的數(shù)學(xué)模型,控制步進(jìn)電機(jī)運(yùn)動(dòng),在給定步數(shù)的情況下:????速度從0開始開始加速,到達(dá)最大速度后勻速,運(yùn)動(dòng)到一定步數(shù)后減速,最后停下來到達(dá)指定步數(shù)。
????為實(shí)現(xiàn)梯形加減速控制,需要四個(gè)參數(shù)來描述:step:步數(shù) accel:加速度 decel:減速度 speed:最大速度
????算法實(shí)現(xiàn)主要參考主要參考《AVR446_Linear speed control of stepper motor》。該文檔代碼中把速度speed、加速度accel以及減速度decel做了放大100倍處理。accel、decel為正值,即decel為正值,不帶符號(hào)。從右往左看,減速過程也是一個(gè)加速的過程。場景區(qū)分: 場景1:持續(xù)加速直到達(dá)到所需的速度????已知參數(shù):step、加速度accel、減速度decel 和 speed,????待求參數(shù):max_s_lim、accel_lim、減速距離decel_val。??? max_s_lim 是加速到最大速度所需步數(shù),根據(jù)公式12可得。??? accel_lim 是減速開始之前的步數(shù)(忽略最大速度限制),根據(jù)公式14可得。即前面原理分析提到過的場景區(qū)分,結(jié)合圖片更清晰。其中:‘????分母乘以100是為了保持放大倍數(shù)平衡。如果max_s_lim<accel_lim,加速度受制于最大速度speed,由公式13可以推出減速距離decel_val。添加一個(gè)負(fù)號(hào)使得減速距離為負(fù)值,和總步數(shù)相加即可得到減速開始時(shí)候的步數(shù)。
場景2:未達(dá)到所需的速度就要開始減速
第二種場景是運(yùn)行的步數(shù)不足以進(jìn)行加速到最大速度就要開始減速。如果max_s_lim>accel_lim,加速度受制于減速的開始,無法加速到最大速度,減速距離decel_val為:若加速度等于減速度,有????添加一個(gè)負(fù)號(hào)使得減速距離為負(fù)值,和總步數(shù)相加即可得到減速開始時(shí)候的步數(shù)。定時(shí)器中斷處理
????定時(shí)器中斷產(chǎn)生步脈沖并且只有在步進(jìn)電機(jī)移動(dòng)時(shí)進(jìn)入。這個(gè)中斷處理速度屬性的四個(gè)不同的狀態(tài),分別為stop-accel-run-decel-stop。????速度的這種行為通過狀態(tài)機(jī)在定時(shí)器中斷中實(shí)現(xiàn)。如圖所示。start為開始狀態(tài),accel為加速狀態(tài),run為勻速狀態(tài),decel為減速狀態(tài)。
程序流程圖
計(jì)算部分流程圖:定時(shí)器比較中斷流程圖:往期精彩
步進(jìn)電機(jī)驅(qū)動(dòng)在3D打印應(yīng)用的學(xué)習(xí)筆記(一)ST7789 SPI LCD硬件垂直滾動(dòng)功能的使用光固化3D打印懸空和支撐講解
防坑指南: 楊工告訴你免聯(lián)考國際碩士到底是個(gè)什么梗?
覺得本次分享的文章對(duì)您有幫助,隨手點(diǎn)
[在看]
并轉(zhuǎn)發(fā)分享,也是對(duì)我的支持。