深入解析ePWM时间基准与比较模块:从PWM原理到电机控制实战
1. 项目概述从基础PWM到ePWM的进阶理解在嵌入式系统尤其是电机控制、数字电源和逆变器领域PWM脉冲宽度调制是驱动一切的“心跳”。我们通常理解的PWM是通过调节一个周期信号中高电平的占比占空比来控制平均电压或功率。然而当你的应用从简单的LED调光升级到需要精确控制三相电机、实现多相交错并联的开关电源或者构建一个复杂的多电平逆变器时你会发现一个简单的定时器加比较器已经捉襟见肘。这时你就需要接触像TI C2000系列微控制器中的增强型PWM模块也就是ePWM。ePWM远不止是一个能产生方波的模块。它是一个高度集成化、可编程的子系统其核心使命是提供极高精度、极高灵活性和极强同步能力的脉冲控制。为什么需要这么复杂想象一下控制一个无刷直流电机你需要六路严格互补、带有死区时间的PWM信号来驱动三相桥臂并且这六路信号的频率和相位关系必须绝对精确任何微小的时序错乱都可能导致桥臂直通烧毁功率管。再比如在一个多相交错并联的DC-DC变换器中你需要多个PWM通道以相同的频率工作但彼此的相位要均匀错开以最大化纹波抵消效果这对各通道间的同步精度提出了纳米级的要求。这些高级应用场景正是ePWM模块设计的出发点。它把PWM生成拆解成多个逻辑清晰、各司其职的子模块时间基准TB负责“心跳节拍”计数器比较CC负责“定时闹钟”动作限定AQ负责“执行动作”死区DB负责“安全间隔”事件触发ET负责“发出通知”错误联防TZ负责“紧急刹车”。今天我们就深入其最核心的“节拍发生器”——时间基准子模块以及它与“闹钟”比较器的协同工作机制。理解透这部分你就掌握了ePWM精密时序控制的命脉。2. 时间基准TB子模块PWM的节拍器与指挥家如果把整个ePWM模块比作一个交响乐团那么时间基准子模块就是乐团的指挥和节拍器。它定义了整个PWM波形最基础的属性周期和频率并决定了计数器运行的“步法”。所有其他子模块的动作都严格遵循这个时间基准发出的节拍。2.1 核心寄存器TBPRD与PWM频率的数学关系PWM的频率和周期计算是ePWM配置的第一步也是最容易出错的一步。其核心寄存器是时间基准周期寄存器TBPRD。但TBPRD的值并不直接等于PWM周期所包含的时钟周期数这个关系取决于计数器的工作模式。1. 上计数模式Asymmetrical Up-Count在这种模式下计数器从0开始递增直到等于TBPRD的值然后立即复位到0重新开始。一个完整的PWM周期计数器经历了从0到TBPRD再归零的过程。因此一个周期包含的TBCLK时间基准时钟周期数为TBPRD 1。周期公式Tpwm (TBPRD 1) * Ttbclk频率公式Fpwm 1 / Tpwm Ftbclk / (TBPRD 1)波形特点生成非对称PWM波形。通常用于需要简单PWM生成的场合。2. 下计数模式Asymmetrical Down-Count与上计数模式镜像计数器从TBPRD的值开始递减到0后重置为TBPRD。一个周期同样包含了从TBPRD到0再回到TBPRD的过程计数值也是TBPRD 1个。周期/频率公式与上计数模式完全相同。Tpwm (TBPRD 1) * Ttbclk波形特点同样生成非对称波形。在某些特定的硬件触发逻辑设计下下计数模式可能更符合思维习惯。3. 上下计数模式Symmetrical Up-Down-Count这是电机控制和数字电源中最常用的模式。计数器从0递增到TBPRD然后立即从TBPRD递减回0如此循环。注意在一个完整的三角波周期内计数器经历了从0到TBPRD再到0的过程。周期公式Tpwm 2 * TBPRD * Ttbclk因为经历了TBPRD * 2个计数步长频率公式Fpwm 1 / Tpwm Ftbclk / (2 * TBPRD)波形特点生成对称中心对齐的PWM波形。其最大优势在于每个PWM周期内比较事件如CMPA会在上升沿和下降沿各发生一次这天然地使PWM波形的正负半波对称非常有利于减少谐波在电机驱动中能显著降低转矩脉动和噪音。实操心得频率计算避坑指南我见过太多新手在这里栽跟头。最常见的错误是混淆了模式用上下计数模式的公式去配置上计数模式导致实际频率只有预期的一半。我的建议是在代码中为这三种模式分别封装一个频率设置函数并在函数开头用注释明确写出公式。例如// 设置ePWM1为上计数模式目标频率为100kHz系统时钟为100MHz void ConfigEPWM1_UpCount(uint32_t sysClkFreq, uint32_t pwmFreq) { // 公式: Fpwm Ftbclk / (TBPRD 1) 假设TBCLK不分频/1 uint32_t tbprdValue (sysClkFreq / pwmFreq) - 1; EPwm1Regs.TBPRD tbprdValue; // 注意检查计算结果是否超出16位寄存器范围 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UP; // 设置为上计数模式 }另一个坑是TBCLK的分频。Ttbclk不是直接的系统时钟周期而是经过时间基准时钟预分频器TBCTL[HSPCLKDIV, CLKDIV]后的时钟周期。在计算前务必确认分频系数。例如系统时钟100MHz分频设为/2则Ftbclk 50MHz。2.2 影子寄存器机制如何实现“无毛刺”的动态更新在电机控制等实时系统中我们经常需要在运行中动态调整PWM频率用于调速或比较值用于调压。如果软件直接写入正在控制硬件的“活动寄存器”Active Register而这个写入动作恰好发生在计数器正在与该寄存器值进行比较的瞬间就可能产生一个极窄的、非预期的脉冲即“毛刺”。这个毛刺可能导致功率开关管误开通后果可能是灾难性的。ePWM的影子寄存器Shadow Register机制就是为了解决这个问题而生的。你可以把它理解为一个“双缓冲器”。活动寄存器直接连接硬件比较器控制着当前PWM周期的实际行为。软件不能直接写入它在影子模式下。影子寄存器一个缓冲区域软件可以随时、安全地向其写入新的目标值。关键点在于装载Load时机。影子寄存器中的值只会在一个特定的、安全的时刻自动复制到活动寄存器。对于TBPRD寄存器这个时刻通常被配置为“当时间基准计数器TBCTR等于0时”即一个PWM周期开始的时刻。配置示例以TBPRD为例通过TBCTL寄存器的PRDLD位来选择模式。TBCTL[PRDLD] 0 影子模式默认软件读写TBPRD的地址实际访问的是影子寄存器。当TBCTR 0x0000时硬件自动将影子寄存器的值装载到活动寄存器。这是最安全、最常用的模式。TBCTL[PRDLD] 1 立即装载模式软件读写TBPRD的地址直接操作活动寄存器。写入立即生效。仅用于对实时性要求极高且能确保写入时机绝对安全的场景通常不推荐。注意事项影子寄存器的“陷阱”同步问题仅仅配置为影子模式还不够。你需要确保在修改影子寄存器后等到下一次装载事件发生新值才会生效。在要求严格同步的应用中你可能需要查询状态位或等待中断来确认装载完成。全局载Global Load在控制多个ePWM模块如三相逆变器的三个桥臂时你可能希望所有模块的TBPRD在同一时刻更新。ePWM提供了全局装载控制寄存器GLDCTL, GLDCFG可以将多个模块的装载事件绑定到同一个同步事件如某个模块的CTRZERO事件实现原子性的批量更新这对于多相并联电源的均流至关重要。2.3 同步机制让多个ePWM模块“齐步走”单个ePWM模块可以独立工作但真正的威力在于多个模块的协同。同步机制确保了多个ePWM模块的时基计数器TBCTR能够保持精确的相位关系。1. 时钟同步TBCLKSYNC这是最基础的同步确保所有ePWM模块的“心跳”节拍TBCLK从同一时刻开始。它通过一个全局控制位TBCLKSYNC实现。正确配置顺序务必遵守使能各ePWM模块的时钟在PCLKCRx寄存器中。没时钟模块不工作。停止所有时基时钟设置TBCLKSYNC 0。这就像让所有指挥的节拍器停摆。配置各个ePWM模块设置各自的TBPRD、计数模式、相位等参数。此时因为时钟停了配置是安全的。同时启动所有时基时钟设置TBCLKSYNC 1。所有模块的TBCTR将在下一个TBCLK上升沿同时从各自配置的起点开始计数。关键前提所有ePWM模块的TBCLK预分频系数必须设置一致否则即使同时启动计数速度也不同很快又会失步。2. 计数器同步与相位控制时钟同步让它们同时开始但计数器同步允许一个模块在运行中去“对齐”另一个模块并可以设置一个固定的相位差。这是实现多相移相的关键。同步信号流每个ePWM模块都有一个同步输入EPWMxSYNCI和一个同步输出EPWMxSYNCO。你可以将模块1的SYNCO连接到模块2的SYNCI形成一个同步链。相位寄存器TBPHS这是实现相位差的核心。当一个模块在其SYNCI引脚上检测到同步脉冲上升沿时它会立刻在下一个TBCLK边沿将自己的TBCTR计数器装载为TBPHS寄存器中的值。工作流程假设模块1为主模块模块2为从模块。将模块1的CTRZERO事件作为其SYNCO的来源。模块2配置为启用相位装载TBCTL[PHSEN]1并设置TBPHS 100。当模块1的计数器归零时它会产生一个同步脉冲给模块2。模块2收到后立即将自身计数器设为100。这样模块2的波形就相对于模块1有了一个固定的相位偏移由TBPHS值决定。3. 同步源的选择ePWM的同步输入源非常灵活不仅限于其他ePWM模块的输出还可以来自外部GPIO引脚通过INPUTXBAR映射增强型捕捉模块eCAP的输出软件强制同步TBCTL[SWFSYNC]位数字比较事件DCAEVT1, DCBEVT1 这种灵活性允许你将PWM系统与外部事件、保护信号或其他外设紧密耦合。实操心得同步配置的常见问题失步问题如果发现同步后相位关系偶尔会错乱检查SYNCI信号是否干净。同步是边沿触发如果信号上有毛刺会导致意外的重装载。必要时可以使用滤波功能。PHSDIR位在上下计数模式下TBCTL[PHSDIR]位决定了同步事件发生后计数器继续计数的方向。这会影响对称波形的中心点。需要根据你的波形需求仔细配置。图20-11和图20-12清晰地展示了PHSDIR0向下和PHSDIR1向上的区别。级联同步在同步链中同步信号的传播会有几个时钟周期的延迟。在要求极高同步精度的多模块系统中可以考虑使用“星型”拓扑而非“链式”拓扑即用一个主同步信号同时驱动多个从模块以减少累积误差。3. 计数器比较CC子模块PWM波形的雕刻刀时间基准定义了画布的宽度周期而计数器比较子模块则是在这个画布上精确标定落笔点的工具。它通过将不断变化的TBCTR值与用户设定的比较值CMPA, CMPB, CMPC, CMPD进行实时比较在“恰好相等”的时刻产生一个事件信号。这个事件信号就是后续动作限定子模块改变PWM输出电平的“指令”。3.1 比较寄存器与事件生成ePWM模块通常至少包含CMPA和CMPB两个主要的比较寄存器在一些高级型号上还有CMPC和CMPD。CMPA/CMPB这是生成PWM波形的核心。它们产生的事件CTRCMPA, CTRCMPB会直接送给动作限定子模块用于置高、拉低或翻转EPWMxA和EPWMxB输出从而形成占空比。CMPC/CMPD这两个是“额外”的比较器它们产生的事件不能直接用于控制PWM输出引脚。它们的主要用途是触发ADC开始转换SOC或者产生中断INT用于实现周期性的采样或特定时刻的软件处理。例如在峰值电流控制中你可以在CMPC设定的时刻触发ADC采样电感电流。事件发生的频率与计数模式有关上/下计数模式每个PWM周期内每个比较事件如CTRCMPA只发生一次。上下计数模式每个PWM周期内每个比较事件会发生两次一次在递增过程一次在递减过程前提是比较值在0和TBPRD之间。如果比较值等于0或TBPRD则只发生一次。这是实现对称PWM的关键因为在一个周期内输出会在CMPA点被拉高并在另一个CMPA点对称位置被拉低。3.2 影子寄存器在比较模块中的应用与TBPRD类似CMPA和CMPB也拥有影子寄存器机制其目的同样是防止异步更新导致输出毛刺。其装载时机更加灵活可以通过CMPCTL寄存器的LOADAMODE和LOADBMODE位独立配置CTR PRD在计数器达到周期值时装载上计数模式下的周期终点。CTR ZERO在计数器归零时装载上下计数模式下的周期起点/终点或上计数模式的起点。CTR PRD or ZERO在以上两个事件任一发生时装载。SYNC Event在接收到同步脉冲时装载。如何选择装载点这取决于你的控制算法和更新策略。对于CMPA通常控制占空比在电机控制中为了保持波形对称通常选择在CTRZERO时装载新值。这样新的占空比指令会在下一个完整的PWM周期开始时生效确保当前周期波形完整、无干扰。对于CMPC/CMPD用于触发ADC如果你希望改变ADC的采样时刻可能需要根据情况选择装载点。有时为了快速响应甚至会使用立即装载模式SHDWxMODE1但需格外小心。3.3 全局装载与联动写入在复杂的多模块系统中你可能需要同时更新多个模块的多个寄存器例如同时更新所有三相的CMPA值以实现平衡控制。如果通过软件依次写入由于写入指令执行需要时间各个模块的更新会产生微小的不同步可能引起共模噪声或转矩脉动。ePWM提供了两种高级机制来解决这个问题全局装载Global Load通过GLDCTL和GLDCFG寄存器你可以将多个模块的CMPA/CMPB/TBPRD等寄存器的影子-活动装载事件绑定到同一个全局事件例如主模块的CTRZERO。当这个全局事件发生所有启用此功能的寄存器会原子性地同时更新。寄存器联动EPWMXLINK这是一个更“硬连接”的方式。例如你可以将ePWM2的CMPA寄存器链接到ePWM1的CMPA。之后任何对ePWM1.CMPA的写操作都会自动、同时地写入ePWM2.CMPA的影子和/或活动寄存器取决于配置。这完全由硬件完成实现了真正意义上的零延迟同步更新对于需要极高一致性的多相应用是必不可少的。注意事项波形“跳跃”现象仔细看图20-17到图20-20的波形图图中特别用文字强调了一个重要现象“An EPWMxSYNCI external synchronization event can cause a discontinuity in the TBCTR count sequence. This can lead to a compare event being skipped.” 这是什么意思假设计数器正在从0向上计数当前值是3而CMPA5。这时一个同步脉冲到来导致TBCTR被强制装载为TBPHS10。那么计数器将从10继续向上计数永远不会再等于5。因此本该在TBCTR5时发生的CTRCMPA事件就被“跳过”了。这对你的控制算法意味着什么如果你的PWM输出动作严重依赖于某个比较事件例如在CMPA点触发ADC那么意外的同步事件可能导致该次采样丢失。在设计同步逻辑时必须考虑这种事件跳变的影响必要时需要在软件中做容错处理。4. 动作限定AQ子模块事件的执行者动作限定子模块是连接“事件”和“动作”的桥梁。它接收来自时间基准CTRPRD, CTRZERO和计数器比较CTRCMPA/B的事件并根据配置决定在事件发生时对EPWMxA和EPWMxB输出引脚执行什么操作置高Set、拉低Clear、翻转Toggle或不动作Do Nothing。4.1 动作配置与波形构建AQ子模块的强大之处在于其精细的控制能力。你可以为每个事件如CTRCMPA在计数方向递增或递减上为每个输出引脚EPWMxA和EPWMxB独立配置动作。一个典型的互补对称PWM配置示例用于半桥驱动假设我们使用上下计数模式希望生成一对互补的、带死区的PWM信号A和B。动作配置对于EPWMxA输出在CTRCMPA且计数器递增时拉低Clear。在CTRCMPA且计数器递减时置高Set。在CTRZERO时不动作Do Nothing或用于其他目的如触发中断。在CTRPRD时不动作Do Nothing。对于EPWMxB输出互补在CTRCMPA且计数器递增时置高Set。在CTRCMPA且计数器递减时拉低Clear。在CTRZERO和CTRPRD时不动作。波形生成过程计数器从0开始递增。当TBCTR CMPA时递增沿AQ模块同时执行将EPWMxA拉低将EPWMxB置高。此时A为低B为高。计数器到达TBPRD后开始递减。当TBCTR CMPA时递减沿AQ模块同时执行将EPWMxA置高将EPWMxB拉低。此时A为高B为低。如此循环便生成了一对中心对称、电平相反的PWM波。占空比由CMPA的值决定CMPA越大高电平时间越长。4.2 软件强制动作与外部事件除了基于计数器的自动事件AQ子模块还支持软件强制动作和外部事件触发动作。软件强制AQSFRC通过软件直接置位AQSFRC寄存器的位可以立即强制输出为高、低或翻转。这在调试、故障注入或特定控制序列初始化时非常有用。T1/T2事件这些事件可以来源于数字比较子模块DC的输出或者错误联防TZ子模块的故障信号。例如你可以配置当电流过流信号通过数字比较器产生触发T1事件时立即将PWM输出强制拉低实现硬件级的快速保护其响应速度远快于软件中断。4.3 优先级处理当一个时钟边沿有多个事件同时发生时例如CTRZERO和CTRCMPA如果设为零就会同时发生AQ子模块有固定的优先级来处理冲突确保输出行为确定。通常CTRPRD和CTRZERO这类周期事件具有较高优先级。具体的优先级顺序需要查阅芯片数据手册的AQ子模块章节。理解优先级对于构建复杂的多事件动作序列至关重要。5. 从理论到实践配置一个完整的ePWM通道让我们整合以上所有知识以TI C2000 TMS320F28003x为例配置一个ePWM1通道工作在上下计数模式产生一个100kHz、占空比50%的对称PWM波并启用影子寄存器在周期起点更新。步骤1系统与时钟初始化首先确认系统时钟SYSCLKOUT频率假设为100MHz。我们计划TBCLK不分频即Ftbclk 100MHz。步骤2计算寄存器值目标上下计数模式Fpwm 100kHz。公式Fpwm Ftbclk / (2 * TBPRD)TBPRD Ftbclk / (2 * Fpwm) - 1?等等这里有个常见的误区。对于上下计数模式公式是Tpwm 2 * TBPRD * Ttbclk所以TBPRD (Ftbclk / Fpwm) / 2。计算TBPRD (100MHz / 100kHz) / 2 1000 / 2 500。验证周期Tpwm 2 * 500 * (1/100MHz) 10 us频率1/10us 100kHz。正确。占空比50%对于对称PWM要使占空比50%比较值CMPA应设为TBPRD的一半即CMPA 250。这样高电平时间等于低电平时间。步骤3编写配置代码基于寄存器直接操作// 1. 使能ePWM1时钟 (假设在SysCtrl.c中已配置) SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC 0; // 首先停止所有ePWM时基时钟 // 2. 配置ePWM1时间基准子模块 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 上下计数模式 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 禁用相位装载作为主模块 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // TBPRD使用影子寄存器模式 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_SYNC_DISABLE; // 自己不同步输出 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV1; // 高速时钟分频 /1 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // 时钟分频 /1 EPwm1Regs.TBPRD 500; // 设置周期值写入影子寄存器 // 3. 配置ePWM1计数器比较子模块 EPwm1Regs.CMPCTL.bit.SHDWAMODE CC_SHADOW; // CMPA使用影子模式 EPwm1Regs.CMPCTL.bit.SHDWBMODE CC_SHADOW; // CMPB使用影子模式 EPwm1Regs.CMPCTL.bit.LOADAMODE CC_CTR_ZERO; // 在CTR0时装载CMPA EPwm1Regs.CMPCTL.bit.LOADBMODE CC_CTR_ZERO; // 在CTR0时装载CMPB EPwm1Regs.CMPA.bit.CMPA 250; // 设置占空比为50%写入影子寄存器 // 4. 配置ePWM1动作限定子模块 // 配置EPWM1A输出递增时在CMPA点拉低递减时在CMPA点置高 EPwm1Regs.AQCTLA.bit.CAU AQ_CLEAR; // CTRCMPA 递增时 - CLEAR EPwm1Regs.AQCTLA.bit.CAD AQ_SET; // CTRCMPA 递减时 - SET // 配置EPWM1B输出为互补信号假设需要 EPwm1Regs.AQCTLB.bit.CAU AQ_SET; // CTRCMPA 递增时 - SET EPwm1Regs.AQCTLB.bit.CAD AQ_CLEAR; // CTRCMPA 递减时 - CLEAR // 5. 启动时基时钟 SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC 1; // 启动所有ePWM时基时钟开始计数步骤4动态调整占空比在运行中要改变占空比只需安全地更新CMPA的影子寄存器值。硬件会在下一个CTRZERO时刻自动装载生效。// 将占空比改为75% uint16_t new_duty_ratio 75; // 百分比 uint16_t new_cmpa_value (EPwm1Regs.TBPRD * new_duty_ratio) / 100; EPwm1Regs.CMPA.bit.CMPA new_cmpa_value; // 写入影子寄存器 // 无需其他操作硬件会在下一个周期开始时自动应用新值6. 调试技巧与常见问题排查即使理解了所有原理实际调试中依然会遇到各种问题。以下是一些实战中积累的经验和排查清单。问题1没有PWM输出检查清单GPIO复用确认输出引脚是否已正确配置为ePWM功能而非普通的GPIO。检查GPxMUX和GPxGMUX寄存器。时钟使能确认ePWM模块的时钟是否已使能PCLKCRx寄存器。确认TBCLKSYNC是否已置1。动作配置检查AQCTLA/AQCTLB寄存器是否至少为一个事件如CTRCMPA配置了SET或CLEAR动作。默认复位后所有动作都是“Do Nothing”。比较值确认CMPA的值是否在0到TBPRD之间。如果CMPA0或等于TBPRD在上下计数模式下可能只产生边沿事件输出恒定电平。输出极性检查AQCTL寄存器中是否有配置输出反向POLSEL。有时默认是低有效而你期望看到高有效脉冲。问题2PWM频率不对检查清单计数模式反复核对TBCTL.CTRMODE与频率计算公式。这是最常出错的地方。TBCLK分频仔细检查TBCTL.HSPCLKDIV和CLKDIV位。Ftbclk SYSCLKOUT / (HSPCLKDIV * CLKDIV)。寄存器双写在影子模式下你写入的是影子寄存器。确认你的计算值是否正确写入了对应的影子寄存器如CMPA.CMPA而不是其他字段。同步影响如果模块配置为从模式PHSEN1检查是否收到了意外的同步信号导致TBCTR被意外重载打乱了计数周期。问题3波形抖动或毛刺检查清单影子寄存器更新时机确保在动态更新CMPA/TBPRD时使用的是影子模式并且更新发生在“安全”的软件区域如CTRZERO中断服务程序中避免在计数器正在穿越比较值时更新活动寄存器。同步事件干扰检查SYNCI输入是否有噪声。同步事件会导致计数器跳变可能引起比较事件丢失或重复如图20-17所示。考虑是否真的需要同步或者增加输入滤波。中断延迟如果是在中断中更新比较值高优先级中断的打断可能导致更新时机略微偏移在极高频率下会观察到抖动。可以考虑使用DMA或影子寄存器自动装载机制来减少软件干预。问题4多模块之间不同步检查清单TBCLK分频一致性所有需要同步的ePWM模块其TBCTL中的HSPCLKDIV和CLKDIV必须设置成完全相同的值。同步信号路径使用示波器或逻辑分析仪实际测量SYNCO和SYNCI引脚上的信号确认同步脉冲是否产生、是否连接、脉冲宽度是否足够。相位寄存器TBPHS确认从模块的TBPHS值设置正确。主模块的同步事件如CTRZERO发生时从模块的TBCTR会被装载为TBPHS值。计算好你想要的相位差对应的TBPHS值。全局装载如果你需要同时更新多个模块的参数务必使用全局装载GLD或寄存器联动LINK功能而不是依次进行软件写入。调试ePWM时芯片的寄存器查看窗口和实时波形图如果支持是你的最佳伙伴。始终遵循“配置时钟 - 配置时基 - 配置比较 - 配置动作 - 启动时钟”的基本流程并养成在每次修改关键参数后检查相关寄存器位的习惯。理解每个子模块的独立功能以及它们之间如何通过事件链协同工作是驾驭ePWM这座精密时钟宫殿的不二法门。