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.

[参考译文] CCS/TMS320F28377D:如何使用 CMPSS 通过 TMS320F28377D 跳闸 EPWM?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/753301/ccs-tms320f28377d-how-to-use-cmpss-to-trip-the-epwm-using-tms320f28377d

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

   我想使用 CMPSS 实现降压转换器的峰值电流模式控制。 因此、我编写一些代码来测试 CMPSS 和 ePWM。 测试波形如下、其中浅蓝色线表示在 CMPIN1P/ADCINA2中连接的信号、粉色线表示在 CMPIN1N/ADCINA3中连接的信号。 绿线是输出信号(ePWM6A)。

    在代码中、我将默认占空比设置为50%、当 CMPSS 跳闸事件发生时、该占空比被强制为低电平。 图1给出了 CMPSS 工作时的波形、它可以强制 PWM 变为低电平。 但是、根据图 2、当 CMPIN1P > CMPIN1N 时、ePWM 始终为低电平、这不是我想要的。 我希望在 CMPIN1P > CMPIN1N 期间、PWM 始终输出我设置的占空比(50%、但不是始终为低电平)。 代码如下所示、如何设置寄存器? 非常感谢!

void InitEPwm6Examples(void){

EPwm6Regs.TBPRD = 500; //设置计时器周期
EPwm6Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
EPwm6Regs.TBCTR = 0x0000; //清除计数器
//
//设置 TBCLK
//
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载
EPwm6Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //时钟与 SYSCLKOUT 的比率
EPwm6Regs.TBCTL.bit.CLKDIV = TB_DIV1; //慢,只观察一下
//范围。
EPwm6Regs.TBCTL.bit.PHSEN = TB_ENABLE; 禁止相位控制 μ s
EPwm6Regs.TBCTL.bit.PRDLD = TB_SHADOW; TBPRD寄存器采用映射模式 μ s
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//禁止同步信号 μ s
//设置比较
//
EPwm6Regs.CMPA.bit.CMPA = 250; 计数到此,强制拉低 μ s
//
//设置操作
//
EPwm6Regs.AQCTLA.bit.ZRO = AQ_SET; 在计数为0处,设置EPWMA为高电平 μ s
EPwm6Regs.AQCTLA.bit.CAU = AQ_CLEAR; //达到设定计数值CMPA处,EPWMA为低电平
///---------------------------------------------------------
EALLOW;
//将 DCB 配置为 TRIP4
EPwm6Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 3; /选择Zone4作为触发Trip 4.
EPwm6Regs.TZDCSEL.bit.DCBEVT2 = TZ_DCBH_HI; 选择比较输出 B 事件2 μ s
EPwm6Regs.TZSEL.bit.DCBEVT2 = 1;//将 DCB 配置为 CBC
//配置要过滤和异步的 DCB 路径
EPwm6Regs.DCBCTL.bit.EVT2SRCSEL = DC_EVT_FLT; //源是 DCBEVT2 Signa
EPwm6Regs.DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_SYNC;// 0:源是同步信号
//空窗设置
EPwm6Regs.DCFCTL.bit.Blanke=1; //1:启用消隐窗口
EPwm6Regs.DCFCTL.bit.PULSESEL=2; //时基计数器等于零(TBCTR = 0x00)
EPwm6Regs.DCFCTL.bit.SRCEL=3; //源是 DCBEVT2信号
EPwm6Regs.DCFOFFSET=0; //消隐窗口偏移
EPwm6Regs.DCFWINDOW=30; //0.1us 20.



EPwmXbarRegs.TRIP4MUXENABLE.BIT.MUX0 = 1;//为输出启用 TRIP4多路复用器
EPwm6Regs.TZCTL.bit.TZA=TZ_FORCE_LO; //强制 EPWMxA 处于低电平状态
EPwm6Regs.TZCLR.bit.CBCPULSE=0; //CTR =零脉冲清除 CBC 跳闸锁存器。 (与传统设计相同。)
EPwmXbarRegs.TRIP5MUXENABLE.BIT.MUX0 = 1;//为输出启用 TRIP4多路复用器
EDIS;



}

void InitCMPSS (void)
{
EALLOW;
//
//启用 CMPSS
//
Cmpss1Regs.COMPCTL.bit.COMPDACE = 1;
//
//NEG 信号来自 DAC
//
Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = NEGIN_PIN;
//
//使用 VDDA 作为 DAC 的基准
//
Cmpss1Regs.COMPDACCTL.bit.SELREF = reference_VDDA;
//
//将 DAC 设置为中点以进行任意引用
//
// Cmpss1Regs.DACHVALS.bit.DACVAL = 800;
//
//配置 CTRIPOUT 路径
//异步输出馈送 CTRIPH 和 CTRIPOUTH
//
// Cmpss1Regs.COMPCTL.bit.CTRIPHSEL = Ctrip_synch;
// Cmpss1Regs.COMPCTL.bit.CTRIPOUTHSEL = Ctrip_synch;
EDIS;
}





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

    我无法理解图2的用例以及它与图1的关系。

    在图2中、电流波形看起来与 PWM 的开关无关? 那么、这个 PCMC 是如何实现的? 您能详细说明吗? 您要应用什么决定因素?

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

    尊敬的 Manish,

       非常感谢您的重播! 图1显示了我需要的理想波形。 请忽略图中的波形。 2.

       我将给出降压转换器的实际工作波形、如图所示。 3、其中浅蓝色线表示连接在 CMPIN1P/ADCINA2中的信号(电感器电流的调制波形)、粉色线表示连接在 CMPIN1N/ADCINA3中的信号(阈值带)。 绿线是输出信号(ePWM6A)。

       我的问题:如何确保 PWM 的周期是恒定的、即如何避免 PWM 始终被强制为低电平?

       请您指出我的代码中的错误、并告诉我如何正确配置寄存器。 非常感谢!

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我仍在尝试了解什么是不可预料的行为、我仔细查看了您的代码、但没有发现任何问题、这是一个立即出现的问题、但我确实需要首先了解使用案例、以便以更明智的方式进行审查。

    1.您能否详细说明为什么图3不是预期行为? 您能否在信号4上叠加时基周期并进行一点解释?

    2.根据我目前的理解,当 CMPSS1P 较高时,您会看到没有 PWM 脉冲,对吗? 或者、您是否还看到其他任何不预期的行为?

    一个原因可能是从 CMPSS 到 PWM 模块的延迟导致 PWM 保持低电平。 我确实看到一些短脉冲(消隐窗口长度)出现在几个实例中、因此您期望的小脉冲不会出现、这是意外行为?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢,我会尝试。

    谢谢!

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

    尊敬的 Manish

           很抱歉再次占用您的时间。 我想根据你的建议亲自解决这个问题,但它失败了。 因此,我希望再次得到你的帮助。

         图 4显示了我需要的仿真波形。 理想情况是 TBCTR 在 t0时开始计数、而 PWM 在 t1时强制为低电平。 在 T2、TBCTR=TBPRD 的时刻、一个新的 PWM 周期开始。


          遗憾的是、实际实验波形如图所示。 5.在 TBCTR=TBPRD 的时刻(即,时间 t’),没有新的 PWM 周期开始。 这些错误的 PWM 信号会导致错误的调制(CMP1N1P)信号、从而导致控制故障。 我知道、我的频率是200kHz、等于采用 TMS320F2803x 的斜率补偿数字峰值电流模式控制中的频率。 因此、我认为这不是由延时引起的。


       我真的不知道如何解决这个问题、我希望我能得到您的帮助。 非常感谢!


     


     

     

     

     

     

     

     

     

     

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

    EPwm6Regs.DCBCTL.bit.EVT2SRCSEL = 0; //源是 DCBEVT2信号
    EPwm6Regs.DCBCTL.bit.EVT2FRCSYNCSEL = 0;// 0:源是异步信号

    2.尝试增大消隐窗口

    EPwm6Regs.DCFOFFSET=0; //消隐窗口偏移
    EPwm6Regs.DCFWINDOW=50; //0.1us 20.