【平衡小车专栏】TB6612 的PWM引脚不可以悬空

参考:优信电子《TB6612FNG电机驱动模块纯硬件调试》

当前问题:

我使用标准库,配置了 TB6612 的相关 GPIO,将STBY使能为高电平,将 PWMA/B 悬空。然后在 main() 中 AIN1 = 1, AIN2 = 0,但是电机毫无反应,不知道怎么回事。

 1 void DRIVER_GPIO_Config(void)
 2 {
 3     
 4     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);
 5 
 6     //------------------------Left/A-Driver---------------------------------
 7     //PB12
 8     GPIO_InitTypeDef GPIO_InitStruct;
 9     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//Out PP
10     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
11     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
12     GPIO_Init(GPIOB, &GPIO_InitStruct); 
13     
14     //PB13
15     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
16     GPIO_Init(GPIOB, &GPIO_InitStruct); 
17     
18     //------------------------Right/B-Driver---------------------------------
19     //PB14/PB15
20     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15;
21     GPIO_Init(GPIOB, &GPIO_InitStruct);     
22     
23     
24     //STBY
25     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//Out PP
26     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
27     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
28     GPIO_Init(GPIOA, &GPIO_InitStruct); 
29     
30     GPIO_SetBits(GPIOA, GPIO_Pin_12);
31     
32     /*
33     //Initiation    
34     AIN1(0);
35     AIN2(0);
36     BIN1(0);
37     BIN2(0);
38     */
39 }

 

 

问题解决:

IN1IN2PWMSTBY输出状态
H H H/L H 制动
L H H H 反转
L H L H 制动
H L H H 正转
H L L H 制动
L L H H 停止
- - - L 待机

STBY引脚在高电平的时候模块是正常工作,低电平模块待机;PWM要有信号输入或者处于高电平且IN1和IN2电平不同时,模块才会有输出。

问题的原因是:TB6612的PWMA/B引脚不能悬空,必须高电平或者有信号,才能够输出。(这与 L298N PWM引脚(ENA,ENB)一样,在不需要调速的时候,ENA和ENB用用跳帽连接VCC,当需要调速的时候,ENA/ENB接定时器输出引脚)

一则有趣的问答:

问:电机的 PWM 引脚可以悬空吗?

答:最好不要,不连接PWM调速线,这可能导致不可预测的运行行为。

我没有初始化 PWM 引脚,也没有设置信号。因此电机不转。

加上初始化代码:

void DRV_TIM_GPIO_Config(void)
{
    //general time  TIM1--->CH4_PA11 CH1N->NULL BKIN->NULL
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStruct;
    //GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct); 
    
    //TIM1--->CH1_PA8
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
    GPIO_Init(GPIOA, &GPIO_InitStruct); 
    
}
View Code

再加上  PWM 引脚高电平设置

 

posted @ 2023-07-03 17:57  FBshark  阅读(315)  评论(0编辑  收藏  举报