首页 » 智能 » 还在用L298N驱动马达?发烧小尺寸小基于MOSFET的H桥理解下_电念头_速度

还在用L298N驱动马达?发烧小尺寸小基于MOSFET的H桥理解下_电念头_速度

乖囧猫 2025-01-23 08:02:02 0

扫一扫用手机浏览

文章目录 [+]

2 H桥回顾2.1脉宽调制(PWM)

3 TB66121FNG H桥3.1用MOSFET制成3.2 TB6612FNG规格3.3掌握TB6612FNG

还在用L298N驱动马达?发烧小尺寸小基于MOSFET的H桥理解下_电念头_速度 还在用L298N驱动马达?发烧小尺寸小基于MOSFET的H桥理解下_电念头_速度 智能

4 TB6612与L298N

还在用L298N驱动马达?发烧小尺寸小基于MOSFET的H桥理解下_电念头_速度 还在用L298N驱动马达?发烧小尺寸小基于MOSFET的H桥理解下_电念头_速度 智能
(图片来自网络侵删)

5 TB6612FNG与Arduino5.1 TB6612FNG连接5.2 TB6612FNG Arduino素描

6 TB6612FNG机器人汽车底座6.1适用于TN6612FNG的Sparkfun库6.2机器人汽车连接6.3机器人车代码

7 结论

接下来我们学习如何在您的Arduino项目中利用TB6612FNG H桥。

先容

对付单片机而言,掌握直流电动机的速率和方向都是非常普遍的运用。
您可能会想到可以利用这些设备构建的许多项目,从机器人到遥控飞机。

但是,如果您想考试测验将直流电动机直接连接到像Arduino这样的单片机上,您会很快创造这是不可行的,由于Arduino无法为电动机供应足够的电流

直流电动机所需的电流超过任何单片机直接供应的电流,并且许多直流电动机以不同的电压运行,而这些电压是处理器无法处理的。
因此,显然须要某种接口。

掌握直流电动机的最常见方法是利用一种称为H桥的设备。
这种类型的掌握器可以掌握直流电动机的速率和方向,一对H桥也可以用于掌握双极步进电动机。

我们在许多项目中都利用了H桥。
它们相对便宜,并且利用起来非常大略。
到目前为止,我们最常用的H桥是L298N。

L298N是一个非常常见的组件,它用于很多Arduino项目的设计中。
它很便宜,而且一旦您理解了它的事情事理,就很随意马虎利用。
但是它确实有缺陷,我将在稍后谈论。

本日,我们将利用更好的H桥,它可以在许多运用中替代L298N。
它被称为TB6612FNG,利用它后,我想您会赞许它是一个比旧L298N更好的选择。

H桥回顾

在我们开始之前,回顾一下H桥的事情事理,懂的请略过。

下图是直流电动机和H桥的事情事理:

您可以将H桥可视化为四个开关的排列。
如您所见,开关的排列办法看起来很像字母“ H”。
因此名称为“ H桥”。
如图所示,电机位于“ H”的中间。
如您所料,在断开开关的情形下,电动机没有电流利过。

如上图所示,如果我们闭合了几个开关,则可以看到电流被许可流过电动机,从而使电动机顺时针旋转。
显然,您不想一次闭合两个以上的开关,否则可能会导致短路。

闭合其他两个开关也会向电动机施加电流,但极性相反。
这将导致电动机逆时针旋转。

虽然您可以利用物理开关布局H桥,但这种情形并不常见。
在大多数情形下,开关会被半导体替代,例如双极结型晶体管(BJT)和MOSFET。

用半导体代替开关还有一个额外的上风–它也使您可以调节电动机的速率。

脉宽调制(PWM)

脉冲宽度调制(PWM)实质上便是听起来的样子。
脉冲被发送到掌握H桥的晶体管,该晶体管以非常快的速率关闭和打开电子“开关”。

可以变动脉冲的宽度以设置“开”与“关”的比率。
这具有掌握电动机速率的效果。

与仅改变其电源电压比较,PWM是一种更好的调节直流电动机速率的方法。
利用PWM时,电动机在全体速率范围内均以全转矩运行,这与利用电压掌握在较低速率下碰着的降落转矩相反。

TB66121FNG H桥

现在,让我们看一下“更好的” H桥模块。

TB6612FNG H桥是一款小型且价格低廉的双通道H桥掌握器,它利用MOSFET来实现出色的性能。

用MOSFE驱动

MOSFET具有比双极结型晶体管(BJT)更大的上风。

范例的BJT处于“接通”状态时,其电压降约为0.7伏,并且由于H桥须要电流利过两个BJT,因此总电压降为1.4伏。
在低电压下,这确实无关紧要,如果为H桥供应6伏电压,则到电动机的输出将仅为4.6伏电压。
在此示例中,H桥中丢失了险些25%的电压。
这个能量以热量的形式花费掉。
这便是为什么大多数基于BJT的H桥都须要很大的散热器的缘故原由。

利用MOSFET时,您没有固定的压降。
取而代之的是,MOSFET导通时的电阻很小,常日只有几分之一欧姆。
纵然在H桥设计中两个MOSFET都“导通”时,总电阻也非常低,实际上,如果您在电源中利用的是苗条导线,它的电阻可能都会比在H桥中的电阻大。

结果是极低的险些可以忽略不计的电压降。
这意味着险些所有来自电源的电压都会通报到电动机。
热量丢失小。

TB6612FNG规格

TB6612FNG具有以下规格(规格适用于模块中的两个H桥):

电机电源电压为2.5到13.5伏DC。
逻辑电源电压为2.7至5.5伏DC。
连续输出电流为1.2安培,峰值电流为3.2安培。
内置过热关机。
待机电源模式。

该设备是一种表面贴装芯片,可用于许多常见模块,

范例的TB6612FNG模块的引脚排列如下图所示:

关于模块布局要把稳的一件事是,所有输入引脚都在一侧,而所有输出和电源引脚都在另一侧。
只管您可以根据须要将一个小的散热器固定在表面贴装芯片上,但该双H桥模块显然没有散热器。

掌握TB6612FNG

TB6612FNG可以在四种模式下运行:

顺时针旋转逆时针旋转短刹车停滞

为了掌握H桥,您可以将AI1(或在某些型号上标有“ AIN1”的型号)和AI2(AIN2)引脚用于电机A的输出。
B输入掌握线以类似的办法用于电机B输出。

下表显示了它是如何事情的:

PWMAPWMB输入用于以脉冲宽度调制的办法掌握电机速率。

要把稳的一件事是,要使TB6612FGH事情,您必须将待机输入(STBY)保持为高电平。
您可以将其绑定到VCC或利用Arduino的输出来掌握它。

第二个值得把稳的不雅观察结果是,正反转掌握旗子暗记与盛行的L298N H桥中利用的旗子暗记相同。
这使得在许多情形下可以大略地用TB6612FNG作为直接替代品。

TB6612与L298N

末了一段中的关键词是“在许多情形下”。
在某些情形下(例如高压电动机),无法利用TB6612FNG。
但是对付许多设计,包括利用6伏和12伏电动机的设计,它是供应改进性能的空想替代品。

以下是TB6612FNG和L298N的规格比较:

如果您的电动机须要超过13.5伏的电压,则TB6612FNG不适用。
但是,如果您的电动机是低压(即3伏)设备,则L298N则可被取代。

只管L298N可以处理的稳定事情电流险些是TB6612FNG的两倍,但在达到峰值电流时也差不多。

在适用的范围内,TB6612FNG无疑是赢家。

它要小得多,实际上,大多数TB6612FNG模块都不到L298N模块尺寸的四分之一。
没有散热器,使其更小。
但是,最好让设备周围有一些气流。
效率是TB6612FNG的亮点。
在构建电池供电的设备时重点推举。
利用TB6612FNG时,险些所有的电动机电源电压都将到达电动机。
而L298N则有1.4伏压降。
TB6612FNG具有L298N没有的低电流待机模式。

我认为对付我的新设计,我将切换到TB6612FNG。
纵然我的抽屉里装满了L298N模块!

TB6612FNG在Arduino的运用

由于TB6612FNG利用与L298N相似的掌握办法,因此您可以轻松地重新调度旧代码的用场,以利用新的掌握器。
实际上,这正是我为第一个演示所做的。

TB6612FNG的接线

对付此实验,您将须要以下组件:

Arduino,我利用了Arduino Uno,但是任何Arduino都可以利用。
两个电位器来掌握速率。
我利用了10K线性电位器,任何超过5K的线性电位器就足够了。
TB6612FNG双H桥电机掌握器。
两个小型直流电动机。
我利用了两个6伏电动机,黄色是那些小型机器人车载套件所带的电动机。
电动机的电源。
当我利用6伏电动机时,我的电源是6伏,由4节AA型电池组成。

接线如下:

利用上图中右边表格所示将TB6612FNG连接到Arduino。
并记住将STBY(待机)引线连接到+5伏,否则将无法正常事情。

TB6612FNG用在Arduino上的代码

连接完所有元件后,您可以运行以下代码以使其连续进行:

/TB6612FNG H-Bridge DemoTB6612-Demo.inoDemonstrates use of TB6612FNG H-Bridge Motor ControllerDrives two DC MotorsDroneBot Workshop 2019https://dronebotworkshop.com/// Motor Aint pwmA = 5;int in1A = 3;int in2A = 4;// Motor Bint pwmB = 6;int in1B = 7;int in2B = 8;// Speed control potentiometersint SpeedControl1 = A0;int SpeedControl2 = A1;// Motor Speed Values - Start at zeroint MotorSpeed1 = 0;int MotorSpeed2 = 0;void setup(){// Set all the motor control pins to outputspinMode(pwmA, OUTPUT);pinMode(pwmB, OUTPUT);pinMode(in1A, OUTPUT);pinMode(in2A, OUTPUT);pinMode(in1B, OUTPUT);pinMode(in2B, OUTPUT);}void loop() {// Set Motor A forwarddigitalWrite(in1A, HIGH);digitalWrite(in2A, LOW);// Set Motor B forwarddigitalWrite(in1B, HIGH);digitalWrite(in2B, LOW);// Read potentiometers and convert to range of 0-255MotorSpeed1 = map(analogRead(SpeedControl1), 0, 1023, 0, 255);MotorSpeed2 = map(analogRead(SpeedControl2), 0, 1023, 0, 255);// Set the motor speedsanalogWrite(pwmA, MotorSpeed1);analogWrite(pwmB, MotorSpeed2);}

我们首先定义代表已连接TB6612FNG电机掌握器的Arduino引脚的变量,IN1和IN2引脚以及PWM引脚。

接下来,我们定义变量以表示与电位计的仿照连接以及电动机速率的变量。

在设置中,我们仅将所有引脚定义为输出,然后进入循环。

我们通过设置两个电动机的方向来启动循环。
如果乐意,可以利用上表反转一台或两台电机的方向。

接下来,我们从两个电位计读取该值,由于该值的范围是0到1023,因此我们利用Map函数将范围变动为0-255。

末了,我们利用产生PWM的AnalogWrite函数将PWM脉冲写出到电机掌握器,从而设置它们的速率。

将代码加载到您的Arduino,连接电机电源,并利用两个电位器。
您就能够利用它们掌握电动机的速率。

TB6612FNG机器人汽车底座

对付TB6612FNG的终极实验,我将利用TB6612FNG H桥来驱动小型机器人汽车中的电机。

实际上,您可以利用末了一个实验来精确地完成此任务,并利用两个电位计掌握电动机。
但是这次我想做一些不同的编程。

这次我们将利用一个库。

适用于TN6612FNG的Sparkfun库

Sparkfun发布了专门为TN6612FNG开拓的库,您可以从GitHub下载该库。

该库简化了电机掌握器的利用。
它具有使电动机在任何速率和两个方向上移动的功能,以及制动和停滞的功能。

此外,Sparkfun库还附带一个示例代码,非常适宜我们的机器人汽车。
实际上,我只须要修正一行即可使其事情。

机器人车接线

我利用了个中一种盛行的亚克力机器人汽车套件,可以轻松地在淘宝或Amazon上得到套件。
这些套件带有一个底座,一对电动机,一些匹配的轮毂,一个电池座以及将它们组合在一起所需的所有硬件。

我们的机器人汽车的电气接线与我们刚刚利用的接线非常相似。
Arduino和TB6612FNG之间的连接是相同的,并增加了Arduino与Standby引脚之间的连接。
我已经拆下了两个电位器。

我们可以用2节锂电池或4节AA电池为电动机供电,及为Arduino供应电源。
为Arduino供电的另一个不错的选择是利用USB移动电源。

以我为例,我将布线保持在无焊面包板上,只用一个支架就可以固定Arduino。
结果,我相信我创造了天下上最丑陋的机器人汽车!

您可以通过永久布线并精确安装和平衡Arduino和电池座来更好地完成事情。
在我的情形下,该装置不平衡,因此我安装了一个小型C型夹,以增加后背的重量!

机器人车代码

在运行机器人代码之前,您须要安装Sparkfun库。
最大略的方法是将库下载为zip文件。
将其保存在打算机上的某个位置,往后可以找到它,“下载”文件夹是显而易见的位置。

现在打开您的Arduino IDE,然后单击页面顶部的Sketch菜单项。
选择包括库,这将打开一个子菜单。

在子菜单中,从顶部开始的第二项将是Add ZIP Library(添加ZIP库)
选择该选项,将打开一个对话框。
利用对话框浏览到保存库ZIP文件的位置并选择它。

该库将与示例代码一起安装。

要在Arduino IDE中运行示例代码,您须要从顶部选择File菜单,然后选择Examples
这将弹出一个子菜单。
向下滚动子菜单,直到底部附近的“来自自定义库的示例”。
在其下,您将看到按字母顺序排列的示例列表。
查找Sparkfun TB6612FNG电机库,然后选择它。

库中仅包含一个名为MotorTestRun的示例代码。
打开该代码,这是我们将用于机器人车的代码。

如果按照上图连接Arduino和TB6612FNG,则须要对代码进行一次变动,这是由于Sparkfun利用的Arduino引脚与连接时未利用相同的Arduino引脚。

Sparkfun利用引脚2进行AIN1(AI1)连接,而我利用引脚3。
因此,您可以通过以下两种办法进行处理:

将代码的第28行变动为#define AIN13。
这便是我处理差异的方法。
保持代码不变,只需将引脚3的连接变动为引脚2。

下面是代码,已修正为利用引脚3。

/TestRun.inoTB6612FNG H-Bridge Motor Driver Example codeMichelle @ SparkFun Electronics8/20/16https://github.com/sparkfun/SparkFun_TB6612FNG_Arduino_LibraryUses 2 motors to show examples of the functions in the library.This causesa robot to do a little 'jig'.Each movement has an equal and opposite movementso assuming your motors are balanced the bot should end up at the same place itstarted.Resources:TB6612 SparkFun LibraryDevelopment environment specifics:Developed on Arduino 1.6.4Developed with ROB-9457/// This is the library for the TB6612 that contains the class Motor and all the// functions#include <SparkFun_TB6612.h>// Pins for all inputs, keep in mind the PWM defines must be on PWM pins// the default pins listed are the ones used on the Redbot (ROB-12097) with// the exception of STBY which the Redbot controls with a physical switch#define AIN1 3#define BIN1 7#define AIN2 4#define BIN2 8#define PWMA 5#define PWMB 6#define STBY 9// these constants are used to allow you to make your motor configuration// line up with function names like forward.Value can be 1 or -1const int offsetA = 1;const int offsetB = 1;// Initializing motors.The library will allow you to initialize as many// motors as you have memory for.If you are using functions like forward// that take 2 motors as arguements you can either write new functions or// call the function more than once.Motor motor1 = Motor(AIN1, AIN2, PWMA, offsetA, STBY);Motor motor2 = Motor(BIN1, BIN2, PWMB, offsetB, STBY);void setup(){//Nothing here}void loop(){ //Use of the drive function which takes as arguements the speed //and optional duration.A negative speed will cause it to go //backwards.Speed can be from -255 to 255.Also use of the //brake function which takes no arguements. motor1.drive(255,1000); motor1.drive(-255,1000); motor1.brake(); delay(1000); //Use of the drive function which takes as arguements the speed //and optional duration.A negative speed will cause it to go //backwards.Speed can be from -255 to 255.Also use of the //brake function which takes no arguements. motor2.drive(255,1000); motor2.drive(-255,1000); motor2.brake(); delay(1000); //Use of the forward function, which takes as arguements two motors //and optionally a speed.If a negative number is used for speed //it will go backwards forward(motor1, motor2, 150); delay(1000); //Use of the back function, which takes as arguments two motors //and optionally a speed.Either a positive number or a negative //number for speed will cause it to go backwards back(motor1, motor2, -150); delay(1000); //Use of the brake function which takes as arguments two motors. //Note that functions do not stop motors on their own. brake(motor1, motor2); delay(1000); //Use of the left and right functions which take as arguements two //motors and a speed.This function turns both motors to move in //the appropriate direction.For turning a single motor use drive. left(motor1, motor2, 100); delay(1000); right(motor1, motor2, 100); delay(1000); //Use of brake again. brake(motor1, motor2); delay(1000);}

利用Sparkfun库让利用TN6612FNG非常大略。
定义所有电机掌握器连接之后,我们设置两个工具,每个工具一个,分别命名为motor1motor2
把稳创建工具时如何通报所有电机参数。

setup中不须要任何内容​​,由于该库卖力将引脚定义为输出。

Loop实质上是库供应的功能的演示。
该文档已被很好地记录下来,因此您可以毫无问题地让其适应您的需求。
功能包括:

驱动器–此功能设置电动机的速率和方向(您将其分别运用于每个电动机)。
您将速率通报为正数或负数,负数会使电动机反向旋转。
您还可以指定希望电动机运行的持续韶光(以毫秒为单位)。
提高–此功能使您可以向先驱动两个电动机。
它以速率作为可选参数。
再次可以利用负速率,这将导致电动机退却撤退。
退却撤退。
制动–这将停滞电动机。
如果您没有为之前的命令指定持续韶光,则须要利用该韶光来使机器人停滞运行。
左–这将两个电动机都作为参数,并使机器人向左转。
它还将速率用作参数。
右–向右转

loop中的代码仅利用许多这些功能来练习自动驾驶汽车。
实际上,它的设计目的是使汽车停在同一位置,但是我那丑陋的机器人汽车是如此不平衡,以至于再也没有机会这样做。
大概您的汽车会做得更好!

您可以试验代码并变动或添加更多功能来掌握您的汽车。

结论

TB6612FNG是一种廉价的双H桥电机掌握器,易于利用,可以在许多运用中直接替代L298N。
它体积小,散热低,非常适宜小型机器人汽车和其他电池供电的设备。

相关文章