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.

[参考译文] LAUNCHXL-F280049C:SR 模式2在 PSFB 控制下误操作

Guru**** 2439560 points
Other Parts Discussed in Thread: C2000WARE, PMP23126, TIDM-02009, LAUNCHXL-F280049C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1214579/launchxl-f280049c-sr-mode-2-misoperation-at-psfb-control

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:PMP23126TIDM-02009、C2000WARE、

您好!

现在、我正在尝试在 SR 模式2下测试我的 PCMC 软件。  PMP23126和 TIDM-02009中介绍了基于事件的软件。 我解释如下。

我使用 F280049C 的演示板来测试软件。 我尝试用 SR 模式2测试内部环路(PCMC)、并且我使用参考软件设计了我的软件。

F280049C 演示板上的测试案例如下所示。  我刚刚实施了内部 CMPSS 配置、并尝试测试它是否正常工作。 PMP23126和 TIDM-02009均介绍了基于事件的 CMPSS 软件。

EPWM3A 测试如下所示。

案例1:   我 想查看 EPWM1A 和2B 的 ORing 以及  ePWM3A 的 ORing。 我将0写入 CMPSS 的 RAMPMAXREF、并查看最小占空比情况。

黄色:ePWM1A、  绿色:ePWM2B、蓝色:ePWM3A

我在 ePWM3A 上没有获得稳定的波形。 当 ePWM1A 为高电平时、它应该上升至高电平。 当我改变时, ePWM3A 的上升位置会有所不同。

案例2: 在下面的行中、我为 ADC 端口提供了外部斜坡信号。 我将32767写入 CMPSS 最大斜坡值。 我得到了以下波形、这些波形也显示了 ePWM3A 上的不稳定性。

黄色:ePWM1A、  绿色:ePWM2B、蓝色:ePWM3A、红色:到 CMPSS 的外部斜坡信号

EPWM3B  测试如下。

案例3: 我 想查看 EPWM1B 和2A 的 ORing、并 监视 ePWM3B 的 ORing。 我将0写入 CMPSS 的 RAMPMAXREF、并查看最小占空比情况。

就表示工作正常。

蓝色:ePWM1B、  红色:ePWM2A、   绿色  :ePWM2B、黄色:ePWM3B、  

情形4:我提供了与上述相同的外部斜坡信号、并监控 ePWM3B 是否遵循该信号。

黄色:ePWM3B、  蓝色:ePWM1B、 红色:ePWM2A、 绿色:外部斜坡信号、

波形符合 ePWM3B 的预期。 3B 跟随事件. 没关系。

我为1A 和1B 以及3A 和3B 提供了相同的消隐窗口时序。

您能评论一下尽管 ePWM3B 遵循同一事件、ePWM3A 为什么不遵循该事件吗? ı 如何解决它?

为什么 ePWM3A 的信号不稳定、我也可以提供视频。

提前感谢您。

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

    您好!

    我还将相同的软件加载到我的板、即 F280048。  

    我得到了中所述的波形 案例1。  在最低工作频率下、正如您所看到的、我的 ePWM3A 存在一些问题。

    黄色:1A、蓝色:1B、            红色:2A、绿色:2B、         橙色:3A、紫色3B

    在下面、我使用电位计更改了 ADCIN 值、并将死区加载 为零。 请检查以下波形、它在考虑死区时不符合预期。

    ePWM3A 处的死区时间不是零、但现在可以遵循1A 和2B 的 ORing。

    在下面的中、我使用电位器更改了 ADCIN 的电压值、在%100占空比时、波形看起来不错。  

    您能对此提供帮助吗? 我的 ePWM3A 在降压板和在我的电路板上都具有一些奇怪的特征。 但是、ePWM3B 按预期工作。

    谢谢你。

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

    由于 EPWM3B 的行为符合预期、因此我假定比较器输出正确地路由到 EPWM3。 那么 EPWM3A 的动作限定器配置可能存在问题。 您能否共享这段代码?  

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

    您好、Gus:

    我按如下方式添加了该函数。  

        // Action-Qualifier Submodule Configurations
        // ePWM3A Actions
        // CTR = ZERO , set to 0
        // CTR = PRD , set to 1
        // CTR = T1U , set to 1
        // CTR = T1D , set to 1
        //
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_LOW,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,
                                      EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_A,EPWM_AQ_OUTPUT_HIGH,
                                      EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);

    正如您在第1种情况中看到的、PWM 信号的振幅也会在周期中发生变化。 同样在 我自己的电路板案例中、当我更改电位器和 ADCIN 引脚的电压时、电源消耗的功率也会增加。 当我改变 ADCIN 电压时、似乎是由什么驱动 ePWM3A 模块内部。

    我还按如下所示添加了消隐窗口和时基行。

        EPWM_setDigitalCompareWindowOffset(EPWM1_BASE, PeriodValue - 100);
    
        // Set the blanking window length in TBCLK counts
        // 10*TBLCK = 100nsec
        EPWM_setDigitalCompareWindowLength(EPWM1_BASE, 200);    
        
        //
        // Configure PWM1 as master
        //
        EPWM_disablePhaseShiftLoad(EPWM1_BASE);
        EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

        EPWM_setDigitalCompareWindowOffset(EPWM3_BASE, PeriodValue - 100);
    
        // Set the blanking window length in TBCLK counts
        // 10*TBLCK = 100nsec
        EPWM_setDigitalCompareWindowLength(EPWM3_BASE, 200);
        
        EPWM_enablePhaseShiftLoad(EPWM3_BASE);
        EPWM_setSyncOutPulseMode(EPWM3_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
        EPWM_setPhaseShift(EPWM3_BASE, 2); // Value*TBCLKs Phase-Shift is Set
        EPWM_setCountModeAfterSync(EPWM3_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如您在案例1中所见、PWM 信号的幅度也是循环变化的。 同样在 我自己的电路板案例中、当我更改电位器和 ADCIN 引脚的电压时、电源消耗的功率也会增加。 当我改变 ADCIN 电压、ePWM3A 模块内部的某个部件驱动时、我似乎在发挥作用。

    我能想到的唯一一件事是有一些噪声从其他源耦合到 PWM 引脚。 LaunchPad 是否与任何功率级(图中所示的电感器、FET、变压器)完全断开? 您能否使用任何标准 C2000ware PWM 示例重现此问题? 如果是这样,我们也许能够在我们的最后重复

    我按如下方式添加了它。  [/报价]

    我觉得行动条件判断器代码没问题。 您是否也要单独配置跳闸区模块以强制 PWM 输出上形成一种状态?  

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

    您好,Gus,感谢您的帮助。

    您能否使用任何标准 C2000ware PWM 示例复制此问题?

    我通常使用参考软件示例设计软件、您可以指导我使用哪个软件下载 演示板。 顺便说一下、我可以 通过向我们当地分销商发送电子邮件来发送我的源代码。 通过这种方法、您也可以复制它。

    我发布后的第一个波形取自演 示板 F280049C、在这种情况下没有电源组件。 我有用于监控信号的排针线。 我从示波器输出在外部提供斜坡信号。

    我第二篇文章中的波形取自 我自己的板、在这种情况下、有 电源组件。 我使用电位器在外部提供直流信号。

    您是否还需要单独配置跳闸区模块以强制 PWM 输出上进入某个状态?

    具体情况如下:

    对于 ePWM1、其值如下;

    //
        // Set DCEVTFILT as the trigger source for Channel A
        //
        EPWM_setActionQualifierT1TriggerSource(EPWM1_BASE,
                                               EPWM_AQ_TRIGGER_EVENT_TRIG_DC_EVTFILT);
    
        // Digital Compare and Comparator-X-Bar Configuration
        // Disable all the muxes first
        XBAR_enableEPWMMux(XBAR_TRIP4, 0x00);
    
        //
        // Setup PWM TRIP 4 as the destination for CMPSS5H output (PCMC)
        // TRIP4 will be ACTIVE if CTRIPH is HIGH at CMPSS5
        XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX08_CMPSS5_CTRIPH);
        XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX08);
    
        //
        // DCAH = TRIP5 = Comparator 1H output
        //
        EPWM_selectDigitalCompareTripInput(EPWM1_BASE, EPWM_DC_TRIP_TRIPIN4,
                                            EPWM_DC_TYPE_DCAH);
    
        //
        // DCAH = high
        //
        EPWM_setTripZoneDigitalCompareEventCondition(EPWM1_BASE, EPWM_TZ_DC_OUTPUT_A2,
                                            EPWM_TZ_EVENT_DCXH_HIGH);
    
        //
        // Set the source for digital compare filter as DCAEVT2
        //
        EPWM_setDigitalCompareEventSource(EPWM1_BASE, EPWM_DC_MODULE_A,EPWM_DC_EVENT_2,
                                          EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
    
        // Allow ASYNC DCAEVT2 for trip zone actions
        EPWM_setDigitalCompareEventSyncMode(EPWM1_BASE, EPWM_DC_MODULE_A,
                                            EPWM_DC_EVENT_2,
                                            EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    
        // Select DCAEVT2 cycle by cycle trip
        EPWM_enableTripZoneSignals(EPWM1_BASE, EPWM_TZ_SIGNAL_DCAEVT2);
    
        //
        // Event Filtering Configuration (inside digital compare)
        // Enable DC filter blanking window
        //
        EPWM_enableDigitalCompareBlankingWindow(EPWM1_BASE);
    
        // Set the signal source that will be filtered.
        EPWM_setDigitalCompareFilterInput(EPWM1_BASE, EPWM_DC_WINDOW_SOURCE_DCAEVT2);
    
        // Set the Digital Compare filter blanking pulse.
        EPWM_setDigitalCompareBlankingEvent(EPWM1_BASE,
                                         EPWM_DC_WINDOW_START_TBCTR_ZERO_PERIOD);
    
        // Set the blanking window offset in TBCLK counts
        // An offset value in TBCLK counts is programmed
        // which determines at what point aft<er the CTR = PRD or CTR = 0 pulse the blanking window starts.
        EPWM_setDigitalCompareWindowOffset(EPWM1_BASE, PeriodValue - 100);
    
        // Set the blanking window length in TBCLK counts
        // 10*TBLCK = 100nsec
        EPWM_setDigitalCompareWindowLength(EPWM1_BASE, 200);
    
        //
        // Trip-zone event actions
        // What do we want the CBC events to do?
        // TZAx events can force EPWMxA
        // TZBx events can force EPWMxB
        //
        EPWM_setTripZoneAdvAction(EPWM1_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZA_D,
                                  EPWM_TZ_ADV_ACTION_LOW);
        EPWM_setTripZoneAdvAction(EPWM1_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZA_U,
                                  EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAdvAction(EPWM1_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZB_U,
                                  EPWM_TZ_ADV_ACTION_LOW);
        EPWM_setTripZoneAdvAction(EPWM1_BASE, EPWM_TZ_ADV_ACTION_EVENT_TZB_D,
                                  EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZA,
                               EPWM_TZ_ACTION_DISABLE);
        EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZB,
                               EPWM_TZ_ACTION_DISABLE);
        //
        // Select CBC clear event
        EPWM_selectCycleByCycleTripZoneClearEvent(EPWM1_BASE,
                               EPWM_TZ_CBC_PULSE_CLR_CNTR_ZERO_PERIOD);
        //
        // Clear any spurious trip
        EPWM_clearTripZoneFlag(EPWM1_BASE, (EPWM_TZ_INTERRUPT_OST |
                EPWM_TZ_INTERRUPT_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT1));
        EPWM_clearTripZoneFlag(EPWM2_BASE, (EPWM_TZ_INTERRUPT_OST |
                EPWM_TZ_INTERRUPT_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT1));
    
        //
        // Dead-Band Submodule Configuration
        //
        EPWM_setDeadBandCounterClock(EPWM1_BASE, EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
        EPWM_setRisingEdgeDelayCount(EPWM1_BASE, 10);
        EPWM_setFallingEdgeDelayCount(EPWM1_BASE, 10);
    
        //DelayMode select
        //EPWM_DB_RED   - Rising Edge delay,
        //EPWM_DB_FED   - Falling Edge delay
        //true     - Falling edge or Rising edge delay is applied.
        //false    - Dead Band delay is bypassed.
        EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, true);
        EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_FED, true);
        EPWM_setRisingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA);
        EPWM_setFallingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMB);
    
        // xA is RED, same!!!
        // xB is FED, inverted (AHC) !!!
        EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_POLARITY_ACTIVE_HIGH);
        EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_FED, EPWM_DB_POLARITY_ACTIVE_LOW);
    
        //
        // Configure PWM1 as master
        //
        EPWM_disablePhaseShiftLoad(EPWM1_BASE);
        EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
    
        EDIS;

    对于 ePWM3、其值如下所示;

    //
        // Set DCEVTFILT as the trigger source for Channel A
        //
        EPWM_setActionQualifierT1TriggerSource(EPWM3_BASE,
                                              EPWM_AQ_TRIGGER_EVENT_TRIG_DC_EVTFILT);
    
        //
        // Digital Compare Configuration
        // DCAH = TRIP4 = Comparator 1 output (high side)
        //
        EPWM_selectDigitalCompareTripInput(EPWM3_BASE, EPWM_DC_TRIP_TRIPIN4,
                                          EPWM_DC_TYPE_DCAH);
    
        //
        // DCAH = high
        //
        EPWM_setTripZoneDigitalCompareEventCondition(EPWM3_BASE, EPWM_TZ_DC_OUTPUT_A2,
                                                    EPWM_TZ_EVENT_DCXH_HIGH);
    
        //
        // Set the source for digital compare filter as DCAEVT2
        //
        EPWM_setDigitalCompareEventSource(EPWM3_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_2,
                                         EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
    
        //
        // Allow ASYNC DCAEVT2 for trip zone actions
        //
        EPWM_setDigitalCompareEventSyncMode(EPWM3_BASE, EPWM_DC_MODULE_A,
                                           EPWM_DC_EVENT_2,
                                           EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    
        // Event Filtering Configuration (inside digital compare)
        // Enable DC filter blanking window
        //
        EPWM_enableDigitalCompareBlankingWindow(EPWM3_BASE);
    
        //
        // Set the signal source that will be filtered.
        //
        EPWM_setDigitalCompareFilterInput(EPWM3_BASE, EPWM_DC_WINDOW_SOURCE_DCAEVT2);
    
        //
        // Set the Digital Compare filter blanking pulse.
        //
        EPWM_setDigitalCompareBlankingEvent(EPWM3_BASE,
                                           EPWM_DC_WINDOW_START_TBCTR_ZERO_PERIOD);
    
        // Set the blanking window offset in TBCLK counts
        // An offset value in TBCLK counts is programmed
        // which determines at what point after the CTR = PRD or CTR = 0 pulse the blanking window starts.
        EPWM_setDigitalCompareWindowOffset(EPWM3_BASE, PeriodValue - 100);
    
        // Set the blanking window length in TBCLK counts
        // 10*TBLCK = 100nsec
        EPWM_setDigitalCompareWindowLength(EPWM3_BASE, 200);
    
    
        EPWM_setDeadBandControlShadowLoadMode(EPWM3_BASE, EPWM_DB_LOAD_ON_CNTR_ZERO);
    
        EPWM_setDeadBandCounterClock(EPWM3_BASE, EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
        EPWM_setRisingEdgeDelayCount(EPWM3_BASE, 35);
        EPWM_setFallingEdgeDelayCount(EPWM3_BASE, 35);
        EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_RED, true);
        EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_FED, true);
        EPWM_setRisingEdgeDeadBandDelayInput(EPWM3_BASE, EPWM_DB_INPUT_EPWMA);
        EPWM_setFallingEdgeDeadBandDelayInput(EPWM3_BASE, EPWM_DB_INPUT_EPWMB);
        EPWM_setDeadBandDelayPolarity(EPWM3_BASE, EPWM_DB_RED,
                                      EPWM_DB_POLARITY_ACTIVE_HIGH);
    
        //
        // xB is inverted
        //
        EPWM_setDeadBandDelayPolarity(EPWM3_BASE, EPWM_DB_FED,
                                      EPWM_DB_POLARITY_ACTIVE_LOW);
    
        //
        // Phase Configuration and Set
        // Configure PWM base3 as slave
        // SetPhaseShift = Value*TBCLK = Value*10nsec
        EPWM_enablePhaseShiftLoad(EPWM3_BASE);
        EPWM_setSyncOutPulseMode(EPWM3_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
    
        EPWM_setPhaseShift(EPWM3_BASE, 2); // Value*TBCLKs Phase-Shift is Set
        EPWM_setCountModeAfterSync(EPWM3_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
    
    
        EDIS;

    提前感谢、Gus。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我通常使用示例参考软件设计的软件,您可以指导我下载 演示板时应使用哪种软件。 顺便说一下、我可以 通过向我们当地分销商发送电子邮件来发送我的源代码。 通过这种方式,您也可以复制它。

    如果可以重现该问题、则在 TI 提供的软件示例上调试问题通常会更简单、因为我们的内部支持团队更熟悉该固件。 您可以利用 C2000ware 中的 EPWM 示例。 它看起来好像 可以使用 epwm_ex2_updown_AQ。 此处的目标是在 LaunchPad 上按原样运行该示例、并查看 PWM 振幅问题是否也存在。 如果是、那么我们可以看看。  

    C:\ti\c2000\C2000Ware_4_03_00\driverlib\f28004x\examples\epwm

    对于 ePWM3,如下所示;

    我将继续进行您的 EPWM3配置。 它会在几天后回复给您。

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

    Gokhan、

    我已查看了您的 PWM3配置。 在这里、您将死区模块(DBM)红色输入设置为 AQ PWMA 输出、并将馈入输入设置为 AQ PWMB 输出。 不过、这完全没问题、在您的 PWM3配置中、我看不到您可将 AQ PWMB 输出控制在何处。 在以前调用 EPWM_setActionQualifierAction ()时,我只看到对 EPWM_AQ_OUTPUT_A 的操作 具有 AQ 配置 EPWM_AQ_OUTPUT_B

        EPWM_setRisingEdgeDeadBandDelayInput(EPWM3_BASE, EPWM_DB_INPUT_EPWMA);
        EPWM_setFallingEdgeDeadBandDelayInput(EPWM3_BASE, EPWM_DB_INPUT_EPWMB);

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

    抱歉、我刚刚意识到我没有要求 AQ EPWMB 配置、所以可能这就是你没有在此线程中包含它的原因。  

    不管怎样,我仔细地看了一下你的其中一个图形:

    实际上 EPWM3B 看起来不错。 EPWM3A 看起来不正确:  

    • EPWM3A 在一些周期内可能会进入高阻态。
    • EPWM3A 对某些事件做出了反应、该事件似乎与任何其他 EPWM 边沿都不对齐

    我会专注于这里。

    您可以执行的一些调试操作:

    • 完全绕过 DBM。  

        EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_RED, false);
        EPWM_setDeadBandDelayMode(EPWM3_BASE, EPWM_DB_FED, false);

    应该将 PWMA 和 PWMB 引脚设置为直接来自 AQ 模块。 这可能会提供一些有关 AQ 或 DBM 配置问题的线索。

    • 使用输出 XBAR 将 CMPSS 跳闸输出路由到 GPIO 引脚。

    这将使您能够查看 CMPSS 是否可能生成多个事件。  

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

    您好、Gus:

    感谢您的反馈。 我会尽量将此问题告知您。

    ePWM3B 的配置如下所示。

        // Action-Qualifier Submodule Configurations
        // ePWM3B Actions
        // CTR = ZERO , set to 0
        // CTR = PRD , set to 1
        // CTR = T1U , set to 0
        // CTR = T1D , set to 0
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_LOW,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_HIGH,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_NO_CHANGE,
                                      EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_LOW,
                                      EPWM_AQ_OUTPUT_ON_T1_COUNT_UP);
        EPWM_setActionQualifierAction(EPWM3_BASE,EPWM_AQ_OUTPUT_B,EPWM_AQ_OUTPUT_LOW,
                                      EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);

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

    您好、Gus:

    提醒一下、我在 ePWM3B 使用了"反相+FED"。

    您能否在自己的测试板上产生同样的问题?

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

    您好、Gus:

    我使用 LAUNCHXL-F280049C 的演示板进行了以下测试。 我还会在自己的板上尝试它。 49C 降级板和48个板的特性不同、但相似。

    这是根据您的报价更改软件之前的基准波形。 我在探测时使用了相同的颜色。

    黄色:ePWM1A、 红色:ePWM2A、 绿色:ePWM2B蓝色:ePWM3A

    1)我绕过 DBM 你提供。 我有以下方波形。

    黄色:ePWM1A、  红色:ePWM2A、 绿色:ePWM2B 蓝色:ePWM3A

    2) 2)我将 CMPSS 输出路由到输出 X-BAR。 它是红色、如下所示。

    //
    // Monitoring via OUTPUTXBAR
    //
    void Outputxbar_to_monitorCMPSSOUT(void)
    {
        //myOUTPUTXBAR0 initialization
        XBAR_setOutputLatchMode(XBAR_OUTPUT3, false);
        XBAR_invertOutputSignal(XBAR_OUTPUT3, false);
    
        //Mux configuration
        XBAR_setOutputMuxConfig(XBAR_OUTPUT3, XBAR_OUT_MUX08_CMPSS5_CTRIPOUTH);
        XBAR_enableOutputMux(XBAR_OUTPUT3, XBAR_MUX08);
    }
    
    void PinMux_init(void)
    {
        GPIO_setPinConfig(GPIO_26_OUTPUTXBAR3);
    }
    

    测试1:  我将0写入 REF_CMPSS_PEAK 和 PSFB_SLOPE_Initial。 我没有对在内部连接到 CMPSS 的 ADCIN 端口施加任何信号。 我得到了下面的波形。  

    黄色:ePWM1A、  红色:ePWM2A、 绿色:CMPSSOUT-XBAR 蓝色:ePWM3A

    测试2:  我为 ADCIN 信号提供了0.5VDC。 我没有更改 CMPSS 设置值。  REF_CMPSS_PEAK = 0、 PSFB_SLOPE_Initial = 0

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

     

    测试3: 我提供了200kHz 的斜坡信号0-3V、具有%50对称性。  REF_CMPSS_PEAK =0、 PSFB_SLOPE_Initial =0仍相同。

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    测试4:  我提供了200kHz 下的斜坡信号0-3V、红色波形对称度为%50。  REF_CMPSS_PEAK =32676时、 施加 PSFB_SLOPE_Initial =0。

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    当我聚焦后、我得到了以下波形。

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    我的外部信号与 PWM 不同步、因此发明瞬间在时间上会发生变化。 我使用示波器的单一功能仅在不同时间点捕获了一些波形。

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    在上面,我们有相同的事件,但不同的反应 瞬间在 ePWM3A !!! 这不符合预期。

    然而、ePWM3A 捕捉 T1D 事件非常好并变得低电平。

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    另一个有趣的波形、如下所示。 当 OutputXbar 变为低电平时、ePWM3A 上升到高电平。 也许只是一个巧合。

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    用它并不总是与下面一样。  

    黄色:ePWM1A、  红色: ADCIN 的外部信号 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    CMPSS 输出端没有出现任何干扰或不同时序。 CMPSSOUT 处的波形看起来不错。 内部的东西会影响 ePWM3A。

    我的观察结果如下:

    ePWM3A 输出会受到内部 CMPSS 信号的影响。 当比较器输出进行从高电平到低电平的转换时、ePWM3A 上升到高电平。 您可以在上面看到一些波形。 但运行不稳定、因为我也可以按预期捕获以下波形。

    在一个周期内它是可以的、但在另一个周期内它是 nOK 的。

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

    这太好了。 现在、我们有更多东西要看。 这是我可以看到的。

    在测试1和测试2中、由于 CMPSS 输出始终为高电平、因此您将持续为 EPWM1A/1B 生成一次性跳闸事件。 这意味着在 ZRO 和 PRD 复位跳闸事件后、T1U 和 T1D 将立即生成。 我认为由于您的消隐窗口配置、这里会有一点延迟。 如果您改变该消隐窗口或将其设置为零、您应该会看到 EPWM1A/1B 开始接近 EPWM2A/2B。 但是、请参阅此帖子底部的注释。

    EPWM3A 正在对某个未知事件做出反应。 不过、它似乎与消隐窗口有关。 是否确定未在 EPWM3A 上配置跳闸区域操作? 加载代码后能否检查 EPWM3寄存器? 这些脉冲 EPWM3A 似乎表示引脚将变为高阻态 是否在此引脚的 GPIO 配置中启用了上拉? 或者、该引脚上是否有外部上拉电阻器?  

    在测试#4上、EPWM1A 与  CMPSSOUT-XBAR 完全同步、这对我来说没有意义。 此处也应应用消隐窗口。  我无法解释为什么会发生这种情况。 此测试的消隐窗口配置是否更改?  

    我还注意到了另外一件事。 为什么您决定让 EPWM2成为主站? 根据 F280049C 架构、EPWM2无法同步 EPWM1。 这意味着 EPWM1和 EPWM2可能相互不同步。  

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

    我刚刚有了一个意识。 TZCTL 和 TZCTLDCA 寄存器还包含用于指定 DCAEVT2跳闸区操作的字段(即您用于跳闸 EPWM3的数字比较信号)。 默认情况下、TZCTL.DCAEVT2=00指定 EPWM3A 引脚应在 DCAEVT2上变为高阻态。 类似地、对于 TZCTLDCA.DCAEVT2D=000和 TZCTLDCA.DCAEVT2U=000 (DCAEVT2上的跳闸操作向上计数和向下计数)。 您能否在您的终端上确认这种情况?  您是否可以尝试将这些更改为"不执行任何操作"(分别为11b 和111b)。  

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

    您好、Gus:

    在我这边有一个非常好的消息。 你解决了我的问题。 我真的很感激你的指导。

    我刚刚将下面几行添加到了 ePWM3初始化中。 现在、ePWM3A 在上升瞬间非常跟随 ePWM1A。 我使用 Launchxl-F2800049C 对其进行了测试。 我 执行了上面的所有测试用例、没问题。 我还将在我自己的电路板上进行尝试、并向您发送波形。

        EPWM_setTripZoneAdvDigitalCompareActionA(EPWM3_BASE, EPWM_TZ_ADV_ACTION_EVENT_DCxEVT2_D,
                                                 EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAdvDigitalCompareActionA(EPWM3_BASE, EPWM_TZ_ADV_ACTION_EVENT_DCxEVT2_U,
                                                 EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAdvDigitalCompareActionA(EPWM3_BASE, EPWM_TZ_ADV_ACTION_EVENT_DCxEVT1_D,
                                                 EPWM_TZ_ADV_ACTION_DISABLE);
        EPWM_setTripZoneAdvDigitalCompareActionA(EPWM3_BASE, EPWM_TZ_ADV_ACTION_EVENT_DCxEVT1_U,
                                                 EPWM_TZ_ADV_ACTION_DISABLE);

    我按如下所示添加了波形。 看起来还可以。

    黄色:ePWM1A、  红色: ADCIN 的外部信号、 绿色:CMPSSOUT-XBAR  蓝色:ePWM3A

    不过、我想知道示例软件为什么不具有这些行。 你有什么想法吗?

    我还将您的关切评论如下。

    是否确定未在 EPWM3A 上配置跳闸区域操作? 加载代码后能否检查 EPWM3寄存器? 这些脉冲 EPWM3A 似乎表示引脚将变为高阻态 是否在此引脚的 GPIO 配置中启用了上拉? 或者您是否在此引脚上有外部上拉电阻器?

    我在 ePWM3软件上没有跳闸区域线路、我只是为 ePWM1使用了跳闸区域线路。 我只需将 ePWM3输出配置为其他 ePWM1和2条线路。 在我的板上没有外部上拉电阻器。

        GPIO_setMasterCore(4, GPIO_CORE_CPU1);
        GPIO_setPinConfig(GPIO_4_EPWM3_A);
        GPIO_setDirectionMode(4, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(4, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(4, GPIO_QUAL_ASYNC);
    
        GPIO_setMasterCore(5, GPIO_CORE_CPU1);
        GPIO_setPinConfig(GPIO_5_EPWM3_B);
        GPIO_setDirectionMode(5, GPIO_DIR_MODE_OUT);
        GPIO_setPadConfig(5, GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode(5, GPIO_QUAL_ASYNC);

    以下显示了前后的注册屏幕、包括正确的行。

    那样

    更新

    在测试#4, EPWM1A 与  CMPSSOUT-XBAR 完全同步,这对我来说是没有意义的。 此处也应应用消隐窗口。  我无法解释为什么会发生这种情况。 此测试的消隐窗口配置是否更改?

    实际上、我这边有预期的效果。 因为、当 CMPSSOUT-XBAR 为高电平时、会生成 T1事件、ePWM1跟随它并变为高电平。 我提供给 ADCIN 的外部信号没有同步到我的 EPWM 时基。 我从示波器生成了外部斜坡信号、并且 CMPSS OUT 上升到高电平的时间 在时间上有不同。 我只是运行/停止示波器以捕获一些时间间隔。

    我还注意到一件事。 为什么您决定让 EPWM2成为主站? 根据 F280049C 架构、EPWM2无法同步 EPWM1。 这意味着 EPWM1和 EPWM2可能相互不同步。  [/报价]

    我使用 ePMW1作为主设备、将其他设备用作从设备。 但是、我根据 TR 超前或 TR 滞后更改了开关拓扑。 在相移拓扑中、当使用外部钳位二极管时、终止功率传输间隔的开关可能会有所不同、并可提高效率。 这是因为我更改了基于事件的 EPWM。 在示例软件中、它是 ePWM2。 我用于 SYNC 的软件行如下所示。 您能确认吗?

        EPWM_disablePhaseShiftLoad(EPWM1_BASE);
        EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
        
        EPWM_enablePhaseShiftLoad(EPWM2_BASE);
        EPWM_setSyncOutPulseMode(EPWM2_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
        EPWM_setPhaseShift(EPWM2_BASE, 2);
        EPWM_setCountModeAfterSync(EPWM2_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
        
        EPWM_enablePhaseShiftLoad(EPWM3_BASE);
        EPWM_setSyncOutPulseMode(EPWM3_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
        EPWM_setPhaseShift(EPWM3_BASE, 2);
        EPWM_setCountModeAfterSync(EPWM3_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);

    如果您愿意、我可以在降级板上尝试其他一些事情。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我身边有一个真正快乐的消息。 你解决了我的问题。 [/报价]

    太棒了!

    然而,我想知道为什么示例软件没有这些行。 您有什么想法吗?

    这对我来说也是个谜。 我将需要与原始代码开发人员进行确认。 但是、这可能需要一段时间。 在任何情况下,很高兴我们能够在这里解决!

    我使用 ePMW1作为主设备和其他设备作为从设备。 但是、我根据 TR 超前或 TR 滞后更改了开关拓扑。 在相移拓扑中、当使用外部钳位二极管时、终止功率传输间隔的开关可能会有所不同、并可提高效率。 这是因为我更改了基于事件的 EPWM。 在示例软件中、它是 ePWM2。 我用于 SYNC 的软件行如下所示。 您能否确认?

    我不确定我是否完全遵守你们的推理。 但只要三个 PWM 同步、我认为应该没问题。 您的配置对我来说看起来不错。

    [/quote]