亚洲精华国产精华精华液网站,你懂的,娇生惯养4ph归寻(矜以),丰年经继拇中文3与其他教材比较

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 步進電機S型曲線加減速算法與實現

步進電機S型曲線加減速算法與實現

時間:2017-12-21 11:02:05來源:網絡轉載

導語:?步進電機是將電脈沖信號轉變為角位移或線位移的開環控制電機,是現代數字程序控制系統中的主要執行元件,應用極為廣泛。在

步進電機是將電脈沖信號轉變為角位移或線位移的開環控制電機,是現代數字程序控制系統中的主要執行元件,應用極為廣泛。在非超載的情況下,電機的轉速、停止的位置只取決于脈沖信號的頻率和脈沖數,而不受負載變化的影響,當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度,稱為“步距角”,它的旋轉是以固定的角度一步一步運行的。可以通過控制脈沖個數來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。

步進電機是一種感應電機,它的工作原理是利用電子電路,將直流電變成分時供電的,多相時序控制電流,用這種電流為步進電機供電,步進電機才能正常工作,驅動器就是為步進電機分時供電的,多相時序控制器。

步進電機S型曲線加減速算法與實現

S型曲線的的方程步進電機S型曲線加減速算法與實現

,在[-5,5]的圖形如下圖所示:

步進電機S型曲線加減速算法與實現

如要將此曲線應用在步進電機的加、減速過程中,需要將方程在XY坐標系進行平移,同時對曲線進行拉升變化:

步進電機S型曲線加減速算法與實現

其中的A分量在y方向進行平移,B分量在y方向進行拉伸,ax+b分量在x方向進行平移和拉伸。

項目中加速過程:從5600Hz加速到64000Hz,采用4細分。輸出比較模塊所用的定時器驅動頻率為10M,采用1000個點進行加速處理。最終根據項目的需要,在加速過程中采用的曲線方程為:

步進電機S型曲線加減速算法與實現

其中的Fcurrent為length(1000)個點中的單個頻率值。Fmin起始頻率為5600;Fmax為最大頻率64000;-flexible*(i-num)/num是對S型曲線進行拉伸變化,其中flexible代表S曲線區間(越大代表壓縮的最厲害,中間(x坐標0點周圍)加速度越大;越小越接近勻加速。理想的S曲線的取值為4-6),i是在循環計算過程中的索引,從0開始,num為length/2大小(這樣可以使得S曲線對稱)。在項目中i的區間[0,1000),num=1000/2=500。這些參數均可以修改。提供的計算接口如下。

對應的計算接口code:

/*calculatethePeriodandFreqarrayvalue,fillthePeriodvalueintothePeriodregisterduringtheTImerinterrupt.

*calculatetheacceleraTIonprocedure,atotally1000elementsarray.

*parameterfre[]:pointtothearraythatkeepsthefreqvalue.

*period[]:pointtothearraythatkeepstheTImerperiodvalue.

*len:theprocedureofacceleraTIonlength.itisbestthingtosetthefloatnumber,somecompilesoftwaremaybetransfererrorifsetitasaint

*fre_max:maximumspeed,frequencyvale.

*fre_min:startminimumspeed,frequencyvale.mind:10000000/65535=152,sofre_mincan‘tlessthan152.

*flexible:flexiblevalue.adjusttheScurves

*/

voidCalculateSModelLine(floatfre[],unsignedshortperiod[],floatlen,floatfre_max,floatfre_min,floatflexible)

{

inti=0;

floatdeno;

floatmelo;

floatdelt=fre_max-fre_min;

for(;i《len;i++)

{

melo=flexible*(i-len/2)/(len/2);

deno=1.0/(1+expf(-melo));//expfisalibraryfunctionofexponential(e)

fre[i]=delt*deno+fre_min;

period[i]=(unsignedshort)(10000000.0/fre[i]);//10000000isthetimerdriverfrequency

}

return;

}

//startmovemotor

voidStartPWM()

{

DriverMotorFlag=TRUE;

Index=0;

MOTOR_EN_DISABLE=ENABLE;

OpenOC4(OC_ON|OC_TIMER_MODE16|OC_TIMER3_SRC|OC_PWM_FAULT_PIN_DISABLE,0,0);

//maprc13tooc4output

RPC13R=11;

//50percentduty

OC4RS=OC_PERIOD_MIN/2;

OpenTimer3(T3_ON|T3_PS_1_8,OC_PERIOD_MIN);

INTSetVectorPriority(INT_TIMER_3_VECTOR,INT_PRIORITY_LEVEL_6);

INTSetVectorSubPriority(INT_TIMER_3_VECTOR,INT_SUB_PRIORITY_LEVEL_1);

EnableIntT3;

}

//stopmotor,hereisnodeceleration

voidStopPWM()

{

DriverMotorFlag=FALSE;

Index=0;

MOTOR_EN_DISABLE=DISENABLE;

OpenOC4(OC_OFF|OC_TIMER_MODE16|OC_TIMER3_SRC|OC_PWM_FAULT_PIN_DISABLE,0,0);

//maprc13tooc4output

RPC13R=0;

PORTCbits.RC13=0;

CloseTimer3();

DisableIntT3;

}

//changethetimerPeriodvalueinthecorrespondtimerratherthantheotherplace,Orthemotorwillbestalledoccasionally.

//剛開始我在另外的一個定時器中斷中每隔1ms改變應用在OC模塊的timer3的Period值,結構偶發的造成電機在加速過程中堵轉。其實應該是在timer3的中斷中修改。

staticunsignedshortCountForAcc=0;

void__ISR(_TIMER_3_VECTOR,ipl6)Timer3OutHandler(void)

{

//cleartheinterruptflag,ortheinterruptwillnotoccuragain.

mT3ClearIntFlag();

if(CountForAcc++》2)//herecanadjustthetotallytimeofacceleration

{

CountForAcc=0;

//if(DriverMotorFlag==TRUE&&PR3》OC_PERIOD_MAX+SPEED_STEP)

if(DriverMotorFlag==TRUE&&Index《ACC_TIMES)

{

PR3=Period[Index++];

OC4RS=PR3/2;

}

}

}

通過CalculateSModelLine接口得到如下不同的幾條加速曲線:

黃色:CalculateSModelLine(Freq,Period,1000,56000,16000,4);

橙色:CalculateSModelLine(Freq,Period,1000,64000,500,8);

藍色:CalculateSModelLine(Freq,Period,1000,64000,500,15);

灰色:CalculateSModelLine(Freq,Period,1000,40000,500,5);

步進電機S型曲線加減速算法與實現

最后可以估算加速過程的時間和角位移,以橙色曲線為例:CalculateSModelLine(Freq,Period,1000,64000,500,8)為例(假設在中斷中沒有if(CountForAcc++》2)條件限制):

時間:Period第一個點的值為10000000/500=20000,最后也點的值10000000/64000=156,平均值為10000左右,timer中斷的平均時間Tn=10000/10000000=1ms,1000個點,總時間為1s,當然,起始頻率大加速時間就越短,比如Fmin=16000Hz,Fmax=64000,則40ms左右即可完成加速過程。

角位移:1.8(單步)*1000(步數)/4(細分)=450°

上述為加速過程,減速同樣的道理,只要將方程改為:

步進電機S型曲線加減速算法與實現

可以得到減速曲線如下所示:

步進電機S型曲線加減速算法與實現

標簽:

點贊

分享到:

上一篇:快速調試伺服電機 6個步驟教...

下一篇:CAN總線一體化步進電機驅動器...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.siyutn.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 迁西县| 福贡县| 许昌市| 金门县| 和龙市| 金湖县| 渝中区| 洛宁县| 河间市| 临颍县| 广元市| 文登市| 滕州市| 彭州市| 正镶白旗| 永顺县| 澄江县| 乌审旗| 错那县| 沛县| 徐汇区| 二连浩特市| 千阳县| 夏河县| 甘谷县| 怀集县| 疏附县| 邹城市| 锡林郭勒盟| 沧源| 扶绥县| 鲁山县| 邯郸市| 湘西| 娱乐| 新野县| 隆安县| 应城市| 浪卡子县| 安顺市| 锦屏县|