PWM频率和占空比

本文介绍了STM32定时器配置PWM频率和占空比的详细步骤,包括时钟源、预分频设置以及占空比计算。作者分享了自己在频率计算上的误区,通过两个实例解释了频率设置,并提供了两种设置占空比的方法。最后,文章总结了学习过程中遇到的问题和解决经验。
摘要由CSDN通过智能技术生成

STM32定时器PWM频率设置,占空比设置


自己对于占空比和频率设置的理解,分享之前自己进入的误区。对于占空比还是比较好理解的,就是频率计算让自己进入了一个误区。相信对于来看博客的都对这个有一定的了解,对于什么是PWM,有什么用就不再讲解,


提示:以下是本篇文章正文内容,下面案例可供参考

一、必备知识

输出pwm波首先要设置的就是频率
普及:T=1/f(f越大T越小)
1M Hz = 1000K Hz = 1000000Hz
1 Hz = 1s
1K Hz = 1ms
10K Hz=0.1ms
1M Hz = 1um

只需要了解:自动重装载arr    预分频psc

1、时钟源
定时器时钟TIMxCLK,即内部时钟CK_INT,经APB1预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M 。

2、预分频
预分频两种方式(每个人习惯不一样常见的两种):
(1)给psc赋值为72(7200)等一些比较好计算的值

	TIM_TimeBaseStructure.TIM_Period = arr-1;//把时钟平分为多少等份(每一段就是一个小周期)
	TIM_TimeBaseStructure.TIM_Prescaler = psc-1;//定时器时钟的频率72Mhz/84Mhz
(2)跟(1)的分频方式不一样,分频值得原理一样
	//TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz  
	TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate);

这张图可以帮你更好的理解arr和ccr占空比设置的原理
在这里插入图片描述

3、管脚重映射语句 TIM3为例(两个参数参数:1.TIMx是完全重映射还是部分重映射 2.使能)

GPIO_PinRemapConfig(GPIO_PartialRemap_TIMx, ENABLE);
//GPIO_PartialRemap_TIM3 TIM3 复用功能部分映射
//GPIO_FullRemap_TIM3 TIM3 复用功能完全映射

一、频率设置

我的误区(借鉴):知道频率和时间为反比,但是思考的时候认为1M Hz是1us 那么10K Hz肯定比是0.01us怎么就想不明白,就在那死熬,知道自己肯定哪里错了,但是就是看不出来,难了我一上午,恍然大迷瞪。希望各位不要在这入坑。
频率:(两个例子可以理解一下)

eg1:假设arr=1000-1 预分频psc=72-1。设分频之后值(Fp)。周期(T)
Fp=72M Hz / 72 = 1M Hz  =1um=0.001ms
T:Fp x arr(1000)=1ms=0.001s
频率f=1/T = 1 / 0.001 = 1000Hz = 1K Hz

eg2:假设arr=10-1 预分频psc=7200-1。设分频之后值(Fp)。周期(T)
Fp=72M Hz /7200-1 = 10K Hz =0.1ms
T:Fp x arr (10) = 1ms = 0.001s
频率f=1/T = 1 / 0.001 = 1000Hz = 1K Hz

二、占空比设置

设置占空比的方法两种

方法一:给crr(600)赋值,参考arr(1000)的值,此时占空比为60%

	void Init_Pwm(uint16_t ccr)
	{
		,,,;
		,,,;
		,,,;
		,,,;
		TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;//pwm模式二
		TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;//输出极性低
		TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//比较输出使能
		TIM_OCInitStruct.TIM_Pulse=ccr;
		TIM_OC2Init(TIM3,&TIM_OCInitStruct);//打开通道2	

方法二:在配置通道的时候不配置ccr的值,在主函数里面调用库函数里面的修改ccr值的函数。
调用函数:void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
给crr(6) arr(10) 占空比为60%

TIM_SetCompare2(TIM3,crr)

总结

第一次写博客,由于一直想写,看到身边的人也都在写博客。加上由于这个问题我花费了好多时间才弄明白,决定抽出时间,写一篇让自己加入到这个大家庭当中,希望大家多多支持。有错误的话,欢迎大神指正,写这个也是督促自己学习。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

maosql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值