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.8379万D:ePWM模块中死区和作用限定符的意外行为

Guru**** 2591690 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/657699/tms320f28379d-unexpected-behavior-of-dead-band-and-action-qualifier-in-the-epwm-module

部件号:TMS320F2.8379万D

大家好,

我尝试使用TMS320F2.8379万D实现峰值电流模式控制。

将1V信号应用到CMPIN1P引脚。 斜面发生器用于比较器的负输入。 CMCSS模块1配置了以下代码:

CMPS_enableModule(CMPSS1_base);
CMPS_configHighComparator (CMPSS1_BASE,CMPS_INSRC_DAC);
CMPS_configDAC (CMPSS1_BASE,CMPS_DACVAL_PWMSYNC |
CMPS_DACREF_VDDA |
CMPS_DACSRC_RAMP);
CMPSS_configOutputsHigh (CMPSSS1_BASE,CMPSS_TRIGK_FILTER |
CMPS_TRIPOUT_SYNC_COMP);
CMPS_setRampDecValue (CMPSSS1_BASE,RAMP_RECOTION);
CMPS_setRampDelayValue (CMPSSS1_BASE,RAMP_DELAY);
CMPS_configRamp (CMPS1_BASE,
2.7万,
渐变递减,
斜坡延迟,
1,
TRUE);
CMPS_configFilterHigh (CMPSSS1_BASE,2,20,15);
CMPS_initFilterHigh (CMPSSS1_BASE); 

GPIO _setMasterCore (11,GPIO核心_CPU1);
GPIO_setPinConfig (GPIO _11_OUTPUTXBAR7);
GPIO_setDirectionMode (11,GPIO_DIR_MODE_OUT);
GPIO _setPadConfig (11,GPIO PIN类型标准);
xbar_setOutputMuxConfig (XBAR_OUTPUT7,XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
xbar_enableOutputMux (XBAR_OUTPUT7,XBAR_MUX00); XBAR_setEPWMMuxConfig (XBAR_TRIP4,XBAR_ePWM_MUX00_CMPSS1_CTRIPH); XBAR_enableEPWMMux (XBAR_TRIP4, Xbar_MUX00);

这按预期工作。

现在有两个选项可用于配置ePWM模块。

选项1:使用跳闸区域的传统方式,与旧ePWM类型1相同

//设置TBCLK
ePWM_setTimeBasePeriod (EPWM1_BASE,PWM_TIMER_TBPRD);
ePWM_setPhaseShift (EPWM1_BASE,0);
ePWM_setTimeBaseCounter (EPWM1_BASE, 0U);
ePWM_setSyncOutPulseMode (EPWM1_BASE,ePWM_SYNC_Out_PULSE_ON_COUNT_ZERO);

//设置计数器模式
ePWM_setTimeBaseCounterMode (EPWM1_BASE,ePWM_COUNTRY_MODE_UP);
ePWM_dislockPhaseLoad (ableWM1_BASE);
eEPcalseter,PWM Pressetbase
ePWM_Clock_diver_1,
ePWM_HSCLOCK分隔符_1);

//设置阴影
ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,
ePWM_counter_compare_A,
ePWM_COMP_LOG_ON_CNTR_ZERO);
ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,
ePWM_counter_compare_B,
ePWM_COMP_LOW_ON_CNTR_ZERO);
//设置比较值
ePWM_setCounterCompareValue (EPWM1_BASE,
ePWM_counter_compare_A,
0);

//设置操作
ePWM_setActionQualifierAction (EPWM1_base,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT高,
ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO);
ePWM_setActionQualifierAction (EPWM1_BASE,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);

//设置数字比较
// TRIP4 -> DCBH
ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE,
ePWM_DC_combinational_TRIPIN4,
ePWM_DC_TYPE_DCBH);
// DCBH -> DCBEVT2
ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE,
ePWM_TZ_DC_OUTPT_B2,
ePWM_TZ_EVENT_DCXH_HIGH);
//将DCB启用为CBC
ePWM_enableTripZoneSignals (EPWM1_BASE,ePWM_TZ_SIGNAL_DCBEVT2);
//设置跳闸区域
ePWM_setTripZoneAction (EPWM1_BASE,ePWM_TZ_ACT_EVENT_TZ,ePWM_TZ_LOW操作);ePWM_

这按预期工作。 当Cmpss1Regs.RAMPMAXREFS值从0线性增加到4万时,PWM在开始时为低,一旦斜坡启动值超过1V,将生成小PWM脉冲。

示波器截图显示占空比从0上升到25 %。 通过比较器脉冲,PWM变为低。 一切都如预期的那样工作。

脚注:PWM1_L为永久低电平。 这应该是PWM1_H的反向信号,但不能用于DSP。 翻转和死区将通过硬件门外部生成。

选项2:使用Action Qualliifier和Dead Band的新方法

使用Action Qualifier (操作限定符)而不是使用跳闸区域来清除PWM信号。 这具有与死区模块生成互补PWM信号的优势。

//设置TBCLK
ePWM_setTimeBasePeriod (EPWM1_BASE,PWM_TIMER_TBPRD);
ePWM_setTimeBaseCounter (EPWM1_BASE,0U);
ePWM_setSyncOutPulseMode (EPWM1_BASE, ePWM_SYNC_OUT PULSE_ON_COUNTER_ZERO);

//设置计数器模式
ePWM_setTimeBaseCounterMode (EPWM1_BASE,ePWM_COUNT_MODE_UP);
ePWM_DisablePhaseShiftLoad (EPWM1_BASE);
ePWM_setClockPrescaler (EPWM1_BASE,
ePWM_Clock_diver_1,
ePWM_HSCLOCK分隔符_1);

//设置阴影
ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,
ePWM_counter_compare_A,
ePWM_COMP_LOG_ON_CNTR_ZERO);
ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,
ePWM_counter_compare_B,
ePWM_COMP_LOW_ON_CNTR_ZERO);

//设置比较值
ePWM_setCounterCompareValue (EPWM1_BASE,
ePWM_counter_compare_A,
0);

//设置死区
ePWM_setDeadBandDelayPolarity (EPWM1_BASE,ePWM_DB_FED,ePWM_DB_POLICY_ACTIVE_LOW);
ePWM_setDeadBandDelayMode (EPWM1_BASE,ePWM_DB_RED, TRUE);
ePWM_setDeadBandDelayMode (EPWM1_BASE,ePWM_DB_FED,TRUE);
ePWM_setRisingEdgeDelayCount (EPWM1_BASE, PWM_DB);
ePWM_setFallingEdgeDelayCount (EPWM1_BASE,PWM_DB);

//设置操作
ePWM_setActionQualifierAction (EPWM1_BASE,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT高,
ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO);
ePWM_setActionQualifierAction (EPWM1_BASE,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);

//设置数字比较
// TRIP4 -> DCBH
ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE,
ePWM_DC_combinational_TRIPIN4,
ePWM_DC_TYPE_DCBH);
// DCBH -> DCBEVT2
ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE,
ePWM_TZ_DC_OUTPT_B2,
ePWM_TZ_EVENT_DCXH_HIGH);

//将DCB启用为T1源
ePWM_setActionQualifierT1TriggerSource (EPWM1_BASE,ePWM_AQ_TRIGG_EVENT_TRIG_DCB_2);

ePWM_setActionQualifierAction (EPWM1_BASE,
ePWM_AQ_OUTPUT A,
ePWM_AQ_OUTPUT低,
ePWM_AQ_OUTPT_ON_T1_COUNT_UP); 

COMPSS1初始化代码与选项1相同。

通过此实施,我有两个意外的行为。

1:当斜坡起始值低于比较器负输入的1V时,为什么是50 % 的占空比(这是CMPA的值)。 我的理解是,它应该为0。

2:死区模块未生成反向门信号。 Dead Band模块应独立于Action Qualifier模块。

此致,

托比亚斯

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

    作为一个简单的测试,我将DCBL[OUTSWAP]位从0b00更改为0b11。 PWM信号的极性仅在斜率的起始值高于比较器的负输入后更改(~11.3ms后的最后一张图片)。 在此之前,PWM信号与没有变化的情况完全相同。 这表示跳闸区域模块中发生了一些情况。

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

    托比亚斯,

    您应该能够使用方法二来形成互补波形。

    很抱歉,我看图表时,对您设备的配置和执行状态了解不够。 是否可以在系统中调试设备? 我建议在比较器跳闸之前读取PWM配置,出现错误。 您是否在第一次比较器跳闸后设置PWM配置的其余部分?

    尝试删除代码的比较器部分并正确配置PWM,请注意,如果在完全配置之前打开PWM,您将获得奇怪的输出。  

    此致,
    科迪  

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

    Cody,

    我的代码基于驱动程序库的cmps_ex1_asynch示例代码。 主菜单如下所示:

    void main (void)
    {
    device_init();
    DEVICE_INITGPIO ();
    interrup_initModule();
    interrupT_initVectorTable();
    
    
    sysctl_disablePeripheral (sysctl_Periph_CLK_TBCLKSYNC);
    InitPWMGPI();
    InitEPWM1();
    sysctl_enablePeripheral (sysctl_Periph_CLK_TBCLKSYNC);
    
    InitCMP1();
    
    EINT;
    ERTM;
    
    同时(1)
    {
    }
    } 

    initCMP1代码与上面的代码完全相同。 InitPWM代码与上述代码相同,并启用了一个附加中断:

    ePWM_enableInterrupt (EPWM1_BASE);
    ePWM_setInterruptSource (EPWM1_BASE,ePWM_INT_TBCTR _U_CMPC);
    Interrupt_enable (INT_EPWM1);
    Interrupt_register (INT_EPWM1, &ISRPreControlTask);
    ePWM_setInterruptEventCount (EPWM1_BASE,1);
    ePWM_clearEventTriggerInterruptFlag (EPWM1_BASE);
    Interrupt_clearACKGroup (interrupT_ACK_Group3); 

    中断代码看起来是

    __interrupt void ISRPreControlTask (void)
    {
    
    rampstart =__fmin(rampstart + DVID,__fmax(rampstart, rampstartef));
    rampstart =__fmax(rampstart - DVID,__fmin(rampstart,rampstartref);cmpss_trisetruptw_uspbase
    
    (rampbase)
    
    
    interrupT_clearACKGroup(interrupT_ACK_Group3);
    } 

    我将代码加载到C2000并启动它。 之后,我在CCS的表达式窗口中将rampstartref设置为6万,中断将Cmpss1Regs.RAMPMAXREFS的值从0线性增加到6万。

    附件中是源代码。 由于硬件我使用controlCARD检测站R 4.1 ,因此示波器连接到引脚49,51 (PWM)和63 (CMPoutput)。 此外,1V电源连接到引脚15 (Ain2)。

    e2e.ti.com/.../cmpss_5F00_ex1_5F00_asynch.c

    我还尝试将InitCMP1移到InitEPWM1上方。 这不会改变任何内容。

    增加rampmaxref之前ePWM寄存器的内容是:

    TBCTL	0x0010	时间基础控制寄存器[内存映射]	
    TBCTL2	0x0000	时间基础控制寄存器2 [内存映射]	
    TBCTR	0x03E4	时间基础计数器寄存器[内存映射]	
    TBSTS	0x0003	时间基础状态寄存器[内存映射]	
    CMPCTL	0x0000	计数器比较控制寄存器[内存映射]	
    CMPCTL2	0x0000	计数器比较控制寄存器2 [内存映射] 	
    DBCTL	0x000B	死带发生器控制寄存器[内存映射]	
    DBCTL2	0x0000	死带发生器控制寄存器2 [内存映射]	
    AQCTL	0x0000	Action Qualifier控制寄存器[内存映射]	
    AQTEL SRCS0x0003		操作限定器触发事件源选择寄存器[内存映射]	
    PCCTL	0x0000	PWM Chopper控制寄存器[内存映射]	
    HRCNFG	0xHR0000	内存注册器[内存映射 Mapped]	
    HRPWR	0x0000	HRPWM功率寄存器[内存已映射]	
    HRMSTEP	0x0000	HRPWM MEP步进寄存器[内存已映射]	
    HRCNFG2	0x0000	HRPWM配置2寄存器[内存已映射]	
    HRPCTL	0x0000	高分辨率期间控制寄存器[内存已映射]	
    TRREM	0x0000	转换器高分辨率余数寄存器[内存已映射]	
    GLDCTL	0x0000	全局负载控制寄存器[内存 已映射]	
    GLDCFG	0x0000	Global PWM Load Config Register [已映射内存]	
    EPWMXLINK	0x0万	ePWMx Link Register [已映射内存]	
    AQCTLA	0x0012	输出A的操作限定符控制寄存器[已映射内存]	
    AQCTLA2	0x0001	输出A的附加操作限定符控制寄存器[已映射内存]	
    AQTLB	0x0000	操作限定符控制寄存器[内存 Mapped]	
    AQCTLB2	0x0000	Additional Action Qualifier Control Register for Output B [Memory Mapped]	
    AQSFRC	0x0000	Action Qualifier Software Force Register [Memory Mapped]	
    AQCSFRC	0x0000	Action Qualifier Action Qualifier Continuous S/W Force Register [Memory Mapped]	
    DBREDHR	0x0000	Dead-Band Generator Rising Edge Delay High Resolution Mirror Register [Memory Mapped]	
    DBRED	0x0064	Dead-Generator Rising Band Rising 边缘延迟高分辨率镜像寄存器[内存映射]	
    DBFEDHR	0x0000	死带发生器下降边缘延迟高分辨率寄存器[内存映射]	
    DBFED	0x0064	死带发生器下降边缘延迟计数寄存器[内存映射]	
    TBPHS	0x0万	时间基准相位高[内存映射]	
    TBPRDHR	0x0000	时间基准期间高分辨率寄存器[内存映射]	
    TBPRPRPRPRD 	0x0411	时间基准期间寄存器[内存映射]	
    CMPA	0x02BC0000	计数器比较寄存器[内存映射]	
    CMBB	0x0万	比较B寄存器[内存映射]	
    CMPC	0x0320	计数器比较C寄存器[内存映射]	
    CMPD	0x0000计数	器比较D寄存器[内存映射]	
    GLDCTL2	0x0000	全局PWM负载控制寄存器2 [内存映射]	
    TZSEL	0x0000 	跳闸区域选择寄存器[内存映射]	
    TZDCSEL	0x0400	跳闸区域数字比较器选择寄存器[内存映射]	
    TZCTL	0x0000	跳闸区域控制寄存器[内存映射]	
    TZCTL2	0x0000	附加跳闸区域控制寄存器[内存映射]	
    TZCTLDCA	0x0000	跳闸区域控制寄存器数字比较A [内存映射]	
    TZCTLDCB	0x0000	跳闸区域控制寄存器 数字比较B [内存已映射]	
    TZEINT	0x0000	跳闸区域启用中断寄存器[内存已映射]	
    TZFLG	0x0040	跳闸区域标志寄存器[内存已映射]	
    TZCBCFLG	0x0000	跳闸区域CBFLG	
    	0x0000	跳闸区域OST标志寄存器[内存已映射]	
    TZCLR	0xCC0000	跳闸区域清除寄存器[内存已映射]	
    TZCCLR	0xCC0000 	跳闸区域CBC清除寄存器[内存映射]	
    TZOSTCLR	0x0000	跳闸区域OST清除寄存器[内存映射]	
    TZFRC	0x0000	跳闸区域强制寄存器[内存映射]	
    ETSEL	0x004C	事件触发器选择寄存器[内存映射]	
    ETPS	0x0010	事件预刻度寄存器[内存触发器]	
    ETFLG	0x0000	事件触发器标志寄存器[内存映射]	
    ETCLR	0x0000事件映射[Memory Mapped] ETCLR 0x0000 	事件触发器清除寄存器[内存映射]	
    ETFRC	0x0000	事件触发器强制寄存器[内存映射]	
    ETINTPS	0x0001	事件触发器中断预刻度寄存器[内存映射]	
    ETSOCPS	0x0000	事件	
    			
    		触发器SOC预刻度寄存器[内存映射] ETCNTINITCTL 0x0000事件触发器初始化控制寄存器[内存映射] ETCNTINIT 0x0000事件触发器计数器初始化	
    	计数器[DCT0DFFR 	比较行程选择寄存器[内存映射]	
    DCACTL	0x0000	数字比较A控制寄存器[内存映射]	
    DCBCTL	0x0000	数字比较B控制寄存器[内存映射]	
    DCFCTL	0x0000	数字比较滤波器控制寄存器[内存映射]	
    DCCAPCTL	0x0000	数字比较捕获控制寄存器[内存映射]	
    DCFOFFSET	0x0000	数字比较滤波器偏移寄存器[内存 Mapped]	
    DCFOFFSETCNT	0x0000	Digital Compare Filter Offset Counter Register [内存已映射]	
    DCCFWINDOW	0x0000	Digital Compare Filter Window Register [内存已映射]	
    DCCFWINDOWCNT	0x0000	Digital Compare Filter Window Counter Register [内存已映射]	
    DCCAP	0x0000	Digital Compare Counter Capture Register [内存已映射]	
    DCAHTRIPSEL	0x0000	Digital Compare Trip Select [内存已映射DCALIPTR0000 Digital Compare [内存已映射] DCALIPTR0000 	
    		数字比较AL跳闸选择[内存映射]	
    DCBHTRIPSEL	0x0008	数字比较BH跳闸选择[内存映射]	
    DCBLTRIPSEL	0x0000	数字比较BL跳闸选择[内存映射] 	
    

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

    托比亚斯,

    1. 检查您是否正确接收来自比较器的信号。 这可以通过将输出导至引脚并使用示波器进行观察来实现。
    2. 重新阅读并验证跳闸区域设置。 请注意,即使您仅使用需要将其他行程(CBC,OSHT,DCxEVTy)操作配置为"不执行任何操作"的行程之一,也需要配置所有行程区域设置。 有时,人们忘记配置一个较高优先级的事件,这会导致奇怪的结果。

    此致,
    科迪  

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

    您好,Cody:

    1.上面的最后一个示波器画面显示比较器1的输出(蓝色曲线)。 分割屏幕的底部显示放大的迹线。 当比较器的负输入远低于比较器正输入的1V时,输出将永久高。 当负极输入略高于1V时,补偿输出将在较小的期间内变为低电平。 在这两种情况下,PWM在PWM循环开始时都不会变低。

    2.跳闸区域未使用。 所有功能均被禁用

    TZSEL      0x0000 禁用所有单触发和CBC跳闸源

    TZDCSEL  0x0400 DCBH =高,DCBL =不在乎,所有其他都被禁用

    TZCTL      0x0000 高阻抗,但不应有任何区别,因为事件在TZSEL寄存器中被禁用

    未     启用TZCTL2 0x0000 TZControl 2

    TZCTLDCA 0x0000 高阻抗,但不应有任何区别,因为事件在TZSEL寄存器中被禁用

    TZCTLDCB 0x0000 高阻抗,但不应有任何区别,因为事件在TZSEL寄存器中被禁用

    TZEINT     0x0000 未启用中断

    将TZCTL,TZCTLDCA和TZCTLDCB从高阻抗更改为不执行任何操作后,将出现反转EPWM1B。

    第一个问题已解决。 现在EPWMB在所有情况下都是EPWMA的补充。 为什么即使未启用行程来源,TZCTL设置也会有所不同?

    剩下的问题是,当比较器输出为永久高时,为什么操作限定符T1不工作?

    此致,
    托比亚斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    托比亚斯,
    我的首选项是使用跳闸区域强制PWM为低。 这种说法T1应该能够在AQ中实现。 我查看了您先前从内存中提取的寄存器值,它们似乎已正确设置了T1。 由于您对代码进行了一些修改,您能否重新检查这些值并确保将T1选为源并配置为强制输出低电平?

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

    您好,Cody:

    我确实了解使用跳闸区域强制PWM降低的想法。 这按预期工作,并已在早期DSP版本中使用。 这有一个缺点,即在外部生成死区。 由于您改进了ePWM模块,我渴望尝试使用操作限定符的新概念。 这会带来更大的灵活性,因为我可以使用内部死区,并且可以通过软件进行调整。

    现在回到问题。 我检查了寄存器,唯一的区别是TZCTL,TZCTRLDCA和TZCTRLDCB寄存器,因为我将它从高阻抗更改为什么都不做。

    您是否能够在主板上重现该问题?

    此致,
    托比亚斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    托比亚斯,
    我同意在使用互补信号时使用TZ强制输出的缺点。 我没有尝试重复这个问题。

    我将在明天进一步研究这个问题。

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

    托比亚斯,
    我无法重现您的问题,能否附上您的项目?

    此致,
    科迪

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

    ¨您好,Cody,

    请在附件中找到项目代码。

    此致,
    Tobiase2e.ti.com/.../cmpss_5F00_ex1_5F00_asynch.rar

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

    托比亚斯,

    您的实施已接近尾声。 您需要配置DCA和DCB,以使用跳闸区域强制PWM低电平。 下面的代码应该可以帮助您。

    //设置数字比较
    // TRIP4 -> DCBH
    ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE,
    ePWM_DC_combinational_TRIPIN4,
    ePWM_DC_TYPE_DCBH);
    ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE,
    ePWM_DC_combinational_TRIPIN4,
    ePWM_DC_TYPE_DCAH);
    
    // DCBH -> DCBEVT2
    ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE,
    ePWM_TZ_DC_OUTPT_B2,
    ePWM_TZ_EVENT_DCXH_LOW);
    ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE,
    ePWM_TZ_DC_OUTPT_A2,
    ePWM_TZ_EVENT_DCXH_LOW); 

    此致,
    科迪  

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

    您好,Cody:

    我尝试了你的建议。 除了DCB事件之外配置DCA事件不会有任何区别。 从我对《技术参考手册》的理解看,它不应该起作用。

    在此要明确的是,只要斜坡启动值高于比较器的负输入,ePWM模块就会按预期工作。 问题仅在比较器输出永久高电压时出现。 对我来说,它看起来不是配置问题,因为在正常操作中它的工作方式与预期的一样。它是否是芯片中的一个错误?

    您是否可以在主板上重现该行为?

    此致,
    托比亚斯

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

    托比亚斯,

    我能够获取您的代码并按我的预期运行。

    这是否正确? 当引脚小于1V时,比较处于活动状态,这应导致所有PWM强制低电平。 如果比较值高于1V,则应启用PWM并开始输出信号。

    我能够使用我以前提供的代码行来使用此代码。 然后,我可以将电压源连接到比较器的引脚,PWM将根据该电压启用和禁用(强制低电压)。

    此致,
    科迪  

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

    您好,Cody:

    让我快速解释两个测试案例:

    案例1:
    -将1V电源连接至比较器引脚(控制卡对接站上的引脚15)
    -在DSP上加载代码并运行
    -在表达式窗口中加载rampstartref变量
    -将rampstartref值设置为2.5万
    PWM1A输出(控制卡坞站上的引脚49)的占空比为~Ω 15 %。 PWM1B (控制卡坞站上的引脚51)是PWM1A的反向信号。 我添加了测试的范围截图作为参考。

    此案例按预期工作。 一切都好。

    CASE2:
    -准备与在case1中设置不同rampstartref值的期望相同
    -将rampstartref值设置为1.5万
    比较器输出为永久高,因此PWM1A输出的占空比应为0 %。 情况并非如此。 我看到67 % 的占空比。 这是因为比较A值设置为700,并将占空比限制为67 %。

    我必须添加/修改哪一行代码,以便在案例2中PWM是0 % ?

    此致,
    托比亚斯

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

    您在上一篇文章中的描述完全正确。 如果将操作限定符配置为在CMPA上有事件,则始终会发生该事件。 由于您已将CMPA配置为清除PWM输出,因此这应该不是问题。

    如果你想让T1将PWM输出设置为高电压,那么我相信你应该去掉这条线,这样就不会在CTR =0上将输出设置为高电压:

    ePWM_setActionQualifierAction (EPWM1_base,
    ePWM_AQ_OUTPUT A,
    ePWM_AQ_OUTPUT高,
    ePWM_AQ_OUTPT_ON_TIMEBASE _ZERO);

    然后,如果T1配置为设置PWM高,我相信您会看到您正在寻找的行为。 如果我有任何误解,请告诉我。

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

    您好,Kris

    我喜欢实施峰值电流模式控制。 在CTR =0上,PWM应设置为高,当比较器变为高时,PWM应变为低。 这是使用T1事件配置的。

    在测试用例1中,这与预期的工作方式相同。 在CTR =0上,PWM将变为高,大约1.6 us后,比较器输出将变为高,PWM将变为低(T1事件)。 CMPA被配置为强制PWM在7US后处于低电平。 这用于将占空比限制为67 %。 在这种情况下,CMPA事件不会产生任何影响,因为比较器会提前关闭PWM。 到目前为止,一切都如预期的那样运作

    在情况2中,CTR = 0将打开PWM,由于比较器已经很高,PWM应立即降低。 由于某些原因,T1事件不起作用。 7US之后,CMPA事件将PWM降低。

    为什么T1事件不起作用? T1边缘是否敏感?

    此致,
    托比亚斯

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

    您好,Tobias,

    感谢您的解释-我理解。 T1是单周期事件。 它的状态相对于比较器状态不保持活动状态(类似于仅为单个周期生成的CMPA事件)。 因此,在您的情况下,您正在获得TBCTR =0之前的T1事件。 您看不到它,因为它强制PWM过低,而该值已经很低。 然后TBCTR将PWM设置为高,直到CMPA才会发生其他事件。

    新T1/T2的设计用途是将它们配置为设置和清除PWM输出。 您可以在"图14-31. 使用T1U/T1D的UP-Down计数,利用T1和T2事件生成PWM波形"。 由于您处于计数模式,您可以同时使用T1和T2或更改计数器模式。

    您并不局限于这种精确的操作模式,但我认为现在您已经了解了T1和T2的操作模式,您将很快找到解决方案。 我将探讨如何改进我们的文档,使其更加清晰。

    此致,
    克里斯

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

    我的初步理解是,使用ePWM类型4,您添加了T1/T2事件,以便可以使用操作限定符而不是跳闸区域来实现峰值电流模式控制。 这将大有帮助,因为我不再被迫在外部生成死区。
    如果我理解您的正确,则T1/T2事件不能像逐周期跳闸事件那样使用。 由于T1对边缘敏感,并且当比较器为永久高时,不会生成事件。 这将使T1/T2事件对峰值电流模式控制实施毫无用处。

    将来是否有任何改进ePWM模块的意图,以便在内部使用死区单元时实施峰值电流模式控制?

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

    我向您保证,我们能够使用当前模块实施峰值电流模式控制。 我们只需要稍微调整一下您的配置。 请查看此线程以获取示例配置:

    e2e.ti.com/.../57.7962万

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

    您好,Kris,

    在开始调整我的配置之前,让我解释一下我已经做了什么以及我在哪里看到了问题。
    作为起点,我绘制了一张类似于《技术参考手册》中的图14-74的草图。

    让我们来看看第一个PWM周期。 在CTR =0时,PWM将变高,斜率开始倒计时。 DAC起始值高于Isense值,比较器输出较低。 当DAC值达到Isense值时,比较器将跳闸,PWM将关闭。 这适用于Action Qualifier实现和Trip Zone实现。 这已在使用我的配置。

    第一个PWM循环使用2月21日上午7:35后的"测试案例1"进行测试。 斜坡起始值设置为2.5万,该值等于1.26V,高于连接至1V电源的比较器的负输入。

    现在,让我们来看看第三个PWM周期。 在PWM循环开始之前,会出现一个加载步骤,并且控制器输出低于Isense。 再次在CTR =0时,PWM将会变高,斜率开始倒计时。 由于斜率的起始值较低,因此比较器的Isense永久高。 现在,如果使用Action Qualifier,T1事件从不跳闸,并且PWM在CMPA事件中变为低电平。 这太晚了,电感器电流增加而不是减少。

    第三个PWM循环使用2月21日上午7:35之后的"测试案例2"进行测试。 斜坡起始值设置为1.5万,等于0.76V,低于连接至1V电源的比较器的负输入。

    我的理解是,跳闸区域工作正常,因为路径中有一个额外的触发器。 图14-41中的CBC闩锁。 在cTR=0时,CBC锁存器被清除,比较器输出稍后再次设置时钟周期。 这会导致ePWM1过低。 由于T1路径中缺少此触发器,因此不会生成任何事件,并且Action Qualifier (操作限定符)不会关闭ePWM (CMPA事件除外)。

    我的假设是否正确? 您认为我们是否可以使用Action Qualifier调整实施,以便它也适用于第三个PWM周期?

    此致,
    托比亚斯

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

    我很欣赏这一解释,我很高兴与我们的建筑委员会一起回顾这一情况。 让我进一步解释TZ模块在这里的工作原理。

    tripzone模块实际上直接在输出本身上工作。 PWM在内部继续工作,实际上仍在生成波形。 但是,tripzone能够将输出缓冲区直接置于您定义的任何状态(高,低,高z)。 您提到的锁存器确实是的重要部分,因为它清除了输出上的"覆盖",并允许实际的PWM生成通过。

    操作限定符的设计实际上并不是为了以这种方式运行,因为它会评估每个TBCLK上的条件。 我了解您对所寻求行为的渴望,我们将查看是否可能。 我不是CMPSS专家,但我相信你可以通过从这个模块向CMPSSS发送EPWMSYNCO (配置为在TBCTR =0上生成)来实现这一行为。 这将导致"CMPSS"被"清除",并重新触发PWM条件。

    如果您想尝试CMDSS选项,我将由您决定,但我认为最好的实现是切换到向上向下计数模式。

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

    您好,Kris,

    感谢您对CMDSS模块的提示。 我快速查看了参考手册,略微更改了CMDSS配置。
    CMPCTL[CTRIPHsel]= 3
    COMPSTSCLR[HSYNCCLREN]= 1


    通过使用比较器输出闩锁并与PWM同步,我可以接近我所寻找的PWM信号。 通过这种配置,PWM的准时度几乎为零。 在CTR =0时,PWM将变为高电平,一个周期后,PWM将随着T1事件变为低电平。 通过实施跳闸区域,PWM保持低永久。 如果使用操作限定符可以消除打开一个周期的情况,那将是完美的。 否则我就可以忍受这个小缺点。

    PS。 我查看了您之前链接过几个帖子的主题。

    我认为向上向下计数模式对我不起作用。 在另一个线程中,实施用于具有峰值电流模式控制的相移全桥。 在该拓扑中,电感器电流是开关频率的两倍。 在我的情况下,它是降压转换器,因此我不能使用T1事件来打开和关闭PWM。

    此致,
    托比亚斯

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

    好消息! 我很高兴听到我们接近期望的行为。 您可以将PWM设置操作从TBCTR = 0更改为TBCTR = 1 (使用CMBB)。 如果您参考 表14-4。 操作限定符事件优先级在TRM中,您将看到T1和T2的优先级高于比较事件。 因此,如果这些在同一周期中出现,则T1事件将生效。

    请尝试一下,并告诉我它是否有效。 如果是,请提供您的CMDSS相关代码。 我需要与我们的设计团队一起验证此路径是否正时关闭,是否保证在所有设备的相同周期内发生。

    编辑:为上升计数模式引用了错误的表。 正确的表是表14-5。 运行计数模式的操作限定符事件优先级。

    此致,

    克里斯

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

    您好,Kris,

    我能够通过使用CMBB获得所需的行为。 与您告诉我的不同,我必须将CMBB值设置为3才能获得0 % 占空比。 我的猜测如下:

    ctr=0生成同步脉冲
    CTR =1比较器输出变为低电平
    CTR =2比较器将变为高电压
    CTR =3由于T1事件,PWM被清除

    编辑:我在不同的ePWM模块上对其进行了测试。 要获得所需的行为,我必须以不同的方式设置CMBB:
    EPWM3 CMBB = 3
    EPWM4 CMBB = 2
    问题是什么是正确的值,它是否可靠。 我的观察是,如果CMBB值太高,结果又是高占空比。 这是从一开始就不需要的行为。

    以下是ePWM和CMPSS实现的代码

    //设置TBCLK
    ePWM_setTimeBasePeriod (EPWM1_BASE,PWM_TIMER_TBPRD);
    ePWM_setTimeBaseCounter (EPWM1_BASE,0U);
    ePWM_setSyncOutPulseMode (EPWM1_BASE, ePWM_SYNC_OUT PULSE_ON_COUNTER_ZERO);
    
    //设置计数器模式
    ePWM_setTimeBaseCounterMode (EPWM1_BASE,ePWM_COUNT_MODE_UP);
    ePWM_DisablePhaseShiftLoad (EPWM1_BASE);
    ePWM_setClockPrescaler (EPWM1_BASE,
    ePWM_Clock_diver_1,
    ePWM_HSCLOCK分隔符_1);
    
    //设置阴影
    ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,
    ePWM_counter_compare_A,
    ePWM_COMP_LOG_ON_CNTR_ZERO);
    ePWM_setCounterCompareShadowLoadMode (EPWM1_BASE,
    ePWM_counter_compare_B,
    ePWM_COMP_LOW_ON_CNTR_ZERO);
    
    //设置比较值
    ePWM_setCounterCompareValue (EPWM1_BASE,
    ePWM_counter_compare_A,
    1000);
    ePWM_setCounterCompareValue (EPWM1_BASE,
    ePWM_counter_compare_B,
    3);
    
    //设置死区
    ePWM_setDeadBandDelayPolarity (EPWM1_BASE,ePWM_DB_FED,ePWM_DB_POLICY_ACTIVE_LOW);
    ePWM_setDeadBandDelayMode (EPWM1_BASE,ePWM_DB_RED, TRUE);
    ePWM_setDeadBandDelayMode (EPWM1_BASE,ePWM_DB_FED,TRUE);
    ePWM_setRisingEdgeDelayCount (EPWM1_BASE, PWM_DB);
    ePWM_setFallingEdgeDelayCount (EPWM1_BASE,PWM_DB);
    
    
    //设置操作
    //在CTR =3
    ePWM_setActionQualifierAction (EPWM1_BASE,
    ePWM_AQ_OUTPUT A,
    ePWM_AQ_OUTPUT高,
    ePWM_AQ_OUTPUT ON_TIMEBASE _UP_CMBB);
    //在CTR =1000上PWM低电平,限制最大占空比
    ePWM_setActionQualifiAction (EPWM1_BASE,
    ePWM_AQ_OUTPUT A,
    ePWM_AQ_OUTPUT低,
    ePWM_AQ_OUTPT_ON_TIMEBASE _UP_CMPA);
    
    
    //设置数字比较
    // TRIP4 -> DCAH
    ePWM_enableDigitalCompareTripCombinationInput (EPWM1_BASE,
    ePWM_DC_combinational_TRIPIN4,
    ePWM_DC_TYPE_DCAH);
    // DCAH -> DCAEVT2
    ePWM_setTripZoneDigitalCompareEventCondition (EPWM1_BASE,
    ePWM_TZ_DC_OUTPT_A2,
    ePWM_TZ_EVENT_DCXH_HIGH);
    //将DCAEVT2启用为T1源
    ePWM_setActionQualifierT1TriggerSource (EPWM1_BASE,ePWM_AQ_TRIG_EVENT_TRIG_DCA_2);
    ePWM_setActionQualifiAction (EPWM1_BASE,
    ePWM_AQ_OUTPUT A,
    ePWM_AQ_OUTPUT低,
    ePWM_AQ_OUTPT_ON_T1_COUNT_UP);
    
    ePWM_setTripZoneAction (EPWM1_BASE,ePWM_TZ_ACT_EVENT_DCBEVT2,ePWM_TZ_ACT_DISABLE);
    ePWM_setTripZoneAction (EPWM1_BASE, ePWM_TZ_ACT_EVENT_DCBEVT1,ePWM_TZ_ACT_DISABLE);
    ePWM_setTripZoneAction (EPWM1_BASE,ePWM_TZ_ACT_EVENT_DCAEVT2,ePWM_TZ_ACT_DISABLE);
    ePWM_setTripZoneAction(EPWM1_base, ePWM_TZ_ACT_EVENT_DCAEVT1, ePWM_TZ_ACT_DISABLE );
    ePWM_setTripZoneAction(EPWM1_base, ePWM_TZ_ACT_EVENT_TZB, ePWM_TZ_ACT_DISABLE);
    ePWM_setTripZoneAction (EPWM1_BASE,ePWM_TZ_ACT_EVENT_TZA,ePWM_TZ_ACT_DISABLE);
    
    ePWM_setTripZoneAdvDigitalCompareActionA (EPWM1_BASE, ePWM_TZ_ADV_ACT_EVENT_DCxEVT2_D,ePWM_TZ_ADV_ACT_DISABLE);
    ePWM_setTripZoneAdvDigitalCompareActionA (EPWM1_BASE,ePWM_TZ_ADV_ACT_EVENT_U,ePWM_TZ_ADV_ACT_DISABLE);
    ePWM_setTripZoneAdvDigitalCompareActionA (EPWM1_BASE,ePWM_TZ_ADV_ACT_EVENT_DCxEVT1_D,ePWM_TZ_ADV_ACT_DISABLE);
    ePWM_setTripZoneAdvDigitalCompareActionA (EPWM1_BASE,ePWM_TZ_ADV_ACT_EVT_EVT_EVENT_U) ePWM_TZ_ADV_ACT_DISABLE);
    
    ePWM_setTripZoneAdvDigitalCompareActionB (EPWM1_BASE,ePWM_TZ_ADV_ACT_EVENT_DCxEVT2_D,ePWM_TZ_ADV_ACT_DISABLE);
    ePWM_setTriponeDigitalCompareActionB (EPWM1 Adv_BASE, ePWM_TZ_ADV_ACT_EVENT_DCxEVT2_U,ePWM_TZ_ADV_ACT_DISABLE);
    ePWM_setTripZoneAdvDigitalCompareActionB (EPWM1_BASE,ePWM_TZ_ADV_ACT_EVENT_DCxEVT1_D,ePWM_TZ_ADV_ACT_DISABLE);
    ePWM_setTripZoneAdvDigitalCompareActionB (EPWM1_BASE,ePWM_TZ_ADV_ACT_EVENT_DCxEVT1_U,ePWM_TZ_ADV_ACT_DISABLE);
    
    
    
    ePWM_enableInterrupt (EPWM1_BASE);
    ePWM_setInterruptSource (EPWM1_BASE, ePWM_INT_TBCTR_U_CMPC);
    Interrupt_enable (INT_EPWM1);
    Interrupt_register (INT_EPWM1,&ISRPreControlTask);
    ePWM_setInterruptEventCount (EPWM1_BASE, 1);
    ePWM_clearEventTriggerInterruptFlag (EPWM1_BASE);
    Interrupt_clearACKGroup (INTERRUCT_ACK_GROUP3);
    
    
    CMPS_enableModule (CMPSSS1_BASE);
    CMPS_HighComparator (CMPSSS1_BASE, CMPS_INSRC_DAC);
    CMPSS_configDAC (CMPSSS1_BASE,CMPS_DACVAL_PWMSYNC |
    CMPS_DACREF_VDDA |
    CMPS_DACSRC_RAMP);
    CMPSS_configOutputsHigh (CMPSSS1_BASE,CMPSS_TRIGK_LATCH |
    CMPS_TRIPOUT_LATCH);
    CMPSS_configLatchOnPWMSYNC (CMPSSS1_BASE,TRUE,TRUE);
    CMPS_configFilterHigh (CMPSSS1_BASE, 2,20,15);
    CMPS_initFilterHigh (CMPSSS1_BASE);
    CMPS_setRampDecValue (CMPSSS1_BASE, ramp_decapment);
    CMPSS_setRampDelayValue(CMPSS1_BASE,ramp_delay);
    CMPS_configRamp (CMPSS1_BASE,
    2.7万,
    渐变递减,
    斜坡延迟,
    1,
    FALSE);
    
    GPIO _setMasterCore (11,GPIO _CORE _CPU1);
    GPIO _setPinConfig (GPIO _11_OUTPUTXBAR7);
    GPIO _setDirectionMode (11, GPIO _DIR_MODE_OUT);
    GPIO _setPadConfig (11,GPIO PIN_TYPE_STD);
    
    XBAR_setOutputMuxConfig (XBAR_OUTPUT7,XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH);
    xbar_enableOutputMux (XBAR_OUTPUT7,XBAR_MUX00);
    
    XBAR_setEPWMMuxConfig (XBAR_TRIP4,XBAR_ePWM_MUX00_CMPSS1_CTRIPH);
    XBAR_enableEPWMMux (XBAR_TRIP4, Xbar_MUX00);
    

    此致,
    托比亚斯

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

    在迄今为止取得良好进展后,我感到乐观,并进一步测试了执行情况。 由于具有0 % 占空比的下角几乎按预期工作,我还测试了具有高占空比的上角。 在测试过程中,我可以观察《技术参考手册》第14.11 3节中提到的行为,使用CMDSS逐周期触发ePWM。
    在某些情况下,比较器跳闸被转到下一个PWM周期,并强制执行0 % 占空比。
    手册中提到了三种解决方法:
    -按系统设计
    -消除比较器
    -在CTR =0之前同步COMPxLATCH几个周期

    第一个也是最后一个选项对我不起作用。 系统无法设计为永不发生,移动COMPxLATCH的同步与解决初始问题的方向完全相反。

    所以我在尝试使用空白选项。 到目前为止,我没有成功。 您能告诉我哪一个是发送到Action Qualifier T1事件的DC事件信号吗? 它是事件筛选之前的DCAEVT2,DCAEVT2.force还是DCAEVT2.inter。
    图14-48。 数字比较子模块高级方框图或"操作限定符"部分对此没有明确说明。

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

    我怀疑你在EPWM3和EPWM4上的试验可能会发生不同的比较值。 XBAR是异步的,不同路径的延迟略有不同。 我不能预见这个问题的解决方案。

    我想澄清一下,我理解高工作周期问题。 您是否指的是在TBCTR = TBPRD之前的几个周期内发生的T1事件? 这不会影响当前PWM周期,因为CMPA限制了该周期,但由于比较器跳闸延迟,它实际上在下一个周期生效。 是这样吗?

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

    您好,Kris,

    一个或两个时钟周期的小准时问题对我来说不是那么重要。 由于XBAR是异步的,而且行为在所有情况下都不同,我将使用CTR =0设置PWM。
    您是否与体系结构委员会讨论过实施问题? 他们是否有不同的方法来实施峰值电流控制器?

    关于高占空比问题,您的理解是正确的。 您认为数字比较模块中的空白窗口是正确的方法吗?

    此致,
    托比亚斯

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

    我认为空白窗口应该可以实现这一点。 我再次关注的是XBAR的异步延迟和比较计数之间的抖动。 根据设计,这些不是数字,但让我们举一个例子来代表这个想法。

    假设您在TBCTR = TBPRD -1处得到比较器事件触发,并且需要3个周期才能到达EPWM1。 这意味着EPWM1将在TBCTR = 2处看到T1事件。 因此,您可以将空白窗口设置为<=2,这样可以正常工作。

    现在假设您还在EPWM3上实施了此功能,但由于路径计时差异,它到达TBCTR =3。 现在,您的空白窗口不足,您将拥有大约0 % 占空比。 您可以将空白窗口增加到3,但在另一个PWM上,它可能会阻止您从PWMSYNC获取重新触发的事件,而该事件实际上应该是0 % 占空比。

    空白窗口有许多边界条件,我认为TI不能保证XBAR上的计时对所需行为具有高度的信心。

    我理解您的期望。 让我用白板记录一些想法,看看我能想出什么。 对于额外的ePWM模块,ePWM X条输入和输入X条输入,您的额外资源是什么样子的? 此外,您使用的是哪种设备包?

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

    在周期开始时,您的应用程序可以处理多少个脉冲? 您是否可以在CMPSSS上使用数字滤波器,其周期数大于触发信号转变为T1事件所需的周期数? 这意味着,在周期开始时,您的最小脉冲宽度大致等于滤波器的大小。

    我需要详细介绍一下,但我认为可能有解决方案。

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

    您好,Kris,

    感谢您的详细解释。 据我所知,这个问题没有简单的解决办法。
    我仅使用EPWM1-3,CMPSSS1,2和两个ePWM X条。 不使用输入X条。

    在最终产品中,我将使用TMS320F2.8377万DZWTS。

    此致,
    托比亚斯

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

    我已经使用CMDSS模块的数字滤波器。 这将导致标称情况下的最小占空比,比较器在PWM期间切换一次。 在比较器输出永久高的情况下,筛选器不会产生任何影响。 CMDSS锁扣在过滤器后面,PWM同步在CTR =0时触发此锁扣。 在这种情况下,我在输出端看到一个时钟周期宽度为1到3的脉冲。 如果不能将其移除,我可以接受这种小脉冲。

    CMPSSS模块中的数字滤波器对高占空比问题没有帮助。

    此致,
    托比亚斯