龙空技术网

STM32的PWM输出极性高低的区别

武阿哥815 203

前言:

现在你们对“stm32 比较输出”大体比较重视,咱们都想要剖析一些“stm32 比较输出”的相关内容。那么小编同时在网络上网罗了一些有关“stm32 比较输出””的相关内容,希望咱们能喜欢,看官们一起来了解一下吧!

定义:TIM_OCNPolarity_High为高极性

TIM_OCNPolarity_Low为低极性

分析图:

首先要先理解好这一句话:

当PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时

通道1为无效电平,否则为有效电平;

TIM_SetCompare2(TIM3,0);

1)为什么在高极性时,灯会灭呢

因为TIMx_CNT<TIMx_CCR1,通道1为无效电平

战舰板的LED是低电平亮,而刚开始的给CC2P用来设置占空比的led0pwmval为0,也就是TIMx_CCR1

它是小于等于TIM3_CNT的,也就符合TIMx_CNT>=TIMx_CCR1时通道2输出是高电平

不符合LED灯低电平亮,LED灯是不亮的。

2)那么把高极性改为低极性,为什么灯会亮

如TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

因为CC1P=0时:OC1高电平有效 TIM_OCNPolarity_High

CC1P=1时:OC1低电平有效 TIM_OCNPolarity_Low

由于低极性输出的是低电平有效所以灯可以点亮

3)为什么把PWM2改成了PWM1,别的什么都没动,灯就亮了

“PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平”

4)考虑到设置CCR的值设置为300到500效果不是很明显

所以CCR取0和899,可以直接看出效果现象

5)占空比的大小跟ARR和CCR的值有关,它决定着灯的亮度和时间

同时灯的亮度跟脉冲宽度和电压由这两个因素决定着

6)程序灯的亮度是跟CCER寄存器有关,不是跟比较值CCR有关

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //比较输出使能

7)如何使灯闪烁,人眼停留看到20HZ,一般设置20HZ以下才可以看到闪烁。

控制1000ms亮灭一次,这个就需要CCR 的值是ARR的一半,即频率调成1HZ。

TIM_OCMode_Toggle一个周期翻转一次

TIM_OCMode_PWM1一周期翻转两次

8)TIM14_PWM_Init(10000-1,8400-1); //84M/8400=10000hz的计数频率,重装载值10000,所以PWM频率为 10000/1000=1hz.

ARR和PSC都是16位的,2^16=65536,超过这个值就会溢出,由溢出的部分开始计算

也就是PWM频率1HZ输出时间1s,由T=1/F得;

标签: #stm32 比较输出