电子说
在电子工程领域,电机驱动是一个常见且重要的应用场景。今天我们来详细介绍一下 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、电机和电源需要自己准备。
这些引脚都是 “Vcc 逻辑电平” 输入:
这些是 “Vmotor 电平” 的功率输出:
如果需要,将引脚头切割到合适的长度。把引脚头插入面包板,长引脚朝下,这样焊接会更容易。
将 breakout 板放在引脚上,使短引脚穿过 breakout 板的焊盘。
确保焊接所有引脚,以实现可靠的电气连接。如果对焊接不太熟悉,可以参考 Adafruit 的《Guide to Excellent Soldering》(https://adafru.it/aTk)。
以推荐的 12V 电机电压、每转 200 步的双极步进电机为例,将其连接到 Metro 微控制器(也可以使用其他微控制器):
然后将一个步进电机的一个线圈连接到 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 库文档。
以 Metro M4 为例,需要插入 9V 电源到 Metro 的桶形插孔,并确保开关处于 “on” 状态,为步进电机提供足够的电源。连接方式如下:
以 Raspberry Pi 为例,Raspberry Pi 不能为步进电机提供足够的电源,需要使用 9V 电源为驱动板供电。连接方式如下:
首先确保运行的是 Adafruit CircuitPython 的最新版本(https://adafru.it/Em8),然后从 Adafruit 的 CircuitPython 库包(https://adafru.it/ENC)中找到并安装 adafruit_motor 库。确保板的 lib 文件夹或根文件系统中有 adafruit_motor 文件夹。
需要安装 Adafruit_Blinka 库,可能还需要在平台上启用 I2C 并确保运行的是 Python 3。根据不同平台,可参考《CircuitPython on Linux》指南(https://adafru.it/BSN)进行准备。安装完成后,在命令行运行 pip3 install adafruit-circuitpython-motor。
以下是控制步进电机的代码示例,将其保存为 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,都能轻松实现步进电机的控制。大家在实际使用过程中,不妨多尝试不同的参数和控制方式,看看能实现哪些有趣的效果呢?
全部0条评论
快来发表一下你的评论吧 !