L298N


 IN1、IN2控制输出A,IN3、IN4控制输出B。

以A方向输出为例,如表格:

IN1IN2电机旋转方向
LOWHIGH正转
HIGHLOW反转

以控制一个电机为例:

#define right_motor1 11 //连接IN1的引脚
#define right_motor2 12 //连接IN2的引脚

void setup()
{
  pinMode(right_motor1,OUTPUT);
  pinMode(rigth_motor2,OUTPUT);
}

void loop()
{
  run();
}

void run()
{
  analogWrite(right_motor1,0); //IN1连接引脚低电平
  analogWrite(right_motor2,200); //IN2连接引脚高电平
  //电机正转
}

 因此,一个L298N电机驱动模块只能控制2个电机(不正确

控制2个电机的代码:

#define right_motor1 11 //连接IN1的引脚
#define right_motor2 12 //连接IN2的引脚
#define left_motor1 7 //连接IN3的引脚
#define left_motor2 8 //连接IN4的引脚

void setup()
{
  pinMode(right_motor1,OUTPUT);
  pinMode(rigth_motor2,OUTPUT);
  pinMode(left_motor1,OUTPUT);
  pinMode(left_motor2,OUTPUT);
}

void loop()
{
  run();
}

void run()
{
  analogWrite(right_motor1,0); //IN1连接引脚低电平
  analogWrite(right_motor2,200); //IN2连接引脚高电平
  analogWrite(left_motor1,0); //IN3连接引脚低电平
  analogWrite(left_motor2,200); //IN4连接引脚高电平
  //电机正转
}

控制两个电机带动两个轮子的简单运动:

#include <IRremote.h>
#define right_motor1 11 //连接IN1的引脚
#define right_motor2 12 //连接IN2的引脚
#define left_motor1 7 //连接IN3的引脚
#define left_motor2 8 //连接IN4的引脚
#define IRRECV_PIN 12 //红外接收引脚
IRrecv myIRrecv(IRRECV_PIN); //实例化
decode_results results; //声明接收编码的信息的结构体对象

void setup()
{
  myIRrecv.enableIRIn(); //初始化红外编码
  pinMode(right_motor1,OUTPUT);
  pinMode(rigth_motor2,OUTPUT);
  pinMode(left_motor1,OUTPUT);
  pinMode(left_motor2,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if(myIRrecv.decode(&result)){
    //接收到了编码信息
    if(results.value == ){
      forward();
    }
    if(results.value == ){
      backward();
    }
    if(results.value == ){
      turnleft();
    }
    if(results.value == ){
      turnright();
    }
    
    Serial.println(results.value,HEX);//用十六进制打印编码信息
    myIRrecv.resume(); //接收下一个编码
  }
}

void forward()
{
  analogWrite(right_motor1,0); //IN1连接引脚低电平
  analogWrite(right_motor2,200); //IN2连接引脚高电平
  analogWrite(left_motor1,0); //IN3连接引脚低电平
  analogWrite(left_motor2,200); //IN4连接引脚高电平
  //电机正转
}

void backward()
{
  analogWrite(right_motor1,200); //IN1连接引脚高电平
  analogWrite(right_motor2,0); //IN2连接引脚高低平
  analogWrite(left_motor1,200); //IN3连接引脚高电平
  analogWrite(left_motor2,0); //IN4连接引脚低电平
  //电机反转
}

void turnleft()
{
  analogWrite(right_motor1,0); //IN1连接引脚低电平
  analogWrite(right_motor2,0); //IN2连接引脚低电平
  analogWrite(left_motor1,200); //IN3连接引脚高电平
  analogWrite(left_motor2,0); //IN4连接引脚低电平
  //左边电机不动,右边电机正转
}

void turnright()
{
  analogWrite(right_motor1,200); //IN1连接引脚高电平
  analogWrite(right_motor2,0); //IN2连接引脚低低平
  analogWrite(left_motor1,0); //IN3连接引脚低电平
  analogWrite(left_motor2,0); //IN4连接引脚低电平
  //左边电机正转,右边电机不动
}

后来通过查找资料发现,一个L198N能驱动4个电机的转动

但是较复杂,还是使用两个L298N来进行驱动

### L298N电机驱动模块的使用说明与接线图 L298N电机驱动模块是一种常用的双H桥直流电机驱动芯片,广泛应用于机器人和自动化控制领域。以下是关于L298N电机驱动模块的技术信息和使用方法的详细说明。 #### 1. 模块功能概述 L298N模块能够驱动两个直流电机或一个步进电机。它支持高达46V的工作电压和2A的持续电流输出(峰值可达3A)。模块上集成了5V稳压芯片,可以为外部单片机或其他设备提供电源[^1]。 #### 2. 接线注意事项 - **电源连接**: - 如果L298N模块的5V供电来自外部电源(而非单片机电源),必须将单片机的GND与模块上的GND相连,以确保逻辑信号有共同的参考点[^1]。 - 当输入电压为7~12V时,模块上的5V稳压芯片会自动工作,无需额外连接5V电源[^2]。 - 输入电压超过12V但小于24V时,需拔掉模块上的跳线帽,并为5V端提供独立的5V电源[^2]。 - **信号连接**: - IN1至IN4为逻辑输入端,用于控制电机的正转、反转、待机和刹车状态。例如,对于左侧电机,`IN1=0`且`IN2=1`时正转,`IN1=1`且`IN2=0`时反转[^2]。 - ENA和ENB为使能端,通过PWM信号调节电机速度。 #### 3. 驱动代码示例 以下是一个基于51单片机的简单驱动代码示例,用于控制单个电机的正转和速度调节: ```c #include <reg52.h> #define uint unsigned int sbit ENA = P3^5; sbit IN1 = P3^6; sbit IN2 = P3^7; void delay(uint n) { uint x, y; for (x = n; x > 0; x--) for (y = 114; y > 0; y--); } void Speed(uint a) { // 调节范围0~100 ENA = 1; // 使能转 delay(a); // 延时越久,速度越大 ENA = 0; // 使能停 delay(100 - a); // 类似 } void main() { while (1) { IN1 = 1; // 正转 IN2 = 0; Speed(70); // 设置速度为70% } } ``` #### 4. 接线图描述 L298N模块的典型接线包括以下部分: - **电源部分**:将电机供电(如12V)连接到模块的`+`和`-`端子,同时确保GND与单片机的地线相连。 - **信号部分**:将单片机的IO口分别连接到模块的`IN1`、`IN2`、`ENA`等引脚。 - **负载部分**:将电机的两根线分别连接到模块的`OUT1`和`OUT2`端子。 #### 5. 使用中的常见问题及解决方法 - **问题1**:电机无法启动。 解决方法:检查电源是否正确连接,确保GND共地,以及逻辑信号是否符合要求[^1]。 - **问题2**:电机速度不稳定。 解决方法:检查PWM信号的频率和占空比是否正确,确保EN端的信号稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值