找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 886|回复: 3
打印 上一主题 下一主题
收起左侧

请大家帮我看看单片机代码,为什么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;                                                      
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 单片机教程网

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