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.

[参考译文] TMS320F280039C:将交流/直流和直流/直流电源转换器项目从 TMS320F28335传输到 TMS320F280039C

Guru**** 2905440 points

Other Parts Discussed in Thread: TMS320F280049C, TMS320F28335, TMS320F280039C, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1194496/tms320f280039c-transfer-ac-dc-and-dc-dc-power-converter-project-from-tms320f28335-to-tms320f280039c

器件型号:TMS320F280039C
主题中讨论的其他器件:TMS320F280049CTMS320F28335C2000WARE

您好!

我们使用 TMS320F28335已经有一段时间来开发交流/直流和直流/直流电源转换器。 我们在 TI 网站的最新参考设计中发现 TMS320F280039C 和 TMS320F280049C、其中包括几个适合我们应用的良好功能。 我们希望在我们的新电源转换器项目上尝试一下。 我已经下载了 DSP 的参考手册和 C2000Ware 数字电源 SDK 中的多个代码示例。 代码示例中的软件与我们在28335中使用的软件看起来非常不同。 与逐行读取示例代码并在参考手册中自行搜索相比、是否有更快速的方法来了解这一点? 我们非常感谢帮助我们更快开始的任何培训和顾问。  

谢谢、

齐维

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

    你好,齐维

    您如何发现代码不同? 是在位字段中写入的旧代码。 您能否共享较旧和较新的代码、以便我能够看到差异?

    谢谢

    Amir

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

    您好、Amir、

    感谢你的答复。 下面是我如何为 F28335设置 ePWM 模块:

    // TI 文件$Revision:/main/1 $
    //签入$日期:2006年8月18日13:46:19 $
    //######################################################################################################################
    //
    //文件:DSP2833x_ePWM.c
    //
    //标题:DSP2833x ePWM 初始化和支持函数。
    //
    //######################################################################################################################
    //$TI 发行版:2833x/2823x 头文件 v1.32 $
    //$Release Date:2010年6月28日$
    //######################################################################################################################

    #include "inV_header.h"
    #include "DSP2833x_Device.h"// DSP2833x 头文件包含文件
    #include "DSP2833x_examples.h"// DSP2833x 示例包含文件

    ///-------------------------------------------------------
    // InitEPwm:
    ///-------------------------------------------------------
    //此函数将 ePWM 初始化为已知状态。
    //
    空 InitEPwm (空)

    EALLOW;

    //禁用中断
    EPwm1Regs.ETSEL.bit.INTEN = 0;
    EPwm2Regs.ETSEL.bit.INTEN = 0;
    EPwm3Regs.ETSEL.bit.INTEN = 0;
    EPwm4Regs.ETSEL.bit.INTEN = 0;
    EPwm5Regs.ETSEL.bit.INTEN = 0;
    EPwm6Regs.ETSEL.bit.INTEN = 0;

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //时基周期寄存器
    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //设置时基周期
    EPwm1Regs.TBPRD = PWM_PRD_UD;
    EPwm2Regs.TBPRD = PWM_PRD_UD;
    EPwm3Regs.TBPRD = PWM_PRD_UD;
    EPwm4Regs.TBPRD = PWM_PRD_UD;
    EPwm5Regs.TBPRD = 0;
    EPwm6Regs.TBPRD = 0;

    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //时基相位寄存器
    //====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //设置阶段
    EPwm1Regs.TBPHS.ALL = 0x0000;
    EPwm2Regs.TBPHS.ALL = 0x0000;
    EPwm3Regs.TBPHS.ALL = 0x0000;
    EPwm4Regs.TBPHS.ALL = 0x0000;
    EPwm5Regs.TBPHS.ALL = 0x0000;
    EPwm6Regs.TBPHS.ALL = 0x0000;

    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;//启用并同步时钟
    *

    EDIS;

    基本上、代码直接或通过1或2层函数编辑寄存器值。 但是、在 LLC 转换器的 F280039示例代码中、我发现了许多用于配置 ePWM 模块的函数层。 例如,在下面的代码中,我在  main()中找到了 LLC_HAL_setupPWM(),  在 LLC_HAL_setupPWM 中找到了 LLC_HAL_HAL_setupEPWMActiveHighComment(),  在 LLC_HAL_setupEPWMActiveHighCommente()中找到了 EPPWM_setPeriodLoadMode()。 我在器件库 ePWM.h 中找到了 ePWM_setPeriodLoadMode(), 而弄清它是如何设置 ePWM 寄存器值的并不简单。  

      LLC_HAL_setupPWM 的代码(void)

    void LLC_HAL_setupPWM (void)

    //
    //设置全桥 PWM
    //
    LLC_HAL_setupEPWMActiveHighCommpleCommentary (LLC_PRI_PWM_BASE);

    //
    //设置 EPWM8以创建 SYNC 信号来复位 CMPSS DAC 斜率
    //
    LLC_HAL_setupEPWM_SYNC_RAMP (LLC_HHC_CTRL_PWM_BASE);

    //
    //将 EPWM5配置为用作控制 ISR 计时器,150kHz
    //
    LLC_HAL_setupEPWM_CNTL (LLC_CTRL_PWM_BASE、LLC_CNTL_ISR_PERIOD_TICK);

    //
    //为 SR 配置 EPWM2
    //
    LLC_HAL_setupSREPWM (LLC_SEC_PWM_BASE);

     LLC_HAL_setupEPWMActiveHighCommple()的代码

    void LLC_HAL_setupEPWMActiveHighComplicary (uint32_t base)

    //
    //设置 TBCLK
    //
    #if LLC_INCR_BUILD = 1.
    ePWM_setPeriodLoadMode (base、ePWM_Period_Load);
    #endif
    ePWM_setTimeBasePeriod (base、LLC_EPWM1_TBPRD);
    #if LLC_INCR_BUILD = 1.
    ePWM_setPhaseShift (base、0U);
    ePWM_setTimeBaseCounter (base、0U);
    ePWM_setTimeBaseCounterMode (base、ePWM_COUNTER_MODE_UP);
    ePWM_enablePhaseShiftLoad (base);
    ePWM_setCountModeAfterSync (base、ePWM_COUNT_MODE_UP_After_SYNC);
    ePWM_setClockPrescaler (base、ePWM_CLOCK 分频器_1、ePWM_HSCLOCK_divider 1);
    #endif
    //
    //选择 EPWM1SYNCPER 的源
    //
    HRPWM_setSyncPulseSource (base、HRPWM_PWMSYNC_SOURCE _ZERO);

    //
    //设置计数器比较子模块
    //
    #if LLC_INCR_BUILD = 1.
    ePWM_setCounterCompareShadowImage LoadMode (base、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_ZERO);
    #endif
    ePWM_setCounterCompareValue (base、ePWM_COUNTER_COMPARE_B、LLC_EPWM1_TBPRD/2);

    #if LLC_INCR_BUILD = 1.
    //
    //设置死区子模块
    //使用 EPWMA 作为红色和 FED 的输入
    //
    ePWM_setDeadBandCounterClock (base、ePWM_DB_COUNTER_clock_full_cycle);
    ePWM_setRisingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);
    ePWM_setFallingEdgeDeadBandDelayInput (base、ePWM_DB_INPUT_EPWMA);
    //
    //设置红色和输入值
    //
    ePWM_setFallingEdgeDelayCount (base、LLC_priFED_10ns);
    ePWM_setRisingEdgeDelayCount (base、LLC_priRED_10ns);
    //
    //仅反转下降沿延迟输出(AHC)
    //
    ePWM_setDeadBandDelayPolarity (base、ePWM_DB_RED、ePWM_DB_Polarity、ACTIVE_HIGH);
    ePWM_setDeadBandDelayPolarity (base、ePWM_DB_FED、ePWM_DB_Polarity、ACTIVE_LOW);
    //
    //使用延迟信号而不是原始信号
    //
    ePWM_setDeadBandDelayMode (base、ePWM_DB_RED、true);
    ePWM_setDeadBandDelayMode (base、ePWM_DB_FED、true);
    //
    //不要使用输出 B 来切换输出 A
    //
    ePWM_setDeadBandOutputSwapMode (base、ePWM_DB_output_a、false);
    ePWM_setDeadBandOutputSwapMode (base、ePWM_DB_output_B、false);
    #endif
    //
    //设置 ePWM XBAR
    //将 CMPSS 事件链接到 ePWM 模块
    //将 CMPSS2链接到 ePWM TZ 事件
    //将 CMPSS1链接到 ePWM TZ 事件
    //
    Xbar_setEPWMMuxConfig (XBAR_TRIP5、XBAR_EPWM_MUX02_CMPSS2_CTRIPH);
    Xbar_enableEPWMMUX (XBAR_TRIP5、XBAR_MUX02);
    Xbar_setEPWMMuxConfig (XBAR_TRIP7、XBAR_EPWM_MUX00_CMPSS1_CTRIPH);
    Xbar_enableEPWMMUX (XBAR_TRIP7、XBAR_MUX00);
    //
    // DCAH = TRIPIN5 = cmpss2h
    // DCAL = TRIPIN7 = cmpss1h
    //
    ePWM_selectDigitalCompareTripInput (base、ePWM_DC_TRIPIN5、ePWM_DC_TYPE_DCAH);
    ePWM_selectDigitalCompareTripInput (base、ePWM_DC_TRIPIN7、ePWM_DC_TYPE_DCAL);

    //
    // DCAEVT1 = DCAH 高电平(随着比较器输出变为高电平将变为有效)
    // DCAEVT2 = DCAL 高电平(随着比较器输出变为高电平将变为有效)
    //
    ePWM_setTripZoneDigitalCompareEventCondition (base、ePWM_TZ_DC_OUTPUT _A1、ePWM_TZ_EVENT_DCXH_HIGH);
    ePWM_setTripZoneDigitalCompareEventCondition (base、ePWM_TZ_DC_OUTPUT A2、ePWM_TZ_EVENT_DCXL_HIGH);

    //
    //最大钳位调试 DCAEVT2 = DCEVTFILT
    // DCAEVT2 = DCAEVT2 (未过滤)
    // DCAEVT1 = DCAEVT1 (未过滤)
    //
    ePWM_setDigitalCompareEventSource (base、ePWM_DC_MODULE_A、
    ePWM_DC_EVENT_1、
    ePWM_DC_EVENT_SOURC_ORIG_SIGNAL);
    ePWM_setDigitalCompareEventSource (base、ePWM_DC_MODULE_A、
    ePWM_DC_EVENT_2、
    ePWM_DC_EVENT_SOURC_ORIG_SIGNAL);

    //
    // DCAEVT1/2事件作为 AQ T1/2
    // T1 = DCAEVT1
    // t2 = DCAEVT2
    //
    ePWM_setActionQualifierT1TriggerSource (base、ePWM_AQ_TRIGG_EVENT_TRIG_DCA_1);
    ePWM_setActionQualifierT2TriggerSource (base、ePWM_AQ_TRIGG_EVENT_TRIG_DCA_2);

    //
    //这是为了避免高阻抗状态的影响
    //
    ePWM_setTripZoneAction (base、ePWM_TZ_ACT_EVENT_DCAEVT1、ePWM_TZ_ACT_DISABLE);
    ePWM_setTripZoneAction (base、ePWM_TZ_ACT_EVENT_DCAEVT2、ePWM_TZ_ACT_DISABLE);

    //
    //为 EPWM1A 设置 T1/T2操作设置
    //
    ePWM_setActionQualifierAction (base、ePWM_AQ_output_a、ePWM_AQ_output_high、ePWM_AQ_output_ON_T1_count_up);
    ePWM_setActionQualifierAction (base、ePWM_AQ_output_a、ePWM_AQ_output_low、ePWM_AQ_output_ON_T2_count_up);

    //
    //如果缺少 T2、CMPB =钳位周期/2;
    //
    ePWM_setActionQualifierAction (base、ePWM_AQ_output_a、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);
    ePWM_setActionQualifierAction (base、ePWM_AQ_output_a、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPB);

    ePWM_enableDigitalCompareSyncEvent (base、ePWM_DC_MODULE_A);

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

    你好,齐维

    使用 dirverlib 函数编写新版本的代码。 遗憾的是、我没有其他方法、只能让您完成这些功能并尝试理解。 在技术参考手册中、您可以找到用于配置寄存器的 driverlib 函数。 例如、我已附加了包含 ePWM 的 driverlib 函数的图像。  

    谢谢你

    Amir Hussain

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

    您好、Amir、

     LLC_HAL_setupPWM ()和 LLC_HAL_setupEPWMActiveHighComm补充 是否可用作交流/直流和直流/直流应用的标准模板? 或者我需要使用 dirverlib 函数自行编写内容吗? 我是否可以从一个更简单的示例代码开始? 我只需要实现 LLC 转换器的简单闭环控制。 全桥的 PWM 信号需要根据感测到的输出电压改变频率。

     

    此致、

    齐维

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

    你好,齐维

    我将把您的问题分配给处理 LLC 拓扑的人员。  

    谢谢

    Amir

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

    您好、Ziwei、

    bitfield 是配置寄存器的传统方式、而 driverlib 旨在使配置更加显式。 这两种方法都用于配置目的、我们鼓励客户将 driverlib 与新的 C2000器件结合使用。 请参阅 C2000ware 中 F280039c 的 bitfield 和 driverlib 示例的屏幕截图。

    有关 LLC 的示例、请参阅 TIDA-010062-图腾 柱无桥 PFC 和半桥 LLC、它具有使用 driverlib 的基于 F280039C 的版本代码。

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

    谢谢、这非常有帮助。