STM32 两轮平衡小车——电机控制

作者: 芯领神会
上传时间为: 2015-06-25 09:00 AM

 前面一篇大概的讲述了平衡小车的设计概况,在这一篇主要讲述电机的控制,通过上一讲可以知道平衡车做使用的电机驱动芯片是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);					//左轮
全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示