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.

[参考译文] TMS320F28388D:所有通道上缺少 PWM 周期

Guru**** 2604225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1067523/tms320f28388d-missing-a-pwm-cycle-on-all-channels

部件号:TMS320F28388D

我使用的 EPWM1至 EPWM6开关频率为30 kHz,而 EPWM7开关频率为120 kHz。 PWM 与主控制器(ePWM1)同步。 死区是1 us。 CMPA 和 CMPPB 是恒定的,等于周期的一半。 当某些相位偏移接近零时,除了 主 PWM 外,我们随机错过了所有 PWM 的整个周期。ePWM2, 当随机跳过周期时,ePWM4和 ePWM 6的相移高于半个周期,ePMW3和 ePWM4的相移较小。

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

    这很可能是因为设置了相移并跳过了一个操作,然后您似乎跳过了一个周期。

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

    感谢 Nima 的回复。 如果是这种情况,为什么所有具有低相位和高相位偏移数字的 PWM 通道都没有执行该操作? 只能让  ePWM2,ePWM4和 ePWM 6 错过一个周期,或者 让 ePMW3和 ePWM4错过一个周期。

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

    很可能是因为您按顺序给他们写信。 订单可能是由于时间的原因导致某些订单失败的原因。

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

    因此,第一个 EPWM1不会接收任何相移。 它的相移始终为零,但在该循环中也不会打开。 上开关关闭并提供负脉冲电压,但 上开关应在半个周期后打开,而不是。 你认为柜台可以有一个安纳托利用于一个切换周期吗?

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

    我不认为你的柜台有一种厌食。 我认为这是您的代码中的错误配置。 那么,对于 EPWM1,您有 PHSEN=0并且您看到了这个问题吗?

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

    我使用了代码生成 Simulink,我已将 ePWM1的相移设置为1,而不是零。 下面是代码:

    EPwm1Regs.TBPHS.All =(EPwm1Regs.TBPHS.All &~0xFFFF0000)| 0x10000
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    然后,您仍将 PHSEN 设置为“启用”模式。 这可能是导致这种情况的原因。 您是否有生成的代码?

    如果您使用的是 MATLAB,我建议您在他们的论坛上提问。

    NIMA

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

    我停用了 ePWM1 (主)的相移,并且使用我们的一组高压直流电源运行良好。 当我更换耗材时,它再次出现问题。 您认为3.3电源或接地发出的噪音是否会导致这样的问题?

    我实际测得的接地电压为3.3 V,以下是我得到的结果:

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

    我不认为噪音是基于您的捕获而产生的问题。 这是定制版吗?

    NIMA

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

    是的,这是一个定制板。  

    以下是我们的 ePWM1代码:

     /* S 函数(c2802xpwm):'<S1>/ePWM'*/


           /*--更新 ePWM1的 CMPA 值--*/

           

             EPwm1Regs.CMPA-bit.CMPA =(uint16_T)(RTB_Switch2);

           }

    /*RTB_Switch2和 RTB_Switch3来自连接到 GPIO 引脚和软件集变量的模拟交换机。

           /*--更新 ePWM1的 CMPD 值--*/

           

             EPwm1Regs.CMPB.Bit.CMPB =(uint16_T)(RTB_Switch3);

           }

    EPwm1Regs.TBCTL.All =(EPwm1Regs.TBCTL.All &~0x3FCF)| 0x0;

         EPwm1Regs.TBCTL2.all =(EPwm1Regs.TBCTL2.All &~0xC000)| 0x0;

         /*//基于时间的 EPWMxSYNCOUT 源启用寄存器

            EPwm1Regs.EPWMSYNCOUTEN.Bit.ZEROEN     =1;//同步输出选择

          *

         EPwm1Regs.EPWMSYNCOUTEN.Bit.Swen = 0;//禁用重置期间启用的 Swen

         EPwm1Regs.EPWMSYNCOUTEN.ALL =(EPwm1Regs.EPWMSYNCOUTEN.All &~0x2)| 0x2;

         /*--设置时基(TB)子模块--*/

         EPwm1Regs.TBPRD = 6664;         //时间基准期间寄存器

    EPwm1Regs.TBPHS.All =(EPwm1Regs.TBPHS.All &~0xFFFF0000)| 0x0;

         //时间基计数器寄存器

         EPwm1Regs.TBCTR = 0x0000;       /*清除计数器*/


        EPwm1Regs.CMPCTL.All =(EPwm1Regs.CMPCTL.All &~0x3C5F)| 0x0;

    EPwm1Regs.CMPCTL2.all =(EPwm1Regs.CMPCTL2.All &~0x3C5F)| 0x0;

         EPwm1Regs.CMPA-Bit.CMPA =3332; //计数器比较寄存器

         EPwm1Regs.CMPB.Bit.CMPB = 3332; //计数器比较 B 寄存器

         EPwm1Regs.CMPC = 0;             //计数器比较 C 寄存器

         EPwm1Regs.CMPD = 0;             //计数器比较 D 寄存器

     

         EPwm1Regs.AQCTLA.ALL = 146;

    EPwm1Regs.AQCTLB.All = 2564;

         EPwm1Regs.AQSFRC.All =(EPwm1Regs.AQSFRC.All &~0xC0)| 0x0;

         EPwm1Regs.AQCSFRC.All =(EPwm1Regs.AQCSFRC.All &~0xF)| 0x0;

     EPwm1Regs.DBCTL.All =(EPwm1Regs.DBCTL.All &~0x8FFF)| 0xB;

         EPwm1Regs.DBRED.Bit.DBRED =(uint16_T)(200.0);

                            //死区发生器上升边缘延迟计数寄存器

         EPwm1Regs.DBFED.Bit.DBFED =(uint16_T)(200.0);

    EPwm1Regs.ETSEL.ALL =(EPwm1Regs.ETSEL.ALL 和~0xFF7F)| 0x9901;

         EPwm1Regs.ETPS.All =(EPwm1Regs.ETPS.All &~0x30)| 0x30;

         EPwm1Regs.ETSOCPS.All =(EPwm1Regs.ETSOCPS.All &~0xF0F)| 0x101;

         EPwm1Regs.ETINTPS.All =(EPwm1Regs.ETINTPS.All &~0xF)| 0x1;

         EPwm1Regs.PCCTL.All =(EPwm1Regs.PCCTL.All &~0x7FF)| 0x0;

    EALLOW;

         EPwm1Regs.Tzsel.all = 0;        // Trip Zone Select Register (EPwm1Regs.Tzsel.all = 0;//跳闸区域选择寄存器)

     

         EPwm1Regs.TZCTL.All =(EPwm1Regs.TZCTL.All &~0xFFF)| 0xFFF;

         EPwm1Regs.TZEINT.ALL =(EPwm1Regs.TZEINT.All &~0x7E)| 0x0;


         EPwm1Regs.DCACTL.All =(EPwm1Regs.DCACTL.All &~0x30F)| 0x4;

         EPwm1Regs.DCBCTL.All =(EPwm1Regs.DCBCTL.All &~0x30F)| 0x0;

         EPwm1Regs.DCTRIPSEL.ALL =(EPwm1Regs.DCTRIPSEL.ALL &~ 0xFFFF)| 0x0;

         EPwm1Regs.TZDCSEL.ALL =(EPwm1Regs.TZDCSEL.ALL 和~0xFFF)| 0x0;

     

    EPwm1Regs.DCFCTL.All =(EPwm1Regs.DCFCTL.All &~0x3F)| 0x10;

         EPwm1Regs.DCFOFFSET = 0;        //数字比较过滤器偏移寄存器

         EPwm1Regs.DCFWINDOW = 0;        //数字比较筛选器窗口寄存器

         EPwm1Regs.DCCAPCTL.All =(EPwm1Regs.DCCAPCTL.All &~0x1)| 0x0;

         EPwm1Regs.HRCNFG.All =(EPwm1Regs.HRCNFG.All &~0xA0)| 0x0;


         EPwm1Regs.EPWMXLINK.Bit.tbPRDLINK = 0;

         EPwm1Regs.EPWMXLINK.Bit.CMPALINK = 0;

         EPwm1Regs.EPWMXLINK.Bit.CMPBLINK = 0;

         EPwm1Regs.EPWMXLINK.Bit.CMPCLINK = 0;

         EPwm1Regs.EPWMXLINK.Bit.CMPDLINK = 0;


         EPwm1Regs.HRPCTL.All =(EPwm1Regs.HRPCTL.All &~0x72)| 0x2;

         EDIS;

       

     ePWM2代码:

    /* S 函数(c2802xpwm):'<S1/ePWM2'*/

           EPwm3Regs.TBPHS.Bit.tbPHS = RTB_RoundingFundion6;

           /*--更新 ePWM3的 CMPA 值--*/

           

             EPwm3Regs.CMPA-Bit.CMPA =(uint16_T)(RTB_Switch2);

           }

           /*--更新 ePWM3的 CMPD 值--*/

           

             EPwm3Regs.CMPB.Bit.CMPB =(uint16_T)(RTB_Switch3);

           }

    EPwm3Regs.TBCTL.All =(EPwm3Regs.TBCTL.All &~0x3FCF)| 0x4;

         EPwm3Regs.TBCTL2.all =(EPwm3Regs.TBCTL2.All &~0xC000)| 0x0;

         EPwm3Regs.EPWMSYNCOUTEN.ALL =(EPwm3Regs.EPWMSYNCOUTEN.ALL &~0x1)| 0x1;

         EPwm3Regs.TBPRD = 6664;         //时间基准期间寄存器

         EPwm3Regs.TBPHS.All =(EPwm3Regs.TBPHS.All &~0xFFFF0000)| 0x0;

         EPwm3Regs.TBCTR = 0x0000;       /*清除计数器*/

         EPwm3Regs.CMPCTL.All =(EPwm3Regs.CMPCTL.All &~0x3C5F)| 0x0;

     EPwm3Regs.CMPCTL2.all =(EPwm3Regs.CMPCTL2.All &~0x3C5F)| 0x0;

         EPwm3Regs.CMPA-Bit.CMPA =3332; //计数器比较寄存器

         EPwm3Regs.CMPB.Bit.CMPB = 3332; //计数器比较 B 寄存器

         EPwm3Regs.CMPC = 0;             //计数器比较 C 寄存器

         EPwm3Regs.CMPD = 0;             //计数器比较 D 寄存器

         EPwm3Regs.AQCTLA.ALL = 146;

         EPwm3Regs.AQCTLB.All = 2564;

         EPwm3Regs.AQSFRC.All =(EPwm3Regs.AQSFRC.All &~0xC0)| 0x0;

         EPwm3Regs.AQCSFRC.All =(EPwm3Regs.AQCSFRC.All &~0xF)| 0x0;

     EPwm3Regs.DBCTL.All =(EPwm3Regs.DBCTL.All &~0x8FFF)| 0xB;

         EPwm3Regs.DBRED.Bit.DBRED =(uint16_T)(200.0);

         EPwm3Regs.DBFED.Bit.DBFED =(uint16_T)(200.0);
    EPwm3Regs.ETSEL.ALL =(EPwm3Regs.ETSEL.ALL 和~0xFF7F)| 0x9901;

         EPwm3Regs.ETPS.all =(EPwm3Regs.ETPS.All &~0x30)| 0x30;

         EPwm3Regs.ETSOCPS.All =(EPwm3Regs.ETSOCPS.All &~0xF0F)| 0x101;

         EPwm3Regs.ETINTPS.All =(EPwm3Regs.ETINTPS.All &~0xF)| 0x1;

         EPwm3Regs.PCCTL.All =(EPwm3Regs.PCCTL.All &~0x7FF)| 0x0;

    EALLOW;

         EPwm3Regs.TZSEL.ALL = 0;        // Trip Zone Select Register (EPwm3Regs.TZSEL.ALL = 0;//跳闸区域选择寄存器)


    EPwm3Regs.TZCTL.All =(EPwm3Regs.TZCTL.All &~0xFFF)| 0xFFF;

         EPwm3Regs.TZEINT.ALL =(EPwm3Regs.TZEINT.All &~0x7E)| 0x0;

         EPwm3Regs.DCACTL.All =(EPwm3Regs.DCACTL.All &~0x30F)| 0x4;

         EPwm3Regs.DCBCTL.All =(EPwm3Regs.DCBCTL.All &~0x30F)| 0x0;

         EPwm3Regs.DCTRIPSEL.ALL =(EPwm3Regs.DCTRIPSEL.ALL &~ 0xFFFF)| 0x0;

         EPwm3Regs.TZDCSEL.ALL =(EPwm3Regs.TZDCSEL.ALL 和~0xFFF)| 0x0;

        EPwm3Regs.DCFCTL.All =(EPwm3Regs.DCFCTL.All &~0x3F)| 0x10;

         EPwm3Regs.DCFOFFSET = 0;        //数字比较过滤器偏移寄存器

         EPwm3Regs.DCFWINDOW = 0;        //数字比较筛选器窗口寄存器

         EPwm3Regs.DCCAPCTL.All =(EPwm3Regs.DCCAPCTL.All &~0x1)| 0x0;

         EPwm3Regs.HRCNFG.All =(EPwm3Regs.HRCNFG.All &~0xA0)| 0x0;

     EPwm3Regs.EPWMXLINK.Bit.tbPRDLINK =2;

         EPwm3Regs.EPWMXLINK.Bit.CMPALINK = 2;

         EPwm3Regs.EPWMXLINK.Bit.CMPBLINK =2;

         EPwm3Regs.EPWMXLINK.Bit.CMPCLINK = 2;

         EPwm3Regs.EPWMXLINK.Bit.CMPDLINK = 2;

    EPwm3Regs.HRPCTL.All =(EPwm3Regs.HRPCTL.All &~0x72)| 0x2;

         EDIS;

     

     

     

     

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

    禁用 epwm1上的相移并查看其是否起作用。 向我发送已禁用 TBPSH 的更新代码,以便我可以验证您是否禁用了它。

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

    它已被禁用  

    EPwm1Regs.TBPHS.All =(EPwm1Regs.TBPHS.All &~0xFFFF0000)| 0x0

            /*-- Update CMPA value for ePWM1 --*/
            {
              EPwm1Regs.CMPA.bit.CMPA = (uint16_T)(rtb_Switch2);
            }
    
            /*-- Update CMPB value for ePWM1 --*/
            {
              EPwm1Regs.CMPB.bit.CMPB = (uint16_T)(rtb_Switch3);
            }
                 EPwm1Regs.EPWMSYNCOUTEN.bit.SWEN = 0;// disable the SWEN enabled during reset
          EPwm1Regs.EPWMSYNCOUTEN.all = (EPwm1Regs.EPWMSYNCOUTEN.all & ~0x2) | 0x2;
          
             /*-- Setup Time-Base (TB) Submodule --*/
          EPwm1Regs.TBPRD = 6664;          // Time Base Period Register
              /* // Time-Base Phase Register
             EPwm1Regs.TBPHS.bit.TBPHS               = 0;          // Phase offset register
           */
          EPwm1Regs.TBPHS.all = (EPwm1Regs.TBPHS.all & ~0xFFFF0000) | 0x0;
    
          // Time Base Counter Register
          EPwm1Regs.TBCTR = 0x0000;        /* Clear counter*/
          
             EPwm1Regs.CMPCTL.all = (EPwm1Regs.CMPCTL.all & ~0x3C5F) | 0x0;
    
          /* EPwm1Regs.CMPCTL2.bit.SHDWCMODE           = 0;          // Compare C Register Block Operating Mode
             EPwm1Regs.CMPCTL2.bit.SHDWDMODE           = 0;          // Compare D Register Block Operating Mode
             EPwm1Regs.CMPCTL2.bit.LOADCSYNC           = 0U;          // Active Compare C Load SYNC Option
             EPwm1Regs.CMPCTL2.bit.LOADDSYNC           = 0U;          // Active Compare D Load SYNC Option
             EPwm1Regs.CMPCTL2.bit.LOADCMODE           = 0U;          // Active Compare C Load
             EPwm1Regs.CMPCTL2.bit.LOADDMODE           = 0U;          // Active Compare D Load
           */
          EPwm1Regs.CMPCTL2.all = (EPwm1Regs.CMPCTL2.all & ~0x3C5F) | 0x0;
          EPwm1Regs.CMPA.bit.CMPA = 3332;  // Counter Compare A Register
          EPwm1Regs.CMPB.bit.CMPB = 3332;  // Counter Compare B Register
          EPwm1Regs.CMPC = 0;              // Counter Compare C Register
          EPwm1Regs.CMPD = 0;              // Counter Compare D Register
    
          /*-- Setup Action-Qualifier (AQ) Submodule --*/
          EPwm1Regs.AQCTLA.all = 146;
                                   // Action Qualifier Control Register For Output A
          EPwm1Regs.AQCTLB.all = 2564;
                                   // Action Qualifier Control Register For Output B
    
          /*	// Action Qualifier Software Force Register
             EPwm1Regs.AQSFRC.bit.RLDCSF              = 0;          // Reload from Shadow Options
           */
          EPwm1Regs.AQSFRC.all = (EPwm1Regs.AQSFRC.all & ~0xC0) | 0x0;
    
          /*	// Action Qualifier Continuous S/W Force Register
             EPwm1Regs.AQCSFRC.bit.CSFA               = 0;          // Continuous Software Force on output A
             EPwm1Regs.AQCSFRC.bit.CSFB               = 0;          // Continuous Software Force on output B
           */
          EPwm1Regs.AQCSFRC.all = (EPwm1Regs.AQCSFRC.all & ~0xF) | 0x0;
    
          /*-- Setup Dead-Band Generator (DB) Submodule --*/
          /*	// Dead-Band Generator Control Register
             EPwm1Regs.DBCTL.bit.OUT_MODE             = 3;          // Dead Band Output Mode Control
             EPwm1Regs.DBCTL.bit.IN_MODE              = 0;          // Dead Band Input Select Mode Control
             EPwm1Regs.DBCTL.bit.POLSEL               = 2;          // Polarity Select Control
             EPwm1Regs.DBCTL.bit.HALFCYCLE            = 0;          // Half Cycle Clocking Enable
             EPwm1Regs.DBCTL.bit.SHDWDBREDMODE        = 0;          // DBRED shadow mode
             EPwm1Regs.DBCTL.bit.SHDWDBFEDMODE        = 0;          // DBFED shadow mode
             EPwm1Regs.DBCTL.bit.LOADREDMODE          = 4U;        // DBRED load
             EPwm1Regs.DBCTL.bit.LOADFEDMODE          = 4U;        // DBFED load
           */
          EPwm1Regs.DBCTL.all = (EPwm1Regs.DBCTL.all & ~0x8FFF) | 0xB;
          EPwm1Regs.DBRED.bit.DBRED = (uint16_T)(200.0);
                             // Dead-Band Generator Rising Edge Delay Count Register
          EPwm1Regs.DBFED.bit.DBFED = (uint16_T)(200.0);
           EPwm1Regs.ETSEL.all = (EPwm1Regs.ETSEL.all & ~0xFF7F) | 0x9901;
          EPwm1Regs.ETPS.all = (EPwm1Regs.ETPS.all & ~0x30) | 0x30;
          EPwm1Regs.ETSOCPS.all = (EPwm1Regs.ETSOCPS.all & ~0xF0F) | 0x101;
          EPwm1Regs.ETINTPS.all = (EPwm1Regs.ETINTPS.all & ~0xF) | 0x1;
    
    
          /*-- Setup PWM-Chopper (PC) Submodule --*/
          /*	// PWM Chopper Control Register
             EPwm1Regs.PCCTL.bit.CHPEN                = 0;          // PWM chopping enable
             EPwm1Regs.PCCTL.bit.CHPFREQ              = 0;          // Chopping clock frequency
             EPwm1Regs.PCCTL.bit.OSHTWTH              = 0;          // One-shot pulse width
             EPwm1Regs.PCCTL.bit.CHPDUTY              = 0;          // Chopping clock Duty cycle
           */
          EPwm1Regs.PCCTL.all = (EPwm1Regs.PCCTL.all & ~0x7FF) | 0x0;
    
          /*-- Set up Trip-Zone (TZ) Submodule --*/
          EALLOW;
          EPwm1Regs.TZSEL.all = 0;         // Trip Zone Select Register
    
          /*	// Trip Zone Control Register
             EPwm1Regs.TZCTL.bit.TZA                  = 3;          // TZ1 to TZ6 Trip Action On EPWM1A
             EPwm1Regs.TZCTL.bit.TZB                  = 3;          // TZ1 to TZ6 Trip Action On EPWM1B
             EPwm1Regs.TZCTL.bit.DCAEVT1              = 3;          // EPWM1A action on DCAEVT1
             EPwm1Regs.TZCTL.bit.DCAEVT2              = 3;          // EPWM1A action on DCAEVT2
             EPwm1Regs.TZCTL.bit.DCBEVT1              = 3;          // EPWM1B action on DCBEVT1
             EPwm1Regs.TZCTL.bit.DCBEVT2              = 3;          // EPWM1B action on DCBEVT2
           */
          EPwm1Regs.TZCTL.all = (EPwm1Regs.TZCTL.all & ~0xFFF) | 0xFFF;
    
          /*	// Trip Zone Enable Interrupt Register
             EPwm1Regs.TZEINT.bit.OST                 = 0;          // Trip Zones One Shot Int Enable
             EPwm1Regs.TZEINT.bit.CBC                 = 0;          // Trip Zones Cycle By Cycle Int Enable
             EPwm1Regs.TZEINT.bit.DCAEVT1             = 0;          // Digital Compare A Event 1 Int Enable
             EPwm1Regs.TZEINT.bit.DCAEVT2             = 0;          // Digital Compare A Event 2 Int Enable
             EPwm1Regs.TZEINT.bit.DCBEVT1             = 0;          // Digital Compare B Event 1 Int Enable
             EPwm1Regs.TZEINT.bit.DCBEVT2             = 0;          // Digital Compare B Event 2 Int Enable
           */
          EPwm1Regs.TZEINT.all = (EPwm1Regs.TZEINT.all & ~0x7E) | 0x0;
    
          /*	// Digital Compare A Control Register
             EPwm1Regs.DCACTL.bit.EVT1SYNCE           = 0;          // DCAEVT1 SYNC Enable
             EPwm1Regs.DCACTL.bit.EVT1SOCE            = 1;          // DCAEVT1 SOC Enable
             EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL      = 0;          // DCAEVT1 Force Sync Signal
             EPwm1Regs.DCACTL.bit.EVT1SRCSEL          = 0;          // DCAEVT1 Source Signal
             EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL      = 0;          // DCAEVT2 Force Sync Signal
             EPwm1Regs.DCACTL.bit.EVT2SRCSEL          = 0;          // DCAEVT2 Source Signal
           */
          EPwm1Regs.DCACTL.all = (EPwm1Regs.DCACTL.all & ~0x30F) | 0x4;
    
          /*	// Digital Compare B Control Register
             EPwm1Regs.DCBCTL.bit.EVT1SYNCE           = 0;          // DCBEVT1 SYNC Enable
             EPwm1Regs.DCBCTL.bit.EVT1SOCE            = 0;          // DCBEVT1 SOC Enable
             EPwm1Regs.DCBCTL.bit.EVT1FRCSYNCSEL      = 0;          // DCBEVT1 Force Sync Signal
             EPwm1Regs.DCBCTL.bit.EVT1SRCSEL          = 0;          // DCBEVT1 Source Signal
             EPwm1Regs.DCBCTL.bit.EVT2FRCSYNCSEL      = 0;          // DCBEVT2 Force Sync Signal
             EPwm1Regs.DCBCTL.bit.EVT2SRCSEL          = 0;          // DCBEVT2 Source Signal
           */
          EPwm1Regs.DCBCTL.all = (EPwm1Regs.DCBCTL.all & ~0x30F) | 0x0;
    
          /*	// Digital Compare Trip Select Register
             EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL      = 0;          // Digital Compare A High COMP Input Select
    
             EPwm1Regs.DCTRIPSEL.bit.DCALCOMPSEL      = 0;          // Digital Compare A Low COMP Input Select
             EPwm1Regs.DCTRIPSEL.bit.DCBHCOMPSEL      = 0;          // Digital Compare B High COMP Input Select
             EPwm1Regs.DCTRIPSEL.bit.DCBLCOMPSEL      = 0;          // Digital Compare B Low COMP Input Select
    
           */
          EPwm1Regs.DCTRIPSEL.all = (EPwm1Regs.DCTRIPSEL.all & ~ 0xFFFF) | 0x0;
    
          /*	// Trip Zone Digital Comparator Select Register
             EPwm1Regs.TZDCSEL.bit.DCAEVT1            = 0;          // Digital Compare Output A Event 1
             EPwm1Regs.TZDCSEL.bit.DCAEVT2            = 0;          // Digital Compare Output A Event 2
             EPwm1Regs.TZDCSEL.bit.DCBEVT1            = 0;          // Digital Compare Output B Event 1
             EPwm1Regs.TZDCSEL.bit.DCBEVT2            = 0;          // Digital Compare Output B Event 2
           */
          EPwm1Regs.TZDCSEL.all = (EPwm1Regs.TZDCSEL.all & ~0xFFF) | 0x0;
    
          /*	// Digital Compare Filter Control Register
             EPwm1Regs.DCFCTL.bit.BLANKE              = 0;          // Blanking Enable/Disable
             EPwm1Regs.DCFCTL.bit.PULSESEL            = 1;          // Pulse Select for Blanking & Capture Alignment
             EPwm1Regs.DCFCTL.bit.BLANKINV            = 0;          // Blanking Window Inversion
             EPwm1Regs.DCFCTL.bit.SRCSEL              = 0;          // Filter Block Signal Source Select
           */
          EPwm1Regs.DCFCTL.all = (EPwm1Regs.DCFCTL.all & ~0x3F) | 0x10;
          EPwm1Regs.DCFOFFSET = 0;         // Digital Compare Filter Offset Register
          EPwm1Regs.DCFWINDOW = 0;         // Digital Compare Filter Window Register
    
          /*	// Digital Compare Capture Control Register
             EPwm1Regs.DCCAPCTL.bit.CAPE              = 0;          // Counter Capture Enable
           */
          EPwm1Regs.DCCAPCTL.all = (EPwm1Regs.DCCAPCTL.all & ~0x1) | 0x0;
    
          /*	// HRPWM Configuration Register
             EPwm1Regs.HRCNFG.bit.SWAPAB              = 0;          // Swap EPWMA and EPWMB Outputs Bit
             EPwm1Regs.HRCNFG.bit.SELOUTB             = 0;          // EPWMB Output Selection Bit
           */
          EPwm1Regs.HRCNFG.all = (EPwm1Regs.HRCNFG.all & ~0xA0) | 0x0;
    
          /* Update the Link Registers with the link value for all the Compare values and TBPRD */
          /* No error is thrown if the ePWM register exists in the model or not */
          EPwm1Regs.EPWMXLINK.bit.TBPRDLINK = 0;
          EPwm1Regs.EPWMXLINK.bit.CMPALINK = 0;
          EPwm1Regs.EPWMXLINK.bit.CMPBLINK = 0;
          EPwm1Regs.EPWMXLINK.bit.CMPCLINK = 0;
          EPwm1Regs.EPWMXLINK.bit.CMPDLINK = 0;
    
          /* SYNCPER - Peripheral synchronization output event
             EPwm1Regs.HRPCTL.bit.PWMSYNCSEL            = 1;          // EPWMSYNCPER selection
             EPwm1Regs.HRPCTL.bit.PWMSYNCSELX           = 0;          //  EPWMSYNCPER selection
           */
          EPwm1Regs.HRPCTL.all = (EPwm1Regs.HRPCTL.all & ~0x72) | 0x2;
          EDIS;
        }
          
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在这种情况下,导致该问题的最大相移值是多少?

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

    Marzieh,

    您是否确定了导致此问题的 PHS 值阈值?

    NIMA

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

    感谢您的跟进。 当您询问相移值后,我检查了模拟,发现相移从-val 变为+val。 我们编程消极相移的方法是将其输入为(周期相移),因此我认为在6000个周期中,它可能从5800到200,这正是导致问题的原因。 然后,我添加了另一条线,如果相移在-val 和+val 范围内,将为相移分配零。 我只是在某些情况下测试过这种情况,到目前为止它已经运行了。 如果它在任何情况下都能正常工作,我将关闭该案例。 非常感谢你的帮助。

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

    感谢您单击所有与帮助您找到解决方案相关的线程响应上的已验证答案(绿色按钮)。