ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-05-08 19:03:00  阅读:486  来源: 互联网

标签:HAL temp sConfigOC STM32CubeMX TIM PWM CHANNEL


这一节是设置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年了,我会带着热爱一直把博文写下去,也是自己记笔记的一种方式,大家可以关注我,给我留言,一起学习

标签:HAL,temp,sConfigOC,STM32CubeMX,TIM,PWM,CHANNEL
来源: https://blog.csdn.net/ailta/article/details/105974861

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有