# STM32 Hal 库 TB6612 电机驱动 **Repository Path**: myqfeng/stm32-hal-tb6612 ## Basic Information - **Project Name**: STM32 Hal 库 TB6612 电机驱动 - **Description**: 适用于STM32 Hal 库的 TB6612 电机驱动,支持驱动单/双路电机,接口齐全使用方便 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-03-06 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32 HAL 库 TB6612 电机驱动 适用于 STM32 HAL 库的 TB6612 电机驱动,支持驱动单/双路电机,接口齐全使用方便。 ## 前情提要 与 DRV8833 不同,TB6612 每个电机分别采用三路信号控制。例如 `AIN1/AOUT1` `AIN2/AOUT2` `PWMA`,B接口同理。 其中,IN 口只输入高/低电平来控制电机的方向(前进、后退、刹车、滑行)。其对应关系如下表: | AIN1 | AIN2 | 电机状态 | |------|------|----------| | 0 | 0 | 滑行 | | 0 | 1 | 反转 | | 1 | 0 | 正转 | | 1 | 1 | 刹车 | 而单独使用 PWMA(PWMB) 口来调节速度,占空比越高速度越快。 在本驱动中,将预分频和自动重装载分别设置为 72 和 100,因此可以进行 100 档的调速。 ## 使用说明 1. 在 HAL 库中完成定时器和 GPIO 的初始化,定时器使用的是 PWM 输出模式,GPIO 引脚需要配置为推挽输出 2. 修改 `tb6612.h` 文件,根据实际情况更改 GPIO 引脚定义和定时器通道定义 3. 包含 `tb6612.h` 头文件 4. 调用 `TB6612_Init()` 函数初始化 TB6612 电机驱动 5. 初始化完成后,即可调用相应函数控制电机 **注意:初始化了哪个电机就只能用哪个电机,否则可能导致错误** ## 需要修改的定义 以下内容位于 `tb6612.h` 文件中,需要根据实际情况修改: ```c // A通道 GPIO 引脚定义 #define AIN1_GPIO_Port GPIOA #define AIN2_GPIO_Port GPIOA #define AIN1_Pin GPIO_PIN_10 #define AIN2_Pin GPIO_PIN_11 // B通道 GPIO 引脚定义 #define BIN1_GPIO_Port GPIOA #define BIN2_GPIO_Port GPIOA #define BIN1_Pin GPIO_PIN_13 #define BIN2_Pin GPIO_PIN_14 // PWMA/B 使用的定时器和通道定义 #define PWMA_TIM &htim3 #define PWMA_TIM_CHANNEL TIM_CHANNEL_1 #define PWMB_TIM &htim3 #define PWMB_TIM_CHANNEL TIM_CHANNEL_2 ``` ## 函数说明 ### 枚举类型 UseMotor 用于选择需要设置的电机接口: - `ONLY_A` - 仅设置 A 电机接口 - `ONLY_B` - 仅设置 B 电机接口 - `ALL` - 设置 A 电机接口和 B 电机接口 ### TB6612_Init ```c void TB6612_Init(UseMotor motor); ``` 初始化 TB6612 电机驱动。 ### TB6612_Forward ```c void TB6612_Forward(UseMotor motor, uint8_t speed); ``` 控制电机正转。 - `motor`:要设置的电机接口 - `speed`:速度值(0-100) ### TB6612_Backward ```c void TB6612_Backward(UseMotor motor, uint8_t speed); ``` 控制电机反转。 - `motor`:要设置的电机接口 - `speed`:速度值(0-100) ### TB6612_Brake ```c void TB6612_Brake(UseMotor motor); ``` 电机刹车。 - `motor`:要设置的电机接口 ### TB6612_Coast ```c void TB6612_Coast(UseMotor motor); ``` 电机滑行。 - `motor`:要设置的电机接口