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.

[参考译文] TMS320F280039:TMS320F280039:PMP41017 LLC_sec2_pwm_base 问题

Guru**** 2422790 points
Other Parts Discussed in Thread: PMP41017

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1537172/tms320f280039-tms320f280039-pmp41017-llc_sec2_pwm_base-question

器件型号:TMS320F280039
主题中讨论的其他器件:PMP41017

工具/软件:

你好。

我正在开发基于 PMP41017 的 LLC。

PWM 在基本代码中按如下所示进行配置。

// pwm — 实例分配

#define LLC_PRI1_PWM_BASE       EPWM1_BASE
#define LLC_SEC1_PWM_BASE      EPWM4_BASE
#define LLC_PRI2_PWM_BASE       EPWM2_base
#define LLC_sec2_pwm_base      EPWM6_BASE
#define LLC_sec2_pwm_base_B   EPWM7_base
#define LLC_CONTROL_PWM_BASE EPWM3_BASE

LLC_SEC1_PWM_BASE 为 EPWM4。

但  llc_sec2_pwm_base A 是 EPWM6、B 是 EPWM7。

我被告知原因可能是因为 A/B 输出需要更大的灵活性。

为了方便编码、我删除#define LLC_SEC2_PWM_BASE_B EPWM7_BASE并使用 EPWM6_BASE A/B 实现了代码

因此、我修改了 TILLC_HAL_updateActuation() 函数中的原始公式。
您能否查看更新后的公式以检查是否存在任何问题?

静态内联 void LLC_HAL_updateActivation (float32_t periodSet_pu、
float32_t dutySetPhase1_PU、
float32_t dutySetPhase2_PU、
uint16_t dbred_pri_ticks、
uint16_t dbfeed_pri_ticks、
float32_t phaseshift_pu)

静态 uint16_t tbprd_ticks = 0、tbprd_tics_int = 0;
静态 uint16_t cmpa_pri_1_ticks = 0、CMPB_pri_1_ticks = 0、CMPC_pri_1_ticks = 0;
静态 uint16_t cmpa_sec_1_ticks = 0、CMPB_sec_1_ticks = 0;
静态 uint16_t db_sec_1_ticks = 0;
静态 uint16_t DBRED_PRI_1_TICKS_DUTY = 0、dbFED_PRI_1_TICKS_DUTY = 0;

//
//钳制传递到函数的周期变量
//
GV_run (&periodSet_pu、LLC_PERIOD_MAX_PU、LLC_PERIOD_MIN_PU);
GV_run (&dutySetPhase1_pu、LLC_DUTY_MAX_PU、LLC_DUTY_MIN_PU);
GV_run (&dutySetPhase2_pu、LLC_DUTY_MAX_PU、LLC_DUTY_MIN_PU);

//
//计算临时值
//
tbprd_ticks =(LLC_PERIOD_MAX_ticks * periodSet_pu)* 0.5;// 120/100/2 * pu =最大值 (600)

if (tbprd_ticks <(0.325*llc_period_common_ticks))

tbprd_ticks_int = 3*tbprd_ticks;// 200k 中断两个周期限制
}
暴露

tbprd_ticks_int = 2*tbprd_ticks ;
}

CMPB_pri_1_ticks = dutySetPhase1_pu * tbprd_ticks;
cmpa_pri_1_ticks = tbprd_ticks - CMPB_pri_1_ticks;

dbred_pri_1_ticks_duty = dbred_pri_ticks + cmpa_pri_1_ticks;//使用 DB 调整占空比
dbfeed_pri_1_ticks_duty = dbfeed_pri_ticks + cmpa_pri_1_ticks;//DB->占空比控制 10+600*0.01 (2~6)= 16 ->130N

dbred_pri_ticks = dbred_pri_ticks + 12;//= 10+12 * 8.33 = 180n

if(tbprd_ticks >(llc_period_onorion_ticks * 0.5 ))///以下区域(对称)

CMPB_sec_1_ticks = tbprd_ticks - LLC_period_honion_ticks * 0.5;
cmpa_sec_1_ticks = llc_period_common_ticks * 0.5;
}
否则//above 区域 0.5 占空比

CMPB_sec_1_ticks = 0;
cmpa_sec_1_ticks = tbprd_ticks;
}
//中断和 ADC 设置

EPWM_setTimeBasePeriod (LLC_CONTROL_PWM_BASE、tbprd_ticks_int);
EPWM_setTimeBasePeriod (LLC_CLA_PWM_BASE、tbprd_ticks_int);
cmpc_pri_1_ticks = tbprd_ticks * 0.7;
EPWM_setCounterCompareValue (LLC_PRI1_PWM_BASE、EPWM_COUNTER_COMPARE_C、CMPC_PRI_1_TICKS);

//
//更新相位 1 PWM (HB)
//
LLC_HAL_updatePWM (LLC_PRI1_pwm_base、tbprd_ticks、cmpa_pri_1_ticks、
CMPB_PRI_1_TICKS、dbred_pri_1_TICKS_DUTY、dbfeed_pri_1_TICKS_DUTY);
LLC_HAL_updatePWM (LLC_SEC1_PWM_BASE、tbprd_ticks、cmpa_sec_1_ticks、
CMPB_sec_1_ticks、db_sec_1_ticks、db_sec_1_ticks);

静态 uint16_t cmpa_pri_2_ticks = 0、CMPB_pri_2_ticks = 0;
//静态 uint16_t cmpa_sec_2_tics_outA = 0、CMPB_sec_2_tics_outA = 0;
//静态 uint16_t cmpa_sec_2_tics_outb = 0、CMPB_sec_2_tics_outb = 0;
静态 uint16_t cmpa_sec_2_ticks = 0、CMPB_sec_2_ticks = 0;
静态 uint16_t db_sec_2_ticks = 0;
static uint16_t db_pri_2_duty = 0;//使用 DB 调整占空比
静态 uint16_t DBRED_PRI_2_TICKS_DUTY = 0、dbFED_PRI_2_TICKS_DUTY = 0;
静态 uint16_t phaseshift_ticks = 0;

而 (phaseshift_pu >= 0.5) phaseshift_pu = phaseshift_pu - 0.5;// phaseshift_pu = 0.25
phaseshift_ticks = tbprd_ticks * phaseshift_pu *2;
CMPB_pri_2_ticks = phaseshift_ticks;
cmpa_pri_2_ticks = tbprd_ticks - phaseshift_ticks;

dB_pri_2_duty = dutySetPhase2_pu * tbprd_ticks;// duty ->死区时间
dbred_pri_2_ticks_duty = dbred_pri_ticks + tbprd_ticks - db_pri_2_duty;
dbfed_pri_2_ticks_duty = dbfed_pri_ticks + tbprd_ticks - db_pri_2_duty;

db_sec_2_ticks = dbfeed_pri_ticks + 12;//= 10+12 * 8.33 = 180n

if(tbprd_ticks <(llc_period_common_ticks * 0.5 ))//以上

/*评论 SKIM 2025.06.25
cmpa_sec_2_tics_outa = phaseshift_ticks;
CMPB_sec_2_tics_outa = tbprd_ticks - phaseshift_ticks;
cmpa_sec_2_tics_outb = phaseshift_ticks;
CMPB_sec_2_tics_outb = tbprd_ticks - phaseshift_ticks;
*/

cmpa_sec_2_ticks = phaseshift_ticks;
CMPB_sec_2_ticks = tbprd_ticks - phaseshift_ticks;
}

否则 if(tbprd_ticks <(phaseshift_ticks +(llc_period_honion_ticks / 2 )))//低于 TR < tsw < 2Tr

// cmpa_sec_2_tics_outa = phaseshift_ticks;
// CMPB_sec_2_tics_outa = 2 * tbprd_ticks - LLC_PERIOD_COMMON-ticks * 0.5 - phaseshift_ticks;
// cmpa_sec_2_tics_outb = tbprd_ticks - phaseshift_ticks;
// CMPB_sec_2_tics_outb = LLC_period_common_ticks * 0.5 + phaseshift_ticks - tbprd_ticks;
cmpa_sec_2_ticks = phaseshift_ticks;
CMPB_sec_2_ticks = 2 * tbprd_ticks - LLC_PERIOD_COMION_ticks * 0.5 - phaseshift_ticks;
}

//
//更新相位 2 PWM (HB)
//
LLC_HAL_updatePWM (LLC_PRI2_pwm_base、tbprd_ticks、cmpa_pri_2_ticks、
CMPB_PRI_2_TICKS、dbred_pri_2_TICKS_DUTY、dbfeed_pri_2_TICKS_DUTY);

LLC_HAL_updatePWM (LLC_sec2_pwm_base、tbprd_ticks、cmpa_sec_2_ticks、
CMPB_sec_2_ticks、db_sec_2_ticks、db_sec_2_ticks);

/*评论由 SKIM 2025.06.27
LLC_HAL_updatePWM (LLC_sec2_pwm_base、tbprd_ticks、cmpa_sec_2_tics_outA、
cmpa_sec_2_tics_outb、db_sec_2_ticks、db_sec_2_ticks);

llc_HAL_updatePWM (llc_sec2_pwm_base_B、tbprd_ticks、cmpa_sec_2_tics_outb、
CMPB_sec_2_ticks_outb、db_sec_2_ticks、db_sec_2_ticks);
*/
//
//设置全局加载一次性锁存器、以便 PWM 行为在接下来更新
// TBCTR = 0 事件
//
EPWM_setGlobalLoadOneShotLatch (LLC_CONTROL_PWM_BASE);
}

谢谢。

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

    您好:

    我添加了该参考设计的相关专家。 他们应该在本周回复您。

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

    您好 SAM、

    抱歉、我们通常不会对整个配置执行代码检查。 您能否先尝试一下、如果您发现任何问题、请告诉我们、以便我们提供帮助?

    此致。

    Chen