1、个电机转动占空比控制看你的程序累.用 PWM 因当是用来控制电机的转速的,也有用来作低速度起动用追问嗯 主要是控制它的速度。对了 你有没有怎么控制的资料 传给我#include #include #include #define uchar unsigned char #define uint unsigned int sbit ma1=P25; /电机控制位sbit mb1=P24;sbit pwm1=P26;sbit key1=P30; /减速sbit key2=P31; /加速sbit key3=P32; /前进后退sbit key4=P33; /停止sbit key5=P34; /左拐
2、sbit key6=P35; /右拐sbit ma2=P22;sbit mb2=P21;sbit pwm2=P23; /占空比控制位bit flag=0,flag0=0,flag1=0,flag2=0; /电机转动控制标志位。uchar num=0;void delay(uchar xms) /简单的延时uint i;uchar j;for(i=xms;i0;i-)for(j=110;j0;j-);void turn_around() /电机转动占空比控制函数pwm1=0;pwm2=0;delay(num);pwm1=1;pwm2=1;delay(100-num);void Rotationa
3、l_mode() /电机转动模式选择 ,正转,反转,停止,开启if(flag0=0)if(flag=0) /flag 用来控制电机的正反转,flag=0 时电机正转,否则电机反转。ma1=1; ma2=1;mb1=0;mb2=0;else ma1=0;ma2=0;mb1=1;mb2=1;else /电机停止控制ma1=0;ma2=0;mb1=0;mb2=0;void turn_left() /电机左转,使两个电机的占空比不同,电机就会有不同的转动模式。pwm1=0;pwm2=1;delay(60);pwm1=1;pwm2=0;delay(40);void turn_right() /电机右转p
4、wm1=0;pwm2=1;delay(40);pwm1=1;pwm2=0;delay(60);void keyscan() /按键检测部分if(key1=0)delay(5);if(key1=0) /key1 按下后,num+,电机减速。while(!key1);num+=20;if(num100)num=100;flag1=0;flag2=0;if(key2=0)delay(5);if(key2=0) /key2 按下后,num-,电机加速。while(!key2);num-=20;if(num0)num=0;flag1=0;flag2=0;if(key3=0)delay(5);if(key
5、3=0) /key3 按下后,flag 的值发生改变,从而,改变电机的转动放向。 while(!key3);flag=flag;flag1=0;flag2=0;if(key4=0)delay(5);if(key4=0) /key4 按下后电机停止工作,再次按下后电机开始工作。while(!key4);flag0=flag0;flag1=0;flag2=0;if(key5=0)delay(5); /key5 按下后电机左转。if(key5=0)while(!key5);flag1=1; /flag1=1,按左转模式转动。flag2=0;if(key6=0)delay(5); /key6 按下后电机右转。if(key6=0)while(!key6);flag2=1;flag1=0; /flag2=1,按右转模式转动。然后每次按按完 key5 和 key6 后,/要保证 flag1,flag2 都复位为 0,因此每次有键按下后,/ 都有 flag1,flag2 为0。void main()while(1)keyscan();Rotational_mode();if(flag1=0else if(flag1=1)turn_left();else if(flag2=1)turn_right();