常用H桥电机驱动模块L298N原理及应用

article/2025/11/9 13:24:53

什么是H桥?

H桥是一个比较简单的电路,通常它会包含四个独立控制的开关元器件(例如MOS-FET),它们通常用于驱动电流较大的负载,比如电机,至于为什么要叫H桥(H-Bridge),因为长得比较像字母H,具体如下图所示;

这里有四个开关元器件Q1Q2Q3Q4,另外还有一个直流电机M,D1D2D3D4是MOS-FET的续流二极管;

开关状态

下面以控制一个直流电机为例,对H桥的几种开关状态进行简单的介绍,其中正转和反转是人为规定的方向,实际工程中按照实际情况进行划分即可;

正转

通常H桥用来驱动感性负载,这里我们来驱动一个直流电机;

  • 打开Q1Q4

  • 关闭Q2Q3

此时假设电机正转,这电流依次经过Q1MQ4,在图中使用黄色线段进行标注,具体如下图所示;

正转

反转

另外一种状态则是电机反转;此时四个开关元器件的状态如下;

  • 关闭Q1Q4

  • 打开Q2Q3

此时电机反转(与前面介绍的情况相反),这电流依次经过Q2MQ3,在图中使用黄色线段进行标注,具体如下图所示;

反转

调速

如果要对直流电机调速,其中的一种方案就是;

  • 关闭Q2Q3

  • 打开Q1Q4上给它输入50%占空比的PWM波形,这样就达到了降低转速的效果,如果需要增加转速,则将输入PWM的占空比设置为100%;

具体如下所示;

停止状态

这里以电机从正转切换到停止状态为例;

  • 正转情况下;Q1Q4是打开状态;

  • 这时候如果关闭Q1Q4,直流电机内部可以等效成电感,也就是感性负载,电流不会突变,那么电流将继续保持原来的方向进行流动,这时候我们希望电机里的电流可以快速衰减;

这里有两种办法:

第一种:关闭Q1Q4,这时候电流仍然会通过反向续流二极管进行流动,此时短暂打开Q1Q3从而达到快速衰减电流的目的;

第二种:准备停止的时候,关闭Q1,打开Q2,这时候电流并不会衰减地很快,电流循环在Q2,M,Q4之间流动,通过MOS-FET的内阻将电能消耗掉;

应用

实际使用的时候,用分立元件制作H桥是很麻烦的,市面上已经有很多比较常用的IC方案,比如常用的L293D、L298N、TA7257P、SN754410等。接上电源、电机,通过输入控制信号就可以驱动电机了;

下面是某宝上的L298N模块,比较常见,对于新手玩家非常友好,接线也十分简单;

L298N模块

这个模块有一个板载5V稳压器,该稳压器可使用跳线的方式进行使能。

如果电机电源电压高达12V,我们可以启用5V稳压器,并且5V引脚可以用作输出,例如给Arduino板供电。

但是,如果电动机电压大于12V,则必须断开跳线,因为这些电压会损坏板载5V稳压器。

在这种情况下,5V引脚将用作输入,因为我们需要将其连接到5V电源,以使IC正常工作。

我们在这里可以注意到,该IC的电压降约为2V。因此,如果使用12V电源,则电动机端子上的电压约为10V,这意味着我们将无法从12V直流电动机中获得最大速度。

这里使用Arduino为例,这是网上找的一个Demo整体的框架如下图所示;

架构
#define enA 9
#define in1 6
#define in2 7
#define button 4int rotDirection = 0;
int pressed = false;void setup() {pinMode(enA, OUTPUT);pinMode(in1, OUTPUT);pinMode(in2, OUTPUT);pinMode(button, INPUT);// Set initial rotation directiondigitalWrite(in1, LOW);digitalWrite(in2, HIGH);
}void loop() {
// Read potentiometer valueint potValue = analogRead(A0); // Map the potentiometer value from 0 to 255int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Send PWM signal to L298N Enable pinanalogWrite(enA, pwmOutput); // Read button - Debounceif (digitalRead(button) == true) {pressed = !pressed;}while (digitalRead(button) == true);delay(20);// If button is pressed - change rotation directionif (pressed == true  & rotDirection == 0) {digitalWrite(in1, HIGH);digitalWrite(in2, LOW);rotDirection = 1;delay(20);}// If button is pressed - change rotation directionif (pressed == false & rotDirection == 1) {digitalWrite(in1, LOW);digitalWrite(in2, HIGH);rotDirection = 0;delay(20);}
}

简单描述一下:首先我们需要定义程序所需的引脚和变量。

setup()中,我们需要设置引脚模式和电机的初始旋转方向。

loop()中,我们先读取电位器值,然后将从中获得的值从0到1023变化,线性映射到PWM信号的0到255的值,将其从0到100%的占空比。

然后使用analogWrite()函数将PWM信号发送到L298N板的Enable引脚,该引脚实际上驱动电动机。

接下来,我们检查是否按下了按钮,如果是的话,我们将输入1和输入2的状态反置,从而改变电动机的旋转方向。该按钮将用作切换按钮,每次按下该按钮都会改变电动机的旋转方向。

某宝上这种小车很多,如下图所示;主控可以换成51单片机或者STM32,当然Arduino也没问题,使用L298N就可以快速搭建一个小车了;

某宝的小车

总结

本文简单介绍了H桥的原理,并以直流电机为例简单介绍了驱动的状态,整体比较简单,适合新手玩家,最后给出了基于Arduino和L298N的驱动示例,仅供参考,感兴趣可以去某宝逛逛,enjoy。

由于作者能力和水平有限,文中难免存在错误和纰漏,请不吝赐教。


http://chatgpt.dhexx.cn/article/GZ3m4qD4.shtml

相关文章

H桥——电机控制电路

电机的正转反转,其实质是电流方向相反 1.所谓H桥,就是四个开关管子,中间接电机,看上去是个字母H 原理是通过控制开关的闭合断开实现电流流向的控制 2.以下两个图,若把一个工作状态下叫电机正转,那另一个就…

【开源电机驱动】H桥基础知识

原文地址:http://www.modularcircuits.com/blog/articles/h-bridge-secrets/h-bridges-the-basics/ 本文为译者稿件,含有译者批注 1.Introduction 引言 You can learn how to build h-bridges from many on- and off-line resources. After all these c…

Splay-总结

【前言】 Splay Tree,又名伸展树,是OI中应用非常广泛的一种数据结构。相比其他BST,Splay的效率还是不错的。我们一般用Splay维护一个序列。 【操作】 Splay有以下几个基本操作: 1.rot旋转 这个不用我多说了,平衡树…

Splay讲解

伸展树(Splay Tree)是AVL树不错的替代,它有以下几个特点: (1)它是二叉查找树的改进,所以具有二叉查找树的有序性。 (2)对伸展树的操作的平摊复杂度是O(log2n)。 (3)伸展树的空间要求、编程难度非常低。 提到伸展树,就不得不提到AV…

Splay树

Splay树 Splay树是一种BST树,允许查找、插入、删除、分割、合并等操作。 Splay树的原理: 为了使整个查找时间更少,被查频率高的那些结点应当经常处于靠近树根的位置。Splay树可以通过旋转的方式把被访问结点旋转到树根的位置以减少查找时间。 与Trea…

Splay Trees 学习笔记

Splay Trees 学习笔记 Splays Trees 也是一种二叉搜索树,用于提高连续搜索的效率。Splay Trees 通过将被访问到的节点放于根,提升访问速度。 它与AVL Trees 的效果有所区别。AVL树通过使树balanced降低树的高度至logN,从而使得单次搜索的复…

Splay入门讲解

先安利一发,Splay入门解析【保证让你看不懂(滑稽)】 我就是看这个看懂的,这博客非常适合像我这种连平衡树都不知道是啥的蒟蒻。 另外,讲得不好还请见谅。 首先我们来看看平衡树是啥 平衡树首先是棵二叉搜索树&#xf…

史上第二详尽的平衡树(Splay)详解

谢鸣:本文来自zyf2000学姐的blog,原题为“史上最详尽的平衡树(splay)讲解与模板”,我在这里拿过来使用,命名为“史上第二详尽的平衡树(Splay)详解”,并加上了一些新的操作. 变量声明&#xff1…

splay复习小记

简介 splay的原名是伸展树,一种超级实用的数据结构,能快速地干很多数据结构不能干的事情。 很久以前就听说过并且略微地学了一些,但是当时了解地并不是很多。 有些人把splay达成spaly叫做死吧你,(⊙﹏⊙)b 结构 实质上他是一个…

Splay学习笔记

昨天这个时候到现在终于把Splay给搞明白了,还A了一道郁闷的出纳员;刚学完的感受:我再也不碰这东西了;做完郁闷的出纳员的感受:我发誓这辈子不当出纳员(虽然这确实只是个入门题……) 于是来讲一讲这个恶心的东西吧………

[Splay伸展树]splay树入门级教程

首先声明,本教程的对象是完全没有接触过splay的OIer,大牛请右上角。。 PS:若代码有误,请尽快与本人联系,我会尽快改正 首先引入一下splay的概念,他的中文名是伸展树,意思差不多就是可以随意翻转的二叉树 PS:百度百科中伸展树读作:BoGang,不知道是不是因为和某位大牛…

Splay Tree(伸展树)

二叉查找树(Binary Search Tree)能够支持多种动态集合操作。因此,在信息学竞赛中,二叉排序树起着非常重要的作用,它可以被用来表示有序集合、建立索引或优先队列等。 作用于二叉查找树上的基本操作的时间是与树的高度…

浅谈splay

例题: 给出一个长度为n序列a。 有m次操作,每次操作可以修改a[i],在第i个数前插入一个数x,或查询区间[l,r]的最大值。 1≤n≤100000,1≤m≤100000。 强制在线 看到这道题最自然的反应就是用线段树,但有了插入操作线段树…

关于splay的一些说明

前言splay出现的背景它的操作 push_uprotatesplayfindinsertnextdeletefindkthmain 前言 暑假快过完了,大家感觉是不是很棒!gay房也体验过最新的断电模拟器了. 好吧,在开讲之前我还是得说一个.刀剑神域的外传实在太好看了! 除了精彩的战斗场面,神一般的人设和强大的剧情,比…

Splay入门详解

Splay入门详解 写在前面 听说平衡树是一种强大的数据结构,听同年级或高年级大佬们讲起来也感觉很牛笔的亚子,而最近XC又叫我们去学习一下 L C T LCT LCT!? 又因为 S p l a y Splay Splay是学习 L C T LCT LCT的基础,…

【学习笔记】Splay

普通平衡树 模板题链接 1、引入 一种二叉树&#xff0c;这棵树满足任意一个节点&#xff0c;它的左儿子的权值<自己的权值<右儿子的权值 这种树叫做二叉查找树&#xff0c;这个概念应该在初赛中见过了吧 Splay就是利用这个结构来实现的 2、变量 模板题的7大变量 s…

平衡树详解(Splay)

引入 先看例题&#xff1a;&#xff08;洛谷 P3369 【模板】普通平衡树&#xff09; 您需要写一种数据结构&#xff0c;来维护一些数&#xff0c;其中需要提供以下操作&#xff1a; 1.插入 x x x 数 2.删除 x x x 数(若有多个相同的数&#xff0c;因只删除一个) 3.查询 x x…

Splay入门解析【保证让你看不懂(滑稽)】

upd&#xff1a;忽然发现直接在百度上搜索 splay s p l a y 就会搜索到我这篇文章&#xff1f;小蒟蒻瑟瑟发抖。 因为CSDN这边我基本不会看回复什么的&#xff0c;所以如果有问题还是请移步cnblogs里面吧 Cnblogs里面这篇文章的链接 BST真是神奇的东西。。。 而且种类好多呀…

Splay Tree

类别&#xff1a;二叉排序树 空间效率&#xff1a;O(n) 时间效率&#xff1a;O(log n)内完成插入、查找、删除操作 创造者&#xff1a;Daniel Sleator和Robert Tarjan 优点&#xff1a;每次查询会调整树的结构&#xff0c;使被查询频率高的条目更靠近树根。 注&#xff1a;所有…

【算法详解】splay的初步了解

qwq表示最近感受到了不停课的鸭梨啊&#xff0c;好难搞啊……算法太难学了……我好菜啊qwq 其实半个多月前就可以写这篇文章&#xff0c;不过由于时间紧张没写emmmmmm&#xff0c;不扯闲言乱语了&#xff0c;如果有什么写的不好的地方凑活一下吧2333333333 splay是一种可以使树…