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.
你(们)好
我尝试使用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模块。 但是,也可以通过计数器比较值(如果您对其进行偏移)创建相位。
[/quote][/quote]如果2000如果发生2000发生CBC110.2191万CBC事件2.8069万事件,2.8069万,则408.5465万则必须4085465必须将PWM4A和PWM4B同时切至PWM4A (不更改时间)请查看下图。 一旦发生CBC跳闸,就会将其路由至同一ePWM模块的A和B输出。 您可以通过TBCTL寄存器的TZA/TZB位控制两者的输出,但不能指定要在ePWM周期中启动行程操作的位置。 所有输出将在跳闸条件下执行TBCTL寄存器定义的操作。
[/quote]如何2000如何在2000在半110.2191万半期2.8069万期CBC2.8069万CBC活动408.5465万活动中4085465中将4A-5B和在第二期活动中将5A-4B削减[/CBC]?请参阅我在这封邮件中的上一封回复。
此致,
Marlyn