51单片机求解PWM控制直流电机转速和正反转

2019-07-16 02:02发布

因为一个突如其来的课题仓促接触单片机,两眼一抹黑,时间紧迫,求解,我有AT89C52单片机一枚和实验板,要做到用PWM方式控制直流电机的转速和方向,我还需要什么硬件,会一点简单C语言,还需补充哪方面知识?求指点方向
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
zkl1989
2019-07-17 22:46
本帖最后由 zkl1989 于 2013-7-7 23:41 编辑

//电机真反转与调速

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar m;
sbit k1=P2^0; //正转
sbit k2=P2^1; //反转        
sbit k3=P2^2;  // 停止
sbit k4=P2^3;        // 调速
sbit pwm1=P1^4;
void init() ;               
void delay(int x)
  {
      uint i,j;
          for(i=0;i<=x;i++)
          for(j=1;j<=110;j++);
   }

main()
{   init();
   
   while(1)
    {  pwm1=1;
       delay(1+20*m);//通过延时调速
       pwm1=0;
        delay(1+20*m);
       if(k1==0)
        {
           delay(10);
            if(k1==0)
             {  
               P1=0X01;
      
              }
             while(!k1);
        }
      
          if(k2==0)
        {
           delay(10);
            if(k2==0)
             {
               P1=0X02;
            
              }
             while(!k2);
        }
        if(k3==0)
        {
           delay(10);
            if(k3==0)
             {
               
               P1=0X00;
               pwm1=0;
              }
             while(!k3);
        }
      
    }   

}
void init() //初始化
{
   IE=0X82;
   TMOD=0X01;               
   TH0=(65636-50000)/256;    //打开定时器T0,计数值约5ms
   TL0=(65636-50000)%256;
   TR0=1;
   P1=0X00;  //初始化P1口
   P2=0Xff;  //初始化P2口
   m=0;
}

void timer0(void) interrupt 1  //中断函数
{
      TH0=(65636-50000)/256;   //装初值
      TL0=(65636-50000)%256;
      if(k4==0)
        {
           delay(10);
            if(k4==0)
             {
                m++;
                if(m==3)
                 m=0;
              }
             while(!k4);
        }

}
QQ截图20130707234027.png

一周热门 更多>