This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好
我参考了此 TI-02000设计文档、以生成 PSFB 的峰值电流波形、
为 紫色波形 是发送至 CMPINP 的斜坡信号、它处于开关频率的两倍、并且根据 DAC 值、生成跳闸事件。
在第一个案例中、我只使用了动作限定器 T1U 和 T1D 来生成动作设置/清除。 如参考文档中所述。
黄色波形 是 ePWM A 寄存器和 蓝色波形 是 ePWM B 寄存器
观察结果: 1. ePWM A 上的向上计数期间跳闸(T1U) 、发生了使用动作限定符的情况、
但未发生跳闸事件 actionT1D (向下计数)、并且 PWM 被清除为零。
2.对于 ePWM B,T1U 没有发生,它被设置为 PRD 并在 T1D 清零。
在第二种情况下、我使用 Tripzone 寄存器 TZAD、TZAU、TZBU 和 TZBD 覆盖动作限定器事件。
在这里、我观察到的 PWM 基于 CMPSS 跳闸输入进行设置/复位
我的问题是:
为什么实际行动限定器 T1U 和 T1D 未根据 CMPSS 跳闸事件生成预期的操作?
是否需要进行任何特定的配置、以便在向上和向下计数时都发生跳闸操作?
注意:我已经配置了 AQTSRCSEL 寄存器、以便选择 T1的源作为 DCEAVT2。
附加源代码以供参考
void initEPWM (void)
{
////禁用 EPWM11_INT
//EPwm8Regs.ETSEL.bit.inten = per_mDISABLE_INT;
EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm8Regs.TBCTL.bit.PRDLD = TB_shadow;
EPwm8Regs.TBCTL.bit.PHSEN = TB_DISABLE;//启用相位加载
EPwm8Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm8Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm8Regs.TBCTR = 0x0000;
EPwm8Regs.TBPRD = 1250;
//在零时设置影子寄存器加载
EPwm8Regs.CMPCTL.bit.SHDWAMODE = CC_shadow;
EPwm8Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm8Regs.CMPCTL.bit.SHDLBMODE = CC_HOLD;
EPwm8Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// 1.667us 时钟脉冲宽度
EPwm8Regs.CMPA.bit.CMPA = 0;
EPwm8Regs.CMPB.bit.CMPB = 0;
EPwm8Regs.AQTSRCSEL.bit.t1SEL = 1;
//对寄存器执行操作
EPwm8Regs.AQCTLA.bit.PRD = AQ_SET;
EPwm8Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm8Regs.AQCTLA2.bit.T1U = AQ_SET;
EPwm8Regs.AQCTLA2.bit.T1D = AQ_CLEAR;
//低电平有效配置
EPwm8Regs.AQCTLB.bit.PRD = AQ_SET;
EPwm8Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm8Regs.AQCTLB2.bit.T1U = AQ_SET;
EPwm8Regs.AQCTLB2.bit.T1D = AQ_CLEAR;
//将 DCB 配置为 CBC
EPwm8Regs.TZSEL.bit.dCAEVT2 = 1;
//将 DCB 配置为 TRIP4
EPwm8Regs.TZDCSEL.bit.dCAEVT2 = TZ_DCAH_HI;
EPwm8Regs.DCTRIPSEL.bit.dCAHCOMPSEL = 3;
EPwm8Regs.DCAHTRIPSEL.bit.TRIPINPUT4 = 1;
//将 DCB 路径配置为未过滤和异步
EPwm8Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2;
EPwm8Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;
// EPwm8Regs.DCFCTL.bit.Blanke = 1;
// EPwm8Regs.DCFCTL.bit.PULSESEL = 2;
// EPwm8Regs.DCFCTL.bit.SRCSEL = 3;
// EPwm8Regs.DCFOFFSET = 0;
// EPwm8Regs.DCFWINDOW = 100;
//将 TRIP4配置为 CTRIP1H
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0 = 0;
//为输出启用 TRIP4多路复用器
EPwmXbarRegs.TRIP4MUXENABLE。bit.MUX0 = 1;
EPwm8Regs.TZCTL2.bit.ETZE = 1;
//EPwm8Regs.TZCTL2.bit.TZBU = TZ_FORCE_HI;//用于测试2
// EPwm8Regs.TZCTL2.bit.TZBU = TZ_FORCE_HI;
// EPwm8Regs.TZCTL2.bit.TZBD = TZ_FORCE_LO;
// EPwm8Regs.TZCTL2.bit.tZAD = TZ_FORCE_LO;
// EPwm8Regs.TZCTL2.bit.TZAU = TZ_FORCE_HI;
//
// CBC 将在 CTR = 0或 CTR = PRD 时清除
//
EPwm8Regs.TZCLR.bit.CBCPULSE = 2;
//
//清除跳闸标志
//
EPwm8Regs.TZCLR.bit.CBC = 1;
EPwm8Regs.TZCLR.bit.INT = 1;
EPwm8Regs.TZCBCCLR.bit.dCAEVT2 = 1;
//
//启用 DCB 中断
//
EPwm8Regs.TZEINT.bit.CBC = 1
}
void initCMPSS (void)
{
//
//启用 CMPSS 并将负输入信号配置为来自
// DAC
//
CMPSS_enableModule (CMPSS1_BASE);
CMPSS_CONFIGHighComparator (CMPSS1_BASE、CMPSS_INSRC_DAC);
//
//使用 VDDA 作为 DAC 的基准,并将 DAC 值设置为
//任意引用。
//
CMPSS_CONFIGDAC (CMPSS1_BASE、CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK |
CMPSS_DACSRC_SHDW);
CMPSS_setDACValueHigh (CMPSS1_BASE、1000);
//
//配置输出信号。 CTRIPH 和 CTRIPOUTH 将由以下人员馈送:
//异步比较器输出。
//
CMPSS_configOutputsHigh (CMPSS1_BASE、CMPSS_TRIP_ASYNC_COMP |
CMPSS_TRIPOUT_ASYNC_COMP);
//CMPSS_configOutputsHigh (CMPSS1_BASE、CMPSS_TRIP_SYNC_COMP |
// CMPSS_TRIPOUT_SYNC_COMP);
}
您好!
我会努力在明天向你介绍这件事。
此致、
本·科利尔
尊敬的 Benjamin:
感谢您的回复。
任何相关更新。
此致、
鲁帕
Drups、
我很抱歉,我还没有时间去做这件事。 将在明天与一些同事讨论此问题。
不用担心、这里我还有一个问题、如果 CMPSS 配置为生成跳闸信号、但在操作中、限定符 T1U 和 T1D 不用于 PRD 和 ZRO 事件。 动作限定器会考虑跳闸输入吗?
Rupa、
您是否愿意在 EPWM 设置中使用 driverlib 而不是 bitfield? 如果您看看 C2000WARE 中的 epwm_ex2_updown_AQ 示例、它将向您展示如何设置动作限定符。
此致、
本·科利尔
您好!
是的、我可以使用 driverlib 进行 EPWM 设置。 我将使用 driverlib 实现配置并检查 PWM 的生成。
但我在这里有疑问、bitfield 中的这个动作限定器配置是否缺失了什么。
此致、
鲁帕
您好、Rupa、
您是否能够获得适用于您的应用的任何 C2000Ware 示例?
此致、
艾里森
尊敬的 Allison:
我仅使用了 bitfield 配置、唯一的问题是 TZCTL2寄存器配置。
对于 PCMC 实施、我们必须强制 Hi TZBU 和 TZAU。
TZBD 和 TZAD 必须是什么都不做的;
我没有使用它们。
谢谢。此
致、 鲁帕