1. ePWM模块核心功能概览与设计哲学在电力电子和电机驱动的世界里PWM脉冲宽度调制是当之无愧的“心脏”。它通过控制开关器件如MOSFET、IGBT在一个固定周期内的导通时间即占空比来精确调节输出到负载如电机绕组、电感的平均电压或电流。然而一个基础的PWM发生器只能提供简单的开关信号。在高压、大电流、高可靠性的应用场景中比如伺服驱动器、不间断电源UPS、太阳能逆变器我们需要的远不止于此。我们需要对PWM波形进行精细的“雕琢”并为其穿上坚固的“盔甲”以应对各种复杂的工况和潜在的故障。这就是德州仪器TIC2000系列微控制器中增强型PWMePWM模块大显身手的地方。ePWM远非一个简单的定时器加比较器。它是一个高度模块化、可配置的子系统其设计哲学在于将PWM生成、保护、同步、触发等复杂功能分解为多个协同工作的子模块。这种架构使得工程师能够像搭积木一样构建出从简单到极其复杂的PWM控制策略。今天我们重点深入其中三个关键且相互关联的高级功能PWM斩波PC、故障保护TZ和数字比较DC。理解它们你就能为你的功率系统设计出既高效又鲁棒的“神经系统”。简单来说PWM斩波子模块负责对原始的PWM波进行“二次加工”生成适合特定栅极驱动电路尤其是脉冲变压器隔离驱动的波形序列。故障保护子模块则是系统的“紧急制动系统”和“保险丝”时刻监控外部故障信号并在异常发生时以纳秒级的速度强制PWM输出进入安全状态如拉高、拉低或高阻。而数字比较子模块则是连接外部模拟世界如比较器输出与内部数字保护逻辑的“智能桥梁”它能将模拟比较器的结果直接映射为PWM的触发或保护事件实现硬件级的快速响应无需CPU干预。这三个功能环环相扣。例如数字比较模块检测到过流信号触发故障保护模块的动作而故障保护的动作又直接作用于最终经过斩波处理的PWM输出上。接下来我们将逐一拆解看看它们是如何在寄存器配置和信号流中实现这些强大功能的。2. PWM斩波PC子模块为脉冲变压器驱动量身定制2.1 为何需要PWM斩波——解决脉冲变压器的饱和难题在讨论寄存器配置之前我们必须先理解这个功能要解决的根本问题。在高边驱动或需要电气隔离的场合我们常使用脉冲变压器来驱动功率开关的栅极。其原理是利用PWM波通过变压器耦合在次级产生驱动电压。这里存在一个经典的工程挑战变压器磁芯饱和。变压器传递的是交变磁场。如果施加一个长时间的单极性电压比如一个宽脉冲变压器磁通会持续沿一个方向增加最终导致磁芯饱和。一旦饱和变压器励磁电感急剧下降初级线圈相当于短路会产生巨大的冲击电流可能损坏驱动电路或微控制器的PWM输出引脚。PWM斩波子模块的智慧在于它将一个宽的单极性PWM脉冲转换成一个高能量的初始脉冲后跟一系列低占空比的维持脉冲的序列。第一个脉冲单次脉冲提供足够的能量快速建立栅极电压使功率开关迅速开通。后续脉冲维持脉冲以较低的占空比持续提供能量恰好补偿栅极电荷的泄漏将功率开关的栅极电压维持在导通的阈值之上但又不足以导致变压器磁芯饱和。这就好比启动一辆汽车你需要一脚大油门单次脉冲让发动机快速达到怠速之后只需要很小的油门维持脉冲就能保持怠速运转。TI的ePWM手册中Figure 14-37的框图清晰地描绘了这一过程原始PWM信号EPWMxA进入斩波子模块后被一个由PSCLK斩波时钟控制的“斩波器”调制最终输出包含首脉冲和维持脉冲序列的EPWMxA信号。2.2 核心寄存器配置与波形生成原理PWM斩波功能主要由PCCTL寄存器控制。我们结合手册中的公式和图表将其拆解为可操作的配置步骤。第一步时钟与使能PCCTL[CHPEN]这是斩波子模块的总开关。必须置1才能启用斩波功能。PSCLK斩波时钟源。通常由系统时钟SYSCLKOUT分频得到。它决定了维持脉冲的“切割”频率。频率越高维持脉冲越密集。第二步配置单次脉冲宽度单次脉冲的宽度是可编程的这是优化开通速度的关键。其宽度由OSHTWTH这个4位控制位值1-16决定。计算公式如下T1stpulse TEPWMCLK × 8 × OSHTWTH其中TEPWMCLK是ePWM模块时钟周期。例如当EPWMCLK 80MHz周期12.5ns时通过查表手册Table 14-11可知OSHTWTH设置为0x4时首脉冲宽度为500ns。这意味着无论原始PWM波的占空比是多少在输出波形的上升沿都会先产生一个固定500ns宽的高电平脉冲。实操心得这个首脉冲宽度的设置需要权衡。太窄可能不足以完全开通功率管导致开通损耗增加太宽则增加了变压器饱和的风险也浪费能量。通常需要结合变压器的磁芯参数、功率管的栅极总电荷Qg以及驱动电压来估算。一个实用的方法是先用理论计算一个值然后在实际电路中用示波器观察栅极电压的建立情况进行微调。第三步配置维持脉冲的占空比首脉冲之后便是维持脉冲序列。维持脉冲的占空比由CHPDUTY这3位控制可以选择7种比例从12.5%到87.5%即1/8到7/8。手册中的Figure 14-40非常直观地展示了不同CHPDUTY设置下的波形。CHPDUTY 000占空比 12.5%。维持脉冲很“瘦”适合栅极泄漏电流很小、驱动电压较高的MOSFET。CHPDUTY 110占空比 75%。维持脉冲很“胖”适合栅极电荷需求较大或驱动电压较低的IGBT。维持脉冲的频率则由CHPFREQ位域与PSCLK共同决定。配置流程示例假设我们需要为一个采用脉冲变压器驱动的1200V IGBT模块配置斩波。使能PCCTL 0x0000; // 先清零PCCTL | (1 0); // 置位CHPEN使能斩波设置首脉冲假设系统时钟80MHz我们希望首脉冲宽度为800ns。查表得OSHTWTH 0x7。PCCTL | (0x7 4); // OSHTWTH 0x7设置维持脉冲IGBT栅极电荷较大选择50%占空比以提供足够的维持能量。CHPDUTY 0x3对应4/8。PCCTL | (0x3 1); // CHPDUTY 0x3设置斩波频率CHPFREQ选择适当的分频比使得维持脉冲频率在几百KHz到几MHz之间避免可闻噪声和过高的开关损耗。PCCTL | (0x1 8); // 例如CHPFREQ选择某个分频值配置完成后原本一个平滑的PWM波在输出端就会变成如图14-39所示的带有一个宽首脉冲和一系列窄维持脉冲的波形。这个波形能有效驱动脉冲变压器同时避免磁芯饱和。3. 故障保护TZ子模块系统的安全卫士3.1 故障源与保护模式解析任何功率系统都必须具备在故障发生时如过流、过压、过热、短路快速关断功率开关的能力以保护昂贵的功率器件和整个系统。ePWM的故障保护子模块提供了硬件级的、极低延迟的保护路径。它支持多达6个异步故障输入TZ1至TZ6这些输入可以灵活地映射到任何一个ePWM模块。故障源TZ1-TZ3来自GPIO引脚通常连接外部比较器、霍尔电流传感器或温度传感器的故障输出。TZ4来自正交编码器eQEP的错误信号用于电机失步等保护。TZ5连接至系统时钟失效逻辑应对时钟故障。TZ6来自CPU的仿真停止信号EMUSTOP用于调试时安全关断。保护模式 ePWM支持两种主要的故障响应模式应对不同严重程度的故障逐周期保护CBC, Cycle-By-Cycle适用于电流限流等需要持续监控的场景。当故障信号低电平有效到来时ePWM输出立即被强制为预设的安全状态如拉低。关键在于这个强制状态仅持续当前PWM周期。在每个PWM周期开始时计数器归零或到达周期值硬件会自动检查故障信号是否依然存在。如果故障已消失则输出恢复正常调制如果故障持续则在新周期再次强制动作。这就像是一个自动复位的断路器允许系统在故障消除后自动恢复。单次触发保护OSHT, One-Shot Trip适用于严重短路或过流等致命故障。一旦触发ePWM输出被强制进入安全状态并且这个状态会被锁存Latch直到软件主动清除故障标志位TZCLR[OST]。这相当于一个熔断器故障发生后必须人工干预或由上层控制软件进行故障诊断后才能复位系统防止故障扩大。3.2 寄存器配置与动作控制实战配置故障保护的核心是几个寄存器TZSEL选择故障源和模式、TZCTL配置故障动作、TZEINT使能中断。TZSEL寄存器这是“故障路由”配置中心。你需要在这里指定哪个ePWM模块响应哪个TZ信号。该TZ信号是作为CBC源还是OSHT源。是否启用数字比较事件DCAEVT1/2 DCBEVT1/2作为故障源。TZCTL寄存器这是“故障响应”配置中心。对于每个ePWM输出通道A和B你可以独立配置当故障发生时输出应该被强制为何种状态00高阻态Hi-Z。输出引脚变为高阻外部上下拉电阻决定最终电平。常用于允许其他电路或备份驱动接管。01强制为高Force High。在某些拓扑中如半桥的下管高电平意味着关断。10强制为低Force Low。同样在某些拓扑中代表关断。11无动作No Action。输出继续正常调制通常不用于安全保护。TZCTL2寄存器这是一个增强功能允许你根据PWM计数器是向上计数Up还是向下计数Down来分别配置不同的故障动作。这在某些需要对称关断或特殊序列的应用中非常有用但需要将ETZE位置1来启用此功能。配置示例实现一个典型的双电机驱动保护假设我们有两个ePWM模块ePWM1和ePWM2分别驱动两个半桥。TZ1连接到一个公共的直流母线过流比较器。场景A我们希望任何一路过流都同时关断两个模块的下管假设低电平有效驱动。ePWM1配置EALLOW; // 允许写入受保护的寄存器 // 使能TZ1作为ePWM1的OSHT源 EPwm1Regs.TZSEL.bit.OSHT1 1; // TZ1触发时将EPWM1A和1B强制拉低 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; // 0x2 EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; // 0x2 EDIS;ePWM2配置与ePWM1完全相同。场景B更复杂的策略。TZ5逐周期用于电机1的峰值电流限流TZ1或TZ6单次用于电机2的严重故障保护且电机2的A相进入高阻态。ePWM1配置CBC限流EALLOW; EPwm1Regs.TZSEL.bit.CBC5 1; // TZ5作为CBC源 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; // 可选使能CBC中断以便在中断中记录或处理限流事件 EPwm1Regs.TZEINT.bit.CBC 1; EDIS;ePWM2配置OSHT严重保护EALLOW; EPwm1Regs.TZSEL.bit.OSHT1 1; EPwm1Regs.TZSEL.bit.OSHT6 1; // TZ1或TZ6任一触发 EPwm2Regs.TZCTL.bit.TZA TZ_FORCE_HIZ; // A相高阻 EPwm2Regs.TZCTL.bit.TZB TZ_NO_CHANGE; // B相无动作或可根据需要配置 // 使能OST中断在中断中进行故障诊断和系统停机 EPwm2Regs.TZEINT.bit.OST 1; EDIS;关键注意事项GPIO和X-BAR的配置顺序至关重要手册中特别警告在使能ePWM的故障保护即配置TZSEL之前必须先完成GPIO多路复用和输入X-BAR的配置将正确的物理引脚信号路由到内部的TZ信号。如果顺序反过来在重新配置X-BAR的瞬间可能会因为信号路径切换产生毛刺被误识别为故障信号导致系统意外关断。正确的顺序是1) 配置GPIO为输入功能2) 配置INPUTXBAR将GPIO映射到内部TZ信号3) 最后配置ePWM的TZSEL等寄存器使能保护。4. 数字比较DC子模块连接模拟与数字保护的桥梁4.1 功能定位与信号流故障保护子模块直接处理数字化的TZ信号但在实际系统中很多故障条件如过流最初是由模拟比较器检测的。C2000片上的模拟比较器子系统CMPSS输出的是数字信号高/低。数字比较子模块的核心作用就是将这些来自CMPSS或其他数字源如GPIO、ECC错误信号的信号进行逻辑组合与处理直接生成能触发ePWM动作Trip或事件Event的信号从而构建一条从模拟故障检测到PWM硬件保护的超快速、无需CPU干预的响应链路。如图14-49所示DC子模块的输入主要分为四路DCAH、DCAL、DCBH、DCBL高/低A/B组。这些信号并非直接来自引脚而是通过DCTRIPSEL寄存器从多达15个内部“Trip输入”源中选择配置而来。这些源包括TZ1, TZ2, TZ3引脚信号。片上CMPSS模块的输出例如COMP1OUT。其他内部错误信号如ECCDBLERR内存双位错误PIEVECTERR中断向量错误。4.2 事件生成与组合逻辑DC子模块的精妙之处在于其灵活的组合逻辑。它可以将上述输入信号进行“与”、“或”等逻辑组合生成两类关键事件DCAEVT1 / DCBEVT1通常映射为单次触发OSHT事件源连接到TZ子模块用于严重故障。DCAEVT2 / DCBEVT2通常映射为逐周期CBC事件源连接到TZ子模块用于周期性的限流保护。此外这些事件还能直接送到事件触发ET子模块用于触发ADC转换DCAEVT1.soc或者送到时间基准TB子模块用于产生同步事件。配置示例利用CMPSS实现硬件峰值电流保护这是数字比较子模块最经典的应用之一。假设我们使用CMPSS1来检测电机相电流当电流超过阈值CMPSS1COMP时COMP1OUT变高。我们希望这个信号能立即触发ePWM1的逐周期保护CBC。信号路由通过DCTRIPSEL寄存器将CMPSS1的输出假设是TRIPIN4分配给DCAH或DCAL取决于逻辑极性。EALLOW; // 假设CMPSS1出连接到INPUTXBAR的TRIPIN4 InputXbarRegs.INPUT4SELECT 60; // 具体数值需查数据手册对应CMPSS1OUT // 在ePWM1的DC子模块中选择TRIPIN4作为DCAH的信号源 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL 4; // 选择TRIPIN4 EDIS;事件生成配置DCAEVT1或DCAEVT2的生成条件。例如我们定义当DCAH为高时生成DCAEVT2事件。EALLOW; // 设置DCAEVT2由DCAH高电平触发假设为边沿或电平敏感具体看TZDCSEL配置 EPwm1Regs.TZDCSEL.bit.DCAEVT2 TZ_DCAH_HIGH; // 例如0x1 EDIS;连接至保护模块在TZ子模块中将DCAEVT2事件配置为CBC故障源。EALLOW; EPwm1Regs.TZSEL.bit.DCAEVT2 1; // 使能DCAEVT2作为CBC源 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; // 动作强制拉低 EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; EDIS;消隐窗口可选但重要在开关切换的瞬间电流采样可能会引入噪声毛刺导致误触发。DC子模块提供了消隐窗口功能通过DCFCTL和DCBLANK寄存器可以在每个PWM周期开始后的一段时间内屏蔽掉DC事件从而过滤掉开关噪声。完成以上配置后就建立了一条完整的硬件保护链电流超限 - CMPSS输出变高 - DC子模块生成DCAEVT2- TZ子模块立即将PWM输出强制为安全状态。整个过程的延迟仅在几十到几百纳秒量级远快于任何软件中断响应为功率开关提供了至关重要的保护。4.3 高级应用组合输入与多故障源协同手册中提到了“Trip Combination Input”模式DCTRIPSEL选择0xF。在此模式下DCAHTRIPSEL、DCALTRIPSEL等寄存器不再是选择单个源而是作为一个位掩码来选择将哪些Trip输入信号进行“或”运算共同产生DCAH等信号。例如你可以将来自三个不同相电流的CMPSS输出TRIPIN4,TRIPIN5,TRIPIN6通过组合逻辑共同生成一个DCAH信号。这样任何一相过流都会触发同一个保护事件简化了逻辑设计。这在多相并联或三相系统中非常有用。5. 事件触发ET子模块精准的时序与中断管家5.1 角色与工作流程如果说TZ和DC子模块是“安全部门”那么事件触发ET子模块就是“调度中心”。它不直接改变PWM输出而是负责管理ePWM内部产生的各种事件并以可编程的方式产生中断INT和ADC启动转换SOC信号。这对于需要与PWM周期严格同步进行软件计算或ADC采样的应用至关重要比如数字电源的电压环、电流环控制。ET子模块监控的事件源非常丰富时间基准事件CTRPRD周期匹配、CTR0零匹配。计数器比较事件CTRCMPA/CMPB/CMPC/CMPD在递增或递减计数时。数字比较事件DCAEVT1.soc、DCBEVT1.soc。5.2 中断与SOC的预分频与初始化ET子模块的核心能力在于事件预分频和计数器初始化。1. 中断生成流程 以周期中断为例假设我们希望每2个PWM周期产生一次中断。选择事件源在ETSEL寄存器中设置INTSEL选择CTRPRD事件。配置预分频在ETPS寄存器中设置INTPRD 2表示每2个事件产生一次中断。INTCNT是一个计数器每次CTRPRD事件发生时加1当INTCNT等于INTPRD时触发中断脉冲并将INTCNT清零。使能中断置位ETSEL[INTEN]。处理中断中断服务程序ISR中需要手动清除中断标志ETFLG[INT]以允许下一次中断产生。2. SOC信号生成流程 对于ADC采样我们可能需要在PWM周期的特定时刻例如当CTRCMPA时启动转换并且可能每N个周期采样一次。选择事件源在ETSEL寄存器中设置SOCASEL选择CTRUCMPA递增计数匹配CMPA时。配置SOC预分频在ETPS寄存器中设置SOCAPRD 4表示每4个此类事件产生一个SOC脉冲。SOCACNT计数器工作原理同INTCNT。使能SOC置位ETSEL[SOCAEN]。3. 计数器初始化ETCNTINIT 这是一个非常实用的高级功能。在多个ePWM模块同步通过EPWMxSYNCI的系统中你可能希望所有模块的ET事件计数器INTCNT2SOCACNT2在同步信号到来时从一个特定的值开始计数而不是从0开始。这可以精确控制多个模块产生中断或SOC的相位差。通过ETCNTINITCTL[INTINITEN]使能初始化功能。在ETCNTINIT[INTINIT]中设置初始值。选择初始化触发源同步输入信号EPWMxSYNCI或软件强制。配置示例在PWM波中点进行ADC采样并每3个周期产生一次中断假设PWM为向上-向下计数模式我们希望在每个PWM周期的中点即计数器从递增转为递减的时刻也是CTRCMPA的时刻启动ADC采样并且每3个周期让CPU中断一次进行算法更新。// 假设TBPRD已设置CMPA已设置为TBPRD/2即中点 EALLOW; // 1. 配置SOCA选择CTRCMPA递增为事件源每1个事件触发一次SOC即时采样 EPwm1Regs.ETSEL.bit.SOCASEL ET_CTRU_CMPA; // 例如0x4 EPwm1Regs.ETPS.bit.SOCAPRD ET_1ST; // 每个事件都触发SOC EPwm1Regs.ETSEL.bit.SOCAEN 1; // 使能SOCA // 2. 配置中断选择CTRPRD周期结束为事件源每3个事件触发一次中断 EPwm1Regs.ETSEL.bit.INTSEL ET_CTR_PRD; // 周期匹配 EPwm1Regs.ETPS.bit.INTPRD ET_3RD; // 每3个周期 EPwm1Regs.ETSEL.bit.INTEN 1; // 使能中断 EDIS; // 在PIE中断服务程序中 interrupt void epwm1_isr(void) { // 读取ADC结果并进行控制算法计算... // 清除ePWM1中断标志 EPwm1Regs.ETCLR.bit.INT 1; // 必须清除PIE组应答位 PieCtrlRegs.PIEACK.all PIEACK_GROUP3; }6. 综合实战构建一个带完整保护的电机驱动PWM系统现在让我们将以上所有知识串联起来为一个三相逆变器驱动的永磁同步电机PMSM设计ePWM配置。该系统需要互补带死区的PWM输出、基于脉冲变压器的隔离栅极驱动需斩波、硬件过流保护CBC、硬件短路保护OSHT、以及在中点进行ADC采样。系统架构ePWM1A/1B, ePWM2A/2B, ePWM3A/3B 驱动三相桥臂。电流传感器信号经调理后送入CMPSS1, CMPSS2, CMPSS3。TZ1引脚连接一个快速的硬件过流保护电路比较器。配置步骤基础PWM生成TB CC AQ DB配置时基模块TB设置TBPRD决定PWM频率选择递增-递减计数模式。配置计数器比较模块CC设置CMPA和CMPB生成占空比。对于空间矢量调制SVPWMCMPA/B的值由Clarke/Park变换后计算得出。配置动作限定模块AQ设置CTRCMPA时拉高CTRCMPB时拉低生成对称的PWM波形。配置死区模块DB插入死区时间防止上下管直通。PWM斩波PC使能PCCTL[CHPEN]。根据脉冲变压器和IGBT的规格计算并设置OSHTWTH首脉冲宽度如800ns和CHPDUTY维持脉冲占空比如50%。设置CHPFREQ选择适当的斩波频率。故障保护TZ与数字比较DC逐周期限流CBC配置DCTRIPSEL将CMPSS1/2/3的输出分别映射到ePWM1/2/3的DCAH或DCAL。配置TZDCSEL使DCAEVT2在DCAH为高时产生。在每个ePWM模块的TZSEL中使能DCAEVT2作为CBC源。在TZCTL中配置CBC动作为强制输出低关断。可选使能TZEINT[CBC]中断用于监控限流事件。次短路保护OSHT配置GPIO和INPUTXBAR将TZ1引脚连接到所有ePWM模块的TZ1输入。在每个ePWM模块的TZSEL中使能OSHT1。在TZCTL中配置OSHT动作为强制输出低。使能TZEINT[OST]中断。在OST中断服务程序中必须进行全面的故障诊断记录故障源、关闭所有PWM、可能的话触发硬件安全状态并手动清除TZCLR[OST]标志后才能考虑复位系统。事件触发与ADC采样ET我们希望在每个PWM周期的中点电流纹波最小点对三相电流进行同步采样。在ePWM1主模块的ET子模块中配置SOCASEL为CTRUCMPA假设CMPA设置在中点。设置SOCAPRD 1每个周期都采样。将ePWM1的EPWM1SOCA信号连接到ADC的启动转换SOC输入端。配置ADC的排序器使其在收到EPWM1SOCA信号时依次转换三个电流ADC通道。配置ePWM1每N个周期产生一次中断INTPRD N用于执行FOC磁场定向控制算法更新下一周期的CMPA/B值。同步将ePWM1配置为主模块ePWM2和ePWM3配置为从模块通过EPWMSYNCI/EPWMSYNCO链进行同步确保三相PWM严格同相。调试与验证先软件后硬件首先在不连接功率部分的情况下用示波器观察ePWM输出波形验证PWM频率、占空比、死区、斩波波形是否正确。逐级使能保护先使能CBC保护用小电流测试限流功能是否正常触发和恢复。再测试OSHT保护确保故障时能可靠锁存。验证ADC同步在ADC中断中设置一个测试变量用CCS的Graph工具观察其是否按PWM频率规律更新并用示波器测量ADC转换开始信号与PWM波形的时序关系。压力测试在安全条件下如低压、小功率模拟故障条件如短接负载用高速示波器捕获从故障发生到PWM关断的响应时间确保其在功率器件的安全工作区SOA之内。通过这样一套完整的配置你构建的不仅仅是一个PWM发生器而是一个具备高级波形调制、硬件级快速保护、以及精准时序管理能力的功率控制核心。ePWM模块的这些高级功能正是C2000系列在数字电源和电机控制领域保持领先地位的关键所在。掌握它们你就能游刃有余地应对各种复杂的电力电子应用挑战。
深入解析C2000 ePWM高级功能:斩波、故障保护与数字比较实战
1. ePWM模块核心功能概览与设计哲学在电力电子和电机驱动的世界里PWM脉冲宽度调制是当之无愧的“心脏”。它通过控制开关器件如MOSFET、IGBT在一个固定周期内的导通时间即占空比来精确调节输出到负载如电机绕组、电感的平均电压或电流。然而一个基础的PWM发生器只能提供简单的开关信号。在高压、大电流、高可靠性的应用场景中比如伺服驱动器、不间断电源UPS、太阳能逆变器我们需要的远不止于此。我们需要对PWM波形进行精细的“雕琢”并为其穿上坚固的“盔甲”以应对各种复杂的工况和潜在的故障。这就是德州仪器TIC2000系列微控制器中增强型PWMePWM模块大显身手的地方。ePWM远非一个简单的定时器加比较器。它是一个高度模块化、可配置的子系统其设计哲学在于将PWM生成、保护、同步、触发等复杂功能分解为多个协同工作的子模块。这种架构使得工程师能够像搭积木一样构建出从简单到极其复杂的PWM控制策略。今天我们重点深入其中三个关键且相互关联的高级功能PWM斩波PC、故障保护TZ和数字比较DC。理解它们你就能为你的功率系统设计出既高效又鲁棒的“神经系统”。简单来说PWM斩波子模块负责对原始的PWM波进行“二次加工”生成适合特定栅极驱动电路尤其是脉冲变压器隔离驱动的波形序列。故障保护子模块则是系统的“紧急制动系统”和“保险丝”时刻监控外部故障信号并在异常发生时以纳秒级的速度强制PWM输出进入安全状态如拉高、拉低或高阻。而数字比较子模块则是连接外部模拟世界如比较器输出与内部数字保护逻辑的“智能桥梁”它能将模拟比较器的结果直接映射为PWM的触发或保护事件实现硬件级的快速响应无需CPU干预。这三个功能环环相扣。例如数字比较模块检测到过流信号触发故障保护模块的动作而故障保护的动作又直接作用于最终经过斩波处理的PWM输出上。接下来我们将逐一拆解看看它们是如何在寄存器配置和信号流中实现这些强大功能的。2. PWM斩波PC子模块为脉冲变压器驱动量身定制2.1 为何需要PWM斩波——解决脉冲变压器的饱和难题在讨论寄存器配置之前我们必须先理解这个功能要解决的根本问题。在高边驱动或需要电气隔离的场合我们常使用脉冲变压器来驱动功率开关的栅极。其原理是利用PWM波通过变压器耦合在次级产生驱动电压。这里存在一个经典的工程挑战变压器磁芯饱和。变压器传递的是交变磁场。如果施加一个长时间的单极性电压比如一个宽脉冲变压器磁通会持续沿一个方向增加最终导致磁芯饱和。一旦饱和变压器励磁电感急剧下降初级线圈相当于短路会产生巨大的冲击电流可能损坏驱动电路或微控制器的PWM输出引脚。PWM斩波子模块的智慧在于它将一个宽的单极性PWM脉冲转换成一个高能量的初始脉冲后跟一系列低占空比的维持脉冲的序列。第一个脉冲单次脉冲提供足够的能量快速建立栅极电压使功率开关迅速开通。后续脉冲维持脉冲以较低的占空比持续提供能量恰好补偿栅极电荷的泄漏将功率开关的栅极电压维持在导通的阈值之上但又不足以导致变压器磁芯饱和。这就好比启动一辆汽车你需要一脚大油门单次脉冲让发动机快速达到怠速之后只需要很小的油门维持脉冲就能保持怠速运转。TI的ePWM手册中Figure 14-37的框图清晰地描绘了这一过程原始PWM信号EPWMxA进入斩波子模块后被一个由PSCLK斩波时钟控制的“斩波器”调制最终输出包含首脉冲和维持脉冲序列的EPWMxA信号。2.2 核心寄存器配置与波形生成原理PWM斩波功能主要由PCCTL寄存器控制。我们结合手册中的公式和图表将其拆解为可操作的配置步骤。第一步时钟与使能PCCTL[CHPEN]这是斩波子模块的总开关。必须置1才能启用斩波功能。PSCLK斩波时钟源。通常由系统时钟SYSCLKOUT分频得到。它决定了维持脉冲的“切割”频率。频率越高维持脉冲越密集。第二步配置单次脉冲宽度单次脉冲的宽度是可编程的这是优化开通速度的关键。其宽度由OSHTWTH这个4位控制位值1-16决定。计算公式如下T1stpulse TEPWMCLK × 8 × OSHTWTH其中TEPWMCLK是ePWM模块时钟周期。例如当EPWMCLK 80MHz周期12.5ns时通过查表手册Table 14-11可知OSHTWTH设置为0x4时首脉冲宽度为500ns。这意味着无论原始PWM波的占空比是多少在输出波形的上升沿都会先产生一个固定500ns宽的高电平脉冲。实操心得这个首脉冲宽度的设置需要权衡。太窄可能不足以完全开通功率管导致开通损耗增加太宽则增加了变压器饱和的风险也浪费能量。通常需要结合变压器的磁芯参数、功率管的栅极总电荷Qg以及驱动电压来估算。一个实用的方法是先用理论计算一个值然后在实际电路中用示波器观察栅极电压的建立情况进行微调。第三步配置维持脉冲的占空比首脉冲之后便是维持脉冲序列。维持脉冲的占空比由CHPDUTY这3位控制可以选择7种比例从12.5%到87.5%即1/8到7/8。手册中的Figure 14-40非常直观地展示了不同CHPDUTY设置下的波形。CHPDUTY 000占空比 12.5%。维持脉冲很“瘦”适合栅极泄漏电流很小、驱动电压较高的MOSFET。CHPDUTY 110占空比 75%。维持脉冲很“胖”适合栅极电荷需求较大或驱动电压较低的IGBT。维持脉冲的频率则由CHPFREQ位域与PSCLK共同决定。配置流程示例假设我们需要为一个采用脉冲变压器驱动的1200V IGBT模块配置斩波。使能PCCTL 0x0000; // 先清零PCCTL | (1 0); // 置位CHPEN使能斩波设置首脉冲假设系统时钟80MHz我们希望首脉冲宽度为800ns。查表得OSHTWTH 0x7。PCCTL | (0x7 4); // OSHTWTH 0x7设置维持脉冲IGBT栅极电荷较大选择50%占空比以提供足够的维持能量。CHPDUTY 0x3对应4/8。PCCTL | (0x3 1); // CHPDUTY 0x3设置斩波频率CHPFREQ选择适当的分频比使得维持脉冲频率在几百KHz到几MHz之间避免可闻噪声和过高的开关损耗。PCCTL | (0x1 8); // 例如CHPFREQ选择某个分频值配置完成后原本一个平滑的PWM波在输出端就会变成如图14-39所示的带有一个宽首脉冲和一系列窄维持脉冲的波形。这个波形能有效驱动脉冲变压器同时避免磁芯饱和。3. 故障保护TZ子模块系统的安全卫士3.1 故障源与保护模式解析任何功率系统都必须具备在故障发生时如过流、过压、过热、短路快速关断功率开关的能力以保护昂贵的功率器件和整个系统。ePWM的故障保护子模块提供了硬件级的、极低延迟的保护路径。它支持多达6个异步故障输入TZ1至TZ6这些输入可以灵活地映射到任何一个ePWM模块。故障源TZ1-TZ3来自GPIO引脚通常连接外部比较器、霍尔电流传感器或温度传感器的故障输出。TZ4来自正交编码器eQEP的错误信号用于电机失步等保护。TZ5连接至系统时钟失效逻辑应对时钟故障。TZ6来自CPU的仿真停止信号EMUSTOP用于调试时安全关断。保护模式 ePWM支持两种主要的故障响应模式应对不同严重程度的故障逐周期保护CBC, Cycle-By-Cycle适用于电流限流等需要持续监控的场景。当故障信号低电平有效到来时ePWM输出立即被强制为预设的安全状态如拉低。关键在于这个强制状态仅持续当前PWM周期。在每个PWM周期开始时计数器归零或到达周期值硬件会自动检查故障信号是否依然存在。如果故障已消失则输出恢复正常调制如果故障持续则在新周期再次强制动作。这就像是一个自动复位的断路器允许系统在故障消除后自动恢复。单次触发保护OSHT, One-Shot Trip适用于严重短路或过流等致命故障。一旦触发ePWM输出被强制进入安全状态并且这个状态会被锁存Latch直到软件主动清除故障标志位TZCLR[OST]。这相当于一个熔断器故障发生后必须人工干预或由上层控制软件进行故障诊断后才能复位系统防止故障扩大。3.2 寄存器配置与动作控制实战配置故障保护的核心是几个寄存器TZSEL选择故障源和模式、TZCTL配置故障动作、TZEINT使能中断。TZSEL寄存器这是“故障路由”配置中心。你需要在这里指定哪个ePWM模块响应哪个TZ信号。该TZ信号是作为CBC源还是OSHT源。是否启用数字比较事件DCAEVT1/2 DCBEVT1/2作为故障源。TZCTL寄存器这是“故障响应”配置中心。对于每个ePWM输出通道A和B你可以独立配置当故障发生时输出应该被强制为何种状态00高阻态Hi-Z。输出引脚变为高阻外部上下拉电阻决定最终电平。常用于允许其他电路或备份驱动接管。01强制为高Force High。在某些拓扑中如半桥的下管高电平意味着关断。10强制为低Force Low。同样在某些拓扑中代表关断。11无动作No Action。输出继续正常调制通常不用于安全保护。TZCTL2寄存器这是一个增强功能允许你根据PWM计数器是向上计数Up还是向下计数Down来分别配置不同的故障动作。这在某些需要对称关断或特殊序列的应用中非常有用但需要将ETZE位置1来启用此功能。配置示例实现一个典型的双电机驱动保护假设我们有两个ePWM模块ePWM1和ePWM2分别驱动两个半桥。TZ1连接到一个公共的直流母线过流比较器。场景A我们希望任何一路过流都同时关断两个模块的下管假设低电平有效驱动。ePWM1配置EALLOW; // 允许写入受保护的寄存器 // 使能TZ1作为ePWM1的OSHT源 EPwm1Regs.TZSEL.bit.OSHT1 1; // TZ1触发时将EPWM1A和1B强制拉低 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; // 0x2 EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; // 0x2 EDIS;ePWM2配置与ePWM1完全相同。场景B更复杂的策略。TZ5逐周期用于电机1的峰值电流限流TZ1或TZ6单次用于电机2的严重故障保护且电机2的A相进入高阻态。ePWM1配置CBC限流EALLOW; EPwm1Regs.TZSEL.bit.CBC5 1; // TZ5作为CBC源 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; // 可选使能CBC中断以便在中断中记录或处理限流事件 EPwm1Regs.TZEINT.bit.CBC 1; EDIS;ePWM2配置OSHT严重保护EALLOW; EPwm1Regs.TZSEL.bit.OSHT1 1; EPwm1Regs.TZSEL.bit.OSHT6 1; // TZ1或TZ6任一触发 EPwm2Regs.TZCTL.bit.TZA TZ_FORCE_HIZ; // A相高阻 EPwm2Regs.TZCTL.bit.TZB TZ_NO_CHANGE; // B相无动作或可根据需要配置 // 使能OST中断在中断中进行故障诊断和系统停机 EPwm2Regs.TZEINT.bit.OST 1; EDIS;关键注意事项GPIO和X-BAR的配置顺序至关重要手册中特别警告在使能ePWM的故障保护即配置TZSEL之前必须先完成GPIO多路复用和输入X-BAR的配置将正确的物理引脚信号路由到内部的TZ信号。如果顺序反过来在重新配置X-BAR的瞬间可能会因为信号路径切换产生毛刺被误识别为故障信号导致系统意外关断。正确的顺序是1) 配置GPIO为输入功能2) 配置INPUTXBAR将GPIO映射到内部TZ信号3) 最后配置ePWM的TZSEL等寄存器使能保护。4. 数字比较DC子模块连接模拟与数字保护的桥梁4.1 功能定位与信号流故障保护子模块直接处理数字化的TZ信号但在实际系统中很多故障条件如过流最初是由模拟比较器检测的。C2000片上的模拟比较器子系统CMPSS输出的是数字信号高/低。数字比较子模块的核心作用就是将这些来自CMPSS或其他数字源如GPIO、ECC错误信号的信号进行逻辑组合与处理直接生成能触发ePWM动作Trip或事件Event的信号从而构建一条从模拟故障检测到PWM硬件保护的超快速、无需CPU干预的响应链路。如图14-49所示DC子模块的输入主要分为四路DCAH、DCAL、DCBH、DCBL高/低A/B组。这些信号并非直接来自引脚而是通过DCTRIPSEL寄存器从多达15个内部“Trip输入”源中选择配置而来。这些源包括TZ1, TZ2, TZ3引脚信号。片上CMPSS模块的输出例如COMP1OUT。其他内部错误信号如ECCDBLERR内存双位错误PIEVECTERR中断向量错误。4.2 事件生成与组合逻辑DC子模块的精妙之处在于其灵活的组合逻辑。它可以将上述输入信号进行“与”、“或”等逻辑组合生成两类关键事件DCAEVT1 / DCBEVT1通常映射为单次触发OSHT事件源连接到TZ子模块用于严重故障。DCAEVT2 / DCBEVT2通常映射为逐周期CBC事件源连接到TZ子模块用于周期性的限流保护。此外这些事件还能直接送到事件触发ET子模块用于触发ADC转换DCAEVT1.soc或者送到时间基准TB子模块用于产生同步事件。配置示例利用CMPSS实现硬件峰值电流保护这是数字比较子模块最经典的应用之一。假设我们使用CMPSS1来检测电机相电流当电流超过阈值CMPSS1COMP时COMP1OUT变高。我们希望这个信号能立即触发ePWM1的逐周期保护CBC。信号路由通过DCTRIPSEL寄存器将CMPSS1的输出假设是TRIPIN4分配给DCAH或DCAL取决于逻辑极性。EALLOW; // 假设CMPSS1出连接到INPUTXBAR的TRIPIN4 InputXbarRegs.INPUT4SELECT 60; // 具体数值需查数据手册对应CMPSS1OUT // 在ePWM1的DC子模块中选择TRIPIN4作为DCAH的信号源 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL 4; // 选择TRIPIN4 EDIS;事件生成配置DCAEVT1或DCAEVT2的生成条件。例如我们定义当DCAH为高时生成DCAEVT2事件。EALLOW; // 设置DCAEVT2由DCAH高电平触发假设为边沿或电平敏感具体看TZDCSEL配置 EPwm1Regs.TZDCSEL.bit.DCAEVT2 TZ_DCAH_HIGH; // 例如0x1 EDIS;连接至保护模块在TZ子模块中将DCAEVT2事件配置为CBC故障源。EALLOW; EPwm1Regs.TZSEL.bit.DCAEVT2 1; // 使能DCAEVT2作为CBC源 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; // 动作强制拉低 EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; EDIS;消隐窗口可选但重要在开关切换的瞬间电流采样可能会引入噪声毛刺导致误触发。DC子模块提供了消隐窗口功能通过DCFCTL和DCBLANK寄存器可以在每个PWM周期开始后的一段时间内屏蔽掉DC事件从而过滤掉开关噪声。完成以上配置后就建立了一条完整的硬件保护链电流超限 - CMPSS输出变高 - DC子模块生成DCAEVT2- TZ子模块立即将PWM输出强制为安全状态。整个过程的延迟仅在几十到几百纳秒量级远快于任何软件中断响应为功率开关提供了至关重要的保护。4.3 高级应用组合输入与多故障源协同手册中提到了“Trip Combination Input”模式DCTRIPSEL选择0xF。在此模式下DCAHTRIPSEL、DCALTRIPSEL等寄存器不再是选择单个源而是作为一个位掩码来选择将哪些Trip输入信号进行“或”运算共同产生DCAH等信号。例如你可以将来自三个不同相电流的CMPSS输出TRIPIN4,TRIPIN5,TRIPIN6通过组合逻辑共同生成一个DCAH信号。这样任何一相过流都会触发同一个保护事件简化了逻辑设计。这在多相并联或三相系统中非常有用。5. 事件触发ET子模块精准的时序与中断管家5.1 角色与工作流程如果说TZ和DC子模块是“安全部门”那么事件触发ET子模块就是“调度中心”。它不直接改变PWM输出而是负责管理ePWM内部产生的各种事件并以可编程的方式产生中断INT和ADC启动转换SOC信号。这对于需要与PWM周期严格同步进行软件计算或ADC采样的应用至关重要比如数字电源的电压环、电流环控制。ET子模块监控的事件源非常丰富时间基准事件CTRPRD周期匹配、CTR0零匹配。计数器比较事件CTRCMPA/CMPB/CMPC/CMPD在递增或递减计数时。数字比较事件DCAEVT1.soc、DCBEVT1.soc。5.2 中断与SOC的预分频与初始化ET子模块的核心能力在于事件预分频和计数器初始化。1. 中断生成流程 以周期中断为例假设我们希望每2个PWM周期产生一次中断。选择事件源在ETSEL寄存器中设置INTSEL选择CTRPRD事件。配置预分频在ETPS寄存器中设置INTPRD 2表示每2个事件产生一次中断。INTCNT是一个计数器每次CTRPRD事件发生时加1当INTCNT等于INTPRD时触发中断脉冲并将INTCNT清零。使能中断置位ETSEL[INTEN]。处理中断中断服务程序ISR中需要手动清除中断标志ETFLG[INT]以允许下一次中断产生。2. SOC信号生成流程 对于ADC采样我们可能需要在PWM周期的特定时刻例如当CTRCMPA时启动转换并且可能每N个周期采样一次。选择事件源在ETSEL寄存器中设置SOCASEL选择CTRUCMPA递增计数匹配CMPA时。配置SOC预分频在ETPS寄存器中设置SOCAPRD 4表示每4个此类事件产生一个SOC脉冲。SOCACNT计数器工作原理同INTCNT。使能SOC置位ETSEL[SOCAEN]。3. 计数器初始化ETCNTINIT 这是一个非常实用的高级功能。在多个ePWM模块同步通过EPWMxSYNCI的系统中你可能希望所有模块的ET事件计数器INTCNT2SOCACNT2在同步信号到来时从一个特定的值开始计数而不是从0开始。这可以精确控制多个模块产生中断或SOC的相位差。通过ETCNTINITCTL[INTINITEN]使能初始化功能。在ETCNTINIT[INTINIT]中设置初始值。选择初始化触发源同步输入信号EPWMxSYNCI或软件强制。配置示例在PWM波中点进行ADC采样并每3个周期产生一次中断假设PWM为向上-向下计数模式我们希望在每个PWM周期的中点即计数器从递增转为递减的时刻也是CTRCMPA的时刻启动ADC采样并且每3个周期让CPU中断一次进行算法更新。// 假设TBPRD已设置CMPA已设置为TBPRD/2即中点 EALLOW; // 1. 配置SOCA选择CTRCMPA递增为事件源每1个事件触发一次SOC即时采样 EPwm1Regs.ETSEL.bit.SOCASEL ET_CTRU_CMPA; // 例如0x4 EPwm1Regs.ETPS.bit.SOCAPRD ET_1ST; // 每个事件都触发SOC EPwm1Regs.ETSEL.bit.SOCAEN 1; // 使能SOCA // 2. 配置中断选择CTRPRD周期结束为事件源每3个事件触发一次中断 EPwm1Regs.ETSEL.bit.INTSEL ET_CTR_PRD; // 周期匹配 EPwm1Regs.ETPS.bit.INTPRD ET_3RD; // 每3个周期 EPwm1Regs.ETSEL.bit.INTEN 1; // 使能中断 EDIS; // 在PIE中断服务程序中 interrupt void epwm1_isr(void) { // 读取ADC结果并进行控制算法计算... // 清除ePWM1中断标志 EPwm1Regs.ETCLR.bit.INT 1; // 必须清除PIE组应答位 PieCtrlRegs.PIEACK.all PIEACK_GROUP3; }6. 综合实战构建一个带完整保护的电机驱动PWM系统现在让我们将以上所有知识串联起来为一个三相逆变器驱动的永磁同步电机PMSM设计ePWM配置。该系统需要互补带死区的PWM输出、基于脉冲变压器的隔离栅极驱动需斩波、硬件过流保护CBC、硬件短路保护OSHT、以及在中点进行ADC采样。系统架构ePWM1A/1B, ePWM2A/2B, ePWM3A/3B 驱动三相桥臂。电流传感器信号经调理后送入CMPSS1, CMPSS2, CMPSS3。TZ1引脚连接一个快速的硬件过流保护电路比较器。配置步骤基础PWM生成TB CC AQ DB配置时基模块TB设置TBPRD决定PWM频率选择递增-递减计数模式。配置计数器比较模块CC设置CMPA和CMPB生成占空比。对于空间矢量调制SVPWMCMPA/B的值由Clarke/Park变换后计算得出。配置动作限定模块AQ设置CTRCMPA时拉高CTRCMPB时拉低生成对称的PWM波形。配置死区模块DB插入死区时间防止上下管直通。PWM斩波PC使能PCCTL[CHPEN]。根据脉冲变压器和IGBT的规格计算并设置OSHTWTH首脉冲宽度如800ns和CHPDUTY维持脉冲占空比如50%。设置CHPFREQ选择适当的斩波频率。故障保护TZ与数字比较DC逐周期限流CBC配置DCTRIPSEL将CMPSS1/2/3的输出分别映射到ePWM1/2/3的DCAH或DCAL。配置TZDCSEL使DCAEVT2在DCAH为高时产生。在每个ePWM模块的TZSEL中使能DCAEVT2作为CBC源。在TZCTL中配置CBC动作为强制输出低关断。可选使能TZEINT[CBC]中断用于监控限流事件。次短路保护OSHT配置GPIO和INPUTXBAR将TZ1引脚连接到所有ePWM模块的TZ1输入。在每个ePWM模块的TZSEL中使能OSHT1。在TZCTL中配置OSHT动作为强制输出低。使能TZEINT[OST]中断。在OST中断服务程序中必须进行全面的故障诊断记录故障源、关闭所有PWM、可能的话触发硬件安全状态并手动清除TZCLR[OST]标志后才能考虑复位系统。事件触发与ADC采样ET我们希望在每个PWM周期的中点电流纹波最小点对三相电流进行同步采样。在ePWM1主模块的ET子模块中配置SOCASEL为CTRUCMPA假设CMPA设置在中点。设置SOCAPRD 1每个周期都采样。将ePWM1的EPWM1SOCA信号连接到ADC的启动转换SOC输入端。配置ADC的排序器使其在收到EPWM1SOCA信号时依次转换三个电流ADC通道。配置ePWM1每N个周期产生一次中断INTPRD N用于执行FOC磁场定向控制算法更新下一周期的CMPA/B值。同步将ePWM1配置为主模块ePWM2和ePWM3配置为从模块通过EPWMSYNCI/EPWMSYNCO链进行同步确保三相PWM严格同相。调试与验证先软件后硬件首先在不连接功率部分的情况下用示波器观察ePWM输出波形验证PWM频率、占空比、死区、斩波波形是否正确。逐级使能保护先使能CBC保护用小电流测试限流功能是否正常触发和恢复。再测试OSHT保护确保故障时能可靠锁存。验证ADC同步在ADC中断中设置一个测试变量用CCS的Graph工具观察其是否按PWM频率规律更新并用示波器测量ADC转换开始信号与PWM波形的时序关系。压力测试在安全条件下如低压、小功率模拟故障条件如短接负载用高速示波器捕获从故障发生到PWM关断的响应时间确保其在功率器件的安全工作区SOA之内。通过这样一套完整的配置你构建的不仅仅是一个PWM发生器而是一个具备高级波形调制、硬件级快速保护、以及精准时序管理能力的功率控制核心。ePWM模块的这些高级功能正是C2000系列在数字电源和电机控制领域保持领先地位的关键所在。掌握它们你就能游刃有余地应对各种复杂的电力电子应用挑战。