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.

[参考译文] TMS320F2.8335万:频繁更新操作限定符寄存器设置的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/572444/tms320f28335-problem-with-frequently-updating-action-qualifier-register-setting

部件号:TMS320F2.8335万

大家好,

要创建特定的PWM模式,我需要经常更改ePWM ACTLA和ACTLB设置。 但是,我注意到ePWM设置的更改会随着采样延迟而发生。 这会导致我的代码无法正常工作。 这是我的代码的一部分:

如果(sector_rec=0)

{	EPwm1Regs.AQCTLA.ALL =2; 		
	EPwm1Regs.AQCTLB.all = 289;
	EPwm2Regs.AQCTLA.ALL = 1;
	EPwm2Regs.AQCTLB.all = 289;
	EPwm3Regs.AQCTLA.ALL = 1;
	EPwm3Regs.AQCTLB.all = 289;
}
否则
{
	EPwm1Regs.AQCTLA.ALL = 289; 		
	EPwm1Regs.AQCTLB.ALL = 1;
	EPwm2Regs.AQCTLA.ALL = 289;
	EPwm2Regs.AQCTLB.ALL = 1;
	EPwm3Regs.AQCTLA.ALL = 289;
	EPwm3Regs.AQCTLB.ALL =2;

} 

在此代码中,变量"sector_rec"会在一段时间后更改。 我需要找到一种方法来立即更改AQCTLA (B)设置。 感谢您的帮助。

提前感谢您的参与,

-埃米尔

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

    您看到了多长时间的延迟? 您是否正在划分PWM时钟? PWM周期的大小是多少? 您是否也在更改CMPA或CMBB值? 这些寄存器确实有一个阴影寄存器(可以禁用),它等待下一个PWM循环加载。

    执行此操作的典型方法是更改CMPA和CMBB事件的值,而不是更改操作限定符。 是否可以在代码中修改此方案? 我怀疑您会看到更好的结果。 如果需要立即生效,请确保禁用阴影寄存器。

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

    非常感谢您的回答。 我的采样和切换频率为10 kHz,在更改操作限定符设置时似乎存在一个采样延迟。 我应该同时更改CMPA (B)和AQCTLA (B)以生成所需的PWM。 问题是我正在为逆变器生成PWM,但在我的情况下,上下开关不是互补的。 例如,我有这个模式

    EPWMA:1-1-1
    EPWMB:0-1-0

    当变量"sector_rec"发生变化时,PWM将如下所示

    EPWMA:0-1-0
    EPWMB:1-0-1

    此外,每个状态的占空比在每个时刻都有所不同。
    我为当前代码启用了阴影,因为当我禁用它时,我的代码似乎无法正常工作。

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

    感谢您的详细信息。 您能否澄清说一次样本延迟的含义? 我只想确认,你说下一个采样频率为10 KHz,更新AQ寄存器后,你仍在读取旧值。 是这样吗?

    您是否使用了设备上的所有其他PWM模块? 与其使用A和B通道,不如使用单独的PWM模块,因为它们不是互补的。

    您能否发布您所看到的一些波形? 请指明何时也通过销钉扳钮向AQ写入数据。

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

    Kris,

    谢谢,我再次看到结果,显而易见,AQCTL寄存器首先发生变化,占空比值会延迟更新。 我加上这个数字。 如您所见,当sec_rec更改时,我希望ePWMA1中没有零值(用红色圆圈指定),而应该是统一。 我应该提到 ,EPwm1Regs.CMPA.Half.CMPA的值在sec_rec变为零之前是有意义的。

    谢谢!

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

    埃米尔

    您是否可以确保CMPA和CMBB寄存器的阴影到活动模式设置为立即?  我认为这可以解决您的问题。

    阴影模式会将新CMPA和CMBB值的加载延迟到下一个周期。

    此致,

    克里斯

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

    Kris,

    我将重试并更新您的信息。

    谢谢!

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

    很抱歉耽误你的时间。 我尝试将阴影寄存器模式更改为立即,但它对我不起作用。 以下是我的代码中与EPWMA相关的部分,可能有助于您诊断问题。 谢谢

    EPwm1Regs.TBCTL.ALL =(EPwm1Regs.TBCTL.ALL &~0x3FBF)| 0x12;//IT用于上/下模式
    EPwm1Regs.TBCTL.bit.CTRMODE =0; //更改为向上模式
    EPwm1Regs.TBPRD = TSW;
    EPwm1Regs.TBPHS.ALL =(EPwm1Regs.TBPHS.ALL &~0xFFFF0000)| 0x0;
    EPwm1Regs.TBCTR = 0x0000; /*清除计数器*/
    EPwm1Regs.CMPCTL.ALL =(EPwm1Regs.CMPCTL.ALL &~0x5F)| 0x1;
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = 1;//比较块操作模式。
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = 1;//比较B块操作模式。
    EPwm1Regs.CMPA.Halt.CMPA = TSW;
    EPwm1Regs.CMBB = 0;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
    EPwm1Regs.AQCTLA.ALL = 288; // Setup Action-Qualifier (AQ)子模块:ZRO = SET,PRD = CLEAR
    EPwm1Regs.AQCTLB.all = 0;//不执行任何操作
    EPwm1Regs.AQSFRC.ALL =(EPwm1Regs.AQSFRC.ALL &~0xC0)| 0x0;
    EPwm1Regs.ETSEL.ALL =(EPwm1Regs.ETSEL.ALL &~0xFF0F)| 0x1A01;
    EPwm1Regs.ETPS.ALL =(EPwm1Regs.ETPS.ALL &~0x3303)| 0x1101;