C2000 eHRPWM寄存器配置实战:从时基到死区,驱动电机与电源设计

发布时间:2026/7/21 8:47:51
C2000 eHRPWM寄存器配置实战:从时基到死区,驱动电机与电源设计 1. 从寄存器手册到实战配置eHRPWM的核心逻辑如果你曾经在电机控制或者电源设计的项目中面对德州仪器TIC2000系列微控制器那本厚厚的技术参考手册对着eHRPWM增强型高分辨率脉宽调制器的寄存器描述感到头疼那么这篇文章就是为你准备的。手册里密密麻麻的位域定义和时序图虽然详尽但往往缺少一根将各个寄存器串联起来的“线”让你明白为什么这么配置以及不这么配置会出什么问题。今天我们不照本宣科而是从一个实际开发者的视角把这些寄存器当成一套精密的乐高积木拆解它们如何协同工作生成我们需要的PWM波形特别是如何精准地控制那个至关重要的“死区时间”。eHRPWM模块的强大之处在于其高度模块化和可配置性。它不是一个黑盒而是一个由多个功能子模块时基、比较、动作限定、死区等组成的工具箱。理解寄存器本质上就是理解如何配置这些子模块的“行为规则”。无论是驱动一个三相逆变桥还是控制一个精密的开关电源你都需要通过配置这些寄存器来告诉硬件时钟从哪里来、计数怎么进行、何时翻转输出、以及如何插入保护间隔。这个过程远不止是填几个数值那么简单它关乎系统的稳定性、效率和实时性。接下来我们就从最基础的时基模块开始一步步搭建起你的PWM控制逻辑。2. 时基模块PWM的“心跳”与“节拍器”时基模块是整个eHRPWM的节奏之源。你可以把它想象成一个乐队的指挥或者一个高精度节拍器。它决定了PWM波的频率周期、相位以及计数的方向。所有其他模块的动作比如比较事件、输出翻转都是基于这个时基计数器的值来触发的。因此配置好时基模块是生成正确PWM波的第一步也是最基础的一步。2.1 核心寄存器拆解TBCTL, TBPRD, TBPHS时基模块的核心是几个寄存器它们共同定义了PWM的“时间基准”。TBCTL (Time-Base Control Register)这是时基模块的“大脑”或“模式选择器”。它的每一个位域都至关重要。CTRMODE (Bits 1-0):这是第一个要决定的配置——计数器模式。它有三种模式向上计数模式 (Up-Count):计数器从0开始一直加到周期值TBPRD然后归零如此循环。这种模式生成的是非对称PWM通常用于简单的开关控制或LED调光。向下计数模式 (Down-Count):计数器从周期值TBPRD开始一直减到0然后重新加载周期值如此循环。同样生成非对称PWM。向上-向下计数模式 (Up-Down-Count):计数器从0开始加到周期值然后从周期值减回0如此循环。这是最常用的模式特别是在电机控制和逆变器中因为它能生成对称中心对齐PWM。对称PWM的谐波特性更好能有效降低电磁干扰EMI并且便于实现更复杂的调制算法如空间矢量调制SVPWM。我的经验是在涉及H桥或三相全桥的电机驱动中99%的情况都会选择向上-向下计数模式。CLKDIV 与 HSPCLKDIV (Bits 12:10 和 9:7):这两个位域共同决定了时基时钟TBCLK的频率。公式是TBCLK SYSCLKOUT / (HSPCLKDIV × CLKDIV)。SYSCLKOUT是系统时钟。你需要根据你想要的PWM开关频率和计数器分辨率来仔细计算这两个分频值。为什么需要分频假设你的系统时钟是100MHz而你想要的PWM频率是20kHz。在向上-向下计数模式下一个完整的PWM周期需要计数器从0到TBPRD再到0。如果TBPRD设置为1000那么计数频率需要是20kHz * 1000 * 2 40MHz因为上下计数各1000次。显然100MHz的系统时钟直接使用就太快了需要分频。这里可以设置HSPCLKDIV2CLKDIV1得到TBCLK50MHz接近我们的需求。避坑指南分频系数设置过小TBCLK过快可能导致TBPRD值很小降低了占空比调节的分辨率。分频系数设置过大TBCLK过慢在相同的TBPRD下PWM频率会很低。务必在系统设计初期就根据PWM频率和精度要求反推出合适的TBCLK和TBPRD。PHSEN 与 PHSDIR (Bits 2 和 13):这两个位用于多路PWM之间的同步和相位控制在多相并联或交错并联电源中极其有用。PHSEN (Phase Enable):置1后当时基模块接收到一个同步输入信号EPWMxSYNCI时会立即将TBPHS寄存器中的值加载到计数器TBCNT中。PHSDIR (Phase Direction):仅在向上-向下计数模式下有意义。它决定了在同步事件发生后计数器从加载的相位值开始是向上计数还是向下计数。实战场景假设你有两个eHRPWM模块EPWM1和EPWM2驱动一个交错并联的Buck电路希望它们的PWM波相位相差180度以减小输入电流纹波。你可以将EPWM1配置为主模块其SYNCO输出连接到EPWM2的SYNCI输入。设置EPWM2的PHSEN1并将TBPHS设置为EPWM1的TBPRD值的一半。当同步事件发生时EPWM2的计数器会从中间值开始计数从而实现180度相移。PRDLD (Bit 3):周期寄存器加载模式。这是一个关乎系统稳定性和实时性的重要选择。PRDLD0 (影子模式):TBPRD寄存器有一个对应的影子寄存器。你写入的值先进入影子寄存器只有当计数器TBCNT归零时影子寄存器的值才会被加载到“活跃寄存器”中真正生效。这是默认且推荐的模式因为它能确保在一个完整的PWM周期结束后才更新周期避免了在周期中间改变频率可能导致的脉冲宽度异常或毛刺对于电机这类惯性负载至关重要。PRDLD1 (立即模式):写入TBPRD的值会立即生效。这可能会打断当前计数周期通常仅在调试或某些需要快速频率变化的特殊场景中使用。TBPRD (Time-Base Period Register):这个寄存器直接定义了PWM的周期。在向上-向下计数模式下PWM的频率计算公式为PWM Frequency TBCLK / (2 * TBPRD)。例如TBCLK50MHzTBPRD1250则PWM频率为50MHz / (2 * 1250) 20kHz。注意TBPRD的值决定了占空比的分辨率。一个16位的TBPRD最大值为65535但在高PWM频率下你可能用不到这么大的值实际分辨率是1/TBPRD。TBPHS (Time-Base Phase Register) 与 TBCNT (Time-Base Counter Register):TBPHS存储相位偏移值如前所述用于同步。TBCNT是实时计数器你可以读取它来了解当前计数位置在调试时非常有用。注意直接写入TBCNT可以强制改变计数器当前值但这会立即影响输出通常只在初始化或极端调试情况下使用。2.2 同步链与状态管理SYNCOSEL, SWFSYNC, TBSTS多模块协同工作时同步是关键。SYNCOSEL (Bits 5-4):选择本模块的同步输出信号EPWMxSYNCO源。你可以选择直接转发输入同步信号EPWMxSYNCI。在本模块计数器归零CTR0时产生同步脉冲。在本模块计数器等于CMPB时产生同步脉冲。禁用同步输出。典型用法构建一个同步链。EPWM1使用CTR0作为SYNCO源其输出连接到EPWM2的SYNCI。这样每当EPWM1的计数器归零就会触发EPWM2进行一次同步可能加载相位从而实现所有模块的周期严格对齐。SWFSYNC (Bit 6):软件强制同步位。向该位写1可以产生一个软件同步脉冲其效果与硬件同步输入信号相同。这在你想手动发一次同步或者在没有外部硬件同步信号时初始化同步链非常有用。TBSTS (Time-Base Status Register):这个状态寄存器提供了计数器的实时信息。CTRDIR (Bit 0):只读位指示计数器当前方向0向下1向上。在调试不对称或复杂波形时很有用。CTRMAX (Bit 2):计数器达到最大值0xFFFF锁存标志。如果程序错误导致TBPRD设置过大或计数器跑飞这个标志位会置1。建议在初始化后和主要循环中检查此位作为一道安全防线。SYNCI (Bit 1):外部同步事件锁存标志。可以用来确认同步信号是否成功接收。3. 比较与动作限定定义PWM的“形状”当时基模块提供了稳定的时间轴后比较和动作限定模块就开始在这条时间轴上“雕刻”出具体的PWM波形。它们共同决定了输出引脚在什么时间点发生跳变上升沿或下降沿。3.1 比较模块CMPA, CMPB 与 CMPCTL比较模块的核心是两个比较寄存器CMPA和CMPB。时基计数器TBCNT会不断地与这两个寄存器的值进行比较。当匹配发生时就会产生一个“事件”Event。这个事件本身并不直接改变输出电平它只是一个触发器。CMPA/CMPB (Counter-Compare A/B Register):存储比较值。在向上-向下计数模式下CMPA通常用于控制占空比。例如在对称PWM模式下如果你设置CMPATBPRD/4那么在一个周期内当计数器从0向上计数到CMPA时会产生一个“CTRCMPA up”事件当计数器从TBPRD向下计数到CMPA时会产生一个“CTRCMPA down”事件。这两个事件可以用来在波形的两侧对称地设置跳变点生成中心对称的脉冲。CMPCTL (Counter-Compare Control Register):控制比较寄存器的工作模式核心是影子寄存器机制。SHDWAMODE/SHDWBMODE (Bits 4 6):选择CMPA/CMPB是工作在影子模式Shadow还是立即模式Immediate。与TBPRD类似为了保持PWM波形的连续性避免在周期中间改变占空比导致脉冲畸形强烈建议使用影子模式默认。LOADAMODE/LOADBMODE (Bits 0-1 2-3):在影子模式下决定影子寄存器的值在何时加载到活跃寄存器。常见选项是“在CTRPRD时加载”或“在CTR0时加载”。对于对称PWM通常选择“在CTR0时加载”这样可以确保一个新的占空比值在一个完整周期开始时生效波形变化最平滑。SHDWAFULL/SHDWBFULL (Bits 8 9):影子寄存器FIFO满状态标志。在影子模式下如果你写入CMPx的速度快于其加载到活跃寄存器的速度比如你在一个PWM周期内多次写入这个标志会置1提示上一次写入的值还未生效就被覆盖了。在要求高精度实时更新的系统中需要监控此位以避免更新丢失。3.2 动作限定模块AQCTLA, AQCTLB – PWM波形的“雕刻刀”动作限定模块接收来自时基和比较模块的各种事件CTRPRD, CTRZRO, CTRCMPA up/down, CTRCMPB up/down并定义每个事件发生时输出引脚EPWMxA和EPWMxB应该执行什么“动作”。AQCTLA/AQCTLB (Action-Qualifier Control Register for A/B):这两个寄存器结构完全一样分别控制A和B两个输出通道。每个寄存器为6种事件ZRO, PRD, CAU, CAD, CBU, CBD定义了4种可能的动作00: 无操作01: 强制输出低 (Clear)10: 强制输出高 (Set)11: 翻转输出 (Toggle)这是生成PWM波形的核心配置逻辑。举个例子要在一个通道比如EPWMxA上生成一个简单的、高电平有效的对称PWM波通常的配置是在CTRPRD事件计数器达到周期值准备向下计数时清除输出拉低。这定义了脉冲的下降沿。在CTRCMPA up事件计数器向上计数达到CMPA值时置位输出拉高。这定义了脉冲的上升沿。对于CTRCMPA down事件通常设置为“无操作”因为对称PWM的另一个边沿由CTRPRD事件处理。通过灵活配置AQCTL你可以生成非常复杂的波形包括带死区的互补PWM、不对称PWM、甚至是一些简单的脉冲序列。AQSFRC 与 AQCSFRC (Software Force Registers):这两个寄存器提供了通过软件强制改变输出的能力。AQSFRC:用于产生一次性的软件强制事件。例如你可以通过设置OTSFA位来立即触发一个在ACTSFA中定义的动作如置高、拉低、翻转。这在某些需要快速响应的保护或测试场景下有用。AQCSFRC:用于产生连续的软件强制。一旦使能它会覆盖动作限定器的正常输出强制输出为高或低直到你禁用强制。这个功能要慎用因为它会完全接管PWM输出通常用于故障安全状态比如在检测到过流时立即强制所有PWM输出为低关断功率管。4. 死区生成模块功率电路的“安全卫士”在驱动H桥、半桥或三相全桥等桥式电路时控制同一桥臂上下两个开关管如MOSFET或IGBT的PWM信号必须是互补且带有死区的。死区Dead-Band是指在一管关闭后另一管开启前插入的一个两者都关闭的短暂时间。这个时间是必须的因为功率器件存在关断延迟如果没有死区就可能出现上下管同时导通的“直通”现象产生巨大的短路电流瞬间烧毁器件。eHRPWM的死区生成模块DB就是一个专门用于自动、精确插入死区时间的硬件单元。4.1 死区控制寄存器 DBCTL模式选择DBCTL寄存器决定了死区模块如何处理输入信号以及如何产生输出。OUT_MODE (Bits 1-0):输出模式控制这是死区功能的开关。00:完全旁路死区模块。AQ模块的输出直接送到下一级。在不需要死区的场景如单路PWM控制下使用。01:禁用上升沿延迟。EPWMxA直通EPWMxB输出经过下降沿延迟。10:禁用下降沿延迟。EPWMxB直通EPWMxA输出经过上升沿延迟。11:完全使能死区最常用。EPWMxA输出经过上升沿延迟EPWMxB输出经过下降沿延迟。这是生成互补带死区PWM的标准配置。IN_MODE (Bits 5-4):输入模式控制。它选择哪个输入信号来自AQ模块的EPWMxA_In或EPWMxB_In作为上升沿和下降沿延迟单元的源。00默认:EPWMxA_In同时作为上升沿和下降沿延迟的源。这是经典模式通常AQ模块只生成一个主PWM波在EPWMxA_In上死区模块基于这个波产生两个互补的、带死区的输出。其他模式01, 10, 11允许更灵活的输入选择用于一些非标准的或更复杂的波形生成场景。POLSEL (Bits 3-2):极性选择。它可以在延迟信号输出前选择是否对EPWMxA或EPWMxB进行取反。00 (Active High, AH):都不取反。输出高电平有效。01 (Active Low Complementary, ALC):对EPWMxA取反。这常用于低电平有效的驱动电路。例如很多IGBT驱动芯片的输入是低电平有效配置为ALC模式可以方便地生成一对互补的、低电平有效的带死区信号。10 (Active High Complementary, AHC):对EPWMxB取反。11 (Active Low, AL):两者都取反。输出低电平有效。经典配置流程假设我们用EPWM1A和EPWM1B驱动一个H桥的上管和下管希望高电平有效并插入死区。配置AQ模块让EPWMxA_In输出一个占空比为D的PWM波EPWMxB_In可以不用或配置为其他模式。配置DBCTLIN_MODE00EPWMxA_In作为源OUT_MODE11使能完全死区POLSEL00高电平有效。这样死区模块会以EPWMxA_In为基准生成两个信号EPWMxA_Out原信号上升沿延迟和EPWMxB_Out原信号下降沿延迟并取反以形成互补。最终得到一对互补、带死区、高电平有效的驱动信号。4.2 死区时间设置DBRED 与 DBFED这是设置死区时间具体数值的地方。DBRED (Rising Edge Delay):上升沿延迟寄存器。它定义从输入信号上升沿开始到输出信号实际产生上升沿之间的延迟时间。这个延迟被施加在EPWMxA输出通路上在经典模式下。DBFED (Falling Edge Delay):下降沿延迟寄存器。它定义从输入信号下降沿开始到输出信号实际产生下降沿之间的延迟时间。这个延迟被施加在EPWMxB输出通路上在经典模式下。死区时间计算死区时间 延迟计数值 * TBCLK周期 例如TBCLK 50MHz (周期20ns)如果需要1us的死区时间则延迟计数值应为1us / 20ns 50。将十进制50写入DBRED或DBFED即可。关键点哪个信号被延迟在经典模式IN_MODE00, OUT_MODE11下EPWMxA_Out的上升沿被DBRED延迟EPWMxB_Out的下降沿被DBFED延迟。由于EPWMxB是EPWMxA的互补信号这实际上在“上管关断”到“下管开启”以及“下管关断”到“上管开启”之间都插入了死区。如何确定死区时间死区时间必须大于功率器件MOSFET/IGBT的关断延迟时间t_off。通常需要查阅器件数据手册并留有一定裕量例如1.5到2倍。设置过小无法防止直通设置过大会降低输出电压利用率产生谐波。对称 vs 非对称死区DBRED和DBFED可以设置为不同的值以实现非对称死区。这在某些特殊拓扑或为了优化效率时可能有用但绝大多数应用中使用对称死区DBRED DBFED。5. 实战配置案例与常见问题排查理论说了这么多我们来看一个具体的配置案例使用TI C2000的eHRPWM模块生成一对频率为20kHz占空比50%死区时间为1us的互补对称PWM波用于驱动一个H桥。假设条件系统时钟SYSCLKOUT 100MHz。5.1 配置步骤详解计算时基参数选择向上-向下计数模式CTRMODE2。设定目标PWM频率为20kHz。公式PWM Freq TBCLK / (2 * TBPRD)。为了获得较好的占空比分辨率我们希望TBPRD尽可能大但也要考虑计数器溢出。先设定TBCLK为50MHzCLKDIV1 HSPCLKDIV2。计算TBPRDTBPRD TBCLK / (2 * PWM Freq) 50MHz / (2 * 20kHz) 1250。检查1250 65535可行。此时占空比最小步进为1/1250 0.08%。配置时基寄存器EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 向上-向下计数 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV2; // HSPCLKDIV /2 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // CLKDIV /1 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 本例不需要相位同步 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // 周期寄存器使用影子加载模式 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_SYNC_DISABLE; // 禁用同步输出 EPwm1Regs.TBPRD 1250; // 设置周期值配置比较寄存器占空比50%则CMPA值应为TBPRD / 2 625。使用影子模式并在CTR0时加载确保占空比平滑更新。EPwm1Regs.CMPCTL.bit.SHDWAMODE CC_SHADOW; // CMPA使用影子模式 EPwm1Regs.CMPCTL.bit.SHDWBMODE CC_SHADOW; // CMPB使用影子模式 EPwm1Regs.CMPCTL.bit.LOADAMODE CC_CTR_ZERO; // CTR0时加载影子值 EPwm1Regs.CMPCTL.bit.LOADBMODE CC_CTR_ZERO; EPwm1Regs.CMPA.bit.CMPA 625; // 设置占空比配置动作限定寄存器目标EPWM1A输出一个对称PWMEPWM1B输出其互补信号先由AQ生成互补再由DB插入死区。对于EPWM1A (AQCTLA): CTRPRD时清除拉低CTRCMPA up时置位拉高。对于EPWM1B (AQCTLB): CTRZRO时清除拉低CTRCMPA down时置位拉高。注意这里我们在AQ阶段就生成了互补信号为死区模块提供两个原始输入。// 配置AQCTLA: 生成EPWMxA原始波 EPwm1Regs.AQCTLA.bit.ZRO AQ_CLEAR; // 通常对称PWM在ZRO点无动作这里配置为CLEAR以确保确定性 EPwm1Regs.AQCTLA.bit.PRD AQ_CLEAR; // 计数器到周期值时拉低 (下降沿) EPwm1Regs.AQCTLA.bit.CAU AQ_SET; // 计数器向上等于CMPA时拉高 (上升沿) EPwm1Regs.AQCTLA.bit.CAD AQ_NO_ACTION; // 向下等于CMPA时无动作 // 配置AQCTLB: 生成EPWMxB互补原始波 EPwm1Regs.AQCTLB.bit.ZRO AQ_CLEAR; // 计数器为零时拉低 EPwm1Regs.AQCTLB.bit.PRD AQ_NO_ACTION; EPwm1Regs.AQCTLB.bit.CBU AQ_NO_ACTION; // 不使用CMPB EPwm1Regs.AQCTLB.bit.CBD AQ_NO_ACTION; EPwm1Regs.AQCTLB.bit.CAU AQ_NO_ACTION; EPwm1Regs.AQCTLB.bit.CAD AQ_SET; // 计数器向下等于CMPA时拉高 (对于互补波这是上升沿)配置死区寄存器计算死区计数值TBCLK周期20ns需要1us死区计数值50。配置为经典模式IN_MODE00 (EPWMxA作为源)OUT_MODE11 (完全使能)POLSEL00 (高电平有效)。EPwm1Regs.DBCTL.bit.IN_MODE DBA_IN_MODE; // 00: EPWMxA作为上升沿和下降沿延迟的源 EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HI; // 00: 高电平有效 EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; // 11: 完全使能死区 EPwm1Regs.DBRED 50; // 上升沿延迟1us EPwm1Regs.DBFED 50; // 下降沿延迟1us5.2 常见问题排查速查表在实际调试中你可能会遇到PWM输出不符合预期的情况。下面是一些常见问题及排查思路现象可能原因排查步骤与解决方法完全没有PWM输出1. 时基模块未启动。2. 输出引脚未正确映射或配置为GPIO模式。3. 时钟未使能。1. 检查TBCTL.CTRMODE是否被设置为停止模式(3)。应设置为0,1,2。2. 检查GPIO多路复用器配置确保引脚功能选择为EPWM模式而非普通GPIO。3. 检查外设时钟控制寄存器PCLKCRx确保EPWM模块时钟已使能。PWM频率不对1. TBPRD计算或设置错误。2. CLKDIV/HSPCLKDIV分频配置错误。3. 计数器模式理解有误。1. 重新计算TBPRD并核对写入值。使用示波器测量周期验证。2. 核对TBCTL中的CLKDIV和HSPCLKDIV位域。用公式TBCLKSYSCLKOUT/(HSPCLKDIV*CLKDIV)验算。3. 确认CTRMODE向上/向下计数模式频率为TBCLK/TBPRD向上-向下计数模式频率为TBCLK/(2*TBPRD)。占空比不可调或不对1. CMPA值大于或等于TBPRD。2. CMPA影子寄存器未正确加载。3. AQCTL配置错误事件与动作不匹配。1. 确保CMPA TBPRD (对于非对称模式) 或 CMPA TBPRD (对称模式)。2. 检查CMPCTL.SHDWAMODE和LOADAMODE。确保在影子模式下在正确的时刻如CTR0更新了CMPA影子寄存器并等待加载生效。3.仔细检查AQCTLA/B的配置。对于对称PWM通常用CAU事件SET上升沿PRD事件CLEAR下降沿。用仿真器单步跟踪观察计数器到达CMPA和TBPRD时输出动作是否触发。互补输出没有死区或死区不对1. 死区模块未使能DBCTL.OUT_MODE。2. DBRED/DBFED值设置为0或太小。3. IN_MODE配置错误导致延迟源不对。4. AQ模块未生成正确的互补信号作为DB输入。1. 确认DBCTL.OUT_MODE是否为11完全使能。2. 根据TBCLK频率重新计算死区计数值。用示波器测量两个互补信号边沿之间的间隔。3. 在经典模式下确认DBCTL.IN_MODE00且AQ模块的EPWMxA_In有波形输出。4. 如果使用AQ生成互补波确保AQCTLB配置正确例如一个通道在CMPA up时SET另一个在CMPA down时SET。也可以尝试先将DB旁路OUT_MODE00验证AQ输出的原始互补波是否正确。改变CMPA/TBPRD时波形出现毛刺1. 在错误的时间点如计数器正在变化时写入了活跃寄存器。2. 影子寄存器机制未启用或配置不当。这是最重要的稳定性实践务必确保1. 对于周期TBPRD设置TBCTL.PRDLD0影子模式。2. 对于比较值CMPA/CMPB设置CMPCTL.SHDWxMODE0影子模式并合理配置LOADxMODE通常为CTR0。3. 在更新PWM参数时只写入影子寄存器CMPA/CMPBTBPRD硬件会在下一个同步点如CTR0自动加载确保波形连续无毛刺。多路PWM不同步1. 同步链未正确配置。2. 相位寄存器TBPHS和使能位PHSEN未配置。1. 检查主模块的SYNCOSEL如设为CTR0从模块的SYNCI输入是否连接正确。2. 在从模块上设置PHSEN1以允许同步加载相位并设置TBPHS为期望的相位偏移值。使用示波器多通道测量各PWM的起始边沿是否对齐或有固定偏移。调试心得善用仿真器与观察窗口在CCS等IDE中你可以实时观察和修改这些寄存器的值。单步运行代码观察配置每一步后相关寄存器位域和输出引脚的变化是理解eHRPWM工作原理最快的方式。先简化后复杂调试时先关闭死区DBCTL.OUT_MODE00甚至先只用一个通道EPWMxA配置最简单的向上计数模式和非对称PWM确保时基、比较、动作限定这些基础功能正常。然后再逐步启用死区、互补输出、对称模式、同步等功能。示波器是你的好朋友任何理论计算和软件配置最终都要以示波器上的波形为准。务必用示波器测量实际的频率、占空比、死区时间、互补信号对齐情况。关注影子寄存器在需要实时更新PWM参数如电机控制中的电流环输出的应用中影子寄存器的正确使用是保证系统稳定、无毛刺的关键。务必理解“写入影子寄存器”和“活跃寄存器生效”之间的时间差并利用好CTR0或CTRPRD这样的同步点。