有不少網(wǎng)友感嘆高鐵技術(shù)之穩(wěn),一杯水放在窗戶上面都不會(huì)晃動(dòng).要達(dá)到這個(gè)‘穩(wěn)’,就要在電機(jī)啟動(dòng)停止時(shí),有一個(gè)加減速.電機(jī)啟動(dòng)時(shí),速度需要逐漸提高,停止時(shí),速度逐漸減小,這就是步進(jìn)電機(jī)的加減速過程。單片機(jī)給步進(jìn)驅(qū)動(dòng)一個(gè)脈沖,電機(jī)轉(zhuǎn)動(dòng)一個(gè)步距角,單片機(jī)給脈沖越快,步進(jìn)電機(jī)單位時(shí)間內(nèi),轉(zhuǎn)動(dòng)的角度也就越大.即脈沖頻率正比于電機(jī)轉(zhuǎn)速.另一方面,速度的變化對(duì)應(yīng)的物理量是加速度,高中物理可以知道,一個(gè)加速過程一般涉及:初始速度,加速度,加速時(shí)間這三個(gè)量.對(duì)應(yīng)到電機(jī)轉(zhuǎn)動(dòng):起始轉(zhuǎn)速(rpm),最大速度(rpm),加速時(shí)間(min),轉(zhuǎn)速對(duì)應(yīng)單片機(jī)定時(shí)器的頻率 pulse/ms(單片機(jī)定時(shí)器1毫秒中斷次數(shù)).
工控行業(yè)電機(jī)加減速一般有T型加速,S型加速.負(fù)載慣量比較輕的情況就可以使用T型曲線,負(fù)載慣量比較重的情況一般使用S型曲線,S型曲線光滑,速度不突變.
單片機(jī)速度控制原理
單片機(jī)通過調(diào)節(jié)頻率控制電機(jī)速度,頻率是單片機(jī)定時(shí)器的定時(shí)間隔決定的,只需要在定時(shí)器中斷處理程序里邊翻轉(zhuǎn)脈沖輸出端口即可.單片機(jī)的RAM和CPU不是很快,定時(shí)器的間隔使用查表的方法來獲取,效率比較高.
控制流程
T型曲線
T型曲線的加速減階段是線性加減速的,整個(gè)運(yùn)動(dòng)[加速,勻速,減速]速度變化看起來像一個(gè)等腰梯形.
加速階段就是一個(gè)一次線性函數(shù),斜率不變[加速度不變],公式如下:
單片機(jī)生成加速數(shù)組代碼:
//生成T形加速數(shù)組
//Vmin:起始速度(pulse/s)
//Vmax:最大速度,即勻速速度(pulse/s)
//AccTime:加速時(shí)間(ms)
//pBuffer:數(shù)組緩存區(qū)
//返回值:數(shù)組長(zhǎng)度
int GenTTable(uint Vmin,uint Vmax,int AccTime,uint* pBuffer)
{
//計(jì)算加速度
uint a = (Vmax-Vmin)/AccTime;
uint v = Vmin;
uint t = 0;
int index = 0;
while(v<=Vmax)
{
v = a*t+Vmin;
pBuffer[index] = f/v; //f為定時(shí)器的工作頻率
t += 1000000/v; //v的速度為pulse/s,一個(gè)脈沖的時(shí)間為:1/v s=1000000/v us
index++;
}
return index;
}
S形加減速
從T形加速曲線的圖形,可以看出加速階段轉(zhuǎn)向勻速階段時(shí)加速度是突然變?yōu)榱愕模@對(duì)大慣量的設(shè)備晃動(dòng)比較大,要想設(shè)備晃動(dòng)比較小,就需要加速過渡到勻速階段是漸進(jìn)光滑的,加速度不突變,進(jìn)入到勻速階段時(shí)加速度剛好為0.數(shù)學(xué)模型的S形曲線就是光滑,加速度不突變的。數(shù)學(xué)方程可以參考**邏輯斯蒂**曲線,下圖是公式推導(dǎo):
單片機(jī)S形曲線加速數(shù)組生成:
上面的公式推導(dǎo)有一個(gè)結(jié)論:
程序代碼就是根據(jù)這個(gè)公式來生成數(shù)組數(shù)據(jù)
//生成S形加速數(shù)組
//Vmin:起始速度(pulse/s)
//Vmax:最大速度,即勻速速度(pulse/s)
//AccTime:加速時(shí)間(s)
//pBuffer:數(shù)組緩存區(qū)
//返回值:數(shù)組長(zhǎng)度
int GenSTable(uint Vmin,uint Vmax,int AccTime,uint* pBuffer)
{
double tSum = 0;
double T= AccTime*f; //f為定時(shí)器工作頻率
uint C0 = (uint)(f/Vmin);
uint Cmax = (uint)(f/Vmax);
uint index = 0;
while (tSum < T)
{
pBuffer[index]= (uint)(Cmax+pow(C0-Cmax,(T-tSum)/T));
tSum += pBuffer[index];
index++;
}
return index;
}
上面生成的加速數(shù)據(jù)就是定時(shí)器的間隔,可以把這邊這份數(shù)據(jù)寫到Flash的扇區(qū),這樣不用電機(jī)每次運(yùn)動(dòng)都來生成一次,減少單片機(jī)的運(yùn)算量.也可使用上位機(jī)改變電機(jī)的起始速度,勻速速度,加速時(shí)間來調(diào)節(jié)電機(jī)加速性能,不用重新編譯單片機(jī)代碼,使用起來很方便.
-
單片機(jī)
+關(guān)注
關(guān)注
6043文章
44622瀏覽量
638540 -
電機(jī)
+關(guān)注
關(guān)注
142文章
9081瀏覽量
146369 -
脈沖頻率
+關(guān)注
關(guān)注
0文章
12瀏覽量
7983
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32:F407步進(jìn)電機(jī)S形加減速算法的實(shí)現(xiàn)相關(guān)資料分享
啟動(dòng)停止頻繁步進(jìn)電機(jī)加減速算法目的是什么
步進(jìn)電機(jī)梯形加減速算法的原理是什么
步進(jìn)電機(jī)驅(qū)動(dòng)算法——S形加減速算法原理 精選資料下載
F407步進(jìn)電機(jī)梯形加減速算法是如何實(shí)現(xiàn)的?
步進(jìn)電機(jī)梯形勻加速算法是什么
怎么實(shí)現(xiàn)STM32步進(jìn)電機(jī)S型加減速算法?
梯形加減速算法實(shí)現(xiàn)
步進(jìn)電機(jī)S加減速算法與查表方式哪個(gè)更好?
STM32 多步進(jìn)電機(jī)加減速算法精確控制 親測(cè)可用~~~
步進(jìn)電機(jī)的基本參數(shù)及梯形加減速算法
![步進(jìn)<b class='flag-5'>電機(jī)</b>的基本參數(shù)及梯形加<b class='flag-5'>減速算法</b>](https://file.elecfans.com/web2/M00/8A/66/poYBAGO_y4aAAQyeAAAsWpDnDzc339.jpg)
步進(jìn)電機(jī)驅(qū)動(dòng)算法之梯形加減速算法
![步進(jìn)<b class='flag-5'>電機(jī)</b>驅(qū)動(dòng)<b class='flag-5'>算法</b>之梯形加<b class='flag-5'>減速算法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論