
1. 从寄存器手册到实际应用eHRPWM模块的深度配置指南如果你正在使用TI的C2000系列微控制器做电机控制、数字电源或者任何需要精密PWM输出的项目那么eHRPWM模块绝对是你绕不开的核心外设。手册里那几十页的寄存器描述从TBCTL到AQCTL密密麻麻的位域定义第一次看确实让人头大。很多人可能只是从例程里拷贝一段初始化代码改改周期和占空比就用了但对寄存器底层的行为一知半解。结果就是当项目需求稍微复杂一点比如需要多个PWM模块同步、需要插入死区、或者需要动态改变相位时各种奇怪的波形问题就冒出来了调试起来非常痛苦。我花了很长时间在多个数字电源和伺服驱动项目里和eHRPWM打交道踩过不少坑。今天我就把这些寄存器配置背后的逻辑、实际应用中的关键细节以及那些手册里不会写的“坑点”系统地梳理一遍。我们的目标不是复述手册而是让你真正理解当你写下一行配置代码时硬件底层到底发生了什么以及如何利用这些寄存器组合出你想要的任何PWM波形。我们会从最核心的时间基准子模块开始一步步深入到动作限定和死区控制最终让你能自信地驾驭这个强大的模块。2. 时间基准子模块PWM的“心脏”与节奏控制器时间基准子模块是整个eHRPWM的节拍器它产生的时基计数器TBCNT是所有后续比较、动作触发的基准。理解它的寄存器是理解一切的基础。2.1 TBCTL模式、时钟与同步的指挥中枢TBCTL寄存器是时间基准的“大脑”。它的每一个位域都直接影响着计数器的根本行为。我们逐位拆解并配上实际场景中的考量。CTRMODE[1:0]计数器模式这是第一个关键选择。00是递增模式计数器从0加到TBPRD然后归零重启产生锯齿波。这种模式简单适用于不对称PWM。01是递减模式从TBPRD减到0不常用。10是递增-递减模式计数器从0加到TBPRD再从TBPRD减回0产生对称的三角波。这是电机控制和许多电源拓扑中最常用的模式因为它能产生中心对齐的PWM有助于降低谐波和噪声。实操心得在电机控制中几乎总是选择递增-递减模式。这不仅因为其对称性还因为在此模式下计数器等于周期TBPRD和等于零ZRO这两个事件是自然发生的可以非常方便地作为更新比较值CMPA/CMPB阴影寄存器的触发点实现无毛刺的占空比更新。CLKDIV[2:0]与HSPCLKDIV[2:0]时钟预分频这两个位域共同决定了时间基准时钟TBCLK的频率。公式是TBCLK SYSCLKOUT / (HSPCLKDIV * CLKDIV)。SYSCLKOUT是系统时钟比如150MHz。你需要根据你想要的PWM开关频率和计数器分辨率来反推分频系数。假设系统时钟150MHzPWM频率设为10kHz采用递增-递减模式。那么一个完整的三角波周期需要计数TBPRD * 2次上坡和下坡。所以TBCLK的频率至少需要10kHz * 2 * TBPRD。如果你希望TBPRD有较大的值以获得高分辨率例如设置TBPRD7500那么TBCLK需要10k * 2 * 7500 150MHz。这时HSPCLKDIV和CLKDIV都应该设置为1即不分频。如果你的PWM频率很低比如1kHz而TBPRD仍想保持7500那么TBCLK只需要15MHz你就可以将CLKDIV设为2h/4或HSPCLKDIV设为2h/4来降低时钟节省功耗。注意事项HSPCLKDIV的预分频系数不是常见的2的幂次方1,2,4,8...而是1,2,4,6,8,10,12,14。这是为了兼容老型号。在计算时特别是需要精确频率时要使用实际的分频值代入公式。PHSEN与PHSDIR相位使能与方向这是实现多路PWM同步的关键。当PHSEN1时一旦检测到同步输入信号EPWMxSYNCI或软件强制同步SWFSYNC当前计数器的值TBCNT就会被相位寄存器TBPHS的值覆盖。PHSDIR则指定了加载相位值后计数器接下来的计数方向仅递增-递减模式有效。例如主PWM模块EPWM1的SYNCO输出连接到从模块EPWM2的SYNCI。设置EPWM2的PHSEN1TBPHS500PHSDIR0向下。当同步事件发生时EPWM2的计数器会立刻被设置为500并开始向下计数这就实现了与主PWM之间固定的相位差滞后。SYNCOSEL[1:0]同步输出选择决定本模块的同步输出信号EPWMxSYNCO源是什么。00是直通输入同步信号常用于信号接力传递。01是当TBCNT0时产生同步脉冲这是最常用的方式可以让所有模块以零点为基准对齐。10是当TBCNTCMPB时产生可以实现基于特定事件的复杂同步链。11是禁用同步输出。PRDLD周期寄存器装载模式默认为0即阴影模式。对TBPRD的写入是写到阴影寄存器只在TBCNT0时阴影寄存器的值才会装载到活动寄存器生效。这保证了在PWM周期中间修改周期值时不会导致一个周期内出现两个不同的周期值从而产生畸变。设置为1则是立即模式写操作直接生效通常用于需要极快速、实时改变频率的特殊场景但风险很高。2.2 TBSTS、TBPHS、TBCNT与TBPRD状态与核心参数TBSTS时间基准状态寄存器这个寄存器主要用于监控和诊断。CTRMAX位指示计数器是否曾达到最大值0xFFFF溢出这在调试初始化或异常情况时有用。SYNCI位指示是否发生了外部同步事件可用于软件查询同步状态。CTRDIR是只读位实时指示计数器当前是向上计数1还是向下计数0。TBPHS时间基准相位寄存器一个16位寄存器存放相位值。它定义了本模块计数器相对于同步源的初始偏移量。在同步使能后它的值会直接加载到TBCNT中。TBCNT时间基准计数器寄存器实时反映计数器当前值的寄存器。关键点直接写TBCNT会立即生效且不与TBCLK同步。这意味着如果你在运行时直接修改它可能会产生一个极窄的脉冲或导致比较事件错乱通常只在初始化时设置运行时避免直接写入。TBPRD时间基准周期寄存器决定PWM频率的核心寄存器。PWM周期Tpwm (TBPRD * 2) / TBCLK递增-递减模式。在阴影模式下PRDLD0你可以安全地在任何时刻更新TBPRD新值将在下一个周期起点TBCNT0生效实现平滑的频率切换。这是实现变频控制如电机软启动、谐振变换器调频的基础。3. 计数器比较子模块PWM脉宽的“雕刻刀”时间基准产生了均匀的三角波或锯齿波而计数器比较子模块则负责在这个波形上“雕刻”出高低电平的边界从而定义占空比。3.1 CMPCTL比较值的装载与缓冲策略CMPCTL寄存器控制着比较值CMPA和CMPB如何被加载和更新其策略直接影响PWM输出的稳定性和实时性。SHDWAMODE/SHDWBMODE阴影模式这是最重要的位之一。默认为0阴影模式。在此模式下你对CMPA或CMPB寄存器的写入实际上是写入了对应的阴影寄存器而非立即生效的活动寄存器。活动寄存器中的值才是真正与TBCNT进行比较的值。这种双缓冲机制确保了PWM占空比可以在一个周期中的特定时刻由LOADAMODE/LOADBMODE决定安全地切换完全避免在PWM脉冲中间改变比较值可能导致的脉冲宽度异常“毛刺”。LOADAMODE/LOADBMODE[1:0]装载模式当处于阴影模式时此位域决定阴影寄存器的值何时装载到活动寄存器。00: 在TBCNT0ZRO事件时装载。这是最常用的设置确保在新的PWM周期开始时启用新的占空比。01: 在TBCNTTBPRDPRD事件时装载。在递增-递减模式下这也对应着波形的顶点。10: 在TBCNT0或TBCNTTBPRD时装载。这提供了双倍的机会更新适用于需要极高更新率的场景。11: 冻结不自动装载。需要软件手动触发或通过其他方式装载。配置实例解析在典型的电机FOC控制中我们通常在PWM周期中点即电流采样点计算下一个周期的新占空比。为了确保占空比更新时刻的确定性常将LOADAMODE设为00ZRO装载。这意味着在周期中点计算出的新CMPA值被写入阴影寄存器后需要等到当前周期结束、下一个周期开始时才会生效。这引入了一个控制环路延迟在设计电流环控制器如PI调节器时必须予以考虑和补偿。SHDWAFULL/SHDWBFULL阴影寄存器满状态这是一个只读状态位。当它为1时表示阴影寄存器已满即已有一个值在等待装载此时再写入新的比较值会覆盖旧值。在编写高实时性代码时可以在写入前检查此位以避免无意中丢失重要的占空比更新指令。3.2 CMPA与CMPB占空比的定义者CMPA和CMPB是两个16位的比较寄存器。在递增-递减模式下它们的工作原理需要结合计数方向来理解这也是eHRPWM灵活性的体现。在递增-递减模式下一个完整的PWM周期被分为上升段和下降段。CMPA和CMPB的值可以与TBCNT在两个方向上分别进行比较从而在一个周期内产生多达四次比较匹配事件CAU, CAD, CBU, CBD。这为生成复杂的PWM波形如带死区的互补PWM奠定了基础。占空比计算对于简单的对称PWM通常只使用CMPA。假设我们需要一个占空比为D的PWM波。在递增-递减模式下CMPA的值设置与占空比的关系为CMPA TBPRD * (1 - D)。例如TBPRD 1000需要50%占空比则CMPA 500。为什么是1-D因为当计数器从0向上计数到CMPA时触发一个动作比如拉高从TBPRD向下计数到CMPA时触发另一个动作比如拉低这样就形成了一个中心对称的脉冲。CMPB则可以用来定义另一个不同的比较点常用于生成两个有相位差的PWM信号或者与CMPA配合生成更复杂的波形。4. 动作限定器子模块波形生成的“决策者”比较器只负责发出“匹配”这个事件信号而具体在匹配发生时输出引脚EPWMxA和EPWMxB应该做什么——是置高、拉低、翻转还是无视——则由动作限定器AQ子模块决定。AQCTLA和AQCTLB就是为这两个输出引脚分别制定的“行为准则”。4.1 AQCTLA/AQCTLB事件到动作的映射规则这两个寄存器结构完全一样分别控制A和B输出。每个寄存器用多个2位的字段ZRO, PRD, CAU, CAD, CBU, CBD来定义在不同事件发生时采取的动作。动作编码为00-无操作01-强制低10-强制高11-翻转。核心配置模式非对称PWM递增模式通常配置CAU10Set上升沿匹配时置高ZRO01Clear计数器归零时拉低。这样计数器从0开始上升到CMPA时输出变高到TBPRD时归零输出变低形成一个从周期开始处触发的PWM脉冲。对称PWM递增-递减模式这是最经典的配置。以EPWMxA为例我们希望生成一个中心对齐的PWM。配置CAD10Set递减匹配CMPA时置高CAU01Clear递增匹配CMPA时拉低。波形逻辑是计数器从0递增当TBCNT等于CMPA时CAU事件输出拉低计数器继续增至TBPRD后转为递减当递减到CMPA时CAD事件输出置高。这样高电平脉冲被“放置”在三角波的中心位置。互补PWM带死区前体要生成一对互补的PWM信号EPWMxA和EPWMxB你需要分别配置AQCTLA和AQCTLB。例如让EPWMxA在CAD置高、CAU拉低对称PWM同时让EPWMxB执行相反的动作CBD01ClearCBU10Set并且CMPB的值等于TBPRD - CMPA。这样就能得到两个中心对称且互补的波形。但此时两者是理想互补没有死区直接驱动桥式电路会导致上下管直通。这就需要下一个子模块——死区发生器。深度解析PRD和ZRO事件在递增-递减模式下的方向是固定的。手册明确说明当TBCNTTBPRD时方向定义为递减0当TBCNT0时方向定义为递增1。这意味着即使你配置了CAU递增匹配A和PRD事件的动作当计数器到达周期值时触发的也是PRD事件其隐含方向是递减与CAU无关。这个细节在配置复杂动作序列时至关重要。4.2 AQSFRC与AQCSFRC软件强制干预机制动作限定器不仅响应硬件比较事件还允许软件进行强制干预这在某些控制场景下非常有用。AQSFRC软件强制寄存器用于产生一次性的强制动作。OTSFA/OTSFB位写1产生一次软件强制事件该位会自动清零。这是一个“触发”信号。ACTSFA/ACTSFB位定义当上述强制事件发生时输出引脚应执行什么动作清0、置1、翻转。注意此动作不受计数器方向限定。RLDCSF位控制AQCSFRC阴影寄存器的重载条件与CMPCTL中的LOADxMODE类似。应用场景在电机控制启动阶段可能需要强制将所有PWM输出拉低封锁驱动以确保功率桥安全。可以通过配置ACTSFA和ACTSFB为01Clear然后同时置位OTSFA和OTSFB即可立即在下一个TBCLK边沿将输出强制拉低而不需要等待计数器匹配事件。AQCSFRC连续软件强制寄存器用于产生持续的强制状态。CSFA/CSFB位00-禁用强制01-强制输出持续低10-强制输出持续高11-保留。当使能连续强制时它会覆盖由AQCTL配置的基于比较事件的正常动作。输出将被锁定在强制状态直到软件将其禁用。应用场景与风险连续强制通常用于故障安全处理或测试。例如在过流故障触发Trip-Zone事件后除了硬件自动响应软件也可以立即将CSFA和CSFB设为01实现双保险封锁。重要警告在正常PWM运行时切勿随意启用连续强制否则正常的PWM生成将被完全屏蔽。在退出强制前必须仔细考虑输出状态避免产生意外的电压跳变。5. 死区发生器子模块功率开关的“安全卫士”在驱动H桥、三相逆变器等电路时同一桥臂的上下两个开关管绝不能同时导通否则会导致电源直通短路瞬间烧毁器件。死区时间就是在互补的PWM信号中插入的一段两个信号都为低电平的“安全区”。DBCTL、DBRED和DBFED这三个寄存器共同负责死区的生成。5.1 DBCTL死区工作模式与极性配置DBCTL寄存器控制死区的生成逻辑和信号路径理解其位域需要结合内部结构图手册中的Figure 14-29。OUT_MODE[1:0]输出模式这是死区模块的总开关。00: 完全旁路。EPWMxA和EPWMxB信号直接来自动作限定器不产生任何延迟。这是默认值也是调试时首先应确认的模式以验证AQ模块输出是否正确。01: 禁用上升沿延。EPWMxA直通EPWMxB输出经过下降沿延迟后的信号。10: 禁用下降沿延迟。EPWMxB直通EPWMxA输出经过上升沿延迟后的信号。11: 完全使能。EPWMxA输出带上升沿延迟EPWMxB输出带下降沿延迟。这是生成带死区互补信号的最常用模式。IN_MODE[1:0]输入模式选择哪个原始信号作为上升沿和下降沿延迟单元的输入。默认00即EPWMxA作为两个延迟单元的输入。这意味着死区模块以EPWMxA为基准生成一个延迟上升沿的EPWMxA_DB和一个延迟下降沿的EPWMxB_DB。其他模式可以实现交叉输入用于生成更复杂的非互补带死区信号。POLSEL[1:0]极性选择在延迟信号输出前可选择是否对其取反。这对于匹配功率驱动级的逻辑至关重要。00(AH): 都不反相。假设AQ输出高电平使能开关管则适合驱动高侧为P-MOSFET低侧为N-MOSFET且需要高电平开启的桥臂需注意实际驱动芯片逻辑。01(ALC): 反相EPWMxA_DB。常用于“主动低互补”模式即同一桥臂的两个信号常态为高关闭有效脉冲为低。10(AHC): 反相EPWMxB_DB。11(AL): 两个都反相。即输出完全反相的死区信号。配置实战驱动一个典型的由两个N-MOSFET组成的半桥高侧需要自举电路或隔离驱动通常要求输入信号高侧PWM有效时为高低侧PWM有效时为高且两者不能同时为高。我们配置AQ模块生成一对理想的互补信号EPWMxA高时EPWMxB低。然后设置DBCTLOUT_MODE11完全使能IN_MODE00以EPWMxA为基准POLSEL00不反相。这样EPWMxA经过上升沿延迟后输出作为高侧信号EPWMxA经过下降沿延迟并取反由AQ互补逻辑和死区共同作用实际需结合AQ配置后作为低侧信号。最终我们得到高侧信号在上升沿被推迟低侧信号在下降沿被推迟两者之间就产生了死区。5.2 DBRED与DBFED死区时间的定量设置DBRED和DBFED是两个10位寄存器有效位0-9分别存储上升沿延迟和下降沿延迟的计数值。死区时间计算死区时间Tdb DEL * Ttbclk。其中DEL是DBRED.DEL或DBFED.DEL的值Ttbclk是时间基准时钟TBCLK的周期。例如TBCLK 1/150 MHz ≈ 6.67 ns。如果需要500ns的死区时间则DEL 500 ns / 6.67 ns ≈ 75。将75十进制写入DBRED.DEL和DBFED.DEL即可。注意10位寄存器最大值为1023因此最大可设置死区时间约为1023 * 6.67 ns ≈ 6.82 μs。如果所需死区时间更长需要降低TBCLK频率增大CLKDIV或HSPCLKDIV。关键陷阱死区插入会改变有效脉冲的宽度。以OUT_MODE11为例上升沿延迟会使EPWMxA的有效高电平宽度减少DBRED个TBCLK下降沿延迟会使EPWMxB的有效高电平宽度减少DBFED个TBCLK。因此在计算用于占空比的CMPA值时必须考虑死区时间的影响。通常的补偿方法是软件中计算出的理想占空比对应的时间需要加上半个死区时间对于对称PWM再转换为CMPA值。否则实际输出的电压会低于预期。6. 寄存器配置流程与实战代码框架理解了每个寄存器的含义后我们需要一个正确的配置顺序来初始化eHRPWM模块。错误的顺序可能导致短暂的错误输出损坏硬件。6.1 安全的初始化序列禁用输出并设置安全状态在配置任何波形参数前先将AQ模块的输出强制到一个安全状态通常全低。可以通过配置AQCSFRC寄存器将CSFA和CSFB设为01强制低或者配置AQCTLA和AQCTLB的ZRO和PRD事件为01Clear并确保CMPA/CMPB值大于TBPRD使比较事件不触发。配置时基模块TB设置TBCTL确定计数模式、时钟分频、同步设置。然后写入TBPRD周期值和TBPHS相位值如果需要。注意在初始化时可以先将TBCTL.CTRMODE设为11停止配置完所有参数后再启动计数器。配置比较模块CC设置CMPCTL确定比较值的装载模式通常为阴影模式在ZRO或PRD装载。然后写入初始的CMPA和CMPB值。配置动作限定器AQ根据想要的PWM模式对称、非对称、互补配置AQCTLA和AQCTLB中各个事件对应的动作。配置死区模块DB如果需要死区配置DBCTL选择模式并计算并写入DBRED和DBFED值。解除输出强制并启动计数器将AQCSFRC的强制位清除设为00然后将TBCTL.CTRMODE从停止模式改为目标模式如10递增-递减。此时PWM开始按照配置正常输出。6.2 代码示例与关键注释以下是一个基于TI C2000芯片的CCS开发环境配置eHRPWM1模块产生一对带死区的中心对称互补PWM的代码框架。假设系统时钟150MHzPWM频率10kHz死区时间500ns。// 宏定义便于阅读 #define EPWM1_TIMER_TBPRD 7500 // 周期值。Tpwm (7500*2) / (150MHz/1) 10kHz #define EPWM1_CMPA_VALUE 3750 // 初始占空比50%: CMPA TBPRD * (1 - 0.5) 3750 #define EPWM1_DEADBAND_COUNT 75 // 死区计数: 500ns / (1/150MHz) 75 void InitEPwm1(void) { // 步骤1: 安全状态 - 通过AQCSFRC强制输出低 EPwm1Regs.AQCSFRC.bit.CSFA 1; // 01b Force low EPwm1Regs.AQCSFRC.bit.CSFB 1; // 步骤2: 配置时基模块 EPwm1Regs.TBCTL.bit.CTRMODE 3; // 先停止计数器 (11b) EPwm1Regs.TBCTL.bit.PHSEN 0; // 禁用相位装载 (主模块) EPwm1Regs.TBCTL.bit.PRDLD 0; // 周期寄存器使用阴影模式 EPwm1Regs.TBCTL.bit.SYNCOSEL 0; // 同步输出直通输入 (可选) EPwm1Regs.TBCTL.bit.SWFSYNC 0; // 清除软件强制同步 EPwm1Regs.TBCTL.bit.HSPCLKDIV 0; // 高速时钟分频 /1 EPwm1Regs.TBCTL.bit.CLKDIV 0; // 时钟分频 /1, TBCLK SYSCLKOUT 150MHz EPwm1Regs.TBCTL.bit.FREE_SOFT 0; // 仿真挂起时立即停止安全 EPwm1Regs.TBPRD EPWM1_TIMER_TBPRD; // 设置周期 EPwm1Regs.TBPHS.word 0; // 相位设为0 // 步骤3: 配置比较模块 EPwm1Regs.CMPCTL.bit.SHDWAMODE 0; // CMPA 阴影模式 EPwm1Regs.CMPCTL.bit.SHDWBMODE 0; // CMPB 阴影模式 EPwm1Regs.CMPCTL.bit.LOADAMODE 0; // ZRO时装载CMPA阴影值 EPwm1Regs.CMPCTL.bit.LOADBMODE 0; // ZRO时装载CMPB阴影值 EPwm1Regs.CMPA.bit.CMPA EPWM1_CMPA_VALUE; // 初始比较值A // CMPB可用于生成互补信号这里我们通过死区模块生成故CMPB可设任意值AQ模块会忽略或用于其他逻辑 // 步骤4: 配置动作限定器 - 生成对称PWM波形 (以EPWM1A为例) // 在递增-递减模式下配置CADSet, CAUClear得到中心对齐的PWM EPwm1Regs.AQCTLA.bit.CAU 1; // CAU事件: 递增匹配CMPA时 Clear (01b) EPwm1Regs.AQCTLA.bit.CAD 2; // CAD事件: 递减匹配CMPA时 Set (10b) // ZRO和PRD事件保持为0 (Do nothing) // 步骤5: 配置死区模块 EPwm1Regs.DBCTL.bit.OUT_MODE 3; // 11b: 完全使能上升沿和下降沿延迟 EPwm1Regs.DBCTL.bit.POLSEL 0; // 00b: 都不反相 (AH模式) EPwm1Regs.DBCTL.bit.IN_MODE 0; // 00b: EPWMxA作为两个延迟的输入源 EPwm1Regs.DBRED.bit.DEL EPWM1_DEADBAND_COUNT; // 上升沿延迟 EPwm1Regs.DBFED.bit.DEL EPWM1_DEADBAND_COUNT; // 下降沿延迟 // 步骤6: 解除强制启动计数器 EPwm1Regs.AQCSFRC.bit.CSFA 0; // 禁用连续强制 EPwm1Regs.AQCSFRC.bit.CSFB 0; EPwm1Regs.TBCTL.bit.CTRMODE 2; // 设置为递增-递减模式 (10b)计数器开始运行 }7. 高级应用与调试技巧7.1 多模块同步与相位控制在复杂系统中如三相逆变器需要多个eHRPWM模块同步工作且彼此间有固定的相位差。这通过SYNCI/SYNCO链和TBPHS寄存器实现。主从同步链配置选择一个模块作为主模块如EPWM1将其TBCTL.SYNCOSEL设置为01CTRZRO时产生同步脉冲。将主模块的EPWM1SYNCO输出连接到从模块如EPWM2和EPWM3的EPWMxSYNCI输入硬件连接或通过SOC内部路由。配置所有从模块的TBCTL.PHSEN 1并设置各自的TBPHS值。例如三相逆变器需要120度相位差。如果TBPRD6000则120度对应TBPHS 6000 * 2 * (120/360) 4000在递增-递减模式下一个电周期对应TBPRD*2个计数。设置EPWM2的TBPHS0EPWM3的TBPHS4000EPWM4的TBPHS2000假设有第四路。确保所有模块的时钟分频和计数模式一致。7.2 高分辨率PWMHRPWM的寄存器扩展对于支持HRPWM的ePWM实例CMPAHR和TBPHSHR寄存器提供了微边沿定位MEP功能可以将PWM边沿的控制精度从TBCLK周期提高到150ps左右。这通过CMPAHR寄存器的低8位或TBPHSHR来实现对CMPA或TBPHS的亚周期微调。配置HRPWM涉及额外的控制寄存器HRPCTLHRPWR等并需要校准MEP步长这是一个更高级的话题但其基础仍是建立在标准eHRPWM寄存器配置之上。7.3 调试常见问题与排查方法无输出或输出常高/常低检查时钟和计数器确认TBCTL.CLKDIV/HSPCLKDIV设置正确TBCTL.CTRMODE不是停止模式11。用调试器读取TBCNT寄存器看其是否在循环计数。检查输出强制确认AQCSFRC.CSFA/CSFB未被强制为高或低。检查AQCTL配置的事件和动作是否合理CMPA值是否在0到TBPRD之间。检查GPIO复用确保PWM输出引脚已正确配置为外设功能而非普通GPIO。波形频率或占空比不对计算TBCLK根据系统时钟和分频系数重新计算TBCLK再计算TBPRD。阴影模式的影响确认你修改的是否是活动寄存器。在阴影模式下写CMPA后需要等待LOADAMODE指定的事件如ZRO发生后新值才生效。在调试时可以临时将CMPCTL.SHDWAMODE设为1立即模式来快速验证但产品代码中不推荐。死区不生效或效果异常确认DBCTL.OUT_MODE必须设置为01,10, 或11才能启用延迟。00是旁路模式。检查DBRED/DBFED值值是否太小小于计数器抖动或太大超过半周期计算死区时间是否合理。验证输入信号死区模块的输入是来自AQ的EPWMxA和EPWMxB。先用示波器查看AQ直接输出的波形是否正确再对比经过DB模块后的波形。同步功能失效检查SYNCOSEL和PHSEN主模块必须产生同步输出SYNCOSEL不为11从模块必须使能相位加载PHSEN1。检查TBPHS值确保相位值在合理范围内0 ~TBPRD*2。使用TBSTS.SYNCI标志在从模块中查询此标志看是否成功捕获到同步事件。掌握eHRPWM寄存器的配置本质上是理解一个由时基、比较、动作、死区等逻辑单元构成的精密状态机。最好的学习方式就是一边看手册一边在开发板上实际配置用示波器观察每一个寄存器位的变化如何影响最终的波形。从最简单的单路PWM开始逐步增加死区、互补、同步等功能每一步都验证你的理解。当你能不假思索地配置出项目所需的任何PWM波形时你就真正驾驭了这颗芯片的脉搏。