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.

[参考译文] TIDM-02000:在 PSFB 拓扑中进行基于事件的相移操作时的延迟

Guru**** 1744610 points
Other Parts Discussed in Thread: PMP23126, TIDM-02000, C2000WARE, LAUNCHXL-F280049C
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1201037/tidm-02000-delays-when-event-based-phase-shifting-operation-in-psfb-topology

器件型号:TIDM-02000
主题中讨论的其他器件:PMP23126C2000WARELAUNCHXL-F280049C

您好!

我使用 TIDM-02000和 PMP23126的示例代码实现了相移全桥的代码。 桥臂之间的相移由 PCMC 事件生成。

这是演示板 F280049C 上的台式测试。 我向 CMPS 高输入提供外部直流信号、并使用斜坡发生器来实现 PCMC。  

我生成了 ePWM8的2倍频率以便生成 SYNCPER 信号、从而使其同步。 EPWM 和 CMPSS。 我的主要 EPWM 是 EPWM1、2。 它们是同步的。 输入电压。

(我将 ePWM1、2、3、4用作 PWM 通道。 它们都是上-下计数模式。 ePWM5和6 -> SPI | ePWM7->UART | ePWM8 作为引导引脚配置。 引脚通过上拉电阻器连接到3.3V 电压。)

我可以获得%100占空比、而不会出现任何问题。  但是、在%0占空比时、EPWM 通道之间存在延迟。

我通过向 CMPSS 内部 DAC 提供较低的参考值来生成%0占空比。  

我通过向 CMPSS 内部 DAC 提供更高的参考值来生成%100占空比。

我按如下所示插入了波形。   黄色1A、蓝色1B、红色2A、绿色2B

PSFB 拓扑中%100占空比情况。 黄色和绿色上有%100匹配项! 为了查看性能、所有通道的死区均为0。  

PSFB 拓扑中的%0占空比情况。 黄色和绿色有%0匹配! 为了查看性能、所有通道的死区均为0。

但是、开关之间的上升和下降时间之间存在延迟。

详情如下。

1) 1)您能解释一下我如何具有%100占空比、为什么不能具有%0占空比? 背后的现象是什么?

正如我回忆的那样,我在 CMPSS 上不使用任何滤波,而在跳匣区域使用消隐窗口。

同步 ePWM 时序中的电流链也可能是一个问题...  消隐可能是一个问题。。

在 ePWM 跳闸处有消隐、如下所示。  如果需要、我可以提供更多信息。

    // Set the blanking window offset in TBCLK counts
    // An offset value in TBCLK counts is programmed
    // which determines at what point after the CTR = PRD or CTR = 0 pulse the blanking window starts.
    EPWM_setDigitalCompareWindowOffset(EPWM2_BASE, PeriodValue - 5);

    // Set the blanking window length in TBCLK counts
    // 10*TBLCK = 100nsec
    EPWM_setDigitalCompareWindowLength(EPWM2_BASE, 10);


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

     、您好!

    感谢您提供的详细信息。 我正在研究这个主题、几天后就会回来。

    此致、

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

    您好!  

    我需要帮助才能继续。 您能引导我吗?

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

    尊敬的 Gokhan:

    很抱歉回复延迟。 对于 PWM1/2、您是否使用与下面相同的设置?  

    您提到的延迟实际上在最后两张图片中介于1A/B 和2A/B 之间、对吗?

    您是否要将初始 DAC 值设置为0以创建0%占空比情况? 启用斜坡补偿的情况? 什么是斜坡?

    此致、

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

    尊敬的 Cheng:

    我使用 ePWM8生成 SYNCPER 信号。

    很抱歉回复延迟。 对于 PWM1/2、您是否使用与下面相同的设置?  

    [/报价]

    非常接近的配置。 事件在 ePWM2中生成。 唯一的区别是、我只使用 ePMW8来设置 SYNCPER 信号。 当 TBCTR=period 时、它会创建 SYNCPER。 我添加了不同的消隐窗口、如上所示。

    您是否要将初始 DAC 值设置为0以创建0%占空比情况? 启用斜坡补偿的情况? 什么是斜坡?

    [/报价]

    我将0设置为斜率 COMP、将0设置为 DAC 值。 但是、这并不重要。 因为它们之间的延迟也会在我具有不同占空比时发生。 我后来找到了。 延迟似乎来自直流子模块-死区模块或基于事件生成的问题等 您可以看到如下所示。

    所有死区被加载为0。

    SYNCInit 配置

    void SYNC_init(void)
    {
        SysCtl_setSyncOutputConfig(SYSCTL_SYNC_OUT_SRC_EPWM1SYNCOUT);
        //
        // For EPWM1, the sync input is: SYSCTL_SYNC_IN_SRC_EXTSYNCIN1
        //
        SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM4, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
        SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM7, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    
    }

    ePWM1配置

        EPWM_setPeriodLoadMode(EPWM1_BASE, EPWM_PERIOD_SHADOW_LOAD);
    
        // Time-Base Submodule Configurations
        EPWM_setClockPrescaler(EPWM1_BASE,EPWM_CLOCK_DIVIDER_1,EPWM_HSCLOCK_DIVIDER_1);
        EPWM_setTimeBasePeriod(EPWM1_BASE, PeriodValue);
        EPWM_setTimeBaseCounter(EPWM1_BASE, 0U);
        EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);
    
        //
        // Phase Configuration and Set
        // Configure PWM base1 as master
        // SetPhaseShift as zero!
        //
        EPWM_disablePhaseShiftLoad(EPWM1_BASE);
        EPWM_setPhaseShift(EPWM1_BASE, 0U);
        EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

    ePWM2配置

    我稍后通过 UART 更改死区。 我把它设置为0。

        // MISC. Period Load Mode
        EPWM_setPeriodLoadMode(EPWM2_BASE, EPWM_PERIOD_SHADOW_LOAD);
    
        // Time-Base Submodule Configurations
        EPWM_setClockPrescaler(EPWM2_BASE,EPWM_CLOCK_DIVIDER_1,EPWM_HSCLOCK_DIVIDER_1);
        EPWM_setTimeBasePeriod(EPWM2_BASE, PeriodValue);
        EPWM_setTimeBaseCounter(EPWM2_BASE, 0U);
        EPWM_setTimeBaseCounterMode(EPWM2_BASE, EPWM_COUNTER_MODE_UP_DOWN);
    
        //
        // Phase Configuration and Set
        // Configure PWM base2 as slave
        // SetPhaseShift = Value*TBCLK = Value*10nsec
        //
        EPWM_enablePhaseShiftLoad(EPWM2_BASE);
        EPWM_setSyncOutPulseMode(EPWM2_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
        EPWM_setPhaseShift(EPWM2_BASE, 2); // Value*TBCLKs Phase-Shift is Set
        EPWM_setCountModeAfterSync(EPWM2_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
    
        // Counter-Compare Submodule Configurations
        EPWM_setCounterCompareShadowLoadMode(EPWM2_BASE,EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM2_BASE,EPWM_COUNTER_COMPARE_B,EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
        EPWM_setCounterCompareValue(EPWM2_BASE, EPWM_COUNTER_COMPARE_A, 0);
        EPWM_setCounterCompareValue(EPWM2_BASE, EPWM_COUNTER_COMPARE_B, 0);
    
        //
        // to start don't configure the PWM to do anything
        //
        HWREGH(EPWM2_BASE + EPWM_O_AQCTLA) = 0;
    
        // Action-Qualifier Submodule Configurations
        // ePWM2A Actions
        // CTR = ZERO , set to 0
        // CTR = PRD , set to 1
        // CTR = T1U , set to 1
        // CTR = T1D , set to 0
        //
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);
    
        // Action-Qualifier Submodule Configurations
        // ePWM2B Actions
        // CTR = ZERO , set to 0
        // CTR = PRD , set to 1
        // CTR = T1U , set to 1
        // CTR = T1D , set to 0
        //
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_LOW,EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_HIGH,EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);
        EPWM_setActionQualifierAction(EPWM2_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);
    
        //
        // Set DCEVTFILT as the trigger source for Channel A
        //
        EPWM_setActionQualifierT1TriggerSource(EPWM2_BASE,
                                        EPWM_AQ_TRIGGER_EVENT_TRIG_DC_EVTFILT);
    
        // Digital Compare and Comparator-X-Bar Configuration
        // Disable all the muxes first
        XBAR_enableEPWMMux(XBAR_TRIP4, 0x00);
    
        //
        // Setup PWM TRIP 4 as the destination for CMPSS5H output (PCMC)
        // TRIP4 will be ACTIVE if CTRIPH is HIGH at CMPSS5
        XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX08_CMPSS5_CTRIPH);
        XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX08);
    
        //
        // DCAH = TRIP5 = Comparator 1H output
        //
        EPWM_selectDigitalCompareTripInput(EPWM2_BASE, EPWM_DC_TRIP_TRIPIN4,
                                            EPWM_DC_TYPE_DCAH);
    
        // DCAH = high
        EPWM_setTripZoneDigitalCompareEventCondition(EPWM2_BASE, EPWM_TZ_DC_OUTPUT_A2,
                                            EPWM_TZ_EVENT_DCXH_HIGH);
    
        // Set the source for digital compare filter as DCAEVT2
        EPWM_setDigitalCompareEventSource(EPWM2_BASE, EPWM_DC_MODULE_A,EPWM_DC_EVENT_2,
                                          EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
    
        // Allow ASYNC DCAEVT2 for trip zone actions
        EPWM_setDigitalCompareEventSyncMode(EPWM2_BASE, EPWM_DC_MODULE_A,
                                            EPWM_DC_EVENT_2,
                                            EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    
        // Select DCAEVT2 cycle by cycle trip
        EPWM_enableTripZoneSignals(EPWM2_BASE, EPWM_TZ_SIGNAL_DCAEVT2);
    
        // Event Filtering Configuration (inside digital compare)
        // Enable DC filter blanking window
        EPWM_enableDigitalCompareBlankingWindow(EPWM2_BASE);
        //EPWM_disableDigitalCompareBlankingWindow(EPWM2_BASE);
    
        // Set the signal source that will be filtered.
        EPWM_setDigitalCompareFilterInput(EPWM2_BASE, EPWM_DC_WINDOW_SOURCE_DCAEVT2);
    
        // Set the Digital Compare filter blanking pulse.
        EPWM_setDigitalCompareBlankingEvent(EPWM2_BASE,
                                         EPWM_DC_WINDOW_START_TBCTR_ZERO_PERIOD);
    
        // Set the blanking window offset in TBCLK counts
        // An offset value in TBCLK counts is programmed
        // which determines at what point after the CTR = PRD or CTR = 0 pulse the blanking window starts.
        EPWM_setDigitalCompareWindowOffset(EPWM2_BASE, PeriodValue - 100);
    
        // Set the blanking window length in TBCLK counts
        // 10*TBLCK = 100nsec
        EPWM_setDigitalCompareWindowLength(EPWM2_BASE, 200);
    
        //
        // Trip-zone event actions
        // What do we want the CBC events to do?
        // TZAx events can force EPWMxA
        // TZBx events can force EPWMxB
        //
        EPWM_setTripZoneAdvAction(EPWM2_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZA_D,
                                  EPWM_TZ_ADV_ACTION_LOW);
        EPWM_setTripZoneAdvAction(EPWM2_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZA_U,
                                  EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAdvAction(EPWM2_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZB_U,
                                  EPWM_TZ_ADV_ACTION_LOW);
        EPWM_setTripZoneAdvAction(EPWM2_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZB_D,
                                  EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAction(EPWM2_BASE, EPWM_TZ_ACTION_EVENT_TZA,
                               EPWM_TZ_ACTION_DISABLE);
        EPWM_setTripZoneAction(EPWM2_BASE, EPWM_TZ_ACTION_EVENT_TZB,
                               EPWM_TZ_ACTION_DISABLE);
    
        //
        // Select CBC clear event
        EPWM_selectCycleByCycleTripZoneClearEvent(EPWM2_BASE,
                               EPWM_TZ_CBC_PULSE_CLR_CNTR_ZERO_PERIOD);
    
        //
        // Clear any spurious trip
        EPWM_clearTripZoneFlag(EPWM1_BASE, (EPWM_TZ_INTERRUPT_OST |
                EPWM_TZ_INTERRUPT_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT1));
        EPWM_clearTripZoneFlag(EPWM2_BASE, (EPWM_TZ_INTERRUPT_OST |
                EPWM_TZ_INTERRUPT_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT1));
    
    
        // Dead band counter runs at TBCLK rate
        EPWM_setDeadBandCounterClock(EPWM2_BASE, EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
    
        // Set the RED and FED values : (Value*10ns)
        EPWM_setRisingEdgeDelayCount(EPWM2_BASE, 15);
        EPWM_setFallingEdgeDelayCount(EPWM2_BASE, 15);
    
        //DelayMode select
        //EPWM_DB_RED   - Rising Edge delay,
        //EPWM_DB_FED   - Falling Edge delay
        //true     - Falling edge or Rising edge delay is applied.
        //false    - Dead Band delay is bypassed.
        EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_RED, true);
        EPWM_setDeadBandDelayMode(EPWM2_BASE, EPWM_DB_FED, true);
        EPWM_setRisingEdgeDeadBandDelayInput(EPWM2_BASE, EPWM_DB_INPUT_EPWMA);
        EPWM_setFallingEdgeDeadBandDelayInput(EPWM2_BASE, EPWM_DB_INPUT_EPWMB);
    
        // xA is RED, same!!!
        EPWM_setDeadBandDelayPolarity(EPWM2_BASE, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH);
    
        // xB is FED, inverted (AHC) !!!
        EPWM_setDeadBandDelayPolarity(EPWM2_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);
    
        // Do Not Switch Output A with Output B (No Swapping!)
        EPWM_setDeadBandOutputSwapMode(EPWM2_BASE, EPWM_DB_OUTPUT_A, false);                        // DO NOT Switch Output A with Output B
        EPWM_setDeadBandOutputSwapMode(EPWM2_BASE, EPWM_DB_OUTPUT_B, false);
    

    ePWM8配置

        EALLOW;
        EPWM_setPeriodLoadMode(EPWM8_BASE, EPWM_PERIOD_SHADOW_LOAD);
    
        // Time-Base Submodule Configurations
        EPWM_setClockPrescaler(EPWM8_BASE,EPWM_CLOCK_DIVIDER_1,EPWM_HSCLOCK_DIVIDER_1);
        EPWM_setTimeBasePeriod(EPWM8_BASE, PeriodValue-1);
        EPWM_setTimeBaseCounter(EPWM8_BASE, 0);
        EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP);
    
        //
        // Phase Configuration and Set
        // Configure PWM base3 as slave
        // SetPhaseShift = Value*TBCLK = Value*10nsec
        EPWM_enablePhaseShiftLoad(EPWM8_BASE);
        EPWM_setPhaseShift(EPWM8_BASE, 2); // Will be clarified later on!
        EPWM_setSyncOutPulseMode(EPWM8_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
        EPWM_setCountModeAfterSync(EPWM8_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
    
        //
        // Counter-Compare Submodule Configurations
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE,EPWM_COUNTER_COMPARE_A,EPWM_COMP_LOAD_ON_CNTR_ZERO);
        EPWM_setCounterCompareShadowLoadMode(EPWM8_BASE,EPWM_COUNTER_COMPARE_B,EPWM_COMP_LOAD_ON_CNTR_ZERO);
    
    
        EPWM_setCounterCompareValue(EPWM8_BASE, EPWM_COUNTER_COMPARE_A, 0);
        EPWM_setCounterCompareValue(EPWM8_BASE, EPWM_COUNTER_COMPARE_B, 0);
    
        HRPWM_setSyncPulseSource(EPWM8_BASE,HRPWM_PWMSYNC_SOURCE_PERIOD);
    
        EDIS;

    CMPSS 配置

        CMPSS_configHighComparator(CMPSS5_BASE,
                                   CMPSS_INSRC_DAC)
                                   
        ASysCtl_selectCMPHPMux(ASYSCTL_CMPHPMUX_SELECT_5,
                               0);
                               
        CMPSS_configDAC(CMPSS5_BASE, CMPSS_DACREF_VDDA |
                        CMPSS_DACVAL_PWMSYNC | CMPSS_DACSRC_RAMP);
        
        CMPSS_configRamp(CMPSS5_BASE,0,0,0U,8U,true);
        CMPSS_initFilterHigh(CMPSS5_BASE);
            //
        // Configure the output signals. Both CTRIPH and CTRIPOUTH will be fed by
        // the asynchronous comparator output.
        //
        CMPSS_configOutputsHigh(CMPSS5_BASE,
                                CMPSS_TRIP_ASYNC_COMP | CMPSS_TRIPOUT_ASYNC_COMP);
    
        // Clear the latched comparator events
        CMPSS_clearFilterLatchHigh(CMPSS5_BASE);
        CMPSS_clearFilterLatchLow(CMPSS5_BASE);
    
        // Enables the CMPSS module.
        CMPSS_enableModule(CMPSS5_BASE);
        DEVICE_DELAY_US(500);

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

    您好,Gokhan,

    不过、在继续往下讨论之前、我将详细了解您的问题、您能否解释一下为什么要在 PMP23126硬件上使用 TIDM-2000固件? PMP23126硬件已经包含其自己的固件、该固件还实现了 PCMC 相移全桥直流/直流转换器。 您可以在 C2000数字电源 SDK 中找到设计指南和参考固件。 该固件还基于 F280049C。

    https://www.ti.com/tool/C2000WARE-DIGITALPOWER-SDK

    C:\ti\c2000\C2000Ware_DigitalPower_SDK_4_02_00_00\solutions\pmp23126

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

    根据我对您的主要问题 PWM2A 和 PWM2B 的理解、详细查看您的问题。 具体来说、就是两个输出之间存在延迟的原因。 是这样吗?  

    如果您注意到 PMP23126的配置(与 TIDM-2000相同的 PSFB 配置)、则 PWM2A 输出何时设置为高电平与 PWM2B 输出何时设置为低电平略有不同。 PWM2A 高电平状态由动作限定器(T1U)驱动、而 PWM2B 低电平状态由跳闸区(TZBU)驱动。 跳闸区域比动作限定器更快、您在示波器上看到的就是这种差异。 类似的逻辑适用于 PWM2A 低电平状态和 PWM2B 高电平状态之间的差异。

    请注意、您不会在 PWM1A/B 上看到该情况、因为在该情况下、PWM1B 只是 PWM1A 的反相版本。 在文档中、这被称为辅助配置。

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

    Gus、您好!

    感谢你的帮助。 我研究了这两个软件、因为我将在我的电路板上实施 PCMC。 因此、我选中了所有软件选项。 两者都具有 PCMC 实现、问题是相同的。 我选择了 TIDM-02000。 我从 LAUNCHXL-F280049C 获得了上述波形。 我在外部向 ADC 端口提供了直流信号。

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

    您好、Gus:

    感谢您的详细调查和帮助。

    根据我对 PWM2A 和 PWM2B 的主要问题的理解,详细查看您的问题。 具体来说、就是两个输出之间存在延迟的原因。 这是否正确?

    是的、回答正确。  尽管我将0写入 RED 和 FED 值、但 PWM2A 的导通和关断 PWM2B 具有延迟、反之亦然。

    PWM2A 高电平状态从动作限定符(T1U)驱动、而 PWM2B 低电平状态从跳闸区(TZBU)驱动。 跳闸区域比动作限定器更快、您在示波器上看到的就是这种差异。 类似的逻辑适用于 PWM2A 低电平状态和 PWM2B 高电平状态之间的差异。[/引号]

    是的、我明白了这一点。 仅一个事件 T1就会将 PWM2B 驱动为低电平并将 PWM2A 驱动为高电平、但在驱动为高电平时有60ns 的延迟。 60秒的预期值是否正确?

    我也无法理解如何实现%100占空比。 因为我有消隐窗口、并且当 PWM2B 和 PWM1A 匹配%100时、TZAB 在消隐窗口持续时间内生成。 不过、消隐窗口会影响我的最小占空比。

    提前感谢您。

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

    顺便说一下、如果我使用 PCMC 在 volt.usec 中获得变压器平衡、在 PWM 模块的手部之间会产生60纳秒的延迟。 这似乎不是一个很好的解决方案。 你能评论一下吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我明白了这一点。 仅一个事件 T1就会将 PWM2B 驱动为低电平并将 PWM2A 驱动为高电平、但在驱动为高电平时有60ns 的延迟。 60秒的预期值是否正确?

    TRM 的"PWM"一章中有此注释:

    TZN 信号在用作 DCEVT 跳闸功能时被视为正常输入信号、可以定义为高电平有效或低电平有效输入。 当 TZN、DCAEVTx.FORCE 或 DCBEVTx.FORCE 信号有效时、ePWM 输出会异步跳闸。 为了保持锁存状态、至少需要3* TBCLK 同步脉冲宽度。 如果脉冲宽度小于3* TBCLK 同步脉冲宽度、则跳闸条件可以或不能被 CBC 或 OST 锁存器锁存。

    这会让我认为至少应该有3个 TBCLK 周期的差异。 如果您的 TBCLK 配置为50MHz、则60ns 的差异才有意义。 不过、在您的说明和代码段中、似乎 TBCLK 配置为100MHz。您能解释一下 TBCLK 配置是什么吗?

    我也无法理解如何实现%100占空比。 因为我有消隐窗口、并且当 PWM2B 和 PWM1A 匹配%100时、TZAB 在消隐窗口持续时间内生成。 但是,消隐窗口会影响我的最小占空比。[/引号]

    我怀疑这就是 PWM 配置也使用 PRD 和 ZRO 作为操作事件的原因。 换句话说、如果 CMPSS 事件在消隐周期内发生、PRD 和 ZRO 仍将设置/清除 PWM 输出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一句,如果我使用 PCMC 在 volt.usec 中获得变压器平衡,我的手部在 PWM 模块中产生60纳秒的延迟。 这似乎不是一个很好的解决方案。 您能否对此发表评论?

    很抱歉、我不理解这个问题。

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

    您好、Gus:

    感谢您的回答。

    这将使我相信至少应有3个 TBCLK 周期的差异。 如果您的 TBCLK 配置为50MHz、则60ns 的差异才有意义。 但是、在您的说明和代码段中、似乎 TBCLK 配置为100MHz。您能解释一下 TBCLK 配置是什么吗?

    是的、我的 TBCLK 是100Mhz。

    我怀疑这是 PWM 配置也使用 PRD 和 ZRO 作为操作事件的原因。 换句话说、如果 CMPSS 事件在消隐周期内发生、PRD 和 ZRO 仍将设置/清除 PWM 输出。[/引号]

    是的、我明白了这一点。

    顺便说一句,如果我使用 PCMC 在 volt.usec 中获得变压器平衡,我的手部在 PWM 模块中产生60纳秒的延迟。

    在这里、我是说 PSFB 中的 PCMC 也用于设置电源变压器的磁通平衡。 但是、在 PCMC 软件实现中、由于基于事件的 PWM 跳闸、功率驱动器本身具有60ns 的延迟(介于2A 和2B 之间)。 这意味着在 PCMC 实施期间和具有 PCMC 优势期间、 MCU 内部会出现60纳秒的延迟。 这可能导致电源开关的驱动器不匹配。 我不知道你对此有何评论。  

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

    PWM 开关频率为100kHz 时、60ns 等于开关周期的0.6%。 它足够小、不会影响变压器的平衡。 请注意、初级侧开关本身可能也需要更长时间才能实际切换输出。 对于 PMP23126 3kW 设计、这不是问题。  

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

    谢谢你,Gus。

    有一个悬而未决的问题、考虑到 我的 TBCLK 为100Mhz、2A 和2B 之间的60ns 延迟是否正常?

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

    仔细观察示波器波形、我认为2A 和2B 边沿相差60ns 并不准确。 您必须测量两个信号的转换开始或两个信号的转换结束、而不是混合和匹配。 在本例中、差异为~40ns。 额外的10ns 可能是 CMPSS 信号与器件的内部 SYSCLK 一致(10ns 时钟边沿)。  

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

    感谢您的支持、感谢您的帮助。