重新开始学stm32(5)PWM实验和正交编码器实验(2)

今天延续上期没有讲完的内容,在实际的应用中怎么将PWM输出实验和正交编码器实验结合起来的。在这一期我们就结合一个基础的四轮小车项目来讲一讲它们的联系。这一期初学的小伙伴或者没有接触到项目的小伙伴可以当做扩展提高看一下,不需要完全掌握,只需要了解清楚有怎么一回事,到时候需要的时候知道可以有这样一个想法。

PWM输出实验在小车中的应用

根据上一期的PWM输出实验,我们学会了控制PWM的输出进而实现控制LED的亮度。同样的,我们也可以通过控制PWM的输出来控制小车轮子的转速啊,它们是一个道理的。只不过因为我们的stm32板子的端口输出电流有限,不能直接接到电机上,而是要经过想L298N这样的电机驱动模块使用外接电源为电机提供能量,我们只需要控制PWM的输出就可以控制电机的转速了。

void TIM8_pwm_init(u32 arr,u32 psc)
{
	//定义结构体
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);		//TIM8时钟使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//GPIOC时钟使能
	
	//复用引脚配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;				//复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
	
	//时基初始化
	TIM_TimeBaseStructure.TIM_Period=arr;                        //自动重装载值
	TIM_TimeBaseStructure.TIM_Prescaler=psc;                     //预分频系数
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟分割
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;    //向上计数
	TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);
	
	//输出通道初始化    PWM模式
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                //PWM模式1
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //比较输出极性高
	
	TIM_OC1Init(TIM8, &TIM_OCInitStructure);
	TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);
	TIM_OC2Init(TIM8, &TIM_OCInitStructure);
	TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);
	TIM_OC3Init(TIM8, &TIM_OCInitStructure);	            
    TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);
	TIM_OC4Init(TIM8, &TIM_OCInitStructure);             //初始化OC1、OC2、OC3、OC4
	TIM_OC4PreloadConfig(TIM8,TIM_OCPreload_Enable);     //使能CCR1、CCR2、CCR3、CCR4寄存器
	
	TIM_ARRPreloadConfig(TIM8,ENABLE);	    //启动自动重装载寄存器的预装载功能
	
	TIM_SetCompare1(TIM8,0);
	
	TIM_Cmd(TIM8, ENABLE);
}

这里我使用了高级定时器TIM8输出四路PWM,分别对应小车的四个轮子。

正交编码器实验在小车中的应用

编码器实验在小车的实际应用其实我在上期已经讲的都差不多了。就是通过使用定时器的编码器模式捕获电机直流减速电机自带的编码器输出的脉冲,定时周期获取编码器的脉冲进而转换成电机是实际转速,就可以知道小车的实际行驶速度是多少了。这个内容详细的讲解在上一期,忘记的小伙伴可以回到上一期看一下。PWM输出实验和正交编码器实验(1)

诶,机灵的小伙伴就会反应过来了,我们获取到小车的速度有什么用吗?难道只是为了知道小车的行驶速度是多少吗?当然不是了,获取小车的速度是为了进一步控制小车的速度。这个怎么说呢,这就牵扯到电机的闭环控制了。我们在这里就简单讲一下吧。

原理是这样的:首先的通过PWM输出控制电机转动 \rightarrow 再通过编码器获取电机的实际速度(或实际行驶距离) \rightarrow 比较目标速度和实际速度(或电机的目标行驶距离和实际行驶距离)得到新的PWM \rightarrow 新的PWM控制电机转动

最终这样就可以形成一个电机的闭环控制,速度和距离分别对应的就是速度闭环和距离闭环。其中比较速度或距离并获得新的PWM值使用是PID算法,它的英文全称是proportional-integral-derivative,其中P就是比例,I就是积分,D就是微分。更具体的就不在这里讲了,这一期的主要目的就是在应用的角度开阔我们的视野,感兴趣的伙伴可以自己去进行进一步的了解哈,在后面我也会写详细讲解的文章的。

喜欢的小伙伴可以点赞收藏关注一下,谢谢啦!!!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值