> 技术文档 > TB6612电机驱动模块(STM32)_tb6612电机驱动原理图

TB6612电机驱动模块(STM32)_tb6612电机驱动原理图

目录

一、介绍

二、模块原理

1.原理图

2.电机驱动原理

三、程序设计

main.c文件

Motor.h文件

Motor.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流 MOSFET-H 桥结构,双通道电路输出,可同时驱动 2 个电机。它具有很高的集成度,同时能提供足够的输出能力,运行性能和能耗方面也具有优势,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。

以下是TB6612电机驱动模块的参数:

型号

TB6612FNG

驱动电压

VM输入(4.5-10V)

逻辑电平

VCC输入(2.7-5.5V)

工作电流

1.2A

峰值电流

3.2A

哔哩哔哩视频链接:

TB6612电机驱动模块(STM32)

(资料分享见文末) 

二、模块原理

1.原理图

2.电机驱动原理

三、程序设计

使用STM32F103C8T6通过TB6612控制电机完成开关、正反转转和调速的操作。

AIN1

PA0

AIN2

PA1

PWMA

PA2

STBY

+5V

OLED_SCL

PB11

OLED_SDA

PB10

main.c文件

#include \"stm32f10x.h\"#include \"led.h\"#include \"usart.h\"#include \"delay.h\"#include \"oled.h\"#include \"Motor.h\"#include \"key.h\"/*****************辰哥单片机设计******************STM32 * 项目:TB6612FNG电机驱动实验* 版本: V1.0 * 日期: 2024.9.26 * MCU:STM32F103C8T6 * 接口:参看Motor.h * BILIBILI:辰哥单片机设计 * CSDN:辰哥单片机设计 * 作者:辰哥 **********************BEGIN***********************/int key = 0;int key_state = 0;int main(void){ SystemInit();//配置系统时钟为72Mdelay_init(72);LED_Init();LED_On();MOTOR_Init();USART1_Config();//串口初始化Key_Init();OLED_Init();printf(\"Start \\n\");delay_ms(1000);OLED_Clear();//显示“电机转速:”OLED_ShowChinese(0,0,0,16,1);OLED_ShowChinese(16,0,1,16,1);OLED_ShowChinese(32,0,2,16,1);OLED_ShowChinese(48,0,3,16,1);OLED_ShowChar(64,0,\':\',16,1); while (1) {key = Key_GetData();if(key)key_state++;if(key_state%4==1){Motor_SetSpeed(60);OLED_ShowNum(56,24,1,1,16,1);//1}if(key_state%4==2){Motor_SetSpeed(80);OLED_ShowNum(56,24,2,1,16,1);//2}if(key_state%4==3){Motor_SetSpeed(100);OLED_ShowNum(56,24,3,1,16,1);//3}if(key_state%4==0){Motor_SetSpeed(0);OLED_ShowNum(56,24,0,1,16,1);//0} }}

Motor.h文件

#ifndef __MOTOR_H#define__MOTOR_H#include \"stm32f10x.h\"#include \"delay.h\"#include \"sys.h\"/*****************辰哥单片机设计******************STM32 * 文件:TB6612FNG电机驱动h文件  * 版本: V1.0 * 日期: 2024.9.26 * MCU:STM32F103C8T6 * 接口:见代码 * BILIBILI:辰哥单片机设计 * CSDN:辰哥单片机设计 * 作者:辰哥**********************BEGIN***********************//***************根据自己需求更改****************/// TB6612FNG电机驱动模块 GPIO宏定义#defineMOTOR_CLKRCC_APB2Periph_GPIOA#define MOTOR_AIN1_GPIO_PIN GPIO_Pin_0#define MOTOR_AIN2_GPIO_PIN GPIO_Pin_1#define MOTOR_AIN1_GPIO_PORT GPIOA#define MOTOR_AIN2_GPIO_PORT GPIOA#define MOTOR_PWMA_GPIO_PIN GPIO_Pin_2#define MOTOR_PWMA_GPIO_PORT GPIOA/*********************END**********************/void MOTOR_Init(void);void PWM_Init(void);void Motor_SetSpeed(int8_t Speed);#endif

Motor.c文件

#include \"Motor.h\"/*****************辰哥单片机设计******************STM32 * 文件:TB6612FNG电机驱动模块c文件  * 版本: V1.0 * 日期: 2024.9.26 * MCU:STM32F103C8T6 * 接口:见代码 * BILIBILI:辰哥单片机设计 * CSDN:辰哥单片机设计 * 作者:辰哥**********************BEGIN***********************/void MOTOR_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(MOTOR_CLK, ENABLE ); //配置时钟GPIO_InitStructure.GPIO_Pin = MOTOR_AIN1_GPIO_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(MOTOR_AIN1_GPIO_PORT,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = MOTOR_AIN2_GPIO_PIN;GPIO_Init(MOTOR_AIN2_GPIO_PORT,&GPIO_InitStructure);PWM_Init();}void PWM_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = MOTOR_PWMA_GPIO_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(MOTOR_PWMA_GPIO_PORT, &GPIO_InitStructure);//将PA1和PA2引脚初始化为推挽输出TIM_InternalClockConfig(TIM2);//配置实际单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;//自动重装ARR分辨率TIM_TimeBaseInitStructure.TIM_Prescaler = 36 - 1;//预分频PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);TIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(&TIM_OCInitStructure);//给结构体赋予初值 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 0;//CCRTIM_OC3Init(TIM2,&TIM_OCInitStructure);TIM_Cmd(TIM2,ENABLE);}void PWM_SetCompare3(uint16_t compare){TIM_SetCompare3(TIM2,compare);}void Motor_SetSpeed(int8_t Speed){if(Speed >= 0){GPIO_SetBits(MOTOR_AIN1_GPIO_PORT,MOTOR_AIN1_GPIO_PIN);GPIO_ResetBits(MOTOR_AIN2_GPIO_PORT,MOTOR_AIN2_GPIO_PIN);PWM_SetCompare3(Speed);}else{GPIO_ResetBits(MOTOR_AIN1_GPIO_PORT,MOTOR_AIN1_GPIO_PIN);GPIO_SetBits(MOTOR_AIN2_GPIO_PORT,MOTOR_AIN2_GPIO_PIN);PWM_SetCompare3(-Speed);}}

四、实验效果 

五、资料获取

项目分享