资源描述
个电机转动占空比控制
看你的程序累..
用PWM因当是用来控制电机的转速的,
也有用来作低速度起动用
追问
嗯 主要是控制它的速度。对了 你有没有怎么控制的资料 传给我
#include <reg51.h>
#include <intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit ma1=P2^5; //电机控制位
sbit mb1=P2^4;
sbit pwm1=P2^6;
sbit key1=P3^0; //减速
sbit key2=P3^1; //加速
sbit key3=P3^2; //前进后退
sbit key4=P3^3; //停止
sbit key5=P3^4; //左拐
sbit key6=P3^5; //右拐
sbit ma2=P2^2;
sbit mb2=P2^1;
sbit pwm2=P2^3; //占空比控制位
bit flag=0,flag0=0,flag1=0,flag2=0; //电机转动控制标志位。
uchar num=0;
void delay(uchar xms) //简单的延时
{
uint i;
uchar j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void turn_around() //电机转动占空比控制函数
{
pwm1=0;
pwm2=0;
delay(num);
pwm1=1;
pwm2=1;
delay(100-num);
}
void Rotational_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() //电机右转
{
pwm1=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(num>100)
num=100;
flag1=0;
flag2=0;
}
}
if(key2==0)
{
delay(5);
if(key2==0) //key2按下后,num--,电机加速。
{
while(!key2);
num-=20;
if(num<0)
num=0;
flag1=0;
flag2=0;
}
}
if(key3==0)
{
delay(5);
if(key3==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==0&&flag2==0)
{
turn_around();
}
else if(flag1==1)
{
turn_left();
}
else if(flag2==1)
{
turn_right();
}
}
}
展开阅读全文