树莓派5-TB6612电机驱动模块完整实战教程

目录

一、模块介绍

核心参数​编辑

二、模块原理

[1. 核心原理图解析](#1. 核心原理图解析)

[2. 电机驱动原理](#2. 电机驱动原理)

三、程序设计

[1. 硬件接线定义](#1. 硬件接线定义)

[2. 树莓派GPIO模式说明(BCM vs BOARD)](#2. 树莓派GPIO模式说明(BCM vs BOARD))

[2.1 BCM模式](#2.1 BCM模式)

优点:

缺点:

[2.2 BOARD模式](#2.2 BOARD模式)

优点:

缺点:

[3. 核心程序代码实现](#3. 核心程序代码实现)

四、实验效果


一、模块介绍

TB6612FNG 是东芝半导体公司生产的一款高性能直流电机驱动器件,核心采用大电流 MOSFET-H 桥结构,具备双通道电路输出能力,可同时驱动 2 个直流电机。该模块集成度极高,能提供充足的输出功率,在运行稳定性、能效比等方面表现优异,是集成化、小型化电机控制系统中的理想驱动方案,广泛应用于智能车、机器人、云台等嵌入式设备。

核心参数

二、模块原理

1. 核心原理图解析

TB6612FNG模块的核心是H桥驱动电路,以下是关键引脚与电路逻辑说明:

  • 控制引脚:AIN1、AIN2(通道A控制)、BIN1、BIN2(通道B控制),用于控制电机正反转;

  • PWM引脚:PWMA、PWMB,用于输入PWM信号实现电机调速;

  • 待机引脚(STBY):高电平有效,低电平时模块进入待机状态,电机停止工作;

  • 电源引脚:VM为电机驱动电源,VCC为逻辑控制电源,GND为公共地。

关键说明:本实战中仅使用通道A(AIN1、AIN2、PWMA)控制单个电机,STBY引脚直接接+3.3V确保模块正常工作,无需待机功能。

2. 电机驱动原理

TB6612FNG通过H桥电路的通断组合实现电机的正转、反转和停止,通过PWM信号的占空比调节实现调速,具体逻辑如下:

AIN1 AIN2 PWMA 电机状态
高电平(1) 低电平(0) PWM信号 正转(转速由PWM占空比决定)
低电平(0) 高电平(1) PWM信号 反转(转速由PWM占空比决定)
高电平(1) 高电平(1) 任意 制动(电机快速停止)
低电平(0) 低电平(0) 任意 停止(电机自由滑行)

调速原理:PWM信号的占空比(高电平时间/周期)决定电机转速。占空比越大,电机两端平均电压越高,转速越快;反之则转速越慢。本实验中PWM周期固定,通过调节高电平时间(即TIM的CCR寄存器值)改变占空比。

三、程序设计

本实战采用树莓派5,通过TB6612FNG模块实现电机的启停、调速功能,程序中使用Python的RPi.GPIO库控制GPIO引脚,核心涉及树莓派GPIO模式的选择与使用。

1. 硬件接线定义

树莓派5与TB6612FNG模块的硬件接线需严格对应GPIO引脚定义,本实验采用BCM模式进行引脚编号,具体接线关系如下表:

|----------|------------------|-------------|
| TB6612引脚 | 树莓派5 GPIO(BCM模式) | 功能说明 |
| AIN1 | GPIO20 | 电机方向控制引脚1 |
| AIN2 | GPIO21 | 电机方向控制引脚2 |
| PWMA | GPIO16 | PWM调速信号输入引脚 |
| STBY | +5V | 模块使能(禁止待机) |
| VM | 4.5-10V电机电源 | 为电机提供驱动电源 |
| VCC | 树莓派5V | 模块逻辑控制电源 |
| GND | 树莓派GND | 公共地(必须可靠连接) |

2. 树莓派GPIO模式说明(BCM vs BOARD)

树莓派GPIO有两种核心编号模式,分别为BCM模式和BOARD模式,两者优缺点及适用场景差异显著,直接影响接线与代码移植性,具体对比如下:

2.1 BCM模式

BCM模式按树莓派主控芯片(如BCM2835/2836)的内部GPIO寄存器编号定义引脚,本实验程序中GPIO.setmode(GPIO.BCM)即启用该模式。

优点:
  • 移植性强:编号对应芯片GPIO寄存器,只要目标树莓派型号支持该BCM编号的GPIO功能(如GPIO16、20、21在多数型号中均为通用GPIO),代码可直接复用,无需修改引脚定义。

  • 适配专业开发:符合嵌入式开发行业习惯,多数官方文档、开源项目均采用该模式,便于对接主流开发资源。

缺点:
  • 接线不直观:编号与物理排针位置无直接关联,必须对照对应树莓派型号的"BCM编号-物理排针"对照表接线,新手易接错。

  • 依赖引脚图:开发前需提前获取目标硬件的BCM引脚分布图,无法直接通过电路板直观判断编号。

2.2 BOARD模式

BOARD模式按树莓派GPIO排针的物理位置编号定义引脚(如第1脚、第12脚),直接对应电路板上的针脚序号。

优点:
  • 接线直观:无需对照复杂引脚图,可直接按电路板针脚序号接线,新手入门门槛低。

  • 调试便捷:能快速定位引脚,排查接线错误效率高,适合简单入门实验(如LED闪烁)。

缺点:
  • 移植性差:不同树莓派型号(如3B+、4B、5)的排针功能分配可能不同,更换硬件后需重新修改引脚编号,无法直接复用代码。

  • 不适合复杂项目:大型项目或跨型号产品开发中,频繁修改引脚定义会增加维护成本。

总结:本实验选择BCM模式,兼顾代码移植性与行业通用性;若为新手入门调试、固定硬件型号的简单项目,可选择BOARD模式。

3. 核心程序代码实现

采用Python语言编写控制程序,基于RPi.GPIO库实现电机方向控制、调速、急停及呼吸灯效果,核心代码如下:

python 复制代码
import RPi.GPIO as GPIO
import time

# 设置引脚定义 - 根据硬件接线表
PWM_PIN = 16      # GPIO16 连接 TB6612 的 PWMA
AIN1_PIN = 20     # GPIO20 连接 TB6612 的 AIN1
AIN2_PIN = 21     # GPIO21 连接 TB6612 的 AIN2

# 电机控制常量
FORWARD = 1
BACKWARD = 2
STOP = 3

# 设置GPIO模式为BCM
GPIO.setmode(GPIO.BCM)

# 设置引脚模式为输出
GPIO.setup(PWM_PIN, GPIO.OUT)
GPIO.setup(AIN1_PIN, GPIO.OUT)
GPIO.setup(AIN2_PIN, GPIO.OUT)

# 创建PWM对象,频率为1000Hz
pwm = GPIO.PWM(PWM_PIN, 1000)

# 启动PWM,初始占空比为0%(电机静止)
pwm.start(0)

def motor_control(direction, speed):
    """
    控制电机方向和速度
    direction: FORWARD(正转), BACKWARD(反转), STOP(停止)
    speed: 0-100 (占空比百分比)
    """
    if direction == FORWARD:
        GPIO.output(AIN1_PIN, GPIO.HIGH)
        GPIO.output(AIN2_PIN, GPIO.LOW)
    elif direction == BACKWARD:
        GPIO.output(AIN1_PIN, GPIO.LOW)
        GPIO.output(AIN2_PIN, GPIO.HIGH)
    elif direction == STOP:
        GPIO.output(AIN1_PIN, GPIO.LOW)
        GPIO.output(AIN2_PIN, GPIO.LOW)
    
    pwm.ChangeDutyCycle(speed)
    print(f"Motor: {'Forward' if direction == FORWARD else 'Backward' if direction == BACKWARD else 'Stop'}, Speed: {speed}%")

def motor_brake():
    """电机刹车(急停)"""
    GPIO.output(AIN1_PIN, GPIO.HIGH)
    GPIO.output(AIN2_PIN, GPIO.HIGH)
    pwm.ChangeDutyCycle(0)
    print("Motor: Brake")

try:
    print("TB6612 Motor Control Program Started. Press Ctrl+C to stop")
    print("PWM Pin: GPIO{}, AIN1: GPIO{}, AIN2: GPIO{}".format(PWM_PIN, AIN1_PIN, AIN2_PIN))
    
    # 测试电机控制
    print("\n1. Testing Forward Acceleration...")
    for speed in range(0, 101, 5):  # 正转加速
        motor_control(FORWARD, speed)
        time.sleep(0.1)
    
    time.sleep(1)
    
    print("\n2. Testing Forward Deceleration...")
    for speed in range(100, -1, -5):  # 正转减速
        motor_control(FORWARD, speed)
        time.sleep(0.1)
    
    time.sleep(1)
    
    print("\n3. Testing Backward Acceleration...")
    for speed in range(0, 101, 5):  # 反转加速
        motor_control(BACKWARD, speed)
        time.sleep(0.1)
    
    time.sleep(1)
    
    print("\n4. Motor Brake Test...")
    motor_brake()
    time.sleep(1)
    
    # 呼吸灯效果控制(正转方向)
    print("\n5. Starting Breathing Effect (Forward Direction)...")
    while True:
        # 逐渐加速(0%到100%)
        for speed in range(0, 101, 1):
            motor_control(FORWARD, speed)
            time.sleep(0.02)
        
        # 逐渐减速(100%到0%)
        for speed in range(100, -1, -1):
            motor_control(FORWARD, speed)
            time.sleep(0.02)
        
        # 短暂停止
        motor_control(STOP, 0)
        time.sleep(0.5)
            
except KeyboardInterrupt:
    print("\nProgram interrupted by user")
    
finally:
    # 确保电机停止
    motor_control(STOP, 0)
    
    # 停止PWM信号输出
    pwm.stop()
    
    # 清理GPIO设置,释放资源
    GPIO.cleanup()
    print("GPIO cleaned up, program exited")

代码说明:程序先完成GPIO初始化与PWM配置,通过motor_control函数实现方向与转速控制,motor_brake函数实现急停;主逻辑中依次完成正转加速、减速、反转加速、急停测试,最后进入呼吸灯效果循环,确保电机控制功能全面且可验证。

四、实验效果

  1. 程序启动后,终端打印启动信息与引脚连接关系,电机初始静止(PWM占空比0%);

  2. 正转加速阶段:电机从静止逐渐加速至最高转速,终端同步打印每级转速(0%→100%,步长5),加速过程平稳无明显抖动;

  3. 正转减速阶段:电机从最高转速逐渐减速至静止,终端实时反馈转速变化,减速过程线性可控;

  4. 反转加速阶段:电机反向启动并逐渐加速至最高转速,转向切换清晰,无卡顿现象;

  5. 急停测试阶段:执行motor_brake()函数后,电机快速制动停转,相较于自由停止(STOP),制动响应更快、定位更准;

  6. 呼吸灯效果阶段:电机正转方向呈现"加速→减速→短暂停止"的循环,转速平滑变化,类似呼吸灯效果,运行稳定无顿挫;

  7. 按下Ctrl+C可中断程序,程序进入finally清理阶段,自动停止电机、关闭PWM输出并释放GPIO资源,避免引脚状态异常影响后续使用。

    2.PWM+TB6612控制电机

相关推荐
DuanPenghao2 小时前
RISCV实战:实现基于Verilator模拟蜂鸟E203的加法器和卷积神经网络仿真
人工智能·嵌入式硬件·神经网络·cnn·risc-v
x976662 小时前
使用 HMAC-SHA256算法对MCU UID进行加密
单片机·嵌入式硬件·算法
小叶子来了啊2 小时前
4Arduino 第一个程序
单片机·嵌入式硬件
方案开发PCBA抄板芯片解密3 小时前
什么是FIB,芯片解密为什么需要做FIB
单片机·嵌入式硬件
双古3 小时前
单片机调试,Ozone的使用
单片机·嵌入式硬件
飞凌嵌入式3 小时前
AIoT出海背景下,嵌入式主控的国际认证之路与价值思考
大数据·人工智能·嵌入式硬件·区块链·嵌入式
IT方大同4 小时前
KEY(按键)&BUZZ(蜂鸣器)
单片机·嵌入式硬件
zd8451015004 小时前
STM32多路步进电机控制板
单片机·嵌入式硬件
进阶的猪4 小时前
stm32 USART-中断回显实验 Q&A
stm32·单片机·嵌入式硬件