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.

[参考译文] TMS320F2.8035万:DCOFFSET =0时,空白窗口不会从周期开始处变为空白

Guru**** 2334980 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/579386/tms320f28035-blanking-window-doesn-t-blank-from-the-beginning-of-the-period-with-dcoffset-0

部件号:TMS320F2.8035万

你好

我正在尝试在TMS320F2.8035万上设置空白窗口。 我将CBC跳闸区域从Comp3配置为Trip PWM2。 我希望空白窗口在PWM周期开始时立即开始,并持续到死时间,直到脉冲开始后的某个时间。 但是如果我将DCOFFSET设置为0,那么在一个时间段的最末尾的跳闸可能会在空白窗口激活之前跳闸下一个脉冲,从而导致整个脉冲消失。

为了进行测试,我使用连接到COMP3A的备用PWM并生成一个扫描脉冲,以查看跳闸区域在不同时钟下的工作情况。 在第一个图像上,PWM2A和B脉冲仍正常跳闸,但当我将测试脉冲向右移动一步(第二个图像)时,PWM在开始之前跳闸。

继续几步(第三幅图像)后,空白窗口开始正常工作,即使在死机时间内发生跳闸,PWM2脉冲也会启动。

作为一种解决方法,我可以将偏移设置为TBPRD -5,这样空白窗口实际上从上一个周期的末尾开始,但我很困惑为什么它不能像预期的那样与偏移0一起工作? 应在周期结束时清除CBC跳闸,并且不能跳闸下一个脉冲? 或者,我不知道行程信号是否存在其他延迟?

此致
Pauli

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Pauli,

    您是否介意发布您的PWM配置代码? 我想了解您的行程和空白窗口是如何配置的,但也请发布PWM设置的其余部分。

    谢谢!

    克里斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为这里应该是Comp3,PWM1和PWM2的相关配置。 PWM2的运行频率是PWM1的两倍。 此外,在PWM1的上坡和下坡都有一个CLA任务再次触发,使PWM2上的交替脉冲消失。 所以我们得到了与PWM1相同的脉冲模式,但是PWM2周期结束,CBC跳闸区域在每次脉冲后重置。

    对于空白窗口,这是使用DCFOFFSET =0的设置,并且不会像预期的那样从周期开始处清空。 使用的解决方法是在注释后的行中。

    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK = 1;

    Comp3Regs.COMPCTL.bit.SYNCSEL = 0;
    Comp3Regs.COMPCTL.bit.CMPINV = 0;
    Comp3Regs.COMPCTL.bit.COMPSOURCE = 0;
    Comp3Regs.COMPCTL.bit.COMPDACEN = 1;
    Comp3Regs.DACVAL.bit.DACVAL = 200;
    EDIS;


    EALLOW;
    //时基子模块寄存器
    EPwm1Regs.TBCTL.bit.PRDLD = TB_shadow;
    EPwm1Regs.TBPRD =(6000万 /(7.5万))/ 2;
    EPwm1Regs.TBPHS.Half.TBPHS = 0;
    EPwm1Regs.TBCTR = 0;

    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UDOWN;
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    //计数器比较子模块寄存器
    EPwm1Regs.CMPA.Halt.CMPA = 74;
    EPwm1Regs.CMBB = 0;
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_Immediate;

    //创建具有操作限定符的固定50 % PWM
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
    EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR;

    EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
    EPwm1Regs.AQCTLB.bit.PRD = AQ_CLEAR;

    //有源高互补PWM -设置死区
    EPwm1Regs.DBCTL.bit.in_mode = DBA_All;
    EPwm1Regs.DBCTL.bit.out模式= DB_FULL启用;
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm1Regs.DBRED = 31;
    EPwm1Regs.DBFED = 31;

    //在CMPA处设置中断以启动CLA任务1 (为下半个周期重新配置PWM寄存器)
    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPA;
    EPwm1Regs.ETSEL.bit.inten = 1;
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;

    //在跳闸时强制两个PWM引脚低电平(OST用于关闭PWM)
    EPwm1Regs.TZCTL.bit.TZA = TZ_FORT_LO;
    EPwm1Regs.TZCTL.bit.TZB = TZ_FORT_LO;

    //启用同步输出。
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
    EDIS;


    EALLOW;
    //时基子模块寄存器
    EPwm2Regs.TBCTL.bit.PRDLD = TB_shadow;
    EPwm2Regs.TBPRD =(6000万 /(7.5万 * 2))- 1;
    EPwm2Regs.TBPHS.Half.TBPHS = 0;
    EPwm2Regs.TBCTR = 0;

    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
    EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENable;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

    //计数器比较子模块寄存器
    EPwm2Regs.CMPA.Half.CMPA = 0;
    EPwm2Regs.CMBB = 0;
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD;

    // AQCTLA和B在CLA任务1中配置
    EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;

    EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR;

    //在跳闸时强制两个PWM引脚低电平(OST用于关闭PWM。 CBC通过DCAEVT2跳闸)
    EPwm2Regs.TZCTL.bit.TZA = TZ_FORT_LO;
    EPwm2Regs.TZCTL.bit.TZB = TZ_FORT_LO;
    EPwm2Regs.TZCTL.bit.DCAEVT1 = TZ_NO_CHANGE;
    EPwm2Regs.TZCTL.bit.DCAEVT2 = TZ_NO_CHANGE;
    EPwm2Regs.TZCTL.bit.DCBEVT1 = TZ_NO_CHANGE;
    EPwm2Regs.TZCTL.bit.DCBEVT2 = TZ_NO_CHANGE;

    //有源高互补PWM -设置死区
    EPwm2Regs.DBCTL.bit.in_mode = DBA_All;
    EPwm2Regs.DBCTL.bit.out模式= DB_FULL启用;
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm2Regs.DBRED = 31;
    EPwm2Regs.DBFED = 31;
    EDIS;


    EALLOW;
    //根据比较器1输出定义事件(DCAEVT2)
    EPwm2Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP3OUT;// DCAH =比较器输出
    EPwm2Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI;// DCAEVT2 = DCAH HIGH (当比较器输出变为HIGH时将激活)
    EPwm2Regs.TZsel.bit.DCAEVT2 = TZ_ENABLE;//启用DCAEVT2通过CBC跳闸

    //配置空白窗口
    EPwm2Regs.DCFCTL.bit.Blanke = DC_BLANK_ENE;
    EPwm2Regs.DCFCTL.bit.SRCSEL = DC_SRC_DCAEVT2;
    EPwm2Regs.DCFCTL.bit.PULSESEL = DC_PULSESEL_ZERO;
    EPwm2Regs.DCFCTL.bit.BLANKINV = DC_BLANK_NOTINV;
    //设置偏移,使其在周期结束前结束5个周期。
    // EPwm2Regs.DCFOFFSET = EPwm2Regs.TBPRD -5;
    EPwm2Regs.DCFOFFSET = 0;
    //实际空白窗口大小为:
    //从上一个期间提前+死区+从脉冲开始的实际消隐
    // EPwm2Regs.DCFWINDOW = 5 + 31 + 49;
    EPwm2Regs.DCFWINDOW = 31 + 49;
    EPwm2Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT_FLT;//使用事件的筛选(空白)版本

    //在行程事件中捕获TBCTR值
    EPwm2Regs.DCCAPCTL.bit.Cape = 1;
    EDIS;


    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;//启用TBCLK同步
    EDIS;

     

    此致

    Pauli

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Pauli,

    至少需要几天时间,我才能在这台设备上试用任何产品,但我有一些问题和想法-

    -您能否用TBCTR = 0发生的确切位置标记波形? 不同计数操作中的死区设置和PWM有很多变化, 所以我希望它能非常清楚地显示出与此相关的跳闸发生的位置。也许为了进行调试,我们甚至可以在TBCTR =0上切换PWM,而不需要所有额外的增强功能。
    -您是否可以运行一个测试,在PWM周期完成之前,COMP3A (或任何CBC触发信号)肯定处于激活状态,并在TBCTR = 0处转入空白窗口的起始位置? 我怀疑,如果DCEVT跳闸在前一阶段仍处于活动状态,则出于安全考虑,跳闸优先,因为在遮光窗口期间实际上并未发生。 我需要对此进行一些研究,但这是我的第一个想法。

    -您如何查看COMP3A和COMP3OUT信号? 如何将这些连接路由到PWM?

    感谢您提供所有信息。 到目前为止调试得很好。

    克里斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,这里有一个配置,即B脉冲在周期开始时被短脉冲替换(ZRO = SET,CBU = CLEAR,(CMBB = 10))

    在这里,我将其中一张旧图片切片,并为PWMs的TBCTR斜坡添加了粗略的插图。

    PWM1A脉冲在ZRO处开始,延迟死区,在PRD处结束。 PWM2A脉冲在CAU处启动(CMPA =0),由死区延迟,CLA Task1 (在CLA调试中显示的短按)在CAU之间交替设置PWM2A,不执行任何操作。 B通道是A的有效高补充

    我正在使用PWM5A来生成扫描测试脉冲,它连接到COMP3A引脚。 GPIO34配置为COMP3OUT,两者均连接到逻辑分析仪。

    如果我按照您的建议使COMP3A脉冲更宽,则只会使不良效应(下一个脉冲消失)的区域更宽。

    这里一切都很好。 在COMP3A启动且PWM2A正常启动的情况下,PWM2B已跳闸:

    此处COMP3A脉冲结束接近PWM2周期结束,PWM2A消失。 空白窗口偏移为0,因此期间应从PWM2期间开始时即为空白??

    在COMP3A脉冲不再处于前一时段的范围内之前,PWM2A将保持原来的状态(从开始处变为空白):

    在这里,我们再次处于这样的状态:在消短期间后,COMP3A脉冲处于激活状态,PWM2A按其应有的方式跳闸:

    发生这种情况的不必要的真实场景是,脉冲的结束(跳闸或未跳闸)会在峰值电流测量输入中产生一些噪声,然后使下一个脉冲消失。

    此致

    Pauli

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Pauli,

    我将尝试复制您在同一台设备上看到的内容。 下周我才能开始实验。 如果我需要任何进一步的信息,我将与您联系。

    此致,
    克里斯