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.

[参考译文] TMS320F28.0049万C:如何通过软件同时运行/停止4个PWM输出(EPWM1A/B,EPWM2A/B)

Guru**** 2535540 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1097169/tms320f280049c-how-to-run-stop-4-pwm-outputs-epwm1a-b-epwm2a-b-simultaneously-by-software

部件号:TMS320F28.0049万C

我的整流器应用中使用了两对互补PWM,即EPWM1A/B和EPWM2A/B。 变量"CmdRun"用于控制  设置为1时运行的所有4个PWM,设置为0时停止。

要求1:每次 CmdRun=1时,4个PWM的启动顺序都必须相同,与初始化配置中相同(EPWM1上升计数模式,EPWM1.TPRD=100,EPWM1.CMPA=10,EPWM1.MPPA =0, PRD设置为零,清除CPMA事件时为零;EPWAQ上升计数模式,EPWM2.CMB=20,EPWM2=CMB=100  EPWM2.TBCTR = 0,AQ设置在 CMPA上,清除CMBB事件,TBCLK=EPWMCLK=100MHz)。

要求2:对于停止序列,当 CmdRun=0时 ,所有4个PWM应同时清除为低电平,没有10ns延迟。

我当前的设计是通过软件使用一触式(OST)。 下面提供了一些代码。 但代码的连续执行似乎会导致一些操作延迟。 EPWM2将比EPWM1更早运行,因为它清除EPWM1之前的OST状态。 EPWM1将在EPWM2之前停止,因为它强制OST先于EPWM2。 你能否就如何实现上述要求给我一些建议?

IF (STaterun==0)

 IF (CmdRun=1)
 {
  EPwm1Regs.TBCTL.bit.SWFSYNC = 1;//强制TBCTR重置。
  EALLOW;
  EPwm2Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
  EPwm1Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
  CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;//所有ePWM时基时钟均以TBCLK的上升沿对齐启动。
  EDIS;
  Staterun = 1;
 }
}
否则

 如果(CmdRun=0)
 {
  EALLOW;
  EPwm1Regs.TZFRC.bit.OST = 1;//通过软件强制单触发(OST)。 Q1先出。
  EPwm2Regs.TZFRC.bit.OST = 1;//通过软件强制单触发(OST)。
  CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;//所有ePWM模块的时基时钟停止。
  EDIS;
  EPwm1Regs.TBCTL.bit.SWFSYNC = 1;//强制TBCTR重置。
  Staterun = 0;
 }
}

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

    另一种查看此情况的方法是为两个PWM模块分配一个通用跳闸信号。 现在,使用TZ1-3和数字比较事件即可实现这一点。

    其目的是将TZ1 (跳闸区域输入信号)配置为同时跳闸EPWM1和2。 必须使用输入X-Bar将TZ1信号绑定到GPIO。 您可以通过软件将GPIO从高转到低,以确保PWM在您所需的瞬间跳闸。

    PFA -从参考手册中获取的快照,用于使用EPWM1,EPWM2配置TZ1。

    希望这有所帮助。

    谢谢!

    Aditya

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

    感谢你的帮助。 我 尝试了TZ1,正如你所说的那样。 GPIO-34用作发送至EPWM1和2的TZ1输入信号,并强制其输出至低状态。 然后,当CmdRun = 0时清除GPIO34,当CmdRun = 1设置时清除GPIO34。 当CmdRun =0时,EPWM1和2似乎可以关闭。 但是,当CmdRun =1时,EPWM1将先输出,EPWM2稍后输出,因为 EPWM1的TZCLR[OST]执行时间早于EPWM2。 那么,我如何同时启动它们呢? 非常感谢!

    // GPIO34用作EPWM1和EPWM2的TZ1输入。
    GPIO_SetupPinMux (34,GPIO _MUX_CPU1,0);
    GPIO设置引脚选项(34,GPIO输出,GPIO按钮);
    GpioDataRegs.GPBSET.bit.GPIO34 = 1;//初始化为高。 跳闸区域信号是有效的低输入信号。


    EALLOW;
    InputXbarRegs.INPUT1SELECT = 34;//选择GPIO-34以驱动TZ1。
    EPwm1Regs.TZCTL.bit.TZA = 2;//强制EPWMxA进入低状态。
    EPwm1Regs.TZCTL.bit.TZB = 2;//强制EPWMxB进入低状态。
    EPwm1Regs.TZsel.bit.OSAHT1 = 1;//启用TZ1作为单触发事件源。
    EPwm2Regs.TZCTL.bit.TZA = 2;//强制EPWMxA进入低状态。
    EPwm2Regs.TZCTL.bit.TZB = 2;//强制EPWMxB进入低状态。
    EPwm2Regs.TZsel.bit.OSAHT1 = 1;//启用TZ1作为单触发事件源。
    EDIS;

    IF (STaterun==0)

     IF (CmdRun=1)
     {
      GpioDataRegs.GPBSET.Bit.GPIO34 = 1;//将 GPIO34设置 为高以释放所有PWM。
      EPwm1Regs.TBCTL.bit.SWFSYNC = 1;//强制TBCTR重置。
      EALLOW;
      EPwm1Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。 EPWM1将首先输出。
      EPwm2Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。 EPWM2稍后将输出。
      EDIS;
      Staterun = 1;

     }
    }
    否则

     如果(CmdRun=0)
     {
      GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; //清除GPIO34下限以触发TZ1阻止所有PWM。
      Staterun = 0;
     }
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="51.833万" url="~/support/pmspecters/c2000-group/c2000/f/pmspicers-forum/1097169/tms320f280049c-hof-stop-4-pwmw-outputs-epwm1a-b-epwm2a-b-simultaneouse-software/4064CNP=#WEP4064M2M2#WEPM2#在2000在第一109.7169万第一个28.0049万个输出4064输出开始4064开始运行 时,因为WEPM1WEPM1#和WEPM1#输出速度比第一个输出更低,WEPM1? 那么,我如何同时启动它们呢? 非常感谢![/QUOT]

    您可以在功能结束时重置并启动PWM时钟,而不是像现在那样启动。

    这将确保PWM同步。

    谢谢!
    Aditya

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

    我修改了代码的这一部分。  当CmdRun =0时,在PWM被GPIO34跳闸后,停止TBCLK,然后强制EPWM1.TBCTR重置为0。 当接收到SYNC时,EPWM2的TBCTR也将加载TBPHS。EPWM1 SYNC OUT的信号输入 在EPWM1.TBCTR = 0上。 当CmdRun =1时,将重新启动TBCLK。

    IF (STaterun==0)

     IF (CmdRun=1)
     {
      GpioDataRegs.GPBSET.GPIO34 = 1;//将GPIO34高设置为去活性TZ1并释放所有PWM。
      EALLOW;
      EPwm1Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
      EPwm2Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;//所有ePWM时基时钟均以TBCLK的上升沿对齐启动。
      EDIS;
      Staterun = 1;
    }

    }
    否则

     如果(CmdRun=0)
     {
      GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//清除GPIO34下限以触发TZ1阻止所有PWM。
      EALLOW;
      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;//所有ePWM模块的时基时钟停止。
      EDIS;
      EPwm1Regs.TBCTL.bit.SWFSYNC = 1;//强制TBCTR重置。
      Staterun = 0;
     }

    }

    测试结果如下所示。 星形脉冲序列,即第一个PWM周期似乎是随机的,这是不可取的。 我们需要第一个PWM周期具有确定性,并且应该与下一个周期具有相同的工作和相移。

    通道1:EPWM1A,通道2:EPWM2A,通道3:EPWM1B

    第一次尝试

    Star-up pulse pattern 1

    第二次尝试

    Star-up pulse pattern 2

    第三次尝试

    Star-up pulse pattern 3

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

    您能否共享PWM的初始化代码?

    您共享的波形是在行程被清除之后?  

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

    通过设置CmdRun = 1重新启动时捕获波形。 在此之前, EPWM1和2都 被透明GPIO34将其单次触发降低至TZ1,并且变频器处于停止状态(Staterun = 0)。 第一次PWM循环脉冲模式在每次重新启动时可能会有所不同,如上述3个波形中所示。

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

    您好,

    看起来非常正确,除非我错过了一些东西。 您还能再试一次吗?

    在cmdRun =1函数中启用时钟之前,我们是否可以将计数器重置为零? 这肯定会确保当我们打开PWM时计数器从零开始。  

    也可以通过在OST CLEAR行放置一个断点并检查TBCTR寄存器中的值来验证此值,以查看其中是否存在任何预设值。

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

    在修改 任何代码之前,我放置了一个断点,发现每次设置CmdRun =0时,TBCTR寄存器都有不同的值。 为什么? 我认为TBCTR应该已经被CmdRun =0函数中的代码行"EPwm1Regs.TBCTL.bit.SWFSYNC =1"重置。

    然后,我修改了代码,因为你建议在启用时钟之前将计数器重置为零,方法是添加两行代码"EPwm1Regs.TBCTR =0; EPwm2Regs.TBCTR =0;",这确实确保计数器从零开始。 但是,CmdRun =1时的启动脉冲序列仍不确定。 然后,在 CmdRun =1函数中,在TBCLKSYNC =1行代码处放置一个reakpoint。 发现EPWM1和2在OST清除线路之后以及启用时钟之前已有输出。 输出电平是随机的,总共4种组合,每次通过设置CmdRun =1重新启动时,都会产生不同的初始脉冲模式。 为什么OST透明线可以更改ePWM输出?

    顺便提一下,在TRM中,导致OST事件的事件的相应标志也在寄存器TZOSTFLG中设置。 必须通过写入TZCLR[OST]位手动清除单触发条件。 如果需要,应通过手动写入TZOSTCLR寄存器中的相应位来清除TZOSTLG寄存器位。 何时应清除TZOSTFLG位?

    非常感谢!

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

    理想情况下,如果您使用的是与事件对应的ISR,则应在输入ISR时清除该标志,以确保OST事件可以再次发生。

    Aditya

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

    1.关于  TBCTL[SWFSYNC]= 1.

    如果 在bb_CmdRun =0函数中将行“EPwm1Regs.TBCTL.bit.SWFSYNC =1”移至行“CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0”之前,则可以重置TBCTR。 复位逻辑为EPWM1.TBCTL[SWFSYNC]= 1 --> EPWM1.TBCTR = EPWM1.TBPHS = 0 -->当CTR =0时,EPWM1.SYNCO至EPWM2.SYNCI --> EPWM2.TBTB= EPWM2.CTR PHS。  我在  TBCLKSYNC =0行之后的断点处看到EPWM1和2个计数器寄存器中的值9。 计数器值未重置为0,因为它继续计数,直到TBCLKSYNC =0。 因此,我想 它没有效果,因为 在 以前的代码版本中,在TBCLKSYNC =0之后放置了行“EPwm1Regs.TBCTL.bit.SWFSYNC =1”。 无论如何,我已经按照 你的建议,在以下测试中将TbCTR =0重置为零。

    2.关于OST Clear (OST清除)

    您要求检查TBCLK在启用TBCLKSYNC的行中是否有任何值。 您的意思是TBCTR值吗? 在启用TBCLKSYNC之前,TBCTR为0。 部分代码已修改如下。  当EPWM1 Clear OST位在前时,EPWM1仍在EPWM2之前开始输出。 如果我 先清除EPWM2 OST位,则EPWM2的输出将早于EPWM1。 初始脉冲模式仍不确定。

     IF (CmdRun=1)
     {
      GpioDataRegs.GPBSET.GPIO34 = 1;//将GPIO34高设置为去活性TZ1并释放所有PWM。
      EPwm1Regs.TBCTR = 0; //将计数器重置为零。
      EPwm2Regs.TBCTR = 0;
      EALLOW;
      EPwm1Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
      EPwm2Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;//所有ePWM时基时钟均以TBCLK的上升沿对齐启动。
      EDIS;
      Staterun = 1;
    }

    3.关于TZOSTFLG CLEAR

    现在没有问题了。

    非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    i在 以下测试中建议重置为零[/406.9914万]

    现在,如果在从行程恢复操作时计数器重置为零,则在UP计数模式下,ePWM的操作由您完成的以下初始化定义:

    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;  // EPWM1A (Q1) is turned ON when TBCTR = 0.
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;  // Q1 is turned OFF at CMPA event.

    对于EPWM2:

    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;  // EPWM2A (Q3) is turned ON at CMPA event.
    EPwm2Regs.AQCTLA.bit.CBU = AQ_CLEAR;  // Q3 is turned OFF at CMPB event. The duty is determined by (CMPB-CMPA).

    NC CL406.9914万#您是否在CL4.0699万K行中要求您检查其值? 您的意思是TBCTR值吗? 在启用TBCLKSYNC之前,TBCTR为0。[/QUOT]

    很抱歉混淆了。 我想传达的是,如果在进入bb_cmdRun == 0函数之前将TBCLKSYNC清除为0,则意味着模块时钟停止。 然后,当您清除OST标志时,计数器可能不会开始计数,因为TBCLKSYNC为0。 这是我想要验证当您输入函数时,TBCLKSYNC是否真的为0。 是否可以在函数的开头设置断点并检查TBCTR和TBCLKSYNC的值? 两者都应为零。

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

    是的。 TBCTR和TBCLKSYNC均为零。 但是,在启用TBCLK之前,一旦OST位被清除,EPWM1和2仍具有输出级别。 并且初始输出电压水平是随机的。

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

    我正在检查。 请允许我一些时间。

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

    我不认为OST被清除后PWM信号的状态是随机的。 删除行程后,它应该返回到上一个状态(在正常操作期间执行的上一个操作)。

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

    因为 行程发生时的最后一个状态是随机的。 但是,一旦跳闸被移除并重新启动,如何使所有PWM输出处于低位状态?

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

    是的,您可以使用SW作用力设置ePWM信号驱动器的状态! 设置操作并强制执行,然后删除行程。

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

    太棒了! 是否有任何片段显示如何设置操作并强制所有PWM输出处于低状态? 非常感谢!

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

    这些是寄存器:

    以下是使用此寄存器的DRIVERLIB函数:

    因此,您可以使用ePWM_setActionQualifierSWAction设置操作,然后在需要时使用ePWM_ForceActionQualifierSWAction。

    Nima Eskandari

    C2000应用管理器

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

    我尝试了如下。 但是,它不能按预期工作。 我在CLEAR GPIO34行设置一个断点,以观察4个PWM输出的输出状态。 它们仍然是随机的。 出什么问题了?

    如果(CmdRun=0)

     EALLOW;
     CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;//所有ePWM模块的时基时钟停止。
     EDIS;
     EPwm1Regs.AQSFRC.Bit.ACTSFA = 1;//调用一次性软件强制A时清除低电平。
     EPwm1Regs.AQSFRC.bit.ACTSFB =2;//调用一次性软件强制B时设置为高。
     EPwm1Regs.AQSFRC.bit.OTSFA =1;//启动单个软件强制事件。
     EPwm1Regs.AQSFRC.bit.OTSFB =1;//启动单个软件强制事件。
     EPwm2Regs.AQSFRC.Bit.ACTSFA = 1;//调用一次性软件强制A时清除低电平。
     EPwm2Regs.AQSFRC.Bit.ACTSFB =2;//调用一次性软件强制B时设置为高。
     EPwm2Regs.AQSFRC.bit.OTSFA = 1;//启动单个软件强制事件。
     EPwm2Regs.AQSFRC.bit.OTSFB =1;//启动单个软件强制事件。
     GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//清除GPIO34下限以触发TZ1阻止所有PWM。
     Staterun = 0;
    }

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

    您在哪里删除跳闸条件?

    NIMA

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

    另外,我认为禁用TBCLKSYNC时,AQ操作将不会传播。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="51.833万" url="~/support/mspecters/csc2-group/csc/f/mspecters-c2000-forum/1097169/tms320f280049c-how-109.7169万-to28.0049万to-run-stop-4-pwm-outputs-epwm1a-b-epwm2a-b-simultaneous-byclip-software/408.137万"#PCRNC.Kp:0[.Kp.Kp.Kp:0]

    您为什么在代码中包含此信息?

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

    正如之前与Aditya讨论的,要求是在 通过CmdRun=1重新启动时,由CmdRun=0停止PWM (所有PWM都应清除为低电平)。  GPIO34用作TZ信号,同时将所有4个PWM清除为低。 现在问题是重新启动脉冲序列。 初始PWM模式是随机的。 您也可以参考我们之前讨论中显示的数字。

    如果(0 == Staerun)

     IF (CmdRun=1)
     {
      GpioDataRegs.GPBSET.GPIO34 = 1;//将GPIO34高设置为去活性TZ1并释放所有PWM。
       EPwm1Regs.TBCTR = 0; //将计数器重置为零。
       EPwm2Regs.TBCTR = 0;
      EALLOW;
      EPwm1Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
      EPwm2Regs.TZCLr.bit.OST = 1;//清除单触发(OST)条件。
      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;//所有ePWM时基时钟均以TBCLK的上升沿对齐启动。
      EDIS;
      Staterun = 1;
    }

    否则

     如果(CmdRun=0)
     {
      EALLOW;
      CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;//所有ePWM模块的时基时钟停止。
      EDIS;
      EPwm1Regs.AQSFRC.Bit.ACTSFA = 1;//调用一次性软件强制A时清除低电平。
      EPwm1Regs.AQSFRC.bit.ACTSFB =2;//调用一次性软件强制B时设置为高。
      EPwm1Regs.AQSFRC.bit.OTSFA =1;//启动单个软件强制事件。
      EPwm1Regs.AQSFRC.bit.OTSFB =1;//启动单个软件强制事件。
      EPwm2Regs.AQSFRC.Bit.ACTSFA = 1;//调用一次性软件强制A时清除低电平。
      EPwm2Regs.AQSFRC.Bit.ACTSFB =2;//调用一次性软件强制B时设置为高。
      EPwm2Regs.AQSFRC.bit.OTSFA = 1;//启动单个软件强制事件。
      EPwm2Regs.AQSFRC.bit.OTSFB =1;//启动单个软件强制事件。
      GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//清除GPIO34下限以触发TZ1阻止所有PWM。
      Staterun = 0;
    }

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

    如果未禁用TBCLKSYNC,则在SW强制操作后可能会发生其他AQ操作(零,CMP等)。   跳闸时的最后一个状态将再次随机显示。

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

    否最后一个状态不会是随机的,因为您将使用SW强制设置操作。 清除TBCLKSYNC导致解决方案无法正常工作,

    如果您希望在取消行程前将计数器归零,则只需发送SWSYNC即可。 同样,如果禁用TBCLKSYNC,则不会传播此信息。

    NIMA

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

    只要TBCLK仍在运行,最后一个状态就会更改。 其他AQ操作(CTR =零等)将会改变PWM输出状态。 我们如何确保SW强制行动是最后一项? 这是一个进退两难的问题。

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

    SW强制操作将在跳闸条件被删除之前进行。 如果有另一个操作(TBCTR =零或其他)出现,它们将更改状态,但它们应同时更改A和B输出的状态。 对此,我不是很清楚。 如果您不希望其他操作干扰,您可以在发送SW强制操作之前禁用所有其他操作。

    NIMA

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

    当CmdRun=0时,EPWM1和2的AQ操作被有意临时设置为 跳闸后清除低电平。 让TBCLK自由运行。 这样,EPWM1A和EPWM2A的最后一个状态将为“低”,EPWM2B和EPWM2B将为“高 ”,这是应用所需要的。 当CmdRun=1时,首先禁用TBCLK,重置TBCTR =0,然后将AQ操作 设置恢复为正常模式。 然后,清除OST位。 此处,初始脉冲模式将根据需要输出,即EPWM1/2A低电平,EPWM1/2B高电平。 最后启用TBCLK。 这解决了我的问题。 非常感谢!