步進(jìn)電機(jī)的轉(zhuǎn)速由由輸出給驅(qū)動(dòng)器的PWM頻率而定,使用MCU的一個(gè)定時(shí)器(TIM2_CH1)輸出占空比 D=50% 的脈沖。
定時(shí)器的時(shí)鐘頻率為72MHz,分頻后8Mhz,于是輸出PWM的最低頻率大約為120Hz。
假定需要在時(shí)間 t 內(nèi)運(yùn)行 θ 角度,根據(jù)驅(qū)動(dòng)器的細(xì)分?jǐn)?shù),齒輪傳動(dòng)比等可以算出所需要的脈沖數(shù) pls_cnt。
1.雙曲線加速
剛開始的想法是,前半程加速,后半程減速,加減速時(shí)間間隔為 delta_t,由另一定時(shí)器的中斷周期而定,在定時(shí)器ISR里面對頻率進(jìn)行調(diào)整,便能讓電機(jī)平滑地起停。
但是我并不能直接改變輸出PWM的頻率 freq,能直接改變的只是定時(shí)器的自動(dòng)重載值 period,freq 和 period 之間顯然是雙曲線的關(guān)系:
其中 tim_freq = 8MHz,
讓 period 線性化,結(jié)果導(dǎo)致 freq 呈雙曲線變化,加速過程很慢,減速很快,實(shí)驗(yàn)現(xiàn)象也是如此,而且這個(gè)過程的時(shí)間也不好控制。
2.線性加速曲線
要讓 freq 線性化,首先確定 freq 的范圍,freq_min 我設(shè)定為300Hz,freq_max 因該就是這段行程平均速度的2倍了:
在 [freq_min, freq_max] 內(nèi)將 freq 線性化:
freq = linspace(freq_min, freq_max, t/delta_t);
然后算出 period:
period = tim_freq 。/ freq;
減速過程的可以將數(shù)組其反過來:
1period = [period, fliplr(period)];
可以得到如下的頻率曲線:
實(shí)驗(yàn)中電機(jī)的加減速還算比較平滑,精度也還可以。
3.S形加速曲線
既然可以用線性加速曲線,那應(yīng)該可以用更為平滑的加速曲線,在印象中S形曲線是非常平滑的,會(huì)得到速度連續(xù),加速度也連續(xù)的調(diào)速過程。于是用S形曲線再試試。
Sigmoid函數(shù)的原型我想是這樣子的:
繪出其在[-5, 5]上的圖形:
這里選擇[-5, 5]這段曲線比較合適,加速過程可能有點(diǎn)長,如有要求可以選擇[-4, 4]。
然后將其變成我想要的樣子:
起始點(diǎn)增益,也就是最低頻率:freq_min;
最大增益,也就是最高頻率:freq_max;
橫軸范圍:0~t;
對橫坐標(biāo)做平移變換,然后伸縮變換,再對縱坐標(biāo)做伸縮變換便得到下式:
由于在0~t時(shí)間段內(nèi),指數(shù)項(xiàng)不可能為∞,所以起始頻率要略高于 freq_min,指數(shù)項(xiàng)也不可能為0,所以最高頻率要略低于 freq_max。
變換后得到的圖像可能是這樣:
其中 t:0~4s,freq_min = 300Hz, freq_max = 1kHz。
上式中 freq_min 可以自己先給定,這樣還有一個(gè)參數(shù) freq_max,需要確定。
在 0~t 時(shí)間段內(nèi)運(yùn)動(dòng) θ 角度,那么:

這樣S形曲線便確定了,然后再算出 period 數(shù)組即可。減速過程同樣的可以將數(shù)組反過來,例如:
實(shí)驗(yàn)中S形曲線自然是最為平滑的,精度不算太好,如有可能的話,可用編碼器進(jìn)行修正。
-
微控制器
+關(guān)注
關(guān)注
48文章
7943瀏覽量
154636 -
步進(jìn)電機(jī)
+關(guān)注
關(guān)注
152文章
3165瀏覽量
149622 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3298瀏覽量
118735
發(fā)布評論請先 登錄
同步電機(jī)步進(jìn)運(yùn)動(dòng)性能分析
實(shí)時(shí)生成步進(jìn)電機(jī)速度曲線
剎車步進(jìn)電機(jī)的特點(diǎn)

GaN、超級SI、SiC這三種MOS器件的用途區(qū)別
網(wǎng)絡(luò)筆記分享-實(shí)時(shí)生成步進(jìn)電機(jī)速度曲線
通過具體案例,選擇合適的步進(jìn)電機(jī)

行星減速步進(jìn)電機(jī)與步進(jìn)電機(jī)的區(qū)別

評論