(HAL库学习7)STM32CubeMX HAL库 PWM输出

   日期:2020-05-08     浏览:650    评论:0    
核心提示:这一节是设置STM32单片机定时器PWM输出驱动舵机pwm输出依靠的是定时器通道,stm32除了定时嵌入式

这一节是设置STM32单片机定时器PWM输出驱动舵机

pwm输出依靠的是定时器通道,stm32除了定时器6,7,都有输出pwm的通道,高级定时器通道数还要多于普通定时器。定时器的核心特质就是两个参数:频率和占空比,这里先告诉大家结果,设置频率在CubeMX上设置,而占空比我写了一个函数大家可以设置占空比。

第一步在CubeMX上开启pwm输出通道:


开启pwm输出是很简单的哈,但是要理解他这个分频和计数周期的设置,这很重要。

第二步:在生成的工程中使用PWM输出


下面是main中该有的部分

下面是自己写的设置pwm的函数部分

这是使能定时器那一点代码

	HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_1);  //使能PWM输出
	HAL_TIM_PWM_Start(&htim9, TIM_CHANNEL_2);  //使能PWM输出
	SET_PWM(htim9,50,1);
	SET_PWM(htim9,250,2);

这是我自己写的设置pwm值的方法,原理在上面那几张图里面有讲解,大家看一下很容易明白。

void SET_PWM(TIM_HandleTypeDef tim_temp,uint16_t value , unsigned char num)
{
	if(num == 1){
	TIM_OC_InitTypeDef sConfigOC;
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&tim_temp, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&tim_temp, TIM_CHANNEL_1);  
	}
	if(num == 2){
	TIM_OC_InitTypeDef sConfigOC;
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&tim_temp, &sConfigOC, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&tim_temp, TIM_CHANNEL_2);  
	}
	if(num == 3){
	TIM_OC_InitTypeDef sConfigOC;
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&tim_temp, &sConfigOC, TIM_CHANNEL_3);
    HAL_TIM_PWM_Start(&tim_temp, TIM_CHANNEL_3);  
	}
	if(num == 4){
	TIM_OC_InitTypeDef sConfigOC;
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = value;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&tim_temp, &sConfigOC, TIM_CHANNEL_4);
    HAL_TIM_PWM_Start(&tim_temp, TIM_CHANNEL_4);  
	}
    
}

到这里就是pwm输出的用法了,设置之后我的舵机接在这连个通道上可以看出是转到了我想要的角度上的,这里补充一点,9克舵机转角为180度左右,时基是20ms,也就是在20ms这个周期上,每个周期若果占空比为0.5ms,就转到0度位置,如果占空比为2.5ms,就转到180度极限位置,中间的位置自己换算,很容易上手用,至于其他舵机大同小异哈。

最后

我是一个新人博主,目前也是一个大学生,但是真心喜欢嵌入式和物联网,已经自学3年了,我会带着热爱一直把博文写下去,也是自己记笔记的一种方式,大家可以关注我,给我留言,一起学习

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服