時間:2017-12-21 11:02:05來源:網(wǎng)絡(luò)轉(zhuǎn)載
步進電機是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制電機,是現(xiàn)代數(shù)字程序控制系統(tǒng)中的主要執(zhí)行元件,應(yīng)用極為廣泛。在非超載的情況下,電機的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響,當步進驅(qū)動器接收到一個脈沖信號,它就驅(qū)動步進電機按設(shè)定的方向轉(zhuǎn)動一個固定的角度,稱為“步距角”,它的旋轉(zhuǎn)是以固定的角度一步一步運行的。可以通過控制脈沖個數(shù)來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉(zhuǎn)動的速度和加速度,從而達到調(diào)速的目的。
步進電機是一種感應(yīng)電機,它的工作原理是利用電子電路,將直流電變成分時供電的,多相時序控制電流,用這種電流為步進電機供電,步進電機才能正常工作,驅(qū)動器就是為步進電機分時供電的,多相時序控制器。
步進電機S型曲線加減速算法與實現(xiàn)
S型曲線的的方程
,在[-5,5]的圖形如下圖所示:
如要將此曲線應(yīng)用在步進電機的加、減速過程中,需要將方程在XY坐標系進行平移,同時對曲線進行拉升變化:
其中的A分量在y方向進行平移,B分量在y方向進行拉伸,ax+b分量在x方向進行平移和拉伸。
項目中加速過程:從5600Hz加速到64000Hz,采用4細分。輸出比較模塊所用的定時器驅(qū)動頻率為10M,采用1000個點進行加速處理。最終根據(jù)項目的需要,在加速過程中采用的曲線方程為:
。
其中的Fcurrent為length(1000)個點中的單個頻率值。Fmin起始頻率為5600;Fmax為最大頻率64000;-flexible*(i-num)/num是對S型曲線進行拉伸變化,其中flexible代表S曲線區(qū)間(越大代表壓縮的最厲害,中間(x坐標0點周圍)加速度越大;越小越接近勻加速。理想的S曲線的取值為4-6),i是在循環(huán)計算過程中的索引,從0開始,num為length/2大小(這樣可以使得S曲線對稱)。在項目中i的區(qū)間[0,1000),num=1000/2=500。這些參數(shù)均可以修改。提供的計算接口如下。
對應(yīng)的計算接口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改變應(yīng)用在OC模塊的timer3的Period值,結(jié)構(gòu)偶發(fā)的造成電機在加速過程中堵轉(zhuǎn)。其實應(yīng)該是在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);
最后可以估算加速過程的時間和角位移,以橙色曲線為例:CalculateSModelLine(Freq,Period,1000,64000,500,8)為例(假設(shè)在中斷中沒有if(CountForAcc++》2)條件限制):
時間:Period第一個點的值為10000000/500=20000,最后也點的值10000000/64000=156,平均值為10000左右,timer中斷的平均時間Tn=10000/10000000=1ms,1000個點,總時間為1s,當然,起始頻率大加速時間就越短,比如Fmin=16000Hz,F(xiàn)max=64000,則40ms左右即可完成加速過程。
角位移:1.8(單步)*1000(步數(shù))/4(細分)=450°
上述為加速過程,減速同樣的道理,只要將方程改為:
可以得到減速曲線如下所示:
標簽:
中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。