ARR写999,PWM占空比为何不能只除999?
ARR=999时,向上计数器走的是0到999共1000个计数点;占空比还要结合比较关系、极性和对齐模式判断
配置里ARR写999、CCR写500,很多代码注释直接写“占空比=500/999”。示波器测出来接近50%,于是这个写法一路流传。问题在于:接近不等于计数口径正确,到了0%、100%和中心对齐模式,误差就会暴露。
向上计数器从0开始,经历999后更新并回到0,周期包含ARR+1个计数点。PWM输出则由CNT与CCR的比较条件决定高低电平。
公式要从“一个周期有哪些计数点、哪些点输出有效电平”推出来,而不是见到两个寄存器就直接相除。
周期为什么是ARR+1个计数
CNT复位到0后开始计数,0本身已经占用一个计数时隙;到达ARR后仍要经过该计数点,随后才产生更新。
图1 预分频器和向上计数时序显示CNT从0开始并在更新事件后重装
因此边沿对齐向上计数的周期计数常写成ARR+1,计数频率再由定时器时钟和PSC+1分频得到。
ARR=999正好形成1000个计数,便于把CCR按千分比例理解,但这只是配置便利,不是ARR本身等于周期点数。
定时器实际输入时钟还要从时钟树确认。在部分STM32中,APB预分频不为1时,定时器时钟可能按规则倍频;只拿APB总线频率代入,会让PWM频率整体差一倍。计算表应列出系统时钟、APB分频、定时器时钟、PSC和ARR,逐级得到最终计数频率。换芯片系列或修改时钟配置后要重新核对,不能默认所有型号相同。
修改ARR时还要确认自动重装预装载ARPE。若新周期立即生效而CCR延后生效,过渡周期可能出现一次异常脉宽。
CCR决定比较翻转发生在哪个计数点PWM模式1、向上计数时,资料描述的典型关系是CNT小于CCR时OCxREF有效,达到比较点后切换。
图2 定时器时基和捕获比较单元共同生成OCxREF与输出信号
CCR=500时,0到499共500个计数点处于有效状态,对1000点周期而言正好是50%。
输出极性若反相,示波器看到的高电平比例会变成补数;先确认OCxREF与物理引脚高低是否一致。
ARR和CCR常带预装载。软件写入新值后,影子寄存器可能要等更新事件才生效,这能避免周期中途改变造成毛刺。若一个值开了预装载、另一个没有,观察到的占空比可能在某个周期突然错位。动态调占空比时应明确写入时刻、更新事件与DMA触发,不能只证明寄存器最终读回了新数字。
高级定时器的重复计数器会让更新事件隔多个周期发生。只按ARR计算载波频率正确,DMA或中断更新节奏仍可能与预期不同。
边界值最能检验公式是否正确CCR=0时没有任何CNT小于0,典型PWM1输出为持续无效;CCR大于ARR时则可能保持持续有效。
图3 输出比较波形显示CCR写入与CNT匹配如何改变OC1REF
如果机械用CCR/ARR,500/999虽然接近50%,却无法自然解释0和满量程,也会让代码审查口径不统一。
用计数点枚举0、1、ARR和ARR+1四个位置,能快速检查模式、极性和比较符号是否理解正确。
PWM模式1和模式2的有效条件相反,CCxP又能翻转引脚极性。同一个CCR,在OCxREF层和物理引脚层可能对应不同高电平比例。代码注释最好写“有效电平占比”和模式/极性,而不是笼统写“高电平占空比”。互补输出还要考虑死区和主输出使能,示波器上看到的脉宽会继续发生变化。
互补PWM加入死区后,两路物理高电平之和不再简单等于一个周期。功率级关心的是有效导通时间,不能直接复用OCxREF占空比。
中心对齐不能照搬边沿对齐公式中心对齐模式下CNT先向上再向下,比较事件可能在两个方向发生,一个完整周期的计数路径也随之改变。
CMS位、PWM模式和中断标志触发方向都会影响观察结果,频率公式与边沿对齐不相同。
图4 中心对齐PWM在向上与向下计数阶段均可能产生比较事件
切换模式后应重新推导周期和有效计数,再用示波器同时量频率、占空比与更新事件,避免只改寄存器不改算法。
示波器验证应至少测CCR=0、1、中间值、ARR和ARR+1附近几组边界,并固定探头门限和通道带宽。频率测量确认ARR+1口径,占空比测量确认比较与极性,更新时刻则观察是否出现窄脉冲。若只有50%一个点吻合,错误公式也可能被近似值掩盖;边界测试才能证明整套推导成立。
整数计数决定占空比分辨率。频率越高、周期计数越少,可调步进越粗;设计时应同时平衡目标频率、分辨率和定时器时钟上限。
结论ARR写999并没有让周期只剩999份,0这个计数点也在周期里。对边沿对齐向上计数,1000个计数点才是正确起点。
之后再叠加PWM模式、比较符号、输出极性和对齐方式,公式才能与引脚波形一致。用示波器验证边界值,比只测50%更容易发现口径错误。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207

扫码关注












































