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.

[参考译文] TMS320F28335:&lt 中的 PWM_INIT_MACRO;f2833xpwm.h>

Guru**** 2613915 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/690109/tms320f28335-pwm_init_macro-in-f2833xpwm-h

器件型号:TMS320F28335
Thread 中讨论的其他器件:controlSUITE

尊敬的香榭丽舍

我正在 HVMotor Kit 上运行 HVPM_Sensorless_2833x 演示、并与 中的 PWM_INIT_MACRO 相混淆 。  文件路径为 C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\F2833x_v2.0

此宏首先设置*ePWM[CHX].TBCTL.bit.PHSEN=1、然后让'*ePWM[CHX]).TBCTL.ALL = PWM_INIT_STATE 、而 PWM_INIT_STATE 不包含 PHSEN。

请帮助我了解为什么使用这种方法? 非常感谢!

#define PWM_INIT_MACRO (CH1、CH2、ch3、v)\
/*设置同步*/\
(* ePWM[CH1]).TBCTL.bit.SYNCOSEL = 0; /*直通*/\
(* ePWM[CH2]).TBCTL.bit.SYNCOSEL = 0; /*直通*/\
(* ePWM[ch3]).TBCTL.bit.SYNCOSEL = 0; /*直通*/\

/*允许同步每个计时器*/\
(* ePWM[CH1]).TBCTL.bit.PHSEN = 1;\
(* ePWM[CH2]).TBCTL.bit.PHSEN = 1;\
(* ePWM[ch3]).TBCTL.bit.PHSEN = 1;\
\
/* EPWM1-EPWM3*的初始定时器基周期寄存器*/\
(* ePWM[CH1]).TBPRD = v.PeriodMax;\
(* ePWM[CH2]).TBPRD = v.PeriodMax;\
(* ePWM[ch3]).TBPRD = v.PeriodMax;\

/*用于 EPWM1-EPWM3*的 Init Timer-Base 相位寄存器*/\
(* ePWM[CH1]).TBPHS.Half.TBPHS = 0;\
(* ePWM[CH2]).TBPHS.Half.TBPHS = 0;\
(* ePWM[ch3]).TBPHS.half.TBPHS = 0;\

/*用于 EPWM1-EPWM3*的 Init Timer-Base 控制寄存器*/\
(* ePWM[CH1]).TBCTL.ALL = PWM_INIT_STATE;\
(* ePWM[CH2]).TBCTL.ALL = PWM_INIT_STATE;\
(* ePWM[ch3]).TBCTL.ALL = PWM_INIT_STATE;\


/*------------------
用于 PWM 生成的 F2833x 时基控制寄存器的初始化常数。
将定时器设置为在仿真挂起时自由运行、向上计数-向下计数模式
预分频器1。
-------------------------------------------------- */
#define PWM_INIT_STATE (FREE_RUN_FLAG + \
PRDLD_IMMETER+ \
Timer_CNT_UPDN + \
HSPCLKDIV_PRESALE_X_1 +\
CLKDIV_PRESALE_X_1 +\
PHSDIR_CNT_UP + \
CNTLD_DISABLE)

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

    此代码用于实现时基计数器(TBCTR)同步。
    设置 TBCTL[SYNCOSEL]= 00允许为 SYNCOSEL 选择 EPWMxSYNCI (同步输入脉冲)、设置 TBCTL[PHSEN]= 1可在 EPWMxSYNCI 发生时将 TBPHS 的值写入 TBCTR。 由于这个宏将所有3个通道的 TBPHS 设定为0、这将在 ePWM 通道1-3上同步 TBCTR。

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

    您好、Elizabeth、

    非常感谢您的快速回复。 很抱歉、我的问题不是很清楚...

    根据 PWM_INIT_MACRO 的详细代码、首先设置 PHSEN 位、然后使用语句初始化整个 TBCTL 寄存  器:(* ePWM[CH1]).TBCTL.ALL = PWM_INIT_STATE;"PWM_INIT_STATE"定义不包括 PHSEN 位。

    我的问题是:  

    1.为什么独立启动"SYNCOSEL"和"PHSEN"位?  

    2.  "SYNCOSEL"和"PHSEN"位将由"(* ePWM[CH1]).TBCTL.ALL = PWM_INIT_STATE;"语句修改、这是我们想要的吗?

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

    通过初始化 SYNCOSEL 以选择 EPWMxSYNCI 和 PHSEN = 1、TBCTR 可与 ePWM 通道上的 TBPHS 值同步。 因此、通过这个宏的配置、一旦 EPWMxSYNCI 脉冲发生、可确保 EPWM1-EPWM3的 TBCTR = TBPHS = 0。 之后、PHSEN 被清零以禁用相移。 如果您正在使用的应用需要相移、则可以再次设置 PHSEN。

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