有不少網友感嘆高鐵技術之穩,一杯水放在窗戶上面都不會晃動.要達到這個‘穩’,就要在電機啟動停止時,有一個加減速.電機啟動時,速度需要逐漸提高,停止時,速度逐漸減小,這就是步進電機的加減速過程。單片機給步進驅動一個脈沖,電機轉動一個步距角,單片機給脈沖越快,步進電機單位時間內,轉動的角度也就越大.即脈沖頻率正比于電機轉速.另一方面,速度的變化對應的物理量是加速度,高中物理可以知道,一個加速過程一般涉及:初始速度,加速度,加速時間這三個量.對應到電機轉動:起始轉速(rpm),最大速度(rpm),加速時間(min),轉速對應單片機定時器的頻率 pulse/ms(單片機定時器1毫秒中斷次數).
工控行業電機加減速一般有T型加速,S型加速.負載慣量比較輕的情況就可以使用T型曲線,負載慣量比較重的情況一般使用S型曲線,S型曲線光滑,速度不突變.
單片機速度控制原理
單片機通過調節頻率控制電機速度,頻率是單片機定時器的定時間隔決定的,只需要在定時器中斷處理程序里邊翻轉脈沖輸出端口即可.單片機的RAM和CPU不是很快,定時器的間隔使用查表的方法來獲取,效率比較高.

控制流程

T型曲線
T型曲線的加速減階段是線性加減速的,整個運動[加速,勻速,減速]速度變化看起來像一個等腰梯形.

加速階段就是一個一次線性函數,斜率不變[加速度不變],公式如下:

單片機生成加速數組代碼:
//生成T形加速數組
//Vmin:起始速度(pulse/s)
//Vmax:最大速度,即勻速速度(pulse/s)
//AccTime:加速時間(ms)
//pBuffer:數組緩存區
//返回值:數組長度
int GenTTable(uint Vmin,uint Vmax,int AccTime,uint* pBuffer)
{
//計算加速度
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為定時器的工作頻率
t += 1000000/v; //v的速度為pulse/s,一個脈沖的時間為:1/v s=1000000/v us
index++;
}
return index;
}
S形加減速
從T形加速曲線的圖形,可以看出加速階段轉向勻速階段時加速度是突然變為零的,這對大慣量的設備晃動比較大,要想設備晃動比較小,就需要加速過渡到勻速階段是漸進光滑的,加速度不突變,進入到勻速階段時加速度剛好為0.數學模型的S形曲線就是光滑,加速度不突變的。數學方程可以參考**邏輯斯蒂**曲線,下圖是公式推導:


單片機S形曲線加速數組生成:
上面的公式推導有一個結論:

程序代碼就是根據這個公式來生成數組數據
//生成S形加速數組
//Vmin:起始速度(pulse/s)
//Vmax:最大速度,即勻速速度(pulse/s)
//AccTime:加速時間(s)
//pBuffer:數組緩存區
//返回值:數組長度
int GenSTable(uint Vmin,uint Vmax,int AccTime,uint* pBuffer)
{
double tSum = 0;
double T= AccTime*f; //f為定時器工作頻率
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;
}
上面生成的加速數據就是定時器的間隔,可以把這邊這份數據寫到Flash的扇區,這樣不用電機每次運動都來生成一次,減少單片機的運算量.也可使用上位機改變電機的起始速度,勻速速度,加速時間來調節電機加速性能,不用重新編譯單片機代碼,使用起來很方便.
-
單片機
+關注
關注
6078文章
45550瀏覽量
672776 -
電機
+關注
關注
144文章
9676瀏覽量
154619 -
脈沖頻率
+關注
關注
0文章
12瀏覽量
8166
發布評論請先 登錄
STM32:F407步進電機S形加減速算法的實現相關資料分享
啟動停止頻繁步進電機加減速算法目的是什么
步進電機驅動算法——S形加減速算法原理 精選資料下載
F407步進電機梯形加減速算法是如何實現的?
步進電機梯形勻加速算法是什么
步進電機的基本參數及梯形加減速算法
步進電機驅動算法之梯形加減速算法
單片機工控的電機減速算法是什么?
評論