Adafruit TB6612 1.2A DC/Stepper Motor Driver Breakout Board使用指南
在电子工程领域,电机驱动是一个常见且重要的应用场景。今天我们来详细介绍一下 Adafruit TB6612 1.2A DC/Stepper Motor Driver Breakout Board,这是一款功能强大且易于使用的电机驱动板。
文件下载:2448.pdf
一、概述
TB6612 驱动板可以驱动四个螺线管、两个直流电机,或者一个双极或单极步进电机,每个通道的电流可达 1.2A。它是 Adafruit Motorshield 和 Motor HAT 中使用的驱动芯片。这款驱动板将 TB6612 芯片焊接在一个 breakout 板上,在电机电压输入处设有极性保护 FET,“待机” 使能引脚有上拉电阻。每个芯片包含两个全桥(四个半桥),意味着它有很强的驱动能力。不过要注意,芯片的电流限制为 1.2A,虽然能承受 3A 的峰值电流,但只能持续约 20 毫秒。另外,它内部集成了反激二极管,能避免感应反冲损坏项目或驱动板。
该驱动板的逻辑电压范围是 2.7V - 5V,电机电压范围是 4.5V - 13.5V,不太适合 3V 电机。购买时附带一个组装并测试好的 breakout 板和一小条引脚头,需要进行简单的焊接操作将引脚头连接到 breakout PCB 上,不过 Arduino、电机和电源需要自己准备。
二、引脚定义
电源引脚
- Vmotor:电机电压输入,范围在 4.5V - 13.5V。由于电源会产生噪声,如果系统中有模拟读数或对射频等噪声敏感的部件,可能需要将电源分开或进行滤波处理。
- Vcc:逻辑电压输入,可设置为微控制器使用的逻辑电压,例如 Arduino 一般使用 5V,范围是 2.7V - 5.5V,适用于 3V 或 5V 逻辑。
- GND:逻辑和电机的公共地,所有地都连接在一起。
信号输入引脚
这些引脚都是 “Vcc 逻辑电平” 输入:
- INA1、INA2:电机 A 桥的两个输入。
- PWMA:电机 A 桥的 PWM 输入,如果不需要 PWM 控制,将其连接到逻辑高电平。
- INB1、INB2:电机 B 桥的两个输入。
- PWMB:电机 B 桥的 PWM 输入,如果不需要 PWM 控制,将其连接到逻辑高电平。
- STBY:待机引脚,通过一个 10K 电阻上拉到 Vcc,连接到地可禁用两个电机。
电机输出引脚
这些是 “Vmotor 电平” 的功率输出:
- Motor A:电机 A 的两个输出,由 INA1、INA2 和 PWMA 控制。
- Motor B:电机 B 的两个输出,由 INB1、INB2 和 PWMB 控制。
三、组装步骤
准备引脚头
如果需要,将引脚头切割到合适的长度。把引脚头插入面包板,长引脚朝下,这样焊接会更容易。
添加 breakout 板
将 breakout 板放在引脚上,使短引脚穿过 breakout 板的焊盘。
焊接
确保焊接所有引脚,以实现可靠的电气连接。如果对焊接不太熟悉,可以参考 Adafruit 的《Guide to Excellent Soldering》(https://adafru.it/aTk)。
四、Arduino 使用步进电机
接线
以推荐的 12V 电机电压、每转 200 步的双极步进电机为例,将其连接到 Metro 微控制器(也可以使用其他微控制器):
- Vmotor 连接到 12V(红色线)
- Vcc 连接到 5V(橙色线)
- GND 连接到地
- AIN2 连接到数字引脚 4
- AIN1 连接到数字引脚 5
- BIN1 连接到数字引脚 6
- BIN2 连接到数字引脚 7
- PWMA 和 PWMB 连接到 Vcc(橙色线)
然后将一个步进电机的一个线圈连接到 Motor A(红色和黄色线),另一个线圈连接到 Motor B(绿色和灰色/棕色线)。如果电机振动但不旋转,检查所有电线连接,尝试交换一对电线或重新检查线对。如果是单极电机,会有第 5 或第 6 根线是 “公共” 线,将这些线连接到 breakout 板上 Motor A 和 B 输出之间的 GND 引脚。
软件
使用 Arduino 的内置 Stepper 库(https://adafru.it/eRw),示例代码如下:
#include < Stepper.h >
#define STEPS 200
Stepper stepper(STEPS, 4, 5, 6, 7);
void setup() {
Serial.begin(9600);
Serial.println("Stepper test!");
stepper.setSpeed(60);
}
void loop() {
Serial.println("Forward");
stepper.step(STEPS);
Serial.println("Backward");
stepper.step(-STEPS);
}
创建 Stepper 对象后,可以使用 setSpeed(rpm) 设置转速(单位:RPM),使用 step(steps) 控制步进,steps 为正表示正向,为负表示反向。更多详细信息可查看 Stepper 库文档。
五、Python & CircuitPython 使用步进电机
CircuitPython 微控制器接线
以 Metro M4 为例,需要插入 9V 电源到 Metro 的桶形插孔,并确保开关处于 “on” 状态,为步进电机提供足够的电源。连接方式如下:
- 板的 VM 连接到 Metro 的 VIN
- 板的 GND 连接到 Metro 的 GND
- 板的 VCC 连接到面包板电源轨
- 板的 PWMB 连接到面包板电源轨
- 板的 BIN2 连接到 Metro 的 D12
- 板的 BIN1 连接到 Metro 的 D11
- 板的 AIN1 连接到 Metro 的 D9
- 板的 AIN2 连接到 Metro 的 D10
- 板的 PWMA 连接到面包板电源轨
- 面包板电源轨连接到 Metro 的 5V
- 板的 MOTORA(两个引脚)连接到步进电机线圈(红色和黄色线)
- 板的 MOTORB(两个引脚)连接到步进电机线圈(绿色和灰色线)
- 9V 电源连接到 Metro 的桶形插孔
Python 计算机接线
以 Raspberry Pi 为例,Raspberry Pi 不能为步进电机提供足够的电源,需要使用 9V 电源为驱动板供电。连接方式如下:
- 板的 VM 连接到桶形插孔的正极端
- 板的 GND 连接到桶形插孔的负极端
- 桶形插孔连接到 9V 电源
- 板的 VCC 连接到面包板电源轨
- 板的 GND 连接到 Pi 的 GND
- 板的 PWMB 连接到面包板电源轨
- 板的 BIN2 连接到 Pi 的 D21
- 板的 BIN1 连接到 Pi 的 D20
- 板的 AIN1 连接到 Pi 的 D19
- 板的 AIN2 连接到 Pi 的 D26
- 板的 PWMA 连接到面包板电源轨
- 面包板电源轨连接到 Pi 的 3.3V
- 板的 MOTORA(两个引脚)连接到步进电机线圈(红色和黄色线)
- 板的 MOTORB(两个引脚)连接到步进电机线圈(绿色和灰色线)
CircuitPython 电机库安装
首先确保运行的是 Adafruit CircuitPython 的最新版本(https://adafru.it/Em8),然后从 Adafruit 的 CircuitPython 库包(https://adafru.it/ENC)中找到并安装 adafruit_motor 库。确保板的 lib 文件夹或根文件系统中有 adafruit_motor 文件夹。
Python 电机库安装
需要安装 Adafruit_Blinka 库,可能还需要在平台上启用 I2C 并确保运行的是 Python 3。根据不同平台,可参考《CircuitPython on Linux》指南(https://adafru.it/BSN)进行准备。安装完成后,在命令行运行 pip3 install adafruit-circuitpython-motor。
CircuitPython & Python 使用示例
以下是控制步进电机的代码示例,将其保存为 code.py 到 CIRCUITPY 驱动器:
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import time
import board
import digitalio
from adafruit_motor import stepper
DELAY = 0.01
STEPS = 200
# 微控制器使用
coils = (
digitalio.DigitalInOut(board.D9), # A1
digitalio.DigitalInOut(board.D10), # A2
digitalio.DigitalInOut(board.D11), # B1
digitalio.DigitalInOut(board.D12) # B2
)
# Raspberry Pi 使用
# coils = (
# digitalio.DigitalInOut(board.D19), # A1
# digitalio.DigitalInOut(board.D26), # A2
# digitalio.DigitalInOut(board.D20), # B1
# digitalio.DigitalInOut(board.D21) # B2
# )
for coil in coils:
coil.direction = digitalio.Direction.OUTPUT
motor = stepper.StepperMotor(coils[0], coils[1], coils[2], coils[3], microsteps=None)
for step in range(STEPS):
motor.onestep()
time.sleep(DELAY)
for step in range(STEPS):
motor.onestep(direction=stepper.BACKWARD)
time.sleep(DELAY)
for step in range(STEPS):
motor.onestep(style=stepper.DOUBLE)
time.sleep(DELAY)
for step in range(STEPS):
motor.onestep(direction=stepper.BACKWARD, style=stepper.DOUBLE)
time.sleep(DELAY)
for step in range(STEPS):
motor.onestep(style=stepper.INTERLEAVE)
time.sleep(DELAY)
for step in range(STEPS):
motor.onestep(direction=stepper.BACKWARD, style=stepper.INTERLEAVE)
time.sleep(DELAY)
motor.release()
代码中,首先导入必要的库,设置每个电机控制语句之间的延迟时间 DELAY 和每个控制块使用的步数 STEPS。然后设置驱动板使用的引脚,根据实际使用的设备(微控制器或 Raspberry Pi)选择相应的引脚。将所有引脚设置为输出,并实例化电机对象。最后,使用 onestep() 方法控制电机的步进。你可以根据需要调整代码中的参数,以实现不同的电机控制效果。
六、下载资源
- 数据手册:可查看 TB6612 的详细信息,包括引脚电压限制、电容等(https://adafru.it/emK)。
- Fritzing 对象:在 Adafruit Fritzing 库中(https://adafru.it/aP3)。
- EagleCAD PCB 文件:可用于 PCB 设计(https://adafru.it/rF1)。
总之,Adafruit TB6612 驱动板为电机控制提供了一个方便、可靠的解决方案。无论是使用 Arduino 还是 Python/CircuitPython,都能轻松实现步进电机的控制。大家在实际使用过程中,不妨多尝试不同的参数和控制方式,看看能实现哪些有趣的效果呢?
-
步进电机
+关注
关注
153文章
3277浏览量
152905 -
电机驱动板
+关注
关注
0文章
28浏览量
3636
发布评论请先 登录
Adafruit TB6612 1.2A DC/Stepper Motor Driver Breakout Board使用指南
评论