TA的每日心情 | 开心 2015-7-7 09:19 |
---|
签到天数: 13 天 连续签到: 1 天 [LV.3]偶尔看看II
|
前面一篇大概的讲述了平衡小车的设计概况,在这一篇主要讲述电机的控制,通过上一讲可以知道平衡车做使用的电机驱动芯片是TB6612FN,它与L298N大体相同,但是Tb6612有更多突出的优点:TB6612相对于传统的L298N效率上提高很多,体积上也大幅度减少,在额定范围内,芯片基本不发热,当然也就显得更加娇贵。
该芯片使用贴片封装,电路接线图如下:
控制方法如下(A路为例):
电机正反转控制:通过修改AIN1、AIN2的高低电平控制电机转向;
电机转速控制:通过对PWMA占空比的调节来调节电机转速。
STM32对PWm输出的控制也是比较简易的,只需通过简单配置即可,配置方式如下:
GPIO_InitTypeDef GPIO_InitStructure ; TIM_TimeBaseInitTypeDef TIM_BaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /*使能GPIOA、GPIOC、AFIO、TIM8外设时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO | RCC_APB2Periph_TIM8, ENABLE); /*初始化PA.07端口为Out_PP模式*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /*初始化PC.06端口为Out_PP模式*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &GPIO_InitStructure); /*初始化PC.07端口(TIM8_CH2)为AF_PP模式*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); /*定时器基本配置*/ TIM_BaseInitStructure.TIM_Prescaler = 3-1; //时钟预分频数3,TIM8的计数时钟频率为24MHz TIM_BaseInitStructure.TIM_Period = 1000-1; //自动重装载寄存器数值,PWM2频率为24MHz/1000=24KHz TIM_BaseInitStructure.TIM_ClockDivision = 0; //采样分频 TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 TIM_BaseInitStructure.TIM_RepetitionCounter = 0; //重复寄存器 TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure); TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1输出模式 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能该通道输出 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性 TIM_OC2Init(TIM8, &TIM_OCInitStructure); //按指定参数初始化 TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable); //使能TIM8在CCR2上的预装载寄存器 TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIM8在ARR上的预装载寄存器 TIM_Cmd(TIM8, ENABLE); //打开TIM8 TIM_CtrlPWMOutputs(TIM8, ENABLE); //PWM输出使能在需要改变PWM咱孔壁输出是只需要调用:TIM_SetCompare2(TIM8, (uint16_t)fPWM_L); //左轮 |
|