Adafruit TB6612 1.2A DC/Stepper Motor Driver Breakout Board使用指南

电子说

1.4w人已加入

描述

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() 方法控制电机的步进。你可以根据需要调整代码中的参数,以实现不同的电机控制效果。

六、下载资源

总之,Adafruit TB6612 驱动板为电机控制提供了一个方便、可靠的解决方案。无论是使用 Arduino 还是 Python/CircuitPython,都能轻松实现步进电机的控制。大家在实际使用过程中,不妨多尝试不同的参数和控制方式,看看能实现哪些有趣的效果呢?

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

全部0条评论

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

×
20
完善资料,
赚取积分