找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 1526|回复: 3
收起左侧

请大家帮我看看单片机代码,为什么L298NIN口都是高电平

[复制链接]
ID:1016999 发表于 2022-4-16 22:54 | 显示全部楼层 |阅读模式
M2MU4RCPB%`H6RCL68IBOW3.png

单片机源程序如下:
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;                                                      
}
}


回复

举报

ID:121859 发表于 2022-4-17 08:50 | 显示全部楼层
代码不全,看不出有啥问题,这里只是一些子程序。如果你的主程序里面没有调用这些子程序,当然IN都是高了。PWM控制一般是定时器实现的,程序里面也没有看到定时器相关的代码。
回复

举报

ID:480627 发表于 2022-4-17 16:49 | 显示全部楼层
你最好把完整的程序和图纸贴上来,要不然看的云里雾里的。。。
回复

举报

ID:123289 发表于 2022-4-18 17:17 | 显示全部楼层
你走单步调试一下,不就明白了
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表