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:使用动作限定器连续软件强制寄存器(AQCSFRC)生成 ePWM

Guru**** 2535150 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/833892/tms320f28335-generating-epwm-using-action-qualifier-continuous-software-force-register-aqcsfrc

器件型号:TMS320F28335

您好,  

我已经为28335 DSP 编写了一个代码。 它专为升压转换器而设计,在该转换器中,我希望使用动作限定符寄存器手动为 MOSFET 生成 PWM。 以下是我的 PWM 配置:

空 InitEPwm3Examples()

///PWM 频率20KHz
EPwm3Regs.TBPRD = 1875;  
EPwm3Regs.TBPHS.Half.TBPHS = 0x0000;  
EPwm3Regs.TBCTR = 0x0000;  

EPwm3Regs.TBCTL.bit.CTRMODE = 3;//TB_COUNT_UPDOWN;
EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE;  
EPwm3Regs.TBCTL.bit.HSPCLKDIV=1;  
EPwm3Regs.TBCTL.bit.CLKDIV = 0;

//设置比较
EPwm3Regs.CMPA.half.CMPA = 0;
EPwm3Regs.CMPCTL.bit.SHDWAMODE = 0;
EPwm3Regs.CMPCTL.bit.LOADAMODE = 0;  

//设置操作
EPwm3Regs.AQCTLA.bit.CAU = 1;
EPwm3Regs.AQCTLA.bit.CAD = 2;

// EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR;
// EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;

//高电平有效互补 PWM -设置死区
EPwm3Regs.DBCTL.bit.OUT_MODE = 0x3;//死区完全启用
EPwm3Regs.DBCTL.bit.POLSEL = 0x2;//高电平有效互补
EPwm3Regs.DBCTL.bit.IN_MODE = 0x0;//EPWMxA 是上升沿延迟和下降沿延迟信号的源
EPwm3Regs.DBRED = 75;//1us
EPwm3Regs.DBFED = 75;
// EPwm2_DB_DIRECTION = DB_UP;

//Trip Zone Settings (//跳闸区域设置)
EALLOW;
EPwm3Regs.TZCTL.ALL = 0xA;//在 TZ 时强制 epwmxA 和 ePWMxB 都处于低电平状态。
EDIS;

//中断,我们将在其中修改死区
// EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
// EPwm2Regs.ETSEL.bit.INTEN = 1;//启用 INT
// EPwm2Regs.ETPS.bit.INTPRD = 0x1;//在第3个事件发生时生成 INT

我已使用以下代码初始化 PWM:

EALLOW;
EPwm3Regs.TZFRC.bit.OST=0;
EPwm3Regs.TZCLR.bit.OST=1;
EDIS;

这一个工作正常,我的开关打开。 但当我想使用以下代码关闭开关时: EPwm3Regs.AQCSRC.all=1将 PWM 设置为低电平, 这不起作用,MOSFET 短路。 (PWM 始终处于高电平)。

原因是什么、您能帮我解决这个问题吗?

(出于某些原因,我不想使用 TZ 寄存器,因为我的频率不是恒定的)

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

    Daniel:

    这看起来应该持续强制 PWMA 为低电平、而 PWMB 为高电平。

    PWM 模块在 PWMx 信号上按顺序操作。 您已强制将 PWMA 拉低、然后最终进入 DB、在该 DB 中、您会告诉它直到该点忽略 PWMB 并从 PWMA 创建互补信号。 由于 A 始终为低电平、因此 B 始终为高电平。

    您看到的是这种情况吗? 如果是、您可以使用跳闸区域强制 PWM 处于低电平、因为它在死区之后生效。

    此致、
    Cody  

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

    Cody、

    在此代码中,我不使用 PWMB,我只使用 PWMA,但当我使用操作限定符连续寄存器将 ePWM 设置为零时,这种情况永远不会发生,并且 PWMA 始终为高电平。 我想知道我在我的 PWM 配置代码中写了一些错误的内容。 如果我使用 TZ 寄存器,我是否也应该写入 EALLOW 和 EDIS?

    此致、

    Daniel  

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

    Daniel:

    如果您仅使用 PWMA、我希望它能够正常工作。 您可能会遇到 EALLOW 问题、这很容易检查。 单步执行您的代码、并观察您在执行行前后修改的寄存器。 如果它发生变化、很好、你没有问题。 如果它保持不变、切换 EALLOW 位并尝试再次运行代码。

    请注意、数据表中提到了所有受 EALLOW 保护的寄存器。 查看汇总表、其中列出了该模块中的所有寄存器。

    此致、
    Cody  

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

    您好 Cody,

    感谢你的帮助。 问题与我发现并解决的其他问题有关。

    谢谢大家

    Daniel

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

    很高兴听到 Daniel 的声音! 问题是什么?

    谢谢、
    Cody  

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

    问题与 ePWM 无关。 事实上,代码是完美无缺的。 我的传感器发生故障。