STM32 PWM占空比和信号周期的控制因素分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuyuzun/article/details/83900142

前言

  1. 博文基于STM32F103ZET6芯片,标准固件库3.5.0和MDK5编写;
  2. 博文并不讨论PWM的基础知识,而是直接去谈对PWM灵活的控制问题;想全面了解的可以看看我写的专门针对PWM的博客: https://blog.csdn.net/wuyuzun/article/details/72851940
  3. 如有不足之处还行多多指教;

PWM的两个重要参数

  1. 占空比:0~100%;
  2. 信号周期:PWM信号里一个高电平和一个低电平的时间和;
    对这两个参数的设置是配置PWM输出的核心也是今天要讨论的主要任务;

是什么决定上面这两个重要参数

首先要明白一个知识:STM32的定时器输出的PWM的占空比由定时器的三个寄存器决定,分别是

  1. 定时器计数器TIMx_CNT;
  2. 定时器自动重装载寄存器TIMx_ARR;
  3. 定时器捕获/比较寄存器TIMx_CCRx;
  4. 定时器预分频器TIMx_PSC;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CNT和CCRx的对占空比的影响:
对于本实验要满足的前提如下:
6. CNT是向上计数的方式;需设置TIMx_CRx寄存器中的DIR[1:0]=0;
7. CRx输出极性为高;需要设置TIMx_CCER寄存器中的CCxP=1;
8. CHx的模式为输出PWM1模式;需设置TIMx_CCMRx寄存器中的OCxM[2:0]=110;
(上面这三个因素对于PWM的输出至关重要,而且是定时器很难理解的地方)
占空比的形成过程
计算公式:
在这里插入图片描述
当CNT<CCRx时,OCxREF=1,Polarity=1,则CHx输出低电平0;
当CNT>=CCRx时,OCxREF=0,Polarity=1,则CHx输出高电平1;
当CNT的值更新后,CHx从高电平再次转为低电平,自此下一个周期就开始了;
满足以上前提的时序图:(令ARR=8,下图中的CCxIF为捕获/比较中断标志位)
在这里插入图片描述
还可以从图中得到另一个结论:PWM的信号周期就等于CNT的更新周期;

占空比的计算:占空比 = CCRx/ARR; (前提不同,公式可能会变成1-(CCRx/ARR));
信号周期的计算:信号周期= (ARR+1)(PSC+1)/PCLKx; (这其实就是CNT的更新周期的计算)

总结

  1. 欲改变灯的亮度,只需改变占空比,欲改变占空比,只需改变CCRx的值或者ARR的值,一般都是改变CCRx的值;
  2. PWM的信号周期如果长,整个灯就看不出来渐变的效果了,而是闪烁的效果,根据人的视觉暂留效应,对于信号周期的配置很重要;大于这个值的时候,用肉眼就可以看出闪烁感觉了;

猜你喜欢

转载自blog.csdn.net/wuyuzun/article/details/83900142
今日推荐