PWM频率和占空比

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

文章目录

    • 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;
(2)跟(1)的分频方式不一样,分频值得原理一样
	//TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz  
	TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate);

这张图可以帮你更好的理解arr和ccr占空比设置的原理
PWM频率和占空比_第1张图片

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)

总结

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

你可能感兴趣的:(嵌入式,嵌入式,单片机,stm32)