0基础 | STM32 | TB6612电机驱动使用

TB6612 介绍及使用

单片机 通过驱动板连接至电机

原因:单品机 I/O 口输出电流 I

|---------|---------|---------|---|---|---|---|--------|--------|
| 驱动板:从外部引入高电压,控制电机驱动 |||||||||
| |||||||||
| 电源部分 |||| VM 电机驱动电源输入,输入电压范围建议为 3.7 12V |||||
| GND 逻辑电源和电机驱动电源的公共地 |||| VCC 逻辑电源输入,输入电压为 2.7-5.5V |||||
| 电机接口 |||| A0 B0可以接两个电机 |||||
| 电机控制端口 |||||||||
| PWMA B分别为两个电机控制的使能端 (可使用PWM调速) |||||| AIN1\AIN2;BIN1\BIN2 |||
| STBY |||| 使能引脚 |||||
| IN1 | IN2 | PWM | STBY || O1 || O2 | |
| H | H | H/L | H || L || L | 制动 |
| L | H | H | H || L || H | 反转 |
| L | H | L | H || L || L | 制动 |
| H | L | H | H || H || L | 正转 |
| H | L | L | H || L || L | 制动 |
| L | L | H | H || OFF || - | 停止 |
| H/L | H/L | H/L | L || OFF || - | 待机 |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| main.c #include "stm32f10x.h" #include "led.h" #include "usart.h" #include "delay.h" #include "oled.h" #include "Motor.h" #include "key.h" int key = 0; int key_state = 0; int main(void) { SystemInit();// 系统时钟为 72M delay_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); }if(key_state%4==2) {Motor_SetSpeed(80); OLED_ShowNum(56,24,2,1,16,1);} if(key_state%4==3) {Motor_SetSpeed(100); OLED_ShowNum(56,24,3,1,16,1);} if(key_state%4==0) {Motor_SetSpeed(0); OLED_ShowNum(56,24,0,1,16,1); //0}}} |
| Motor.c #include "Motor.h" 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; // 预分频 PSC TIM_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; //CCR TIM_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);}} |
| Motor.h #ifndef __MOTOR_H #define __MOTOR_H #include "stm32f10x.h" #include "delay.h" #include "sys.h" /*************** 根据自己需求更改 ****************/ // TB6612FNG 电机驱动模块 GPIO 宏定义 #define MOTOR_CLK RCC_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 |

代码放在下述连接里面,通过网盘分享的文件:TB6612 电机调速资料

链接 : https://pan.baidu.com/s/1D_d506c3pwiRzHCaSq2_Aw?pwd=HHRR 提取码 : HHRR

-- 来自百度网盘超级会员 v5 的分享

此外还有一种电机驱动,介绍如下

微型双路直流电机驱动基于TB6612FNG驱动IC设计,采用特殊逻辑控制方式,仅需4根管脚即可实现双路电机控制,相比纯芯片而言,减少了两个IO管脚,为Arduino等控制器节约了宝贵的IO资源,可以应用在更多领域中。
TB6612FNG是一块双路全桥驱动芯片,单通道最大连续驱动电流可达1.2A,峰值2A/3.2A(连续脉冲/单脉冲),可驱动一些微型直流电机。控制逻辑与L298N类似,代码上可直接兼容DFRobot L298N电机驱动。标准XH2.54排针可直插面包板,无论是DIY制作,还是新产品开发,都是非常理想的一个选择!
产品参数

  • 逻辑部分输入电压VCC:3.3~5V
  • 驱动部分输入电压VM:2.5~12V
  • 驱动电机路数:2通道
  • 单通道最大连续驱动电流:1.2A
  • 启动峰值:2A/3.2A(连续脉冲/单脉冲)
  • 接口方式:2.54mm间距排针

模块尺寸: 20 × 19.5(mm)

细节说明

电机接口: M1 M2 可接入两个电机,其中标注了 "+" "-" 表示两个电机的接线方向。

指示灯:正面指示灯:电源指示灯

电源部分

VCC :逻辑电源输入,输入电压为 5V;

VM :电机驱动电源输入,输入电压范围建议为 3.7 12V;

GND :逻辑电源和电机驱动电源的公共地。

电机控制端口

PWM1,PWM2 :分别为两个电机控制的使能端 ( 可使用 PWM 调速 )

DIR1,DIR2 :正反转控制信号输入端。比如, DIR1=1 M1 电机正转 ; DIR1=0 M1 电机反转。

|--------|-----------|-------------|
| ### 引脚说明 |||
| 管脚映射 |||
| 标号 | 名称 | 功能描述 |
| 1 | DIR1 | 电机M1的方向控制引脚 |
| 3 | PWM2 | 电机M2的速度控制引脚 |
| 4 | DIR2 | 电机M2的方向控制引脚 |
| 5 | GND | 逻辑部分电源负极 |
| 6 | VCC | 逻辑部分电源正极 |
| 7 | M1+ | M1路电机输出1 |
| 8 | M1- | M1路电机输出2 |
| 9 | M2+ | M2路电机输出1 |
| 10 | M2- | M2路电机输出2 |
| 11 | GND | 电机电源负极 |
| 12 | VM(<12V) | 电机电源正极 |

模块尺寸:20 × 19.5(m\

相关推荐
whaosoft-1435 小时前
51c嵌入式~电路~合集4
嵌入式硬件
hallo-ooo7 小时前
【STM32】定时器输出比较模式
stm32·单片机
陌上花开缓缓归以8 小时前
linux netlink实现用户态和内核态数据交互
linux·单片机
KingQian20188 小时前
单片机嵌入式CAN库
单片机·嵌入式硬件
薛慕昭8 小时前
《ESP32无线网络编程全攻略:从STA/AP模式到NTP时间同步》
开发语言·单片机·嵌入式硬件
QL.ql9 小时前
STM32F103C8T6使用MLX90614模块
stm32·单片机·嵌入式硬件
Despacito0o9 小时前
C语言发展史:从Unix起源到现代标准演进
c语言·stm32·unix·嵌入式实时数据库
做一道光11 小时前
STM32复盘总结——芯片简介
stm32·单片机·嵌入式
双叶83611 小时前
(51单片机)LCD显示红外遥控相关数据(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
c++·单片机·嵌入式硬件·51单片机