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.

[参考译文] TMS320F280049:Tida-010054

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1085396/tms320f280049-tida-010054

部件号:TMS320F280049
“其他部件”(在“螺纹:Tida-010054”中讨论)

您好,  

  我想确认一点,TIDA-010054:

  寄存器 CMPAHR,CMMPBHR,DBREDHR,DBFEDHR 和 TBPHSHR 是否已启用? 是否仅禁用 TBPRDHR?

  我认为对吗? 谢谢

 

济济会语

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

    自我编写此配置以来已有一段时间,下面是我自编写此配置以来的备注:

    PWM 配置

    上-下计数模式用于为双主动桥的主支腿和辅助支腿生成 PWM。 要使用高分辨率 PWM,Prim_LEG1_H PWM 脉冲以周期事件为中心,且时间基准配置为向上-向下计数。 然后为辅助开关生成具有高分辨率死机时间的互补脉冲。 在 LEG1和 LEG2之间,全桥操作需要180度相移。 这是通过使用 PWM 模块上的功能交换 XA 和 XB 输出来实现的。 此应用的 PWM 频率为100kHz。 TBPRD 寄存器在上-下计数模式下设置为值500。

    占空比值加载在 ePWM 基座的 CMPA 寄存器中,并配置为生成50%占空比。  操作限定符模块输出在比较事件上控制 PWM 输出所需的操作。 类型4 PWM 上的全局链路机制用于减少更新寄存器所需的周期数并启用高频操作。 例如,DAI_HAL_setupPWM()函数中的以下代码链接所有 PWM 分支的 TBPRD 寄存器。

    使用此链接,对 Prim_LEG1 TBPRD 寄存器的单个写入将值写入 Prim_LEF2,SEC_LEG1和 SEC_LEG2。

    使用的高分辨率功能:

    • 高分辨率相移
    • 高分辨率死区
    •  高分辨率→不可用,CTMODEB 设为1
    • 高分辨率期间 →不可用, CTMODEB 设置为1  

    高分辨率相移配置:

    次级侧的 PWM 脉冲相对于主侧的 PWM 脉冲进行相移。 控制相移可在主和次电源之间实现电源转换,反之亦然。 传输的最大功率对双主动桥中的相移值非常敏感。 小型系列电感器可以在相位偏移的小值下实现最大功率传输。 由于相移的变化范围很小,准确的控制需要 相位的精细增量/递减步骤。  使用  F28004x 的高分辨率(高分辨率)功能实施相位控制。  ISR1内的 DAI_AND_AND_AND_MODENTYPeriodPhaseShiftTicks()函数计算电压和电流模式控制所需的高分辨率相位控制。 这有助于平稳处理突然的负载变化,而不会在电流波形中产生巨大的过载/瞬变。

    对于正相位和负相位偏移,计算方法略有不同,以适应 HRPWM 的硬件实施。  

    static inline void DAB_calculatePWMDutyPeriodPhaseShiftTicks(void)
    {
    ...
       //
        // first the phase shift in pu is converter to ns
        // this is done for better debug and user friendliness
        //
        DAB_pwmPhaseShiftPrimSec_ns = DAB_pwmPhaseShiftPrimSec_pu *
                ((float32_t)1.0 / DAB_pwmFrequency_Hz) *
                (1 / ONE_NANO_SEC);
     
        //
        // next this ns is simply converted to ticks
        //
        DAB_pwmPhaseShiftPrimSec_ticks =
                (int32_t)((float32_t)DAB_pwmPhaseShiftPrimSec_ns *
                           DAB_PWMSYSCLOCK_FREQ_HZ * ONE_NANO_SEC *
                           TWO_RAISED_TO_THE_POWER_SIXTEEN) -
                 ((int32_t)2 << 16);
     
        //
        // due to the delay line implementation depending on whether it is
        // a phase delay or an advance we need to adjust the
        // HR phase shift ticks calculations
        //
        if(DAB_pwmPhaseShiftPrimSec_ticks >= 0)
        {
            DAB_phaseSyncPrimToSecCountDirection = EPWM_COUNT_MODE_DOWN_AFTER_SYNC;
     
            //
            // DAB_pwmPhaseShiftPrimSec_ticks has the correct value already
            //
        }
        else
        {
            DAB_phaseSyncPrimToSecCountDirection =  EPWM_COUNT_MODE_UP_AFTER_SYNC;
            DAB_pwmPhaseShiftPrimSec_ticks = DAB_pwmPhaseShiftPrimSec_ticks * -1;
     
            DAB_pwmPhaseShiftPrimSec_HiResticks =  ((uint16_t) 0xFF - ((uint16_t)
                       (DAB_pwmPhaseShiftPrimSec_ticks & 0x0000FFFF)>>8));
     
            DAB_pwmPhaseShiftPrimSec_ticks = ((DAB_pwmPhaseShiftPrimSec_ticks & 0xFFFF0000) + 0x10000) +
                    (DAB_pwmPhaseShiftPrimSec_HiResticks << 8);
        }
    }
    static inline void DAB_HAL_updatePWMDutyPeriodPhaseShift(uint32_t period_ticks,
                                    uint32_t dutyAPrim_ticks,
                                    uint32_t dutyASec_ticks,
                                    uint32_t phaseShiftPrimSec_ticks,
                                    uint16_t phaseShiftPrimSec_direction)
    {
    ...
        EALLOW;
        HWREG(DAB_SEC_LEG1_PWM_BASE + HRPWM_O_TBPHS) = phaseShiftPrimSec_ticks;
        HWREG(DAB_SEC_LEG2_PWM_BASE + HRPWM_O_TBPHS) = phaseShiftPrimSec_ticks;
        EDIS;
    }

    变量“AB_phaseSyncPrimToSecCountDirection ”已更新,以控制电源流的正向模式或反向模式。

     

    以下是对代码进行验证的装置测试  

    PWM 驱动器要求

    频率/周期 →固定,不能是 HRPWM,即 TBPRD 只是常规分辨率位

    主相位和辅相位的切换可以通过高分辨率进行更改  

    死区可以使用高分辨率进行更改

    占空比固定在50%

    通过 Lab1标准

    连接 PWM1A (Q1),PWM1B (Q2),PWM3A (Q5)和 PWM3B (Q6)上的探头

    1A 和1B 将是互补对3A 将与1A 与指定相移同步,现在相移由变量 DAI_pwmPhaseShiftPrimSecRef_PU 控制,  

    检查

    1. 频率为100kHz  
    2.  现在将相移更改为0.01→ 500ns,以查看更多可见相移,  

    3. 相移与示波器上的变量指定的匹配,并确保检查是否存在非时钟刻度,即相移至垂直高分辨率操作的10 ns 以下内部值。 在以下情况下,使用示波器测量相移为~500ns (500ns),设定值为~502ns (502ns),小抖动~1-2ns (测量误差)。  

      小心:不建议在超过0.45pu 的情况下操作相移



    接下来,将 PWM 探头更改为 PWM1A,PWM1B,PWM2A 和 PWM2B

    确认 PWM1A 和2B 处于同步和相位

    确认 PWM1B 和2A 处于同步和相位

    5.确认它们在秒侧 PWM 的相移改变时保持同步和相位。  

    6.死时间验证

    通过修改 dab_settings.h 中以下变量的值,可以调整死时间的值

    #define DAM_Prim_PWM_dutband _red_NS (((float32_t) 300)
    #define DAM_Prim_PWM_dutband _fed_NS (((浮动32_t) 300)
    #define DAB_SEC_PWM_dutband _red_NS ((浮动32_t) 300)
    #define DAB_SEC_PWM_dutband _fed_NS ((浮动32_t) 300)

    300ns 停机时间(上升和下降边缘)

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

    非常感谢。 你纠正了我的错误想法:人力资源职责已被启用。  

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

    您好,Manish:

     至于

    CTLMODEB = 1;

    那么以下句子是否正确? :“可经皮启用值班心率和期间心率。” “相位心率和占空比/期间心率不能同时启用。”

    正在等待您的回复。 谢谢。

    济济会语