如果您的电动机需要超过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 Demo
TB6612-Demo.ino
Demonstrates use of TB6612FNG H-Bridge Motor Controller
Drives two DC Motors
DroneBot Workshop 2019
https://dronebotworkshop.com
*/
// Motor A
int pwmA = 5;
int in1A = 3;
int in2A = 4;
// Motor B
int pwmB = 6;
int in1B = 7;
int in2B = 8;
// Speed control potentiometers
int SpeedControl1 = A0;
int SpeedControl2 = A1;
// Motor Speed Values - Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
void setup()
{
// Set all the motor control pins to outputs
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(in1A, OUTPUT);
pinMode(in2A, OUTPUT);
pinMode(in1B, OUTPUT);
pinMode(in2B, OUTPUT);
}
void loop() {
// Set Motor A forward
digitalWrite(in1A, HIGH);
digitalWrite(in2A, LOW);
// Set Motor B forward
digitalWrite(in1B, HIGH);
digitalWrite(in2B, LOW);
// Read potentiometers and convert to range of 0-255
MotorSpeed1 = map(analogRead(SpeedControl1), 0, 1023, 0, 255);
MotorSpeed2 = map(analogRead(SpeedControl2), 0, 1023, 0, 255);
// Set the motor speeds
analogWrite(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.ino
TB6612FNG H-Bridge Motor Driver Example code
Michelle @ SparkFun Electronics
8/20/16
https://github.com/sparkfun/SparkFun_TB6612FNG_Arduino_Library
Uses 2 motors to show examples of the functions in the library.This causes
a robot to do a little 'jig'.Each movement has an equal and opposite movement
so assuming your motors are balanced the bot should end up at the same place it
started.
Resources:
TB6612 SparkFun Library
Development environment specifics:
Developed on Arduino 1.6.4
Developed 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 -1
const 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非常简单。定义所有电机控制器连接之后,我们设置两个对象,每个对象一个,分别命名为motor1和motor2。注意创建对象时如何传递所有电机参数。
setup中不需要任何内容,因为该库负责将引脚定义为输出。
Loop本质上是库提供的功能的演示。该文档已被很好地记录下来,因此您可以毫无问题地让其适应您的需求。功能包括:
- 驱动器–此功能设置电动机的速度和方向(您将其分别应用于每个电动机)。您将速度传递为正数或负数,负数会使电动机反向旋转。您还可以指定希望电动机运行的持续时间(以毫秒为单位)。
- 前进–此功能使您可以向前驱动两个电动机。它以速度作为可选参数。再次可以使用负速度,这将导致电动机后退。
- 后退。
- 制动–这将停止电动机。如果您没有为之前的命令指定持续时间,则需要使用该时间来使机器人停止运行。
- 左–这将两个电动机都作为参数,并使机器人向左转。它还将速度用作参数。
- 右–向右转
loop中的代码仅使用许多这些功能来练习自动驾驶汽车。实际上,它的设计目的是使汽车停在同一位置,但是我那丑陋的机器人汽车是如此不平衡,以至于再也没有机会这样做。也许您的汽车会做得更好!
您可以试验代码并更改或添加更多功能来控制您的汽车。
结论TB6612FNG是一种廉价的双H桥电机控制器,易于使用,可以在许多应用中直接替代L298N。它体积小,散热低,非常适合小型机器人汽车和其他电池供电的设备。