H桥到底是什么一个H桥驱动扫盲教程详细说明

电子说

1.2w人已加入

描述

什么是H桥?

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

直流电机

这里有四个开关元器件 Q1 , Q2 , Q3 , Q4 ,另外还有一个直流电机M, D1 , D2 , D3 , D4 是MOS-FET的续流二极管;

开关状态

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

正转

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

打开 Q1 和 Q4 ;

关闭 Q2 和 Q3 ;

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

直流电机

正转 反转

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

关闭 Q1 和 Q4 ;

打开 Q2 和 Q3 ;

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

直流电机

反转 调速

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

关闭 Q2 , Q3 ;

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

具体如下所示;

直流电机

停止状态

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

正转情况下; Q1 和 Q4 是打开状态;

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

这里有两种办法:

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

直流电机

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

直流电机

应用

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

L298N模块

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

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

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

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

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

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

直流电机

架构 # defineenA 9

# definein1 6

# definein2 7

# definebutton 4

introtDirection = 0;

intpressed = false;

voidsetup{

pinMode(enA, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(button, INPUT);

// Set initial rotation direction

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

}

voidloop{

// Read potentiometer value

intpotValue = analogRead(A0);

// Map the potentiometer value from 0 to 255

intpwmOutput = map(potValue, 0, 1023, 0, 255);

// Send PWM signal to L298N Enable pin

analogWrite(enA, pwmOutput);

// Read button - Debounce

if(digitalRead(button) == true) {

pressed = !pressed;

}

while(digitalRead(button) == true);

delay( 20);

// If button is pressed - change rotation direction

if(pressed == true& rotDirection == 0) {

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

rotDirection = 1;

delay( 20);

}

// If button is pressed - change rotation direction

if(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。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分