在直流减速电机控制中,最常用的方法就是通过PWM来控制直流电机的转速。在控制小车走直线的过程中,需要两者的转速一置(如果要走得很直,还需要在短时间内保证两者的行程大致相当,这可以用PID算法来控制)。 因此,在检测到两者转速不一样时,需要动态调整其中一个或两个轮子的PWM的点空比(简单点的就以一个轮为基准,调整另外一个轮子即可;如果以一个固定的标准的话,需要调整两个轮子的PWM占空比)。
1 程序第一步:设置GPIO,略(输出PWM的管脚用Mode_AF_PP即可) 2 3 程序第二步:设置定时器,(保证产生两路PWM即可,我用的是TIM4) 4 5 void TIM4_Configuration(void) 6 { 7 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; 8 TIM_OCInitTypeDef TIM_OCInitStructure; 9 10 //时间基初始化 11 TIM_TimeBaseInitStructure.TIM_Period=144; //18K/144=125Hz,这个是电机PWM的频率 12 TIM_TimeBaseInitStructure.TIM_Prescaler=4000; //72000000/4000=18K 13 TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 14 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; 15 TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0x0000; 16 17 TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure); 18 19 //输出比较模式设置,用于4路PWM输出 20 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; //输出PWM 21 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能正向通道 22 TIM_OCInitStructure.TIM_OutputNState=TIM_OutputState_Disable; //失能反向通道 23 TIM_OCInitStructure.TIM_Pulse=PWM_L;