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.

[参考译文] TMS320F28069:如果 ePWM 在 CTR = 0上生成中断、那么 CMPA (LOADMODE = 0)负载将在 ISR 执行之前或之后发生?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/809162/tms320f28069-if-epwm-generate-interrupt-on-ctr-0-then-cmpa-loadmode-0-load-will-happen-before-the-isr-execution-or-after

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

您好!

我需要知道、如果我配置 ePWM、会发生什么情况、如下所述

INTSEL = 1 (CTR = 0时的 Genrate 中断);

CMPA 加载模式在 CTR=0时为影子;

如果我在 ISR 中更新 CMPA 值、将为比较前一个或当前获取哪个值? 换句话说、第一个 ISR 将生成、还是 CMPA 值将更新?

EPwm1_ISR ()//在 CTR=0时的额定电压

//CPA 在此加载、那么电流将流向我在此处加载的活动寄存器、还是在最后一个中断中加载到影子寄存器中的上一个?

我想在这种情况下、它会延迟一个周期?

在 HVACI_Scalar 的控制套件示例中、在此示例中、它们使用的配置与上述配置类似、我想在这种情况下、三相正弦 PWM 的生成会延迟一个周期? 我在下面提到了示例配置。

/ /

//使用 EPWM1时基启用 CNT_ZERO 中断
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 EPWM1INT 生成
EPwm1Regs.ETSEL.bit.INTSEL = 1;//启用中断 CNT_ZERO 事件
EPwm1Regs.ETPS.bit.INTPRD = 1;//在第1个事件上生成中断
EPwm1Regs.ETCLR.bit.INT = 1;//启用更多中断

EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.EPWM1_INT = MainISR;
EDIS;

/*------------------
F2803x 比较控制寄存器的初始化常量。
-------------------------------------------------- *
#define CMPCTL_INIT_STATE (LOADAMODE_ZRO +\
LOADBMODE_ZRO +\
SHDWAMODE_SHADOW +\
SHDWBMODE_SHADOW)

// MainISR
中断空 MainISR (空)

//----------------------------------
//连接 SVGEN_MF 模块的输入并调用空间矢量发生器。 宏
//----------------------------------
svgen_MF1.gain = vhz1.VoltOut;
svgen_MF1.Freq = vhz1.Freq;
SVGENMF_MACRO (svgen_MF1);

//----------------------------------
//连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
//----------------------------------
pwm1.Mfunc1 = svgen_MF1.Ta;
pwm1.MfuncC2 = svgen_MF1.TB;
pwm1.MfuncC3 = svgen_MF1.TC;
PWM_MACRO (1、2、3、pwm1)//计算新的 PWM 比较值

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

    Shubham、

    在影子加载时、写入被延迟到一个周期。 在这种情况下、应加载 CTR = 0之前写入 CMPA 中的任何内容。

    如果在 ISR 内部更新 CMPA 值、则会在影子加载后发生。 因此、在下一个周期的影子负载之前、它不会生效。

    此致、
    Cody

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

    您好!

    感谢您的回复!

    我在下面也有同样的疑问,需要更多的解释。

    在 HVACI_Scalar 的控制套件示例(ti\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v2.1\HVACI_Scalar)中、在这个示例中、它们使用的配置与我在上面的线程中要求的配置类似(CMPA 加载和生成用于 CTR 上 CMPR 更新的 ISR)、我认为在这种情况下三相 PWM 生成会被一个周期延迟 (将比较旧的采样值)? 我在下面提到了示例配置。

    请仔细检查、在此示例中、我知道 PWM 是否会延迟一个周期? 如果它被延迟、那么它是否会在旋转电机中产生任何性能问题?

    / /

    //使用 EPWM1时基启用 CNT_ZERO 中断
    EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 EPWM1INT 生成  
    EPwm1Regs.ETSEL.bit.INTSEL = 1;//启用中断 CNT_ZERO 事件
    EPwm1Regs.ETPS.bit.INTPRD = 1;//在第1个事件上生成中断
    EPwm1Regs.ETCLR.bit.INT = 1;//启用更多中断

    EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
    PieVectTable.EPWM1_INT = MainISR;
    EDIS;

    /*------------------
    F2803x 比较控制寄存器的初始化常量。  
    -------------------------------------------------- *
    #define CMPCTL_INIT_STATE (LOADAMODE_ZRO +\
    LOADBMODE_ZRO +\
    SHDWAMODE_SHADOW +\
    SHDWBMODE_SHADOW)

    // MainISR  
    中断空 MainISR (空)

    //----------------------------------
    //连接 SVGEN_MF 模块的输入并调用空间矢量发生器。 宏
    //----------------------------------
    svgen_MF1.gain = vhz1.VoltOut;  
    svgen_MF1.Freq = vhz1.Freq;  
    SVGENMF_MACRO (svgen_MF1);

    //----------------------------------
    //连接 PWM_DRV 模块的输入并调用 PWM 信号生成宏
    //----------------------------------
    pwm1.Mfunc1 = svgen_MF1.Ta;  
    pwm1.MfuncC2 = svgen_MF1.TB;  
    pwm1.MfuncC3 = svgen_MF1.TC;  
    PWM_MACRO (1、2、3、pwm1)//计算新的 PWM 比较值

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

    您的理解是正确的。 实际上、相对于控制环路的速度、机械系统对输入响应缓慢。

    如果不使用影子加载、则可能会在整个 PWM 周期内丢失事件、这对系统的影响要大得多。

    此致、
    Cody  

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

    您好!

    我明白了、但我仍然有一个疑问、就像您说过的"如果您不使用影子加载、那么在整个 PWM 周期内可能会丢失事件、这对系统的影响要大得多"。 我没有得到它、如果我使用立即加载、为什么它会错过该事件?

    我通过将此配置更改为立即加载来运行电机、电机产生的声音不能正常运行、根据您的说法、这是没有发生的事件。

    此致、

    Shubham

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

    Shubham、

    [引用用户="Shubham Kant Dubey"]答对了,但我仍有一个疑问,因为您说过“如果您不使用影子加载,则可能会在整个 PWM 周期内丢失事件,这对系统的影响要大得多”。 我没有收到、如果我立即加载、为什么它会错过该事件?

    PWM 模块执行"等于"比较、但不执行"大于或等于"比较。 因此、如果在 TBCTR = 201期间将 CMPA 值从800更改为200、则 CMPA 事件将会丢失。 CMPA 操作在下一个周期之前不会生效。 如果不使用影子加载、则需要确保软件中不会发生这种情况。

    [引用 user="Shubham Kant Dubey"]我通过将此配置更改为立即加载来运行电机,电机产生的声音运行不正常,根据您的说法,这是缺少事件的。

    我并不是想暗示这是您问题的原因、而只是您可能会或可能不会因为不使用影子负载而受到的影响。 如果您的电机未运行、则可能会出现许多问题、例如、您的控制环路可能无法正确调整。

    此致、
    Cody