我现在在用28379D这颗芯片,我用内部比较器做DC事件触发EPWM保护(事件触发配置成one-shot),当我想用软件强制触发DC事件的时候我需要设置两个标志位,
EPwm1Regs.TZFRC.bit.DCAEVT1 = 1;
EPwm1Regs.TZFRC.bit.DCBEVT1 = 1;
和
EPwm1Regs.TZFRC.bit.OST = 1;
因为我试了好久,发现单独设置EVT事件和OST标志位都是没有效果的,所以想知道一下为什么,多谢。
Green Deng:
你好,正常情况只需要设置一个TZFRC强制输出信号,不确定为什么需要设置两个标志位。方便的话可以给出DC子系统部分的代码
,
Felix:
DC配置代码如下
{ EALLOW;
//======配置DC Submodule (*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT1 = 1; (*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT1 = 1;
(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT2 = 1; (*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT2 = 1;
(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT3 = 1; (*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT3 = 1;
(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT4 = 1; (*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT4 = 1;
(*ePWM[i]).DCTRIPSEL.bit.DCBHCOMPSEL = 0xF; //对TRIP4、TZ1、TZ2、TZ3信号使能 (*ePWM[i]).DCTRIPSEL.bit.DCAHCOMPSEL = 0xF; //对TRIP4、TZ1、TZ2、TZ3信号使能
(*ePWM[i]).DCTRIPSEL.bit.DCBLCOMPSEL = 0x4; //对TRIP5信号使能 (*ePWM[i]).DCTRIPSEL.bit.DCALCOMPSEL = 0x4; //对TRIP5信号使能
//DC的出发源为TRIP4 (*ePWM[i]).TZDCSEL.bit.DCBEVT1 = TZ_DCBH_HI; //高电平触发DC事件 (*ePWM[i]).TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; //高电平触发DC事件 (*ePWM[i]).TZDCSEL.bit.DCAEVT2 = TZ_DCAL_HI; //高电平触发DC事件 (*ePWM[i]).TZDCSEL.bit.DCBEVT2 = TZ_DCBL_HI; //高电平触发DC事件
(*ePWM[i]).TZSEL.bit.DCAEVT1 = 1; //DC配置为One-shot (*ePWM[i]).TZSEL.bit.DCBEVT1 = 1; //DC配置为One-shot (*ePWM[i]).TZSEL.bit.DCBEVT2 = 0; //DC配置为CBC (*ePWM[i]).TZSEL.bit.DCAEVT2 = 0; //DC配置为CBC
(*ePWM[i]).DCBCTL.bit.EVT1SRCSEL = DC_EVT1; //不使用滤波器 (*ePWM[i]).DCBCTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; //异步触发 (*ePWM[i]).DCACTL.bit.EVT1SRCSEL = DC_EVT1; //不使用滤波器 (*ePWM[i]).DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; //异步触发 (*ePWM[i]).DCBCTL.bit.EVT2SRCSEL = DC_EVT2; //不使用滤波器 (*ePWM[i]).DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC; //异步触发 (*ePWM[i]).DCACTL.bit.EVT2SRCSEL = DC_EVT2; //不使用滤波器 (*ePWM[i]).DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC; //异步触发
//======配置TZ触发 (*ePWM[i]).TZCTL.bit.DCAEVT1 = 2; //配置故障输出为低电平 (*ePWM[i]).TZCTL.bit.DCBEVT1 = 2; //配置故障输出为低电平
(*ePWM[i]).TZCTL.bit.DCAEVT2 = 2; //配置上管输出为低电平 (*ePWM[i]).TZCTL.bit.DCBEVT2 = 3; //配置下管输出为不处理 (*ePWM[i]).TZCLR.bit.DCBEVT1 = 1; (*ePWM[i]).TZCLR.bit.DCAEVT1 = 1; (*ePWM[i]).TZCLR.bit.DCAEVT2 = 1; (*ePWM[i]).TZCLR.bit.DCBEVT2 = 1;
EDIS;}
,
Green Deng:
还应该通过TZCTL寄存器定义TZA / TZB的动作。 触发one-shot事件(在这种情况下是通过软件强制)时,epwm输出将执行由TZCTL寄存器的TZA和TZB位指定的动作。
,
Felix:
我现在的应用想保留两种状态,1:依据外部事件单独关闭EPWMA或EPWMA,2:短路时同时关断EPWMA和EPWMB,因为我认为如果我配置了TZA、TZB的话好像会因为触发外部事件同时关掉EPWMA和EPWMB,我不希望这种情况发生
,
Green Deng:
不会,你可以看一下TZCTL.TZA/B的说明,当外部trip事件发生的时候可以选择4种反应模式,其中一种是无动作。