1. ePWM模块核心功能概览与设计哲学
在电力电子和电机驱动的世界里,PWM(脉冲宽度调制)是当之无愧的“心脏”。它通过控制开关器件(如MOSFET、IGBT)在一个固定周期内的导通时间(即占空比),来精确调节输出到负载(如电机绕组、电感)的平均电压或电流。然而,一个基础的PWM发生器只能提供简单的开关信号。在高压、大电流、高可靠性的应用场景中,比如伺服驱动器、不间断电源(UPS)、太阳能逆变器,我们需要的远不止于此。我们需要对PWM波形进行精细的“雕琢”,并为其穿上坚固的“盔甲”,以应对各种复杂的工况和潜在的故障。这就是德州仪器(TI)C2000系列微控制器中增强型PWM(ePWM)模块大显身手的地方。
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完全相同。
- 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;
- ePWM1配置(CBC限流):
关键注意事项: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子模块监控的事件源非常丰富:
- 时间基准事件:
CTR=PRD(周期匹配)、CTR=0(零匹配)。 - 计数器比较事件:
CTR=CMPA/CMPB/CMPC/CMPD(在递增或递减计数时)。 - 数字比较事件:
DCAEVT1.soc、DCBEVT1.soc。
5.2 中断与SOC的预分频与初始化
ET子模块的核心能力在于事件预分频和计数器初始化。
1. 中断生成流程: 以周期中断为例,假设我们希望每2个PWM周期产生一次中断。
- 选择事件源:在
ETSEL寄存器中,设置INTSEL选择CTR=PRD事件。 - 配置预分频:在
ETPS寄存器中,设置INTPRD = 2(表示每2个事件产生一次中断)。INTCNT是一个计数器,每次CTR=PRD事件发生时加1,当INTCNT等于INTPRD时,触发中断脉冲,并将INTCNT清零。 - 使能中断:置位
ETSEL[INTEN]。 - 处理中断:中断服务程序(ISR)中,需要手动清除中断标志
ETFLG[INT],以允许下一次中断产生。
2. SOC信号生成流程: 对于ADC采样,我们可能需要在PWM周期的特定时刻(例如,当CTR=CMPA时)启动转换,并且可能每N个周期采样一次。
- 选择事件源:在
ETSEL寄存器中,设置SOCASEL选择CTRU=CMPA(递增计数匹配CMPA时)。 - 配置SOC预分频:在
ETPS寄存器中,设置SOCAPRD = 4(表示每4个此类事件产生一个SOC脉冲)。SOCACNT计数器工作原理同INTCNT。 - 使能SOC:置位
ETSEL[SOCAEN]。
3. 计数器初始化(ETCNTINIT): 这是一个非常实用的高级功能。在多个ePWM模块同步(通过EPWMxSYNCI)的系统中,你可能希望所有模块的ET事件计数器(INTCNT2,SOCACNT2)在同步信号到来时,从一个特定的值开始计数,而不是从0开始。这可以精确控制多个模块产生中断或SOC的相位差。
- 通过
ETCNTINITCTL[INTINITEN]使能初始化功能。 - 在
ETCNTINIT[INTINIT]中设置初始值。 - 选择初始化触发源:同步输入信号(
EPWMxSYNCI)或软件强制。
配置示例:在PWM波中点进行ADC采样,并每3个周期产生一次中断假设PWM为向上-向下计数模式,我们希望在每个PWM周期的中点(即计数器从递增转为递减的时刻,也是CTR=CMPA的时刻)启动ADC采样,并且每3个周期让CPU中断一次进行算法更新。
// 假设TBPRD已设置,CMPA已设置为TBPRD/2,即中点 EALLOW; // 1. 配置SOCA:选择CTR=CMPA(递增)为事件源,每1个事件触发一次SOC(即时采样) EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTRU_CMPA; // 例如,0x4 EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; // 每个事件都触发SOC EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能SOCA // 2. 配置中断:选择CTR=PRD(周期结束)为事件源,每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生成占空比。对于空间矢量调制(SVPWM),CMPA/B的值由Clarke/Park变换后计算得出。 - 配置动作限定模块(AQ):设置
CTR=CMPA时拉高,CTR=CMPB时拉低,生成对称的PWM波形。 - 配置死区模块(DB):插入死区时间,防止上下管直通。
- 配置时基模块(TB):设置
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]标志后才能考虑复位系统。
- 逐周期限流(CBC):
事件触发与ADC采样(ET):
- 我们希望在每个PWM周期的中点(电流纹波最小点)对三相电流进行同步采样。
- 在ePWM1(主模块)的ET子模块中,配置
SOCASEL为CTRU=CMPA(假设CMPA设置在中点)。 - 设置
SOCAPRD = 1(每个周期都采样)。 - 将ePWM1的
EPWM1SOCA信号连接到ADC的启动转换(SOC)输入端。 - 配置ADC的排序器,使其在收到
EPWM1SOCA信号时,依次转换三个电流ADC通道。 - 配置ePWM1每N个周期产生一次中断(
INTPRD = N),用于执行FOC(磁场定向控制)算法,更新下一周期的CMPA/B值。
同步:
- 将ePWM1配置为主模块,ePWM2和ePWM3配置为从模块,通过
EPWMSYNCI/EPWMSYNCO链进行同步,确保三相PWM严格同相。
- 将ePWM1配置为主模块,ePWM2和ePWM3配置为从模块,通过
调试与验证:
- 先软件,后硬件:首先在不连接功率部分的情况下,用示波器观察ePWM输出波形,验证PWM频率、占空比、死区、斩波波形是否正确。
- 逐级使能保护:先使能CBC保护,用小电流测试限流功能是否正常触发和恢复。再测试OSHT保护,确保故障时能可靠锁存。
- 验证ADC同步:在ADC中断中设置一个测试变量,用CCS的Graph工具观察其是否按PWM频率规律更新,并用示波器测量ADC转换开始信号与PWM波形的时序关系。
- 压力测试:在安全条件下(如低压、小功率),模拟故障条件(如短接负载),用高速示波器捕获从故障发生到PWM关断的响应时间,确保其在功率器件的安全工作区(SOA)之内。
通过这样一套完整的配置,你构建的不仅仅是一个PWM发生器,而是一个具备高级波形调制、硬件级快速保护、以及精准时序管理能力的功率控制核心。ePWM模块的这些高级功能,正是C2000系列在数字电源和电机控制领域保持领先地位的关键所在。掌握它们,你就能游刃有余地应对各种复杂的电力电子应用挑战。