huang_guo_ming 发表于 2012-7-14 17:10:19

关于使用PWM控制之路电机。

一个使用51的定时器产生的pwm控制直流电机转动的程序。直流电机的驱动是使用A1015三极管,在调试的时候,每次只能使用一个按键,要使用另一个就得复位,为什么这样,是不是电机的干扰是的单片机失常,奇怪的是,每次只有一个按键可以用,只要不复位,那个按键就可以,其他的不可以。要是真的是干扰,应该接电容,还是怎么呢?我接过电容,木有效果。还是程序出问题呢?



huang_guo_ming 发表于 2012-7-14 17:11:28

//硬件连接:          F1 - P3.0   F2 - P3.1   F3 - P3.2   F4 - P3.3

#include < reg52.h >

#define uintunsigned int

sbit out_put = P1^0;

sbit f1=P3^0;
sbit f2=P3^1;
sbit f3=P3^2;
sbit f4=P3^3;

int a = 0;
int k = 20;

/***************一微秒延时子程序******************/

void delayus(uint delay){
        while(delay--);
}

/***************一毫秒延时子程序******************/

void delayms(uint delay)
{
        while(delay--)
                delayus(149);
}

//******定时器2初始化函数*******
void init_time_2_( void )
{
        EA = 1;
        ET1 = 1;
        TCON = 0X01;//设置定时器1工作
        TMOD = 0X00;
        TL1 = 0;
        TH1 = 0;
        TR1 = 1;
}

void time_1_( void )        interrupt 3
{
    a++;
        if( a == 40 )          {a = 0;out_put = 1;}
        if( a == k )      out_put = 0;
   
        TL1 = 0xef;
        TH1 = 0xff;
       
}

void get_key( void )
{
        if( f1==0 )
        {
          delayms( 20);
          while( f1==1 );
                  k += 1;
                   if( k > 40 )k = 0;
                   if( k == 40 )P2 = 0x55;
        }
          
                if( f2==0 )
        {
          delayms( 20 );
             while( f2==1 );
                  k -= 1;
                  if( k < 0 )   k = 40;
        }   
       
       
                if( f3==0 )
        {
          delayms( 20 );
             while( f3==1 );
               EA = 0;
        }   
       
                if( f4==0 )
        {
          delayms( 20 );
             while( f4==1 );
               EA = 1;
        }
}


void main ()
{
        init_time_2_( );
        while ( 1 )
        {
          get_key();
        }       
}

huang_guo_ming 发表于 2012-7-14 22:18:19

看来没有人鸟我,我自己搞好了·······{:tongue:}
页: [1]
查看完整版本: 关于使用PWM控制之路电机。