影子寄存器:改ARR下个周期才生效,波形不突变

短文标题:影子寄存器:改ARR下个周期才生效,波形不突变

你有没有想过一个问题:定时器正在输出PWM,突然改了ARR(周期),波形会不会断一下或出现毛刺?取决于ARPE位。 STM32的ARR(自动重装载寄存器)有两层:预装载寄存器 (软件读写)和影子寄存器(硬件使用)。影子寄存器在更新事件发生时从预装载寄存器加载新值。

**ARPE=0:立即生效(可能突变),**ARPE=0时,预装载寄存器直通影子寄存器,写ARR立即生效。计数器正在计数,比如当前值=800,ARR从1000改成500:

  • 800 > 500,计数器永远达不到ARR
  • 一直跑到16位定时器的上限65535才溢出
  • 一个周期变得超级长,波形完全乱掉

这称为"周期突变",可能导致PWM波形畸变、电机抖动。ARPE=1:下个周期生效(平滑过渡),ARPE=1时,预装载寄存器和影子寄存器隔离。修改ARR后,当前周期继续用旧ARR跑,计数到旧ARR值 → 产生更新事件 → 影子寄存器从预装载寄存器加载新ARR → 下个周期用新ARR。

波形连续,无毛刺。更新事件的发生时刻更新事件由硬件在计数器溢出(向上计数:从ARR→0;向下计数:从0→ARR)时自动产生,也可由软件设置UG位强制产生。设置UG位后:

  • 影子寄存器立即更新(ARR、PSC、CCR预装载值全部加载)
  • 计数器立即归零(如果设置了URS位,不触发更新中断,但仍更新影子寄存器)

重要:ARPE保护的是影子寄存器的更新时机,不是更新事件本身。 即使ARPE=1,软件写UG位仍会强制立即更新。配置方法

TIM2->CR1 |= TIM_CR1_ARPE; // 使能预装载,ARPE=1(默认0)

TIM2->ARR = 2000; // 修改ARR,下个周期生效

电机控制、PWM调光等需要连续波形的场合,必须设ARPE=1。PSC也一样,预分频器(PSC)也有影子寄存器,修改PSC后也是在下一次更新事件时才生效。所有会影响计数频率的寄存器,都有这种"缓冲"设计。

这个故事的启示, ARPE不是"延迟",是"优雅交接"。让新ARR在更新事件时生效,而不是在周期中间"野蛮插入"。波形平滑,电机不抖,PWM不毛刺。写在最后, 动态改变定时器周期或占空比时,设ARPE=1。不设,可能周期突变;设了,平滑过渡。一个bit,决定波形质量。


(本文灵感源于于振南《新概念ARM32单片机》教程第6.4节"基本定时器原理与动态周期控制"。)

觉得有用?点赞、转发,让更多人知道"影子寄存器"防突变的作用。

相关推荐
国科安芯15 小时前
立方星与微纳卫星综合电子微型化趋势下的抗辐射MCU选型综述
人工智能·单片机·嵌入式硬件·mcu·risc-v·抗辐射
xunyan623415 小时前
3-1 独立按键控制LED亮灭(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·嵌入式硬件·接口隔离原则
WD1372980155716 小时前
WD5030L,为充电桩、工业设备、5G 基站、车载系统、消费电子提供电源,7-30V 的宽压输入
stm32·单片机·嵌入式硬件·5g·车载系统·51单片机
创界工坊工作室17 小时前
30-基于STM32的小麦烘干塔温度控制系统设计
stm32·单片机·嵌入式硬件·proteus
Zwawa18 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
单片机仿真设计19 小时前
【proteus仿真设计】基于 STM32 的开荒机器人遥控控制系统设计(仿真图+程序)
stm32·嵌入式硬件·机器人·proteus
smartpi_ai19 小时前
51 单片机写好了,大模型语音怎么接?17T 全驱动的现成方案、双板串口分工的边界与画板前的三项硬件确认
单片机·嵌入式硬件·学习
我先去打把游戏先20 小时前
NimBLE是什么-ESP32蓝牙协议栈详解
单片机·嵌入式硬件·ubuntu
木子n120 小时前
车载以太网与SOME/IP服务化通信实战-02.状态机与订阅:SOME/IP-SD的三态迁移、重传账与上电风暴
嵌入式硬件·网络协议·车载系统·车载以太网·some/ip
Gongsion20 小时前
30V输入耐压|1.5μA超低静态电流|200mA输出,CSM52系列:线性稳压器LDO,12V母线转3.3V/5V传感器、MCU弱电支路可靠稳压方案
单片机·嵌入式硬件·车载系统·无人机·智能家居