打印

51通过红外遥控 调节PWM 速度问题

[复制链接]
1296|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hbdxzn|  楼主 | 2013-5-14 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一个红外遥控 控制PWM调速的程序,可是一个电机正常工作,可以产生PWM,另一个电机不行,两端电压一直不变,也就是不产生PWM波形,请高手看看怎么回事。程序如下#define motor_c P1
//uchar Time_delay;
uchar count=0;
sbit PWM_R=P1^3;
sbit PWM_L=P1^0;
sbit PWM_HL=P1^1;
sbit PWM_HR=P1^2;
sbit en1=P1^4;
sbit en2=P1^5;


sbit IRIN=P3^2; //红外数据线
uchar IRCOM[7];
uchar m1=0;
uchar m2=0; //电机2速度值
uchar tmp1,tmp2; //电机当前速度值
//控制电机程序
void motor(uchar index,char speed)
{
if(index==1)  // 第一个电机
  {
   m1=abs(speed);  
   if(speed>0)   //正转
    {PWM_L=1WM_HL=0;}
   else         //反转
    {PWM_L=0WM_HL=1;}
  }
  if(index==2)   // 第二个电机
   {
    m2=abs(speed);
    if(speed>0)
     {PWM_R=1WM_HR=0;}
    else
     {PWM_R=0WM_HR=1;}
   
    }
}
void main()
{

//uchar i;
IRIN=1;
TMOD=0x02;
TH0=0x9B;
TL0=0x9B;
EA=1;
ET0=1;
TR0=1;


IT0=1;
EX0=1;
while(1)
{
  }
}
void timer0() interrupt 1
{
if(count==0)     /* 1个PWM周期完成后才会接受新数值 */
  {tmp1=m1;tmp2=m2;}
else
  {;}
  if(count<tmp1)  en1=1;   else en1=0;//产生电机1的PWM信号
  if(count<tmp2)  en2=1;    else en2=0;//产生电机1的PWM信号
  count++;   
  if(count>=100)
    count=0;  //1gePWM信号有100次中断产生
  else
    {;}
}


void delay(uchar x)    //x*0.14MS
{
uchar i;
while(x--)
{
for(i=0;i<13;i++);
}
}


void IR_IN(void) interrupt 0          //外部中断服务程序
{

。。。。。红外解码接省略了,下面只写了控制速度
switch(IRCOM[2])
         {
           case 0x0c: motor(1,20);motor(2,20); break;//1
           case 0x18: motor(1,50);motor(2,50); break;//2
           case 0x5E: motor(1,90);motor(2,90); break;//3
           case 0x08: motor(1,-10); break;//4
           case 0x1C: motor(1,-50); break;
           case 0x5A: motor(1,-90); break;
          // case 0x42: hsudu7(); break;
       case 0x46: motor_c=0x09; break;
           case 0x47: motor_c=0x06; break;
       case 0x40: motor_c=0x0d; break;
           case 0x43: motor_c=0x07; break;
       
         case 0x45: motor_c=0x0f; break;
         }
EX0=1;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

0

粉丝