今天小编要和大家分享的是控制,MCU相关信息,接下来我将从STM32单片机实现直流减速电机控制的程序设计,pid控制算法学习总结这几个方面来介绍。
控制,MCU相关技术文章STM32单片机实现直流减速电机控制的程序设计
在直流减速电机控制中,最常用的方法就是通过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; //左轮DIR的占空比
24 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //输出极性为低电平
25 TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;//互补输出极性为高电平
26 TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
27 TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
28
29 TIM_OC1Init(TIM4,&TIM_OCInitStructure); //PWM_L初始化