标题: 请大家帮我看看单片机代码,为什么L298NIN口都是高电平 [打印本页]

作者: 448951    时间: 2022-4-16 22:54
标题: 请大家帮我看看单片机代码,为什么L298NIN口都是高电平


单片机源程序如下:
void forward(void)                                                    //小车前进控制函数           
{
IN1 = 1;                                                                                         //将电机驱动芯片L298N的控制管脚 IN1设置成高电平
IN2 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN2设置成低电平

IN3 = 1;                                                                                         //将电机驱动芯片L298N的控制管脚 IN3设置成高电平
IN4 = 0;                                                                                     //将电机驱动芯片L298N的控制管脚 IN4设置成低电平
}

void back(void)                                                 //小车后退控制函数           
{
IN1 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN1设置成低电平
IN2 = 1;                                                                             //将电机驱动芯片L298N的控制管脚 IN2设置成高电平

IN3 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN3设置成低电平
IN4 = 1;                                                                     //将电机驱动芯片L298N的控制管脚 IN4设置成高电平
}

void stop(void)                                                 //小车停止控制函数
{
IN1 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN1设置成低电平
IN2 = 0;                                                                                   //将电机驱动芯片L298N的控制管脚 IN2设置成低电平

IN3 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN3设置成低电平
IN4 = 0;                                                                    //将电机驱动芯片L298N的控制管脚 IN4设置成低电平
}

void left(void)                                                 //小车向左转控制函数
{
IN1 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN1设置成低电平
IN2 = 0;                                                                                   //将电机驱动芯片L298N的控制管脚 IN2设置成低电平

IN3 = 1;                                                                                         //将电机驱动芯片L298N的控制管脚 IN3设置成高电平
IN4 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN4设置成低电平
}

void right(void)                                                  //小车向右转控制函数
{
IN1 = 1;                                                                                         //将电机驱动芯片L298N的控制管脚 IN1设置成高电平
IN2 = 0;                                                                                           //将电机驱动芯片L298N的控制管脚 IN2设置成低电平

IN3 = 0;                                                                                         //将电机驱动芯片L298N的控制管脚 IN3设置成低电平
IN4 = 0;                                                                                          //将电机驱动芯片L298N的控制管脚 IN4设置成低电平
}

void circle_right(void)                                     //小车向右打转控制函数                  
{
IN1 = 1;                                                                                       //将电机驱动芯片L298N的控制管脚 IN1设置成低电平
IN2 = 0;                                                                                          //将电机驱动芯片L298N的控制管脚 IN2设置成高电平

IN3 = 0;                                                                                        //将电机驱动芯片L298N的控制管脚 IN3设置成高电平
IN4 = 1;                                                                                         //将电机驱动芯片L298N的控制管脚 IN4设置成低电平
}

void speed_jia(void)                                                  
{
   if(sudu<17)sudu++;
         pwmval_left_init  = sudu;
                   pwmval_right_init = sudu;
}
void speed_jian(void)                                                  
{
   if(sudu>3)sudu--;
         pwmval_left_init  = sudu;
                   pwmval_right_init = sudu;
}
/************************************************************************/                                                         
void left_moto(void)                                                                 //小车左电机PWM调速控制函数
{  
if(left_pwm)                                                                                 //如果变量left_pwm为1,执行左电机pwm调速功能(left_pwm相当于一个开关,只有为1时才有pwm调速功能)
{
  if(pwmval_left <= pwmval_left_init)                                 //当pwmval_left小于等于pwm_left_init时
  {
   EN1 = 1;
                                                                                   //将电机驱动芯片的EN1管脚设置成高电平
  }
  else                                                                                                  //当pwmval_left小不于等于pwm_left_init时
  {                                                                                                         
   EN1 = 0;
                                                                                            //将电机驱动芯片的EN1管脚设置成低电平
  }
  if(pwmval_left >= 20)                                                                 //如果         pwmval_left大于等于20
  {
   pwmval_left = 0;                                                                         //将  pwmval_left设为0
  }
}
else                                                                                             //        如果变量left_pwm为0,将电机驱动芯片的EN1管脚设置成低电平 (left_pwm相当于一个开关,只有为1时才有pwm调速功能)
{
  EN1 = 0;

}
}

/******************************************************************/
void right_moto(void)                                                              //小车右电机PWM调速控制函数
{                                                                                                  
if(right_pwm)                                                                                //如果变量right_pwm为1,执行右电机pwm调速功能(right_pwm相当于一个开关,只有为1时才有pwm调速功能)
{                                                                                                      
  if(pwmval_right <= pwmval_right_init)                                  //当pwmval_right小于等于pwm_right_init时
  {
   EN2 = 1;                                                                                    //将电机驱动芯片的EN2管脚设置成高电平
  }
  else if(pwmval_right > pwmval_right_init)                        //当pwmval_right小不于等于pwm_right_init时
  {
   EN2 = 0;                                                                                        //将电机驱动芯片的EN2管脚设置成低电平
  }
  if(pwmval_right >= 20)                                                       //如果         pwmval_right大于等于20
  {
   pwmval_right = 0;                                                                //将  pwmval_right设为0
  }
}
else                                                                                            //如果变量right_pwm为0,将电机驱动芯片的EN2管脚设置成低电平 (right_pwm相当于一个开关,只有为1时才有pwm调速功能)
{
  EN2 = 0;                                                      
}
}



作者: zhxiufan    时间: 2022-4-17 08:50
代码不全,看不出有啥问题,这里只是一些子程序。如果你的主程序里面没有调用这些子程序,当然IN都是高了。PWM控制一般是定时器实现的,程序里面也没有看到定时器相关的代码。
作者: 小象    时间: 2022-4-17 16:49
你最好把完整的程序和图纸贴上来,要不然看的云里雾里的。。。
作者: yzwzfyz    时间: 2022-4-18 17:17
你走单步调试一下,不就明白了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1