目录
[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库实现电机方向控制、调速、急停及呼吸灯效果,核心代码如下:
pythonimport 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函数实现急停;主逻辑中依次完成正转加速、减速、反转加速、急停测试,最后进入呼吸灯效果循环,确保电机控制功能全面且可验证。
四、实验效果
程序启动后,终端打印启动信息与引脚连接关系,电机初始静止(PWM占空比0%);
正转加速阶段:电机从静止逐渐加速至最高转速,终端同步打印每级转速(0%→100%,步长5),加速过程平稳无明显抖动;
正转减速阶段:电机从最高转速逐渐减速至静止,终端实时反馈转速变化,减速过程线性可控;
反转加速阶段:电机反向启动并逐渐加速至最高转速,转向切换清晰,无卡顿现象;
急停测试阶段:执行motor_brake()函数后,电机快速制动停转,相较于自由停止(STOP),制动响应更快、定位更准;
呼吸灯效果阶段:电机正转方向呈现"加速→减速→短暂停止"的循环,转速平滑变化,类似呼吸灯效果,运行稳定无顿挫;
按下Ctrl+C可中断程序,程序进入finally清理阶段,自动停止电机、关闭PWM输出并释放GPIO资源,避免引脚状态异常影响后续使用。
2.PWM+TB6612控制电机