摘要:本節(jié)介紹實現(xiàn)步進電機S曲線運動的代碼
一、目標功能
實現(xiàn)步進電機轉(zhuǎn)動總角度720°,其中加減速各90°
加速段:加速類型:S曲線
加速角度:角度為90°
起步速度:30RPM,
終止速度:500RPM
勻速段:勻速角度:角度為540°
勻速速度:500RPM
減速段:減速類型:S曲線
減速角度:角度為90°
起步速度:500RPM
終止速度:60RPM
二、生成器計算
加速參數(shù)計算
勻速參數(shù)計算,主要計算電機步數(shù)
減速參數(shù)計算
三、程序代碼
//加速、勻速、減速步數(shù)#define step0 100#define step1 600#define step2 100unsigned int n=0;//步數(shù)計數(shù)變量unsigned int flag=0;//標志位,0:加速段 1:勻速段 2:減速段//加速段90°,30RPM-500RPMconst unsigned char codeTimeH0[100]={0XEC,0XEC,0XEC,0XED,0XED,0XED,0XEE,0XEE,0XEE,0XEF,0XEF,0XF0,0XF0,0XF1,0XF1,0XF2,0XF2,0XF3,0XF3,0XF4,0XF4,0XF5,0XF5,0XF6,0XF6,0XF7,0XF7,0XF8,0XF8,0XF8,0XF9,0XF9,0XFA,0XFA,0XFA,0XFB,0XFB,0XFB,0XFB,0XFC,0XFC,0XFC,0XFC,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE};const unsigned char codeTimeL0[100]={0X78,0XB4,0XF5,0X3B,0X86,0XD6,0X2A,0X84,0XE4,0X48,0XB1,0X1F,0X92,0X9,0X83,0X1,0X82,0X5,0X8A,0X10,0X96,0X1C,0XA0,0X24,0XA5,0X23,0X9E,0X15,0X88,0XF7,0X61,0XC5,0X25,0X80,0XD5,0X26,0X71,0XB7,0XF9,0X36,0X6E,0XA3,0XD3,0X0,0X29,0X4F,0X71,0X91,0XAE,0XC9,0XE1,0XF8,0XC,0X1F,0X2F,0X3F,0X4D,0X59,0X65,0X6F,0X79,0X82,0X8A,0X91,0X97,0X9D,0XA2,0XA7,0XAB,0XAF,0XB3,0XB6,0XB9,0XBC,0XBE,0XC1,0XC2,0XC4,0XC6,0XC7,0XC9,0XCA,0XCB,0XCC,0XCD,0XCE,0XCE,0XCF,0XD0,0XD0,0XD1,0XD1,0XD2,0XD2,0XD2,0XD3,0XD3,0XD3,0XD3,0XD4};//減速段90°,500RPM-60RPMconst unsigned char code TimeH2[100]={0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFC,0XFC,0XFC,0XFC,0XFC,0XFB,0XFB,0XFB,0XFB,0XFB,0XFA,0XFA,0XFA,0XFA,0XFA,0XF9,0XF9,0XF9,0XF9,0XF8,0XF8,0XF8,0XF8,0XF8,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6};const unsigned char codeTimeL2[100]={0XD4,0XD3,0XD3,0XD3,0XD3,0XD2,0XD2,0XD2,0XD1,0XD1,0XD0,0XD0,0XCF,0XCE,0XCE,0XCD,0XCC,0XCB,0XCA,0XC8,0XC7,0XC6,0XC4,0XC2,0XC0,0XBE,0XBB,0XB9,0XB6,0XB2,0XAF,0XAB,0XA6,0XA1,0X9C,0X96,0X90,0X88,0X81,0X78,0X6F,0X64,0X59,0X4D,0X3F,0X31,0X21,0XF,0XFD,0XE8,0XD2,0XBA,0XA0,0X84,0X66,0X46,0X24,0X0,0XD9,0XB0,0X85,0X58,0X28,0XF7,0XC4,0X8F,0X59,0X21,0XE8,0XAE,0X74,0X3A,0X0,0XC6,0X8D,0X54,0X1D,0XE7,0XB3,0X81,0X50,0X22,0XF6,0XCB,0XA4,0X7E,0X5A,0X39,0X1A,0XFD,0XE2,0XC9,0XB2,0X9D,0X89,0X77,0X66,0X57,0X48,0X3C}; void main(){ while(1) { }}//定時器0中斷程序void time0_int() interrupt 1{ //產(chǎn)生一個脈沖 PUL=1; _nop_();_nop_();nop_();nop_(); PUL=0; n++;//步數(shù)加1 switch (flag)//判斷運動狀態(tài) { case0://加速段 { if(n==step0)//加速段完成 { n=0; flag=1; TH0=TimeH2[0];//裝載定時寄存器勻速段初值 TL0=TimeL2[0]; } else { TH0=TimeH0[n];//裝載定時寄存器加速段初值 TL0=TimeL0[n]; } }break; case1://勻速段 { TH0=TimeH2[0];//裝載定時寄存器勻速段初值 TL0=TimeL2[0]; if(n==step1)//勻速段完成 { n=0; flag=2; TH0=TimeH2[n];//裝載定時寄存器減速段初值 TL0=TimeL2[n]; } }break; case 2://減速段 { if(n==step2)//減速段完成 { n=0; flag=0; TR0=0; //電機停止 } else { TH0=TimeH2[n];//裝載定時寄存器減速段初值 TL0=TimeL2[n]; } }break; default: break; }}
四.總結(jié)
通過上述計算,完成S曲線加減速運動。通過調(diào)整勻速運動的角度,加減速過程不變,可以實現(xiàn)總轉(zhuǎn)動角度的變化,適用于總轉(zhuǎn)角需要變化且需要較高速度的情況,并且滿足總轉(zhuǎn)角應(yīng)大于加減速轉(zhuǎn)角之和。
對于大多數(shù)情況,加減速的過程可以合并,即用S加速的逆過程去實現(xiàn)減速,可以實現(xiàn)代碼的簡化。
-
步進電機
+關(guān)注
關(guān)注
152文章
3165瀏覽量
149724 -
生成器
+關(guān)注
關(guān)注
7文章
322瀏覽量
21891 -
s曲線
+關(guān)注
關(guān)注
0文章
6瀏覽量
5759
發(fā)布評論請先 登錄
如何使用脈沖加方向方式對步進電機進行位置的自由控制
基于凌陽16位單片機SPCE061A懸掛運動控制系統(tǒng)
有沒有stm32,l6205驅(qū)動步進電機pid或者s曲線動態(tài)計算的實現(xiàn)代碼,求上傳!?。。?!
步進電機S型曲線加減速算法是什么?如何去實現(xiàn)?
怎樣去生成步進電機S曲線運動數(shù)組代碼程序語言
如何使用S曲線進行步進電機加減速的控制設(shè)計資料說明

步進電機S型曲線加速的實現(xiàn)

評論