Arduino与Proteus仿真实例-L298N驱动直流电机仿真

L298N驱动直流电机仿真

1、L298N介绍

L298N 是采用 15 引线多瓦和 PowerSO20 封装的集成单片电路。 它是一种高压、大电流双全桥驱动器,设计用于接受标准TTL逻辑电平和驱动电感负载,如继电器、螺线管、直流和步进电机。

L298N 是双 H 桥电机驱动器,可同时控制两个直流电机的速度和方向。 该模块可以驱动电压在5-35V之间的直流电机,峰值电流可达2A。

在这里插入图片描述

L298N引脚及功能如下:

在这里插入图片描述

驱动模块可以驱动两个电机。 ENA 和 ENB 使能端为高电平有效。 电机A的控制方式及状态如下表所示:

在这里插入图片描述

如果想通过PWM 来调节电机A 的速度,需要设置IN1 和IN2,确定电机的旋转方向,然后输出PWM 脉冲给使能的端子。 请注意,使能端子信号为0 时电机处于自由停车状态。使能信号为1 时,如果IN1 和IN2 为00 或11,则电机处于制动状态,电机停止转动。 如果IN1为0,IN2为1,电机A顺时针旋转; 如果IN1为1,IN2为0,电机A逆时针旋转。 这是电机A的控制方法。电机B的控制方法与电机A的控制方法相同。

2、仿真电路原理图

在这里插入图片描述

3、仿真代码实现

本次实例使用到如下开源库:

演示代码如下:

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Include the library
#include <L298N.h>

// Pin definition
const unsigned int IN1 = 2;
const unsigned int IN2 = 3;
const unsigned int EN1 = 4;

const unsigned int IN3 = 5;
const unsigned int IN4 = 6;
const unsigned int EN2 = 7;

// Create one motor instance
L298N motor1(EN1, IN1, IN2);
L298N motor2(EN2, IN3, IN4);

void setup()
{
// Used to display information
Serial.begin(9600);

// Wait for Serial Monitor to be opened
while (!Serial)
{
//do nothing
}

// Set initial speed
motor1.setSpeed(255);
motor2.setSpeed(255);
}

void loop()
{

// Tell the motor to go forward (may depend by your wiring)
motor1.forward();
motor2.forward();

// Alternative method:
// motor.run(L298N::FORWARD);

//print the motor status in the serial monitor
printSomeInfo();

delay(1500);

// Stop
motor1.stop();
motor2.stop();
// Alternative method:
// motor.run(L298N::STOP);

printSomeInfo();

// Change speed
motor1.setSpeed(255);
motor2.setSpeed(255);

delay(1500);

// Tell the motor to go back (may depend by your wiring)
motor1.backward();
motor2.backward();

// Alternative method:
// motor.run(L298N::BACKWARD);

printSomeInfo();

delay(1500);
}

/\*
Print some informations in Serial Monitor
\*/
void printSomeInfo()
{
Serial.print("Motor is moving = ");
Serial.print(motor1.isMoving());
Serial.print(" at speed = ");
Serial.println(motor1.getSpeed());
}

4、仿真结果

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/121376646