【STM32+HAL库】tb6612 驱动电机_stm32 电机库
简介:这是一个简单的STM32HAL库使用tb6612fng驱动电机的教程
1 软件准备
STM32CubeMX + STM32CubeIDE
2 程序准备
MOTOR
--motor.c
--motor.h
3 STM32CubeMX配置
3.1 基础配置
配置烧录(如果不配置,烧一次程序第二次就烧不进去了)
配置时钟
对于此项目主频是多少决定了我们配置PWM时的频率。懂得原理的同学,自己按需配置。不明白原理的话,跟我一起配置成100MHz即可(如果最大是72MHz,那就去学一下相关的分频预分频知识)
比较重要的是后边的
3.2 驱动电机所需相关配置
GPIO配置
因为我们使用的是tb6612模块,需要的引脚资源如下:
普通的GPIO引脚*2 (用于控制电机的正反转和制动)
PWM输出引脚*1
PF13 —— AIN1
PF14 —— AIN2
PA6 —— PWMA
定时器配置
设置频率最好在20Hz~20000Hz以内,因为这个频率内的PWM波不会让电机发出明显的电流声
我在APB=50MHz的情况下,配置的 f = APB/[(PSC+1)*(ARR+1)] = 50 000 000 / [(0+1)*(9999+1)] = 5000Hz
3.3 project工程配置
GPIO配置
4 驱动程序设计
4.1 文件夹结构 搜索路径添加
新建文件夹 MOTOR
在 MOTOR文件夹下新建2个文件(1个.h 文件 1个.c文件),如下:
motor.c
motor.h
添加搜索路径:
4.2 驱动程序
motor.c
/* * motor.c * * Created on: Jun 26, 2025 * Author: Ma */#include \"motor.h\"void MOTOR_A(char state){if(state == GO)//左前电机前进{HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);}}// 设置PWM速度void Set_Speed(uint16_t dutyCycle1){ // 设置通道1和通道2的PWM占空比 __HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, dutyCycle1);}
motor.h
/* * motor.h * * Created on: Jun 26, 2025 * Author: Ma */#ifndef MOTOR_H_#define MOTOR_H_#include \"stm32f4xx_hal.h\" //HAL库文件声明#include #define GO \'G\' // 给 GO 赋一个有效字符值#define BACK \'B\'#define STOP \'S\'void MOTOR_A(char state);#endif /* MOTOR_H_ */
这里需要注意的是如果你使用的是STM32其他系列。你应该把
#include \"stm32f4xx_hal.h\" //HAL库文件声明
改成别的,例如#include \"stm32f1xx_hal.h\"
5 驱动代码使用
5.1 接线
STM32 —— tb6612
PF9 —— PWMA
PF13 —— AIN1
PF14 —— AIN2
3V3 —— STBY
3V3 —— VCC
GND —— 图中左侧GND
GND —— 图中右上侧GND
电池 —— Tb6612
电池正极 —— VM
电池负极 —— GND
电机 —— tb6612
电机+ —— AO1
电机- —— AO2
5.2 调用
main.c
#include \"motor.h\"
MOTOR_A(GO); //封装在motor.c 里的函数,PF13 引脚置高电平 PF14引脚置低电平
HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1); //开启TIM14 通道1 PWM模式