L298N电机驱动模块
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。
模块来源
规格参数
驱动电压:5V~24V
驱动电流:2A
逻辑电压:5V
逻辑电流:36mA
控制方式:PWM
使用说明
当驱动电压为7V~12V的时候,即VCC电机驱动端子接通驱动电源时,板载的78M05供给芯片的逻辑电源,指示灯亮,可以不用再外接逻辑电源;如果使用电机驱动的板载5V供电,接口中的+5V供电端子不要输入电压,但是可以引出5V电压供外部使用(这种即为常规应用!)。
当驱动电压高于12V,小于等于24V(芯片手册中提出可以支持到35V,但是按照经验一般L298保守应用最大电压支持到24V已经很了不起!)时,比如要驱动额定电压为18V的电机。首先必须断开板载5V使能,指示灯熄灭,不使用板载的78M05供给芯片的逻辑电源,然后在5V输出端口外部接入5V电压对L298N内部逻辑电路供电。(这种是高压驱动的非常规应用!)
5V使能即一个电平为5V的控制信号,当此信号输入有效时且电机驱动模块中电源供电正常时,电机驱动模块输出电流。否则即使电源供电正常,电机上也无电流。
L298N使能端(高电平有效,常态下用跳线帽接于VCC)可通过这两个端口1实现PWM调速(使用PWM调速时取下跳线帽)ENA和ENB接EPWM信号,1N1,1N2,1N3,1N4正常接上高低电平使电机正转,反转或停转。
注意:L298N供电的5V如果是用另外电源供电的话,(即不是和单片机的电源共用),那么需要将单片机的GND和模块上的GND连接在一起,只有这样单片机上过来的逻辑信号才有个参考0点。板载5V稳压芯片的输入引脚和电机供电驱动接线端子导通的。
硬件连接
L298N模块主要引脚包括:ENA, IN1, IN2, IN3, IN4, ENB, OUT1, OUT2, OUT3, OUT4、VSS(逻辑电源)、VS(电机电源)和GND。
- ENA 和 ENB 用于控制电机的速度(PWM控制信号)。
- IN1 和 IN2 控制第一个电机(电机A)的方向。
- IN3 和 IN4 控制第二个电机(电机B)的方向。
- OUT1, OUT2, OUT3, OUT4 连接到两个电机。
- VS 连接到电机的供电电源(根据电机规格选择,通常在6V到12V)。
- VSS 连接到开发板的5V供电。
- GND 连接到开发板的GND以及电源的GND。
以下为适配本例程的接线方法:
使用方法
#define ENA 5 // 定义ENA连接到Arduino的PWM引脚5
#define IN1 2
#define IN2 3
#define ENB 6 // 定义ENB连接到Arduino的PWM引脚6
#define IN3 4
#define IN4 7
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
// 第一个电机正转
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 200); // 设置PWM值以控制速度
// 第二个电机正转
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 200); // 设置PWM值以控制速度
delay(2000); // 电机运行2秒
// 停止所有电机
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0); // 停止PWM输出
analogWrite(ENB, 0);
delay(1000); // 停车1秒
// 第一个电机反转
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 200); // 设置PWM值以控制速度
// 第二个电机反转
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 200); // 设置PWM值以控制速度
delay(2000); // 电机运行2秒
// 停止所有电机
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0); // 停止PWM输出
analogWrite(ENB, 0);
delay(1000); // 停车1秒
// 重复上述步骤
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63