标题:
请大家帮我看看单片机代码,为什么L298NIN口都是高电平
[打印本页]
作者:
448951
时间:
2022-4-16 22:54
标题:
请大家帮我看看单片机代码,为什么L298NIN口都是高电平
M2MU4RCPB%`H6RCL68IBOW3.png
(45.25 KB, 下载次数: 30)
下载附件
2022-4-16 22:54 上传
单片机源程序如下:
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