1. 深入解析C2000 ePWM模块从基础原理到高级应用如果你正在用TI的C2000系列DSP做电机控制、数字电源或者任何需要精确功率开关的嵌入式项目那你肯定绕不开它的增强型PWM模块也就是ePWM。这玩意儿远不止一个简单的定时器加比较器那么简单它更像一个为工业级实时控制量身定制的“瑞士军刀”。我这些年用C2000做过不少项目从伺服驱动器到光伏逆变器ePWM模块的深度和灵活性每次都让我印象深刻。它把PWM生成、死区管理、故障保护、数字比较甚至高分辨率控制都集成在硬件里用好了能极大减轻CPU负担提升系统响应速度和可靠性。今天我就结合自己的踩坑经验把ePWM从最基础的计数器工作原理到像动作限定器、死区、数字比较这些高级子模块的实战配置给你彻底讲透。无论你是刚接触C2000的新手还是想优化现有设计的老鸟相信这篇长文都能给你带来实实在在的参考价值。2. ePWM核心架构与工作模式解析2.1 ePWM模块的整体视图不止于PWM生成很多人初次接触ePWM可能只把它当作一个产生PWM波的定时器。但实际上C2000的ePWM是一个高度模块化、可配置的子系统。一个完整的ePWM模块例如EPWM1包含多个紧密协作的子模块它们共同构成了一个强大的脉冲控制引擎。从顶层看ePWM模块的核心是时基子模块它由一个16位的向上/向下计数器TBCTR和周期寄存器TBPRD构成这是所有PWM时序的基准。但它的强大之处在于后续的流水线比较子模块负责将用户设定的比较值CMPA, CMPB与计数器值进行实时比对动作限定器子模块则根据这些比对事件比如计数器等于CMPA、等于0、等于周期值等精确地决定输出引脚EPWMxA和EPWMxB应该执行什么动作置高、拉低、翻转或无操作。这仅仅是基础部分为了应对真实的功率电路它还集成了死区生成子模块用于防止桥臂直通数字比较子模块允许外部模拟比较器或数字信号直接介入PWM控制环路故障保护子模块能在纳秒级内响应过流、过压等故障将输出强制置为安全状态以及事件触发子模块用于在特定时刻产生中断或触发ADC采样。这种架构设计的思想很明确将常见的、对实时性要求极高的控制逻辑硬件化。比如判断过流并关闭PWM这种操作如果靠软件中断来处理从检测到响应可能有几十个时钟周期的延迟这在高压大电流场合足以炸管。而ePWM的故障保护通道是纯硬件路径响应速度在几个纳秒内可靠性天壤之别。理解这个整体架构是灵活运用ePWM所有高级功能的前提。2.2 时基子模块PWM节奏的心脏时基子模块是ePWM的节拍器它决定了PWM波的频率和相位。其核心是一个16位的计数器TBCTR和一个16位的周期寄存器TBPRD。计数器的工作模式主要有三种递增计数模式、递减计数模式和递增-递减计数模式。在递增计数模式下计数器从0开始每个TBCLK时钟周期加1直到等于TBPRD值然后在下一个时钟周期复位回0如此循环。这种模式产生的PWM波形是非对称的。而在递增-递减计数模式下计数器从0开始递增到TBPRD然后递减回0再开始新一轮循环。这种模式产生的是对称的PWM波形其基波频率是计数器频率的一半但谐波特性更好常用于电机控制和音频应用。这里有一个非常关键且容易混淆的概念影子寄存器。无论是周期寄存器TBPRD还是比较寄存器CMPA/CMPB你在代码中直接写入的往往是它们的影子寄存器。影子寄存器就像一个缓冲区其内容会在特定的“加载时刻”才被同步到对应的活动寄存器中。这个加载时刻由寄存器如CMPCTL中的LOADAMODE配置通常可以选择在计数器为0时、计数器等于周期值时、或立即加载。使用影子寄存器的最大好处是避免了PWM波形在周期中间发生畸变。想象一下如果你在计数器正在运行时直接修改了活动比较寄存器而此刻计数器值刚好跨过了新旧比较值就会产生一个宽度异常的脉冲这在电机驱动中可能导致转矩脉动甚至损坏。通过影子寄存器在周期边界统一更新能确保整个PWM周期的完整性。时基子模块还支持同步链EPWMxSYNCI和EPWMxSYNCO允许多个ePWM模块的计数器同步启动这对于需要多路严格同步PWM的应用如三相逆变器至关重要。你可以将第一个ePWM模块配置为主模块将其同步输出连接到后续从模块的同步输入这样所有模块的计数器就能对齐相位消除因软件启动顺序带来的微小相位差。2.3 动作限定器子模块波形塑形的雕刻刀动作限定器是ePWM模块中最具艺术性的部分它负责将“时间事件”转化为具体的“引脚动作”。简单来说它定义了一条规则当计数器处于某种特定状态时比如等于CMPA、等于0、等于周期值TBPRD输出引脚EPWMxA或EPWMxB应该做什么。每个输出引脚A和B都有一个独立的动作限定器控制寄存器AQCTLA和AQCTLB。以AQCTLA为例它的位域定义了六种事件对应的动作CTR ZERO计数器等于0。CTR PRD计数器等于周期值。CTR CMPA on UP在递增计数期间计数器等于CMPA值。CTR CMPA on DOWN在递减计数期间计数器等于CMPA值。CTR CMPB on UP在递增计数期间计数器等于CMPB值。CTR CMPB on DOWN在递减计数期间计数器等于CMPB值。对于每个事件你可以配置四种动作之一无操作、置高、拉低或翻转。通过巧妙地组合这些事件和动作你可以生成几乎任何你能想到的PWM波形而不仅仅是简单的边沿对齐或中心对齐PWM。举个例子要生成一个经典的递增-递减计数模式下的中心对齐PWMEPWMA输出通常的配置是AQCTLA寄存器中设置CTR CMPA on UP事件动作为“置高”CTR CMPA on DOWN事件动作为“拉低”。这样在计数器从0递增到CMPA的过程中输出为低当计数器等于CMPA时上升沿输出翻转为高并保持当计数器从TBPRD递减回CMPA时再次等于CMPA下降沿输出拉低。这就产生了一个以周期中心对称的PWM脉冲。更高级的用法是独立调制EPWMA和EPWMB。你可以让两个输出基于相同或不同的比较值CMPA和CMPB在不同的计数方向UP/DOWN上触发不同的动作从而生成互补、带死区、或者相位可调的PWM对这是驱动H桥或三相逆变器的基础。动作限定器的灵活性使得用硬件生成复杂PWM序列如空间矢量调制SVPWM的七段式或五段式波形成为可能极大地解放了CPU。3. 关键子模块深度剖析与实战配置3.1 死区控制子模块功率电路的“安全卫士”只要涉及到半桥或全桥拓扑死区就是一个无法回避的话题。其根源在于功率器件如MOSFET或IGBT的开关特性关断时间通常比开通时间长。如果互补驱动的上下管PWM信号没有间隔就会在切换瞬间出现短暂的“共通”现象导致电源被直接短路产生巨大的直通电流瞬间损坏器件。死区就是在互补的PWM信号比如EPWMA和EPWMB的边沿之间插入一段两者都为无效状态通常为低电平的时间。ePWM的死区子模块以纯硬件方式实现此功能精度高且不占用CPU。它内部包含两个独立的可配置延迟单元上升沿延迟和下降沿延迟分别由DBRED和DBFED两个10位寄存器控制延迟时间 寄存器值 × TBCLK周期。死区的配置主要通过DBCTL寄存器完成核心是IN_MODE和OUT_MODE这两个字段IN_MODE选择延迟单元的输入信号源。例如00模式表示EPWMA信号同时作为上升沿和下降沿延迟的输入01模式则用EPWMA作为下降沿延迟的输入EPWMB作为上升沿延迟的输入。这为你适应不同的桥臂驱动逻辑提供了灵活性。OUT_MODE决定最终输出。00是旁路模式不插入死区11是完整使能模式对两个输出都应用延迟01和10则分别只对EPWMB或EPWMA应用延迟。一个典型的H桥驱动配置如下假设EPWMA驱动上管EPWMB驱动下管且高电平有效。我们希望在任何切换时刻先关闭一个管子延迟一段时间后再开启另一个管子。我们可以配置IN_MODE为00以EPWMA为源OUT_MODE为11。这样原始的EPWMA信号会经过一个上升沿延迟DBRED后产生最终的EPWMA_OUT同时经过一个下降沿延迟DBFED和反相后产生最终的EPWMB_OUT。这就确保了在EPWMA_OUT从高变低关闭上管后会等待DBFED时间EPWMB_OUT才从低变高开启下管反之亦然。实操心得死区时间并非越大越好。过大的死区会降低输出电压基波幅值引入低次谐波导致电机转矩脉动和噪音。死区时间需要根据你所用的具体功率器件的 datasheet 中的开关时间参数如t_d(off)-t_d(on)来设定并留有一定裕量。通常从几百纳秒到几微秒不等。在实际调试中可以用示波器同时测量驱动芯片的输入和功率管GS极的波形来验证死区是否被正确插入以及宽度是否合适。3.2 数字比较与故障保护子模块系统的“神经”与“免疫系统”数字比较子模块是ePWM与外部模拟世界进行快速交互的桥梁。它允许外部信号如片内比较器COMPx的输出或专用的故障引脚TZx直接、快速地影响PWM输出而无需CPU干预。这些外部信号被映射为四个数字比较信号DCAH、DCAL、DCBH、DCBLH代表高有效事件L代表低有效事件。DCTRIPSEL寄存器用于配置这四个信号的来源。例如你可以将过流比较器COMP1的输出连接到DCAH将过压比较器COMP2的输出连接到DCAL。当这些事件发生时它们可以被路由到两个地方事件触发子模块或故障保护子模块。路由到事件触发通过DCACTL/DCBCTL寄存器你可以配置当DCAEVT1等事件发生时是否产生ADC启动转换信号SOC或ePWM模块同步信号SYNC。这对于实现与外部事件严格同步的采样至关重要比如在电流峰值点进行ADC采样。路由到故障保护这是更关键的应用。通过TZDCSEL寄存器你可以将数字比较事件配置为故障保护源。一旦故障条件成立TZCTL寄存器决定了PWM输出引脚立即采取的动作高阻态、强制为高或强制为低。这对于实现“打嗝”式过流保护、或硬件闭锁至关重要。故障保护子模块本身也直接监控TZ1至TZ6这六个专用故障输入引脚。这些引脚通常连接到硬件过流、过温、驱动故障等信号。故障处理有两种模式周期循环模式当故障信号有效时PWM输出立即被置为安全状态如高阻。但每个PWM周期开始时硬件会自动清除该故障状态输出恢复正常。如果故障依然存在则再次触发。这种模式适用于电流限流它允许PWM在每个周期尝试重启一旦电流低于阈值即恢复正常工作。单次触发模式故障信号有效时PWM输出被置为安全状态并锁存。该状态不会自动清除必须由软件写入TZCLR寄存器来手动清除。这种模式用于处理严重的、需要系统彻底关断并检查的故障如直通短路。TZSEL寄存器用于为每个故障源选择模式TZEINT用于使能相应的故障中断。在中断服务程序中软件可以判断故障类型并决定是尝试恢复对于周期循环模式还是执行关机流程对于单次触发模式。避坑指南务必正确配置TZCTL中每个故障源对应的动作。对于大多数桥式电路故障时通常将两个输出都设置为“高阻”或“强制为低”取决于你的驱动逻辑确保上下管都关闭。错误地配置为“强制为高”可能在故障时导致一管常通引发二次故障。另外故障引脚TZx通常有滤波选项用于消除噪声毛刺引起的误触发但滤波时间常数设置要合理不能影响对真实故障的响应速度。3.3 高分辨率PWM突破数字精度的极限当PWM频率较高时传统的基于计数器比较的PWM分辨率会急剧下降。分辨率位数 ≈ log2(TBPRD)。例如系统时钟60MHz要产生100kHz的对称PWMTBPRD (60MHz / 100kHz) / 2 300分辨率只有约8.2位。这意味着你调节占空比的最小步长是1/300对于精密控制可能不够。HRPWM模块就是为了突破这个限制。它的核心思想不是提高系统时钟而是在一个系统时钟周期内通过一个称为微边沿定位器的模拟电路对PWM边沿进行亚纳秒级的微调。它通过扩展CMPA/CMPB和TBPRD寄存器增加了8位的微步寄存器如CMPAHR。这8位与原有的16位一起形成了一个24位的控制字用于在时间上精确定位边沿。HRPWM的精度微步步长不是固定的它取决于芯片的工艺、电压和温度。因此TI提供了校准机制。通常需要运行一个校准例程测量在当前工作条件下一个系统时钟周期内包含多少个微步MEP。然后将这个比例因子用于计算。例如如果测得MEP步长约为150ps系统时钟周期为16.67ns60MHz那么一个时钟周期内大约有111个微步。此时你的有效控制精度就从原来的16.67ns提升到了150ps。使用HRPWM的关键步骤确认引脚支持并非所有ePWM输出引脚都支持HRPWM需查阅具体型号的数据手册。使能HRPWM通过HRPCTL寄存器使能对应通道的HRPWM功能。配置扩展寄存器使用CMPAHR等寄存器来设置微步调整值。占空比的计算公式变为CMPA:CMPAHR (1 - Duty) * (TBPRD:TBPRDHR) * MEP Scale Factor。TI的库函数通常提供了封装好的函数来处理这些计算。注意同步对CMPAHR的写入也需要考虑影子寄存器加载时机避免边沿抖动。HRPWM非常适用于需要极高精度调制的场合比如高频LLC谐振变换器的频率调节、高性能数字电源的纹波抑制或者需要极低谐波失真的正弦波生成。4. ePWM实战从配置到调试的全流程4.1 一个完整的ePWM初始化流程理论说了这么多我们来看一个实际的初始化例子。假设我们要用EPWM1A产生一个50kHz、占空比30%的对称PWM波形并插入200ns的死区时间系统时钟SYSCLKOUT 60MHz。第一步计算关键参数时基时钟TBCLK我们选择不分频HSPCLKDIV和CLKDIV都设为0所以TBCLK SYSCLKOUT 60MHz周期 16.67ns。周期值TBPRD对称PWMTBPRD (TBCLK / PWM_Freq) / 2 (60MHz / 50kHz) / 2 600。比较值CMPA占空比30%CMPA (1 - Duty) * TBPRD (1 - 0.3) * 600 420。注意对于对称PWM在递增和递减阶段都与CMPA比较所以这个值决定了脉冲中心对称的宽度。死区寄存器值死区时间200nsDBRED DBFED 200ns / 16.67ns ≈ 12取整。需要写入10位的DBRED和DBFED寄存器。第二步编写初始化代码以下是基于TI的DSP2833x系列的标准外设库的示例代码void InitEPwm1(void) { // 1. 配置时基子模块 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 递增-递减计数模式 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 禁止相位加载 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // 周期寄存器使用影子模式 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_SYNC_DISABLE; // 禁止同步输出 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV1; // 高速时钟预分频 1 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // 时钟预分频 1 EPwm1Regs.TBPRD 600; // 设置周期值 EPwm1Regs.TBPHS.half.TBPHS 0; // 相位寄存器清零 // 2. 配置比较子模块 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.half.CMPA 420; // 设置比较值A // 3. 配置动作限定器 // 对称PWMEPWM1A输出递增时等于CMPA置高递减时等于CMPA拉低 EPwm1Regs.AQCTLA.bit.ZRO AQ_NO_ACTION; // CTR0时不动作 EPwm1Regs.AQCTLA.bit.PRD AQ_NO_ACTION; // CTRPRD时不动作 EPwm1Regs.AQCTLA.bit.CAU AQ_SET; // CTRCMPA on UP - 置高 EPwm1Regs.AQCTLA.bit.CAD AQ_CLEAR; // CTRCMPA on DOWN - 拉低 // 4. 配置死区子模块 EPwm1Regs.DBCTL.bit.IN_MODE DBA_ALL; // EPWM1A作为两个延迟的源 EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HI; // 输出高电平有效 EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; // 使能上升沿和下降沿延迟 EPwm1Regs.DBRED 12; // 上升沿延迟值 EPwm1Regs.DBFED 12; // 下降沿延迟值 // 注意此例中我们只用了EPWM1A死区输出EPWM1B未使用但模块已配置。 // 5. 禁用其他高级功能初始化为安全状态 EPwm1Regs.PCCTL.bit.CHPEN 0; // 禁用PWM斩波器 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_HI; // 故障时强制EPWM1A为高根据实际安全需求调整 EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_HI; EPwm1Regs.TZEINT.bit.OST 0; // 禁用单次触发中断 EPwm1Regs.TZEINT.bit.CBC 0; // 禁用周期循环中断 EPwm1Regs.ETSEL.bit.INTEN 0; // 禁用ePWM周期中断 // 6. 启动计数器 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 再次确认模式某些版本库需要 // 或者使用 EPwm1Regs.TBCTL.bit.SWFSYNC 1; 进行一次软件同步启动 }第三步调试与验证代码写完后最关键的步骤是调试。软件仿真在CCS中利用寄存器观察窗口和图形化工具如CSS的ePWM视图检查TBCTR是否在0~600之间循环CMPA值是否正确以及AQCTLA寄存器的配置。硬件测量用示波器探头连接到GPIO0EPWM1A引脚。频率验证测量波形周期应为 1/50kHz 20us。占空比验证高电平时间应为 20us * 30% 6us。由于是中心对称高电平脉冲应位于每个周期的正中央。死区验证如果你将EPWM1B也配置为互补输出并接入示波器应能看到两个信号在边沿切换处有一段同时为低电平的区域其宽度约为200ns。4.2 结合ADC的事件触发实现同步采样在电机控制或数字电源中我们经常需要在PWM波形的特定时刻如中心点或谷底对电流、电压进行采样以消除开关噪声的影响。ePWM的事件触发子模块可以完美实现这一点。假设我们想在上述PWM周期的中心点即计数器达到峰值TBPRD时触发ADC采样。void InitEPwm1ForADCSOC(void) { // ... 前面的时基、比较、动作限定器配置与之前相同 ... // 配置事件触发子模块在CTRPRD时产生ADC启动信号SOCA EPwm1Regs.ETSEL.bit.SOCAEN 1; // 使能SOCA EPwm1Regs.ETSEL.bit.SOCASEL ET_CTR_PRD; // 选择CTRPRD作为触发源 EPwm1Regs.ETPS.bit.SOCAPRD ET_1ST; // 第一个事件就触发SOC // 关联ADC模块以ADCINA0为例需另外配置ADC // 假设ADC已配置为由EPWM1 SOCA触发 // AdcRegs.ADCSOC0CTL.bit.CHSEL 0; // 选择ADCINA0通道 // AdcRegs.ADCSOC0CTL.bit.TRIGSEL 5; // 触发源选择EPWM1 SOCA (具体值查手册) }这样每个PWM周期当计数器计数到峰值时ePWM模块会自动产生一个脉冲信号给ADCADC随即开始对指定通道的转换。这种硬件同步的采样方式其抖动远小于软件触发的采样对于需要高精度采样的闭环控制至关重要。5. 常见问题排查与高级应用技巧5.1 典型问题排查速查表在实际项目中ePWM配置出错是常有的事。下面这个表格整理了我遇到过的典型问题及排查思路问题现象可能原因排查步骤无PWM输出1. 模块时钟未使能。2. 输出引脚未复用为PWM功能。3. 时基计数器未启动CTRMODE0。4. 动作限定器所有事件都配置为“无操作”。5. 故障保护子模块将输出强制为高阻/固定电平。1. 检查PCLKCR0/1/2寄存器中对应EPWM模块的时钟使能位。2. 检查GPIOxMUX和GPIOxGMUX寄存器确认引脚功能选择正确。3. 检查TBCTL.CTRMODE确保不为00停止模式。4. 逐项检查AQCTLA/B寄存器确保至少有一个事件配置了SET或CLEAR动作。5. 检查TZCTL寄存器确认故障动作不是意外使能检查TZFLG看是否有故障标志被置位。PWM频率不对1. 时基时钟预分频HSPCLKDIV/CLKDIV计算错误。2. 周期寄存器TBPRD值计算错误。3. 计数模式理解有误对称/非对称。1. 复核TBCTL中分频系数的设置。公式TBCLK SYSCLKOUT / (HSPCLKDIV * CLKDIV)。2. 复核TBPRD计算公式。对称模式TBPRD TBCLK / (2 * Freq)非对称模式TBPRD TBCLK / Freq - 1。3. 用示波器测量确认波形是对称还是非对称与TBCTL.CTRMODE配置一致。占空比不准或不可调1. 比较值CMPA/B计算错误或超出范围TBPRD。2. 影子寄存器未正确加载写入的值未生效。3. 动作限定器事件配置错误例如用错了UP/DOWN事件。4. 死区时间影响有效占空比。1. 确保CMPA值在0到TBPRD之间。占空比公式对称PWM Duty 1 - CMPA/TBPRD非对称PWM Duty 1 - (CMPA1)/(TBPRD1)。2. 检查CMPCTL.LOADxMODE确保在预期的时刻如CTR0加载。调试时可直接写立即加载模式验证。3. 对照波形图检查AQCTLA/B中CAU/CAD/CBU/CBD的配置是否与计数模式匹配。4. 死区会略微减少有效高电平时间。计算理论占空比时应考虑。互补输出异常直通或无输出1. 死区模块未正确配置或参数错误。2. 两个输出的动作限定器逻辑配置冲突。3. 故障保护被意外触发。1. 用双通道示波器测量EPWMxA和EPWMxB。检查DBCTL.IN_MODE/OUT_MODE确认延迟被正确应用到哪个信号上。测量死区时间是否与DBRED/DBFED计算值相符。2. 确保EPWMxA和B的动作逻辑是互补且带死区的。一个典型的互补带死区配置是A路在CAU置高在PRD或通过死区模块衍生信号拉低B路逻辑相反。3. 同“无输出”排查第5步。HRPWM边沿抖动或不起作用1. HRPWM引脚不支持。2.HRPCTL寄存器未使能。3. 微步校准未进行或校准值错误。4.CMPAHR写入时机不对导致边沿抖动。1. 查阅芯片数据手册确认当前使用的输出引脚支持HRPWM。2. 检查HRPCTL寄存器中对应通道的使能位如HRPE。3. 运行TI提供的HRPWM校准例程获取正确的MEP_ScaleFactor并应用于计算。4. 确保对CMPAHR的写入发生在影子寄存器加载事件之前最好在CTR0时加载。5.2 高级应用技巧与心得利用多个事件触发不同中断一个ePWM模块可以产生多种中断如CTRPRD、CTR0、CTRCMPA等。你可以利用ETSEL和ETPS寄存器精细配置。例如在峰值电流控制中你可以在CTR0中断中更新占空比指令在CTRCMPA中断中读取电流采样值。ETPS的“事件预分频”功能INTPRD可以让你每N个事件才产生一次中断用于降低CPU负载。软件强制输出AQSFRC和AQCSFRC寄存器允许你在软件中强制输出高、低或翻转。这在某些测试、初始化或容错控制中非常有用。例如系统启动时你可以先用AQCSFRC强制所有PWM输出为低安全状态待所有参数初始化完成后再解除强制切换到硬件自动控制。相位同步实现多模块交错在多相并联电源中为了减小输入输出电流纹波各相PWM需要交错一定相位。你可以利用ePWM的相位寄存器TBPHS和同步链实现。将主模块的EPWMSYNCO连接到从模块的EPWMSYNCI并设置从模块的TBCTL.PHSEN1。当主模块发出同步脉冲时从模块的计数器会加载TBPHS的值从而实现固定的相位差。例如两相交错180度则从模块的TBPHS设为主模块TBPRD的一半。结合eCAP模块进行反馈eCAP模块可以高精度地捕获外部脉冲的边沿时间。在无传感器电机控制中常利用eCAP捕获反电动势的过零点。你可以将eCAP的捕获事件连接到ePWM的同步输入用捕获到的事件来同步或调整PWM的相位实现锁相环功能。调试利器影子寄存器与实时修改在调试初期可以先将CMPCTL和TBCTL中的影子加载模式设为“立即加载”这样你可以在调试器中直接修改CMPA或TBPRD的值并立即在示波器上看到波形变化快速验证算法逻辑。待逻辑正确后再改为“周期边界加载”以获得平滑的波形切换。ePWM模块的深度和复杂度正是其强大功能的体现。初学时可能会觉得寄存器繁多但一旦理解了其模块化设计思想掌握了每个子模块的“开关”和“旋钮”你就能像指挥交响乐一样让C2000的PWM系统精准地演奏出电力电子应用所需的任何波形。记住多看数据手册多动手实测波形是最好的老师。