日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

步进电机控制原理

發(fā)布時間:2024/3/24 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 步进电机控制原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

實則為步進電機的控制

  • 知識點
    • 電機轉(zhuǎn)動
      • 控制
    • 加減速原理
    • 梯形加速度的實現(xiàn)原理
    • 精確計算時間間隔
      • 脈沖時間間隔表達
      • 步距角
      • 位置
      • 速度
      • 加速度
    • 控制過程
      • 大體的思路
      • 問題解決思路
      • 實現(xiàn)
        • 算法總結(jié):
        • 定時器中斷處理
    • 總結(jié)

只是簡單記錄一下個人認為重要的控制原理。

知識點

電機轉(zhuǎn)動

通過__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_4, tmp);不停的設(shè)置比較值來實現(xiàn),這個值決定了管腳下一次翻轉(zhuǎn)電平的時間。如設(shè)置定時器頻率為20M,若此值設(shè)置為500,輸出脈沖頻率為20*106/500 / 2 = 20K.為什么要除2,是因為一高一低兩個電平變化才構(gòu)成一個完整驅(qū)動脈沖。
要是步進電機轉(zhuǎn)動一圈需要4K個脈沖的話,那么這個驅(qū)動頻率可以讓電機每秒轉(zhuǎn)5圈。

控制

這個操作一般都是在定時器中斷中完成的,也就是定時器中斷完成比較值的更新,根據(jù)不同加速度狀態(tài),可設(shè)置不同的值和狀態(tài)。以此完成梯形或s形速度的設(shè)置。

加減速原理

加減速,都是由基礎(chǔ)頻率(低于電機啟動頻率)與跳變頻率(在基礎(chǔ)頻率上逐漸提高的頻率)
加減速曲線,一般為梯形,指數(shù)或s形曲線,對不同的負載,不同轉(zhuǎn)速,需要選擇合適的基礎(chǔ)頻率與跳變頻率,才能達到最佳的控制效果。
完成步進電機的加減速時間為300ms以上,過短的時間,對絕大多數(shù)步進電機來說,很難實現(xiàn)高速旋轉(zhuǎn)。

梯形加速度的實現(xiàn)原理

一個非常重要的步驟就是計算電機轉(zhuǎn)動所需要定時器輸出的脈沖頻率;它的大小決定著電機的轉(zhuǎn)速。如下圖所示:

加速的過程就是將脈沖的發(fā)送間隔時間逐漸變短。減速可直觀理解成加速的逆過程。

精確計算時間間隔

脈沖時間間隔表達

δt=ctt=cft\delta t=ct_t=\frac{c}{f_t}δt=ctt?=ft?c?

ft:表示定時器的頻率,倒數(shù)的話,就是定時器的計數(shù)周期,也就一個時間,如定時器頻率采用3分頻,那么就是80M/(3+1)=20M

c:以tt為單位的完整的脈沖,所代表的定時器的計數(shù)值。如:設(shè)定定時器計到500次,才翻轉(zhuǎn)一下電平,c=500.

步距角

α=2πspr\alpha= \frac{2\pi}{spr}α=spr2π?

spr:步進電機轉(zhuǎn)一圈的脈沖數(shù),這個其實是常數(shù)。確定好細分數(shù)之后,這個就定了。
步距角對應(yīng)的控制含義為:轉(zhuǎn)1o弧度所需要的脈沖數(shù)。步數(shù)的確定要看電機,如電機標定一步為1.8o,那么轉(zhuǎn)一圈所需要步數(shù)為360/1.8=200步。200步X控制器細分數(shù)=轉(zhuǎn)一圈所需要脈沖數(shù)。

位置

Θ=nα\Theta= n\alphaΘ=nα,也可以由速度來表示:θ(t)=∫τ=0tω(t)dτ=12ω˙t2=nα\theta(t)=\int_{\tau=0}^{t} \omega(t) d \tau=\frac{1}{2} \dot{\omega} t^{2}=n \alphaθ(t)=τ=0t?ω(t)dτ=21?ω˙t2=nα
一定時間內(nèi),電機所轉(zhuǎn)過角度,也就是電機的位置
變形后,可以求得到當前位置,電機所需要的時間:tn=2nαω˙t_{n}=\sqrt{\frac{2 \mathrm{n} \alpha}{\dot{\omega}}}tn?=ω˙2nα??,兩邊平方,得到n=ω˙tn22α\mathrm{n}=\frac{\dot{\omega} t_{n}^{2}}{2 \alpha}n=2αω˙tn2??,又因為tn=速度/加速度,將tn代入公式,可得:nω˙=ωn22α\mathrm{n} \dot{\omega}=\frac{\omega_{n}^{2}}{2 \alpha}nω˙=2αωn2??

用運動到n+1個脈沖位置所花時間減去tn,就可以得到第n個脈沖的時間間隔,cn*tt。(cn是定時器比較值,tt為定時器計數(shù)間隔)

n:脈沖數(shù):cntt=tn+1?tn=2αω˙(n+1?n)c_{n} t_{t}=t_{n+1}-t_{n}=\sqrt{\frac{2 \alpha}{\dot{\omega}}}(\sqrt{n+1}-\sqrt{n})cn?tt?=tn+1??tn?=ω˙2α??(n+1??n?)

得到我們比較關(guān)心的cn值為:cn=1tt2αω˙(n+1?n)c_{n}=\frac{1}{t_{t}} \sqrt{\frac{2 \alpha}{\dot{\omega}}}(\sqrt{n+1}-\sqrt{n})cn?=tt?1?ω˙2α??(n+1??n?),這樣人為指定加速度后,就可以求得第n個脈沖的時間間隔。

第一個脈沖為c0=1tt2αω˙(0+1?0)=1tt2αω˙c_{0}=\frac{1}{t_{t}} \sqrt{\frac{2 \alpha}{\dot{\omega}}}(\sqrt{0+1}-\sqrt{0})=\frac{1}{t_{t}} \sqrt{\frac{2 \alpha}{\dot{\omega}}}c0?=tt?1?ω˙2α??(0+1??0?)=tt?1?ω˙2α??,所以,cn=c0(n+1?n)c_{n}=c_{0}(\sqrt{n+1}-\sqrt{n})cn?=c0?(n+1??n?)

速度

ω=αδt=αftc\omega=\frac{\alpha}{\delta t}=\frac{\alpha f_t}{c}ω=δtα?=cαft??

也就是每個定時器驅(qū)動脈沖,電機所轉(zhuǎn)過的角度。后面等式是轉(zhuǎn)化成定時器頻率后對應(yīng)的式子。c就是設(shè)定定時器比較值,可以說速度的改變?nèi)克?br /> 若速度人為指定的話,那么c就等于步距角*定時器脈沖頻率/速度,這個就是定時器的比較值。

加速度

ω(t)=∫τ=0tω˙dτ=ω˙t\omega(t)=\int_{\tau=0}^{t} \dot{\omega} d \tau=\dot{\omega} tω(t)=τ=0t?ω˙dτ=ω˙t
速度是在一定時間內(nèi)的加速度的積分。終于看到希望的時間了。前面說了一般會在300ms以上完成加速度。

控制過程

大體的思路

啟動電機后,先要不停地減小定時器的定時翻轉(zhuǎn)值,實現(xiàn)一定的加速度,這個加速度是一個漸進的過程,不能一下加到最大,否則就沒有加減速這一說了。那問題來了,如何確定這個加速過程呢?如何確定加速的停止點?相對應(yīng),還有減速度?

問題解決思路

加速的停止點:其實對應(yīng)的是定時器的最小的時間間隔。也就是最大速度,可以由用戶指定。
加速過程確定:梯形加速由三段組成,如下圖所示:

想要完整確定這三段都是在哪些步上操作,就先要指定一個整個三段周期步數(shù)。剩下就是三段時間劃分的問題了,如何才能保持住一個線性的加速度呢?另外這個線的斜率如何確定?
這個斜率,也就是加速度,其實是可以用戶指定的。指定好后,這個加速的時間也就確定了,因為加速到最大速度也是用戶指定的。斜率其實脈沖n對應(yīng)的時間間隔cn.
同理,減速斜率,也可以人為指定。
那么剩下的就是勻速階段的持續(xù)的時間了。

實現(xiàn)

  • 指定一個最大速度,那么由速度公式ω=αδt=αftc\omega=\frac{\alpha}{\delta t}=\frac{\alpha f_t}{c}ω=δtα?=cαft??,可得到c,這個就是加速度的結(jié)束條件。

  • 通過計算第一步c0來設(shè)定加速度。由cn=1tt2αω˙(n+1?n)c_{n}=\frac{1}{t_{t}} \sqrt{\frac{2 \alpha}{\dot{\omega}}}(\sqrt{n+1}-\sqrt{n})cn?=tt?1?ω˙2α??(n+1??n?)公式,得到c0=0.676?ft2α?10accel?c_{0}=0.676 * f t \sqrt{\frac{2 \alpha * 10}{\text { accel }}}c0?=0.676?ft?accel?2α?10?? accel:人為指定的加速度,0.676是一個修正參數(shù)。

  • 計算加速到最大速度所需要的步數(shù)

由公式:nω˙=ωn22α\mathrm{n} \dot{\omega}=\frac{\omega_{n}^{2}}{2 \alpha}nω˙=2αωn2??,得到:n=speed?22α?accel??10n=\frac{\text { speed }^{2}}{2 \alpha \cdot \text { accel } \cdot 10}n=2α??accel??10?speed?2?

  • 計算理論上多少步之后開始減速,不考慮最大速度的步數(shù)限制

由于加速度到最大速度等于開始減速度

如下圖所示:

速度其實是加速度在一定時間內(nèi)積分,而時間也可以對應(yīng)到步數(shù)上,所以n1ω˙1=n2ω˙2n_{1} \dot{\omega}_{1}=n_{2} \dot{\omega}_{2}n1?ω˙1?=n2?ω˙2?,所以n1對應(yīng)的就是開始減速度時的步數(shù),兩邊同時加n1w2得到:n1ω˙1+n1ω˙2=n2ω˙2+n1ω˙2n_{1} \dot{\omega}_{1}+n_{1} \dot{\omega}_{2}=n_{2} \dot{\omega}_{2}+n_{1} \dot{\omega}_{2}n1?ω˙1?+n1?ω˙2?=n2?ω˙2?+n1?ω˙2?,化簡得到$n1=\frac{\dot{\omega}{2}(n{1}+n_{2})}{\dot{\omega}{1}+\dot{\omega}{2} } ,因為,因為,n_{1}+n_{2}$等于全部的步數(shù),加速度與減速度是人為指定的,所以:n1 = (n1+n2)decel / (accel + decel)。

  • 計算減速需要步數(shù),分兩種情況
    如下圖所示:

    • 如果最大速度步數(shù) < 開始減速時的步數(shù),說明此時,加速到減速時的步數(shù)多了,需要受限于最大速度的步數(shù),根據(jù)這個公式n1ω˙1=n2ω˙2n{1} \dot{\omega}{1}=n{2} \dot{\omega}{2}n1ω˙1=n2ω˙2可得: decel_aval= - max_s_lim * (accel/decel),負號說明的速度的方向。

    • 如果最大速度 >= 開始減速時的步數(shù),也就是說加速度的步數(shù),不足以加速到最大速度,那么此時就受限于開始減速時的步數(shù)了。此時的減速步數(shù),直接用總步數(shù)減去加速時的步數(shù)就可以了。decel_val = -(step - accel_lim);

    • 還要考慮特殊情況:當算出來decel_val=0,那么人為給它賦上-1,代表只剩最后一步時,減速。

  • 計算加速到開始減速的步數(shù)
    也就是是用全程的步數(shù)step + decel

  • 看一下,第一步c0來設(shè)定加速度是否是小于最大速度,若最大速度設(shè)置值還不如加速度大,那就沒必要加速了。反之,就從c0加速度開始加速。

算法總結(jié):

可見,算法主要是實現(xiàn)減速開始步數(shù)及加速步數(shù)的計算。至于三段如何加速減速是放到定時器中斷中來處理的。

定時器中斷處理

主要實現(xiàn)就是加速與減速的過程,需要計算電機每走一步定時器的比較值,根據(jù)前面位置里公式cn=c0(n+1?n)c_{n}=c_{0}(\sqrt{n+1}-\sqrt{n})cn?=c0?(n+1??n?),就可以得到這個c值,但過程中開兩次根號太麻煩,同時也不是關(guān)于前一個比較值的關(guān)系,所以需要 cncn?1=c0(n+1?n)c0(n?n?1)\frac{c_{n}}{c_{n-1}}=\frac{c_{0}(\sqrt{n+1}-\sqrt{n})}{c_{0}(\sqrt{n}-\sqrt{n-1})}cn?1?cn??=c0?(n??n?1?)c0?(n+1??n?)?,再根據(jù)數(shù)學(xué)中泰勒公式特例:麥克勞林公式,(推導(dǎo)起來也比較麻煩,知道結(jié)果就可以了)得到最終cn=cn?1?2cn?14n+1c_{n}=c_{n-1}-\frac{2 c_{n-1}}{4 n+1}cn?=cn?1??4n+12cn?1??。根據(jù)公式,寫代碼就可以了。

new_step_delay = srd.step_delay - (((2 * srd.step_delay) + rest) / (4 * srd.accel_count + 1)); //計算新(下)一步脈沖周期(時間間隔) rest = ((2 * srd.step_delay) + rest) % (4 * srd.accel_count + 1); // 計算余數(shù),下次計算補上余數(shù),減少誤差

加速與減速都是用這個公式,計算結(jié)果會包含一個系數(shù)和一個余數(shù),為了提高精度,余數(shù)要保留并包含到下一次計算當中。

然后,再設(shè)置狀態(tài),停止、加速,運行、減速,針對不同狀態(tài),計算定時器的比較值,這樣就可以實現(xiàn)梯形控制了。s形控制也是一樣的原理

總結(jié)

比較重要的就是數(shù)學(xué)公式推導(dǎo),可見數(shù)學(xué)在算法中的位置。但數(shù)學(xué)真不是知道就能用的,需要一個很長很長的過程。還是想到屈原一句話“路漫漫其修遠兮,吾將上下而求索”。別急,慢慢去體會。

總結(jié)

以上是生活随笔為你收集整理的步进电机控制原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。