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.

[参考译文] TMS320F280048-Q1:具有 PCMC 的 PSFB CDR 转换器:初级上无与伦比的峰值电流波形

Guru**** 2439560 points
Other Parts Discussed in Thread: TIDM-02009, PMP23126

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1214467/tms320f280048-q1-psfb-cdr-converter-with-pcmc-unmatched-peak-current-waveform-at-primary

器件型号:TMS320F280048-Q1
主题中讨论的其他器件:TIDM-02009PMP23126

您好、Gus:

我将 PCMC 软件加载到 PSFB CDR 板。 TR 导联拓扑的 I DRIVE 开关、QD 结束电源传输间隔。 我研究了 TIDM-02009、PMP23126的软件。

我将测试 唯一的内部环路性能、因此我通过 UART 更改了 MAXREF 值并更改了峰值电流设定值。

我在 Lext 上获得了以下不等电流波形。 顺便说一下、我使用二极管电桥来纠正 CT 电流的输出。

原理图如下所示。

示波器颜色如下:

绿色:CT 上的电流、         灰色:ADC 信号- CT 的输出、

黄色:变压器的初级电压、          蓝色:2B VDS、  

红色:3A VDS

波形1如下所示。  

VIN=250 IIN=1.1 Vout=7.9 Iout=31.35、负载为  CR 模式= 0、25 Ω

 

波形2如下所示。  

Vin=250 Iin=2.5 Vout=12.09 Iout=48.12CR  模式= 0、25 Ω

波形3如下所示、我移除了钳位二极管并获得以下波形。

VIN=250V、IIN=1.8、Vout=10.09、Iout=40、CR  MODE = 0、25 Ω

PWM8在全部为零时生成 SYNCPER 信号、并且我使用 PWM1和 PWM2驱动电源开关。

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);

}

void InitHRPWM1(void)
{
    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);
}

void InitHRPWM2(void)
{
    // 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);
}

    void InitHRPWM8(void)
{
    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);
    
    HRPWM_setSyncPulseSource(EPWM8_BASE,HRPWM_PWMSYNC_SOURCE_ZERO);
}

void PSFB_HAL_initCmpssPCMC(void)
{
    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);
    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);
    

您能否帮助您了解为什么 ADC 电压上的初级峰值电流电平不相等?

您可以调查我的相关软件行吗?

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

    尊敬的 Gokhan:

    此处包含大量信息和代码。 完成图表和代码需要一段时间。 也许您可以通过稍微缩小您的问题范围来帮助我。 您对 PWM 输出的预期是什么?您得到的是什么?

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

    您好、Gus:

    一般而言、我希望在电路板上确认我的内部 PCMC 环路。 我提供了一个恒定 RAMPMAXVALUE 并将输出电子负载设置为 CR。 我曾尝试监测内部 PCMC 在一个 PWM 周期内是否在正周期和负周期都以相同的峰值电流电平关闭。 安装钳位二极管时会出现不同的峰值电平。

    钳位二极管的安装情况如下所示。

    在其他测试中、当我移除钳位二极管时、还会再次出现不匹配的不同峰值电流电平。 它是接近的、但不会再次相等。

    我正在尝试解决为什么我的 PCMC 系统无法在 PWM 周期中针对每个正周期和负周期以相同级别关闭开关的问题。

    提前感谢。

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

    我无法评论峰值电流电平不匹配的原因。 您是观察到 PWM 输出问题还是比较器子系统的行为问题?  

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

    您好、Gus:

    比较器子系统输出生成事件并驱动 PWM。 此问题似乎与 CMPSS 及其 PWM 配置有关。

    为 CMPSS 生成 SYNCPER 信号的 PWM 配置如下所示。

    {
        unsigned long PeriodValue;
    
        PeriodValue = DEVICE_SYSCLK_FREQ / (2*GATE_FREQ);
    
        EALLOW;
        // MISC. Period Load Mode
        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_ZERO);
        EDIS;
    }
    

    提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    比较器子系统输出生成事件并驱动 PWM。 此问题似乎与 CMPSS 及其 PWM 配置有关。

    如果您可以将您的问题精简为特定功能或 MCU 问题、就像您在其他论坛帖子中所做的一样、对我大有裨益。  

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

    您好、Gus:

    实际上我缺乏如何在这个问题上前进的想法。 也许您和硬件开发人员可以一起检查波形、如果您有任何想法、也可以指导我。

    提前感谢您。

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

    我注意到、SYNCPER PWM 的配置与 PMP23126设计不同。 在该设计中、CMPC 用于控制 SYNCPER 输出信号的位置。 您是否曾尝试过使用此配置?

    void PSFB_HAL_setupAdcOvrSamplPWM(uint32_t base1, uint16_t pwm_period_ticks)
    {
        EALLOW;
        EPWM_setPeriodLoadMode(base1, EPWM_PERIOD_DIRECT_LOAD);
        EPWM_setTimeBasePeriod(base1, pwm_period_ticks - 1);
        EPWM_setTimeBaseCounter(base1, 2);
        EPWM_setPhaseShift(base1, 2);
        EPWM_setTimeBaseCounterMode(base1, EPWM_COUNTER_MODE_UP);
        EPWM_setClockPrescaler(base1, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);
    
        EPWM_enablePhaseShiftLoad(base1);
    
        HRPWM_setSyncPulseSource(base1, HRPWM_PWMSYNC_SOURCE_COMPC_UP);
        EPWM_setCounterCompareValue(base1, EPWM_COUNTER_COMPARE_C,
                                     pwm_period_ticks - 5);
    
        EDIS;
    }

    在代码中、看起来您只是想将输入同步信号传递到输出。 因此、在本例中、我不知道单独 PWM 配置的目的是什么、即您可以直接获取 SYNC 输出信号、PWM 从该信号馈送此信号作为 CMPSS 源。  

    您是否曾尝试使用 XBAR 观察 CTRIPOUTH 输出来进一步调试这一点?