【Arduino蓝牙小车】L298N电机驱动模块详解

原文链接:[Arduino] 从零制作蓝牙小车 - 饮猫的学习日志


1. L298N模块的使用

这是一个L298N电机驱动模块的图片。你可能会觉得接口有一点点多。但其实搞清楚它的控制原理后就能很快完成接线。

输出A输出B两个接口分别与小车的两个电机相连(不用区分正负);12V供电接口与12V锂电池正极相连;GND接口同时与电池负极和Arduino的GND接口相连;5V供电接口与Arduino的Vin接口相连。


对于通道A使能、逻辑输入这几个接口,网络上的文章描述的都较为复杂。此处我会给出一个更简单的理解方式。注:由于通道AB的功能相同,下文只对一个通道进行描述。

图中的两个5V针脚会恒定输出5V电压;两个使能针脚可以理解为开关,当接到5V电压时,对应通道打开;1、2针脚用于控制电机的转动方向,1、2针脚分别为高电平时电机会转动且转动方向相反,其他情况电机不转动。


2. 接线方式

如果我们想利用PWM来对电机进行调速,我们有两种接线方式:

2.1 接线方式一(不推荐)

我们不拔除通道使能5V之间的跳帽。这种情况下,通道会一直保持打开状态。我们分别将1、2两个针脚接到Arduino的两个PWM接口,通过分别控制1、2两个针脚对应的输出来控制电机旋转方向和速度。显然,这种接线方式会占用较多的PWM引脚(对于每个通道需要占用两个PWM引脚),但不需要占用普通引脚。在PWM引脚较少的情况下不推荐使用这种方案。

2.2 接线方式二(推荐)

拔除通道使能5V之间的跳帽,将使能针脚与Arduino的PWM引脚相连、1、2两个针脚与Arduino的两个普通引脚相连。这是,我们可以通过PWM引脚来控制通道的开关,用于调速;控制1、2两个针脚的电平来控制电机的转动方向。对于每个通道,这种接线方式只需要占用一个PWM引脚,但是会占用两个普通引脚。我们需要根据实际的引脚数量在两种接线方式中进行权衡。本文接下来的代码部分以第二种接线方式为例


3. Arduino代码

3.1 电机基础信息配置

#define Motor1_M1_Port 12
#define Motor1_M2_Port 13
#define Motor1_PWM_Port 3

#define Motor2_M1_Port A4
#define Motor2_M2_Port A5
#define Motor2_PWM_Port 11

3.2 电机初始化函数 

void motorInit() {
  // 设置引脚模式
  pinMode(Motor1_M1_Port, OUTPUT);
  pinMode(Motor1_M2_Port, OUTPUT);
  pinMode(Motor2_M1_Port, OUTPUT);
  pinMode(Motor2_M2_Port, OUTPUT);

  // 将引脚置于低电平
  digitalWrite(Motor1_M1_Port, LOW);
  digitalWrite(Motor1_M2_Port, LOW);
  digitalWrite(Motor2_M1_Port, LOW);
  digitalWrite(Motor2_M2_Port, LOW);
}

3.3 电机速度设置函数

void motorSetSpeed(int v1, int v2) {
    // 设置转动方向
    if (v1 >= 0) {
        digitalWrite(Motor1_M1_Port, LOW);
        digitalWrite(Motor1_M2_Port, HIGH);
    } else {
        digitalWrite(Motor1_M1_Port, HIGH);
        digitalWrite(Motor1_M2_Port, LOW);
    }
    if (v2 >= 0) {
        digitalWrite(Motor2_M1_Port, LOW);
        digitalWrite(Motor2_M2_Port, HIGH);
    } else {
        digitalWrite(Motor2_M1_Port, HIGH);
        digitalWrite(Motor2_M2_Port, LOW);
    }

    // 设置速度 通过PWM控制
    analogWrite(Motor1_PWM_Port, abs(v1)); // Value = 0 ~ 255
    analogWrite(Motor2_PWM_Port, abs(v2)); // Value = 0 ~ 255
} 

至此,电机的驱动代码全部完成。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值