我用的是57BYG019步进电机四相八拍,我用单片机的定时器来控制脉冲的频率,现在电机最高在2.4ms这个级别,要是在高的话 电机就会发抖,慢转。因为2.4ms电机转动的速度达不到我的要求,现在我想把它速度提上去但是我怎么都提上去。我做个好多实验都失败了(4.0ms到1.0ms,每次加0.1ms但是到2.3ms以上还是失败了;还有就是4.0到1.0ms我分了十档但是还是卡在2.3ms处)这是为什么?我现在怎么做才能把速度提上去?(硬件不能加任何东西,只能是软件改) 电源电压是33v,而且这个电路已经能成功实现比我更快的速度的,但是我就是写不出来同样的效果,先把我的程序发上,大家指点一下看哪儿有错误或不合理的地方: 单片机为77e58,串口程序没什么问题的。 #include<W77E58.H> unsigned char input=0,m=8,count=1; unsigned char step=0; unsigned char a[10]={45,38,30,23,17,12,8,5,3,2},b[2]={'1','2'}; sbit LED_4=P3^7; sbit LED_3=P3^6; void stop(); void delay(unsigned int k) { unsigned int i,j; for(i=0;i<k;i++) for(j=0;j<1000;j++); } void main() { RCAP2H = 0xFF; RCAP2L = 0xB8; // 设置定时器2,22.1184M ,9600 CKCON = 0x28; //4个时钟周期 TCLK = 0x01; RCLK = 0x01; // 把定时器2设置为波特率产生器 TR2 = 1; // 定时器2开始计时 TR0=1; TMOD=0x01; //定时器0,模式1 SCON=0x50; // 把串口0设置为方式1 ES = 1; // 允许串口0中断 TH0=(65536-700*221184/40000)/256; TL0=(65536-700*221184/40000)%256; ET0=1; //开定时器0中断 PS0=1; //串口优先 EA = 1; // 允许全局中断 RI=0; TI=0; LED_3=1; LED_4=1; while(1) { LED_3=0; if(input==b[0]) { stop(); TR0=0; } if(input==b[1]) TR0=1; if(step!=10) { step++; if(step==10)step=9; } delay(100); //这个延时我做过好多次的修改,没什么起色范围(50`--1000)都是试过 } } void serial() interrupt 4 //串口中断 ,用来实现开关的 { LED_4=0; input=SBUF; while(RI==0); RI=0; //清除接收标志 SBUF=input; while(TI==0); TI=0; LED_4=1; } void time() interrupt 1 //定时器来实现电机频率的调节 { TH0=(65536-700*221184/40000)/256; TL0=(65536-700*221184/40000)%256; count--; if(count==0) { count=a[step]; switch(m) { case 1: P2=0x32; break; case 2: P2=0x36; break; case 3: P2=0x34; break; case 4: P2=0x3c; break; case 5: P2=0x38; break; case 6: P2=0x39; break; case 7: P2=0x31; break; case 8: P2=0x33; break; } m--; if(m==0)m=8; }
} void stop() { P2=0xF0;
}
|