?? moto_step.c
字號:
/////////步進電機調(diào)試程序//////////////
/////////moto_step//////////////////////////
#include <C8051F040.h>
#define MOTO1_RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
#define MOTO1_STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
typedef unsigned int uint;
typedef unsigned char uchar;
sbit Moto1_dir=P3^0;//電機1方向控制管腳
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
uchar temppage;
void delay1ms(uint time){//延遲1ms
uint i;
uint j;
for (i=0;i<time;i++){
for(j=0;j<300;j++);
}
}
void moto1_vset(uint val){//T3頻率設置,計算公式為:(T3時鐘頻率/(2*val))
//fre=1500kHZ/val,所以val=100時,fre=15khz,建議val不要低于100,最好不要低于150
temppage=SFRPAGE;
SFRPAGE=0x01;
RCAP3=~val+1;
TMR3=RCAP3;
SFRPAGE=temppage;
}
void t3_ini(){//t3為頻率輸出模式,T3時鐘頻率約為3MHZ
temppage=SFRPAGE;
SFRPAGE=0x01;
TMR3CN=0x00;//TR3=0,T3尚未啟動
TMR3CF=0x0e;//T3采用系統(tǒng)時鐘,TOG3=1,T3不計數(shù)時輸出為1,DCEN=0
SFRPAGE=temppage;
}
void config(){
//看門狗禁止
WDTCN = 0x07;
WDTCN = 0xDE;
WDTCN = 0xAD;
SFRPAGE = 0x0F;
//交叉開關配置,T3=P0.0
//即P0.0為頻率輸出口
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40;
XBR3 = 0x01;
//管腳輸出配置,P0口為開漏輸出,其中P0.0接上拉電阻,P0為數(shù)字輸入口
SFRPAGE = 0x0F;
P0MDOUT = 0x00;
P1MDIN = 0xFF;
//晶振配置,采用內(nèi)部晶振8分頻
SFRPAGE = 0x0F;
CLKSEL = 0x00;
OSCXCN = 0x00;
OSCICN = 0x84;
}
void main(void){
uint moto1val;
config();
t3_ini();
while(1){
//電機正向恒速運行2秒
Moto1_dir=0;
moto1_vset(1000);
MOTO1_RUN;//定時器啟動頻率輸出,電機開始運行
delay1ms(2000);
MOTO1_STOP;//定時器停止,電機停止運行
delay1ms(100);
//改變方向,電機反向恒速運行2秒
Moto1_dir=1;
MOTO1_RUN;
delay1ms(2000);
MOTO1_STOP;
delay1ms(1000);
//電機逐漸加速運行
moto1val=2000;
moto1_vset(moto1val);//低速
MOTO1_RUN;
delay1ms(20);
for(;moto1val>160;moto1val-=20){//最高速度為moto1_vset(160);
moto1_vset(moto1val);
delay1ms(20);
}
delay1ms(2000);//高速 運行持續(xù)2秒
//電機逐漸減速運行
for(;moto1val<2000;moto1val+=20){
moto1_vset(moto1val);
delay1ms(20);
}
MOTO1_STOP;
delay1ms(1000);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -