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.8069万:F2.8069万 - CBC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1102191/tms320f28069-f28069---cbc

部件号:TMS320F2.8069万

你(们)好

我尝试使用F2.8069万的CBC模块。 我编程了PWM4A/B和PWM5A/B,以便在压实器COMP2A事件中关闭它们。  为满足应用需求,PWM4和PWM5的相位为45°。 比较器出现一次是在PWM4为正时,另一次是在PWM5为正时。 此处是配置代码的摘要。

我使用DacDrvCnf.c设置比较器。  Comparator2必须同时关闭两个PWM。

DacDrvCnf (2,电压,0,0);

PWM初始化

   //*********************************************************
   //为PWM4初始化
   //*********************************************************
   //根据比较器1输出定义事件(DCAEVT2)
   (* ePWM[n]).DCTRIPSEL.bit.DCAHCOMPSEL   = DC_COMP2OUT;   // DCAH =比较器2输出
   (*ePWM[n])。TZDCSEL.bit.DCAEVT2          = TZ_DCAH_HI;   
                                                             //当比较器输出变高时)    
   (* ePWM[n]).DCACTL.bit.EVT2SRCSEL      = DC_EVT_FLT;//DC_EVT2;
   (* ePWM[n]).DCACT.Bit.EVT2FRCSYNCSEL = DC_EVT_Async;//
   //启用DCAEVT2作为CBC源
   (* ePWM[n]).TZsel.bit.DCAEVT2         = 1;/CBC

   //我们希望DCAEVT1和DCBEVT1事件做什么?
   (* ePWM[n]).TZCTL.bit.TZA   = TZ_FORT_LO;   // EPWMxA将变低
   (* ePWM[n]).TZCTL.bit.TZB   = TZ_FORT_LO;   // EPWMxB将变低

   (* ePWM[n]).TZEINT.Bit.DCAEVT2 = 1;//启用它

   //===========================================================================================================================================
   //事件过滤配置
   (* ePWM[n]).DCFCTL.bit.SRCSEL      = DC_SRC_DCAEVT2;
   (* ePWM[n]).DCFCTL.bit.Blanke      = DC_BLANK_ENE;
   (* ePWM[n]).DCFCTL.bit.PULSESEL      = DC_PULSESEL_ZERO;

   (*ePWM[n])。DCFOFFSET             = 2;      //空白窗口偏移= CMPA (n+1)
   (*ePWM[n])。DCFWINDW             = 10;      //空白窗口长度-初始值
   //===========================================================================================================================================



   //*********************************************************
   //初始化PWM5
   //*********************************************************
   //根据比较器1输出定义事件(DCAEVT2)
   (* ePWM[n+1]).DCTRIPSEL.bit.DCAHCOMPSEL   = DC_COMP2OUT;   // DCAH =比较器2输出
   (* ePWM[n+1]).TZDCSEL.bit.DCAEVT2     = TZ_DCAH_HI;   // DCAEVT1 = DCAH HIGH (将变为活动状态)
                                                   //当比较器输出变高时)       
   (* ePWM[n+1]).DCACTL.bit.EVT2SRCSEL        = DC_EVT_FLT;//DC_EVT2;     
   (*ePWM[n+1]).DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_Async;//采用异步路径
   //启用DCAEVT2作为CBC
   (* ePWM[n+1]).TZSEL.bit.DCAEVT2         = 1;

   //我们希望DCAEVT1和DCBEVT1事件做什么?
   (* ePWM[n+1]).TZCTL.bit.TZA   = TZ_FORT_LO;   // EPWMxA将变低
   (* ePWM[n+1]).TZCTL.bit.TZB   = TZ_FORT_LO;   // TZ_FORT_LO;   // EPWMxB将变低

   (*ePWM[n+1]).TZEINT.Bit.DCAEVT2 =1;//启用它

   //===========================================================================================================================================
   //事件过滤配置
   (* ePWM[n+1]).DCFCTL.bit.SRCSEL         = DC_SRC_DCAEVT2;
   (* ePWM[n+1]).DCFCTL.bit.Blanke         = DC_BLANK_ENABLE;
   (* ePWM[n+1]).DCFCTL.bit.PULSESEL      = DC_PULSESEL_ZERO;

   (*ePWM[n+1])。DCFOFFSET                = 2;      //空白窗口偏移= CMPA (n+1)
   (*ePWM[n+1])。DCFWINDW                = 10;      //空白窗口长度-初始值
   //===========================================================================================================================================
   EDIS;

和其他部分

__interrupt void epwm4_tz1_int_isr (void){

   CountEvent++;

   EALLOW;
   EPwm4Regs.TZCLL.ALL      = 0xFF;//清除标志
   EDIS;

   //确认此中断以接收来自组2的更多中断
   PieCtrlRegs.PIEACK/bit.ACK4 = 1;

}

PWM5的代码相同。

=>中断正常工作。

=> PWM4和5的CBC标志,DCAEVT2标志和INT标志出现

我清除了它和CBC标志,但对我来说CBC应该自动重新激活PWM,而不需要它或清除标志,权限?

我想做的是关闭COMP2A事件上的PWM4 A/B和PWM5 A/B,但我希望PWM重新启动,以便在半期事件或期间事件(如果COMP事件明显消失)上继续循环,而不显示INTS或清除标志。

如何执行? 我希望我明白了...

感谢你的帮助

OL

 

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

    您好,

    我110.2191万我要2.8069万要做2.8069万做的是在Comp2A事件上关闭PWcyA/B和PWM5 A/B,但我希望COMPs在事件结束或清除期间(明显消失)继续进行。

    您当前的实施是正确的。 清除CBC标志的唯一方法是写入TZCLR寄存器。 这是在ZRO,Period,零或Period事件(TZCLR[CBCPULSE])中实施PWM重新启动的唯一方法。  

    此致,

    Marlyn

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

    您好,

    感谢您的回答。 在F2.8069万数据表SPRUH18G中,我发现了这一点

    因此,当升计数PWM达到零而不需要中断时,应该自动清除该值,并且清除该位。 但如何呢? PWMs在水平行程设置(TZLO)。

    此致,

    OL

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

    您好,OL:

    PWM保持2000保持水平2000水平跳110.2191万跳闸2.8069万闸设置2.8069万设置(TZLO)408.405万(TZLO)。4084050。

    您是否已确认行程不再存在?

    所以,2000,当2000当upcount110.2191万upcount PWM2.8069万 PWM达到2.8069万达到零408.405万零时4084050时,应该自动清除它,而不需要中断和清除位? [/引述]

    我需要在硬件上测试这一问题,并给您提供明确的答案。

    此致,

    Marlyn

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

    您好,Marlyn:

    昨天,我做了很多测试。 很明显,PWMxA工作正常,当计数器在计数模式下达到周期或零时重新启动。
    但是,PWMxB不受影响。 PWM A和B在AQCTLA中设置为互补模式。
    PWMsxB始终为零,没有变化,而如果我停用CBC,它们将正常工作。
    因此,我也使用DBCEVT2为PWMxB设置CBC,这与DCAEVT2完全相同,但没有任何帮助,我没有更改PWMxB的状态。
    典型的情况是,PWMx1A移动180°(以查看影响)。 在这种情况下,我应该在半个时期内拥有受跳闸影响的PWM4A以及互补的PWM PWM5B,反之亦然。

    事实上,PWM4B必须与PWM5A并联,而PWM5B必须与PWM4A并联,以这种方式进行桥梁工程。
    PWM4A和PWM5A可以分阶段。

    如果发生CBC事件,则必须同时在(不更改PWM4B和PWM5A保持为零)处切割PWM4A和PWM5B,并且在CBC跳闸时必须同时切割对等PWM5A和PWM4B (不更改PWM5B和PWM4A保持为零)。 在这两种情况下,PWM都应在周期或半周期重新启动。
    如何在CBC事件中将4A-5B减半,在第二个CBC事件中将5A-4B减半?
    此致,
    OL

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

    OL,

    Marlyn不在办公室,将于周一回来,届时她将回答您的问题。 感谢您的耐心等待。

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

    你好,我的

    然而PWMxB2000PWMxB不2000不受影响110.2191万受影响。2.8069万。</s>2.8069万 408.5465万4085465PWM A和B在AQCTLA中设置为互补模式。
    PWMsxB始终为零,没有任何变化,而如果我停用CBC,它们将正常工作。

    请查看您的其余初始化代码,了解如何设置时基,计数器比较和操作限定符子模块?

    \n事实上2000事实上,2000,PWM4B110.2191万PWM4B必须2.8069万必须与2.8069万与PWM5A408.5465万PWM5A和4085465和PWM5A处于同一阶段,PWM5B必须与PWM4A处于同一阶段。
    PWM4A和PWM5A可以分阶段进行。[/QUOT]

    您不能通过TBPHS寄存器将特定相位应用于EPWM4A,将另一个相位应用于EPWM4B,这仅适用于每个ePWM模块。 但是,也可以通过计数器比较值(如果您对其进行偏移)创建相位。  

    如果2000如果发生2000发生CBC110.2191万CBC事件2.8069万事件,2.8069万,则408.5465万则必须4085465必须将PWM4A和PWM4B同时切至PWM4A (不更改时间)

    请查看下图。 一旦发生CBC跳闸,就会将其路由至同一ePWM模块的A和B输出。 您可以通过TBCTL寄存器的TZA/TZB位控制两者的输出,但不能指定要在ePWM周期中启动行程操作的位置。 所有输出将在跳闸条件下执行TBCTL寄存器定义的操作。

    如何2000如何在2000在半110.2191万半期2.8069万期CBC2.8069万CBC活动408.5465万活动中4085465中将4A-5B和在第二期活动中将5A-4B削减[/CBC]?

    请参阅我在这封邮件中的上一封回复。

    此致,

    Marlyn

    [/quote]
    [/quote][/quote]