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:为动作限定符子模块生成 T1 和 T2 事件

Guru**** 2612355 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule

器件型号:LAUNCHXL-F280049C


工具/软件:

您好:

对于我的 DC2DC 项目、我想 通过使用动作限定器子模块的 T1 和 T2 事件功能来生成 PWM。

下面说明了我计划如何生成 PWM、当生成 PWM 时、我执行 DCAEVT1.force 和 DCBEVT1.force 来为跳闸区生成信号、根据跳闸区的配置、为我生成 T1 和 T2 事件信号以生成 PWM。  但是、我确实会在 PWM 引脚上获得任何输出。   

下面是我的部分代码

1. 检查我想用于生成 PWM 的 PWM 4 计数方向、然后根据计数方向强制触发区事件

uint16_t cou_dir = ePWM_getTimeBaseCounterDirection (EPWM4_BASE);
if (cou_dir == EPWM_TIME_BASE_STATUS_COUNT_UP)//Q5

EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCBEVT1);
}
否则 if (cou_dir == ePWM_TIME_BASE_STATUS_COUNT_DOWN)//Q6

EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCAEVT1);
}
暴露

}

2.跳闸动作的配置

//跳闸操作
EPWM_setTripZoneAction (EPWM4_BASE、EPWM_TZ_ACTION_EVENT_DCBEVT1、EPWM_TZ_ACTION_HIGH);
EPWM_setTripZoneAction (EPWM4_BASE、EPWM_TZ_ACTION_EVENT_DCAEVT1、EPWM_TZ_ACTION_HIGH);

EPWM_setActionQualifierT1TriggerSource (EPWM4_BASE、EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_1);
EPWM_setActionQualifierT2TriggerSource (EPWM4_BASE、EPWM_AQ_TRIGGER_EVENT_TRIG_DCB_1);

EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_Synchronous);
EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_B、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_Synchronous);

3.生成 PWM  

/**<设置操作*/
EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时将引脚设置为低电平
EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);//在计数器=周期时将引脚设置为高电平

EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时设置引脚开启
EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);//在时基计数器= 0 时将引脚设置为低电平
EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T2_COUNT_UP);//在时基计数器= 0 时设置引脚开启

但是、PWM 一直很低。 我有 tride 寻找的问题,但不能罚款的来源。

如何生成 PWM。

谢谢。

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

    您好、

    今天我对我的项目/代码进行了广泛的测试和回顾。  但我仍然没有让 PWM 正常工作。  它给了我一些随机 PWM。  快照如下

    pwm4 用于基于到动作限定器的跳闸来操作(如我的代码中的编程以及上面的帖子中所示)。  此跳闸由 pwm2 的操作确定 (只要它的计数器为零或处于周期值)。

    下面给出了另一个更清晰视图的快照:

    从上面的快照。  标记 2 进一步解释了我遇到的问题。  

     - PWM 4 也是在 100kHz ,但这不是情况,因为在时间它是完全低

     - pwm4a 的占空比应与 P2 标记的周期相同,但情况并非如此

     - pwm2 提升被编程为发送一个行程(此行程在代码中被强制)到 pwm4 的动作限定符,这反过来会导致 pwm4a 在这种情况下变为高电平。  这不是基于标记 P2 的 ase、在其他间隔 pwm4a 完全为低电平、尽管它在跳闸时本应为高电平、直到计时器计数器等于 0

    请注意、我缺少什么?为什么 PWM 信号不稳定。

    谢谢

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

    尊敬的 Abayomi:

    您可以检查的一些寄存器如下

    TZSEL — 具体取决于您是要使用 CBC 模式还是一次性跳闸区模式。 如果使用单次触发或 CBC、则两个输出都会受到影响、而 TZA/TZB 将生效。  

    我问你,你想使用 CBC 还是单枪,或者两者都不使用? 如果您不使用其中任何一个、则可以根据 TZCTL.DCA/BEVT1/2 寄存器配置中的设置、通过 DCAEVT1/2.force(影响 ePWMxA)和 DCBEVT1/2.force(影响 ePWMxB)将跳闸区独立应用于每个 ePWMxA 和 ePWMxB。  

    TZDCSEL — 配置什么 DCA/B 电平将触发跳闸区

    TZCTL — 配置基于 ePWMxA 和 ePWMxB 输出执行操作。

    此致、

    Ryan Ma

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

    您好、Ryan、

    感谢您的答复。

     “我的问题对你来说,你是想使用 CBC 还是单枪还是两者都不使用? ...  “。   我既不使用 CBC 也不使用一个镜头。 因此未配置 TZSEL  

    我只想在希望 PWM 改变状态时、向动作限定器子模块的 T1 和 T2 发送跳闸信号。

    从您的回复“TZDCSEL — 配置什么 DCA/B 级别将触发跳闸区“。  此跳闸区信号是否也指动作限定器的 T1 和 T2?

    我会根据 TZCTL.DCA/BEVT1/2 寄存器配置中的设置来验证“DCAEVT1/2.force(影响 ePWMxA)和 DCBEVT1/2.force(影响 ePWMxB)“ 、然后提供反馈。   

    TZCTL 会在我的代码中改变状态、但我没有获得预期的 PWM 响应。

    有没有什么建议给我。

    谢谢

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

    尊敬的 Abayomi:

    I 会根据 TZCTL.DCA/BEVT1/2 寄存器配置中的设置验证“DCAEVT1/2.force(影响 ePWMxA)和 DCBEVT1/2.force(影响 ePWMxB)“ 、然后提供反馈。   [/报价]

    听起来不错、请告诉我这是否有效。

    来自您的回复“TZDCSEL — 配置什么 DCA/B 级别将触发跳闸区“。  此跳闸区信号是否也指动作限定器的 T1 和 T2?

    是的、正确。

    此致、

    Ryan Ma

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

    您好 Ma、

    感谢您的答复。  我已经查看了代码运行时的器件状态。  寄存器配置似乎正确。  调试模式下寄存器的快照如下:

    在调试窗口中、TZCTL 和 TZDCSEL 检测进行良好配置、TZFLAG DCBETV1 和 DCAEVT1 偶尔亮起、我如何才能获得正确的 PWM 是 GPIO 引脚。  我的代码配置出错。 我仍然得到与前一篇文章中的相同的 PWM。

    我在想什么呢?  

    为什么动作限定器跳闸会按预期响应 EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCBEVT1);

    谢谢

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

    尊敬的 Abayomi:

    您可以共享这些设置吗? 您的 EVTxLATSEL 和 EVTxFRCSYNCSEL 配置是什么?

    您可以尝试以下操作:

    异步路径(通过异步路径传递 DCxEVT 信号)
    必须进行以下配置来锁存单次或逐周期跳闸
    通过异步路径的条件:
    1. DCxCTL.EVT1/2FRCSYNCSEL = 1
    2. DCxCTL.EVT1/2LATSEL = 1
    同步路径(通过 SYNC 路径传递 DCxEVT 信号)
    1. DCxCTL.EVT1/2FRCSYNCSEL = 0

    此致、

    Ryan Ma

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

    您好、

    感谢您的快速答复。

    我尝试过上述建议,但 bahaviour 仍然是一样的。

    我的 PWM 配置为斜降

    1、 当 PWM 2 中发生中断时、强制发生数字比较事件

    uint16_t cou_dir = ePWM_getTimeBaseCounterDirection (EPWM4_BASE);
    if (cou_dir == EPWM_TIME_BASE_STATUS_COUNT_UP)//Q5

    EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCBEVT1);
    asm(“ RPT #5 || NOP“);
    }
    否则 if (cou_dir == ePWM_TIME_BASE_STATUS_COUNT_DOWN)//Q6

    EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCAEVT1);
    asm(“ RPT #5 || NOP“);
    }
    暴露

    }

    我已经验证上述代码是否正常工作。

    2. 配置要触发 T1 AD T2 以驱动 PWM:

    /**<设置比较值*/
    EPWM_setCounterCompareValue (EPWM4_BASE、EPWM_COUNTER_COMPARE_A、PWM_CMPR_UP_DOWN_100kHz (_50_PC_DC));
    EPWM_setCounterCompareValue (EPWM4_BASE、EPWM_COUNTER_COMPARE_B、PWM_CMPR_UP_DOWN_100kHz (_50_PC_DC));

    /**<设置阴影*/
    EPWM_setCounterCompareShadowLoadMode (EPWM4_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);//加载为零或 PRD 匹配
    EPWM_setCounterCompareShadowLoadMode (EPWM4_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);//加载为零或 PRD 匹配

    //跳闸操作
    EPWM_setTripZoneAction (EPWM4_BASE、EPWM_TZ_ACTION_EVENT_DCBEVT1、EPWM_TZ_ACTION_HIGH);
    EPWM_setTripZoneAction (EPWM4_BASE、EPWM_TZ_ACTION_EVENT_DCAEVT1、EPWM_TZ_ACTION_HIGH);

    EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_Synchronous);
    EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_B、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_Synchronous);

    //EPwm4Regs.DCATL.bit。
    // EPWM_selectDigitalCompareTripInput (EPWM4_BASE、EPWM_DC_TRIP_TRIPIN4、EPWM_DC_TYPE_DCAH);

    //ePWM_enableTripZoneSignals (EPWM4_BASE、EPWM_TZ_SIGNAL_DCAEVT1 | EPWM_TZ_SIGNAL_DCBEVT1);

    EPWM_setTripZoneDigitalCompareEventCondition (EPWM4_BASE、EPWM_TZ_DC_OUTPUT_A1、EPWM_TZ_EVENT_DCXL_LOW);
    EPWM_setTripZoneDigitalCompareEventCondition (EPWM4_BASE、EPWM_TZ_DC_OUTPUT_B1、EPWM_TZ_EVENT_DCXL_LOW);

    EPWM_setActionQualifierT1TriggerSource (EPWM4_BASE、EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_1);
    EPWM_setActionQualifierT2TriggerSource (EPWM4_BASE、EPWM_AQ_TRIGGER_EVENT_TRIG_DCB_1);


    #if sync_RECT_MODE == 1

    /**<设置操作*/
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时将引脚设置为低电平
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);//在计数器=周期时将引脚设置为高电平

    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时设置引脚开启
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);//在时基计数器= 0 时将引脚设置为低电平
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T2_COUNT_UP);//在时基计数器= 0 时设置引脚开启

    这是我的配置、是否缺少一些内容。

    谢谢

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

    尊敬的 Abayomi:

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule/6000081

    我已经验证上述代码是否正常工作。

    [/报价]

    您是指 DCAEVT1/DCBEVT1 软件强制强制按照预期强制 PWM 输出吗?

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule/6000081

    2. 配置要触发 T1 AD T2 以驱动 PWM:

    [/报价]

    这一步不起作用吗? 步骤 2 初始化代码是什么还是中断分开?

    我看到您正在配置跳闸区操作的输出后软件强制 DCA/BEVT1 信号,这对我来说似乎不正确.. 但需要更多说明。

    此致、

    Ryan Ma

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

    你好、Ma

    感谢您的答复、很抱歉您的答复迟了。

    您是指 DCAEVT1/DCBEVT1 软件强制强制按照预期强制 PWM 输出吗?

    是的、DCAEVT1/DCBEVT1 软件强制生效、并  在 TZFLG 寄存器中为 DCAEVT1/DCBEVT1 设置标志。 TZFRC 标志也会置位。  我期望该操作会根据配置代码将信号发送到 T1 和 T2   

    这一步不起作用吗? 步骤 2 初始化代码是什么还是中断分开?

    是的、这是不起作用的步骤、是初始化代码的一部分。 当 TZFRC 标志被触发时、这个代码体应操作 PWM。

    从我的最后一个帖子。  第一组代码从中断调用、EPWM_TZ_FORCE_EVENT_XXXXX 正常工作、但根据第二组代码(属于 ePWM 配置代码)、PWM 的行为不符合预期。

    我还能作出哪些其他澄清、或者我们可以一起举行一次会议。

    谢谢。

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

    尊敬的 Abayomi:

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule/6009530

    从我的最后一个帖子。  第一组代码从中断调用、EPWM_TZ_FORCE_EVENT_XXXXX 正常工作、但根据第二组代码(属于 ePWM 配置代码)、PWM 的行为不符合预期。

    [/报价]

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule/6000081

    uint16_t cou_dir = ePWM_getTimeBaseCounterDirection (EPWM4_BASE);
    if (cou_dir == EPWM_TIME_BASE_STATUS_COUNT_UP)//Q5

    EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCBEVT1);
    asm(“ RPT #5 || NOP“);
    }
    否则 if (cou_dir == ePWM_TIME_BASE_STATUS_COUNT_DOWN)//Q6

    EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCAEVT1);
    asm(“ RPT #5 || NOP“);
    }
    暴露

    }

    [/报价]

    根据上述代码、您将在 DCBEVT1 或 DCAEVT1 上强制发生跳闸区事件。

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule/6000081

    /**<设置比较值*/
    EPWM_setCounterCompareValue (EPWM4_BASE、EPWM_COUNTER_COMPARE_A、PWM_CMPR_UP_DOWN_100kHz (_50_PC_DC));
    EPWM_setCounterCompareValue (EPWM4_BASE、EPWM_COUNTER_COMPARE_B、PWM_CMPR_UP_DOWN_100kHz (_50_PC_DC));

    /**<设置阴影*/
    EPWM_setCounterCompareShadowLoadMode (EPWM4_BASE、EPWM_COUNTER_COMPARE_A、EPWM_COMP_LOAD_ON_CNTR_ZERO);//加载为零或 PRD 匹配
    EPWM_setCounterCompareShadowLoadMode (EPWM4_BASE、EPWM_COUNTER_COMPARE_B、EPWM_COMP_LOAD_ON_CNTR_ZERO);//加载为零或 PRD 匹配

    //跳闸操作
    EPWM_setTripZoneAction (EPWM4_BASE、EPWM_TZ_ACTION_EVENT_DCBEVT1、EPWM_TZ_ACTION_HIGH);
    EPWM_setTripZoneAction (EPWM4_BASE、EPWM_TZ_ACTION_EVENT_DCAEVT1、EPWM_TZ_ACTION_HIGH);

    EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_Synchronous);
    EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_B、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_Synchronous);

    //EPwm4Regs.DCATL.bit。
    // EPWM_selectDigitalCompareTripInput (EPWM4_BASE、EPWM_DC_TRIP_TRIPIN4、EPWM_DC_TYPE_DCAH);

    //ePWM_enableTripZoneSignals (EPWM4_BASE、EPWM_TZ_SIGNAL_DCAEVT1 | EPWM_TZ_SIGNAL_DCBEVT1);

    EPWM_setTripZoneDigitalCompareEventCondition (EPWM4_BASE、EPWM_TZ_DC_OUTPUT_A1、EPWM_TZ_EVENT_DCXL_LOW);
    EPWM_setTripZoneDigitalCompareEventCondition (EPWM4_BASE、EPWM_TZ_DC_OUTPUT_B1、EPWM_TZ_EVENT_DCXL_LOW);

    EPWM_setActionQualifierT1TriggerSource (EPWM4_BASE、EPWM_AQ_TRIGGER_EVENT_TRIG_DCA_1);
    EPWM_setActionQualifierT2TriggerSource (EPWM4_BASE、EPWM_AQ_TRIGGER_EVENT_TRIG_DCB_1);


    #if sync_RECT_MODE == 1

    /**<设置操作*/
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时将引脚设置为低电平
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);//在计数器=周期时将引脚设置为高电平

    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时设置引脚开启
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);//在时基计数器= 0 时将引脚设置为低电平
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T2_COUNT_UP);//在时基计数器= 0 时设置引脚开启

    [/报价]

    根据此初始化代码、您可以对 DCAEVT1 和 DCBEVT1 执行跳闸区操作、以在应用 TZFRC 时将输出设置为高电平。

    您能否确认在执行上述任一功能时输出变为高电平?

    EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCBEVT1);

    EPWM_forceTripZoneEvent (EPWM4_BASE、EPWM_TZ_FORCE_EVENT_DCAEVT1);

    在非跳闸区条件和正常 EPWM 运行下、动作限定器输出是否有意义?

    根据您的配置、DCAEVT1 和 DCBEVT1 触发 T1/T2 事件的条件是这些信号中的任何一个变为低电平。 您看到 ePWM4A 的输出在 ZRO 或周期变为低电平了吗? 您是否看到 EPWM4A 的输出在 t2 上变为高电平?

    如果您可以确认每种独立行为、那么我们可以看到哪个子模块配置不正确。

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

    您好、Ryan、  

    很抱歉回复延迟。   

    您的以下问题

    根据上述代码、您将在 DCBEVT1 或 DCAEVT1 上强制执行跳闸区事件。

    是的、我在 DCBEVT1 和 DCAEVT1 上强制发生跳 闸事件、并在调用强制跳闸事件时检查 TZFLG 中的标志是否设置为 1。

    对于以下问题:

    当这些函数中的任何一个出现时、您能否确认输出变为高电平?

    PWM 会在很短的时间内以非常不一致的方式变为高电平。  快照如下:

    PWM 为何像我不知道的那样。

    下面的问题

    在非跳闸区条件下和正常 EPWM 运行情况下、动作限定器输出是否有意义?

    是的、PWM 的行为与低电平一样良好。  这基于以下代码中配置的动作限定符:

    /**<设置操作*/
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时将引脚设置为低电平
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_B、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T1_COUNT_DOWN);//在计数器=周期时将引脚设置为高电平

    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);//在时基计数器= 0 时设置引脚开启
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_LOW、EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);//在时基计数器= 0 时将引脚设置为低电平
    EPWM_setActionQualifierAction (EPWM4_BASE、EPWM_AQ_OUTPUT_A、EPWM_AQ_OUTPUT_HIGH、EPWM_AQ_OUTPUT_ON_T2_COUNT_UP);//在时基计数器= 0 时设置引脚开启

    它们仅在发生强制跳闸区事件时变为高电平。 然后根据动作限定器再次处于低电平

    询问这个问题  

    根据您的配置、DCAEVT1 和 DCBEVT1 触发 T1/T2 事件的条件是这两个信号中的任何一个变为低电平。 您看到 ePWM4A 的输出在 ZRO 或周期变为低电平了吗? 您是否看到 EPWM4A 的输出在 t2 向上变为高电平?

    从第二个快照开始、EPWM4 会在短时间内变为高电平、时序与 EPWM2 不一致。  我在逻辑分析仪测量中加入了标记。

    使用强制跳闸区事件时、配置中是否缺少某些内容?

    谢谢

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

    尊敬的 Abayomi:

    是的、我看到了问题。  

    当发出 DCA/BEVT1.force 的软件强制时、它只会在软件脉冲向 PWM 发出强制的脉冲中处于活动状态。 但该信号不会被锁存。

    如果您希望该事件被锁存且输出保持高电平、则需要使用单次触发或 CBC 跳闸事件。 您可以尝试使用一次性或 CBC 进行测试吗?

    我想您希望使用 CBC、以便在每个新的 PWM 周期结束时清除软件强制事件并删除已跳闸输出、但这正是我从您的说明中观察到的内容。

    此致、

    Ryan Ma

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

    我会尝试这种方法、然后向您伸出手。  谢谢

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

    欢迎您!

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

    您好、  

    我尝试了这个建议。  PWM 行为发生了变化、但这不是我想要的、我认为它不适合我想要的用途。  

    我想能够独立控制 epwm4 A 和 B。  但这并没有发生。  CBC 和 OSHT 同时影响 ePWM a 和 b、这不是我想要的。 我希望跳闸仅影响 ePWM A 或 B、但不会同时影响两者。

    我阅读了用户手册第 18.11.4.1 节“数字比较事件“、并根据其中编写的内容和行程预告事件修改了我的代码。  但我没有得到我想要的 PWM。

    根据我上次发送给您的快照、解释我想再次做什么。

    当我的 epwm2 计数器为零时,我想生成一个运行 epwm4a 的跳闸信号,当它计数到周期时,我想生成第二个运行 epwm4b 的跳闸信号。  跳闸信号应该发送到动作限定器模块、然后由该模块操作我的 PWM。

    如何实现这一点。

    谢谢

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

    您好、

    感谢您的答复。  

    我会尝试一下、给您一个更新

    祝你一切顺利

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

    尊敬的 Abayomi:

    好的。

    此致、

    Ryan Ma

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

    您好、  

    我尝试了该方法、得到了一些结果。  但是、ePWM 的高电平时间与我期望获得的结果不符。   

    结果的快照如下:

    我期望的高时间显示在快照中的红色标记中

    代码修改如下:

    1. ePWM 跳闸的配置

    EPWM_selectDigitalCompareTripInput (EPWM4_BASE、EPWM_DC_TRIP_TRIPIN5、EPWM_DC_TYPE_DCAH);
    EPWM_setTripZoneDigitalCompareEventCondition (EPWM4_BASE、EPWM_TZ_DC_OUTPUT_A1、EPWM_TZ_EVENT_DCXH_HIGH);
    EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_Synchronous);

    EPWM_selectDigitalCompareTripInput (EPWM4_BASE、EPWM_DC_TRIP_TRIPIN9、EPWM_DC_TYPE_DCBH);
    EPWM_setTripZoneDigitalCompareEventCondition (EPWM4_BASE、EPWM_TZ_DC_OUTPUT_B1、EPWM_TZ_EVENT_DCXH_HIGH);
    EPWM_setDigitalCompareEventSyncMode (EPWM4_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_Synchronous);

    2.使 ePWM 信号反相

    uint16_t cou_dir = ePWM_getTimeBaseCounterDirection (EPWM4_BASE);
    if (cou_dir == EPWM_TIME_BASE_STATUS_COUNT_UP)//Q5

    Xbar _逆变 EPWMSignal (XBAR_TRIP5、true);
    //device_delay_US (1000U);

    }
    否则 if (cou_dir == ePWM_TIME_BASE_STATUS_COUNT_DOWN)//Q6

    Xbar _逆变 EPWMSignal (XBAR_TRIP9、true);
    //device_delay_US (1000U);
    }
    暴露

    }

    3. EPWM 信号的反相静息

    EPwmXbarRegs.TRIPOUTINV.bit.TRIP5 = 0;
    EPwmXbarRegs.TRIPOUTINV.bit.TRIP9 = 0;

    以上与 epwm4 的操作相一致。

    请注意可能缺少的内容。

    谢谢

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

    尊敬的 Abayomi:

    [引述 userid=“516880" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1556112/launchxl-f280049c-generation-of-t1-and-t2-events-for-the-action-qualifier-submodule/6035627

    我期望的高时间显示在快照中的红色标记中

    [/报价]

    您能否确认我发送的 EPWMXBAR 基本示例是否适合您?  

    您能否确认以下行为?

    Xbar _逆变 EPWMSignal (XBAR_TRIP9、TRUE);->将输出设置为高电平

    Xbar _逆变 EPWMSignal (XBAR_TRIP9、FALSE);->将输出设置为低电平(删除了直流事件)

    我仍在您的示波器屏幕截图上看到 epwm4 似乎仅在几微秒内变为高电平?

    何时将  XBAR_INVERtEPWMSignal(XBAR_TRIP9, true) 设置为 XBAR_INVERtEPWMSignal(XBAR_TRIP9, fals);?
    好像这一次是将 XBAR_invertEPWMsignal 设置为 true、然后返回 false、不符合您的红色标记时序。

    此致、

    Ryan Ma

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

    您好、Ryan、

    感谢您的反馈。

    我从代码中创建了一个项目、从耳镜得到的输出如下:

    我还打包了代码为你作为一个 zip 文件.

    e2e.ti.com/.../pwm_5F00_test.rar

    我认为工程的输出不正确。

    您能为我核实一下吗?

    谢谢

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

    尊敬的 Abayomi:

    请允许我再看一下。

    此致、

    Ryan Ma

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

    尊敬的 Abayomi:

    这是预期的行为。

    我还下载了您发送的项目。 让我来演示一下解释示波器截图的代码片段。

    //配置 TRIP4 设置为高电平时的输出

      EPWM_setTripZoneAction (myEPWM1_BASE、EPWM_TZ_ACTION_EVENT_DCAEVT1、EPWM_TZ_ACTION_LOW);

    //将 DCAH 配置为输入 TRIP4

      EPWM_selectDigitalCompareTripInput (myEPWM1_BASE、EPWM_DC_TRIP_TRIPIN4、EPWM_DC_TYPE_DCAH);  

    //配置触发 DCAEVT1.force 的条件(当 TRIP4 变为高电平时)

      EPWM_setTripZoneDigitalCompareEventCondition (myEPWM1_BASE、EPWM_TZ_DC_OUTPUT_A1、EPWM_TZ_EVENT_DCXH_HIGH);  
    //配置是否要同步输入信号或异步
      EPWM_setDigitalCompareEventSyncMode (myEPWM1_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_Synchronous);  
    TRIPIN4 是 PWMXBAR 实例 myEPWMXBAR0。 当到达代码中的下一行时
    //将输出设置为低电平  

      Xbar _逆变 EPWMSignal ( myEPWMXBAR0、true);  

      DEVICE_DELAY_US (1000U);->、然后再有大约 1ms 的延迟  

    //设置输出以恢复正常的 PWM 操作(基本上清除跳闸)

      Xbar _逆变 EPWMSignal (myEPWMXBAR0、false);->“清除“跳闸条件以恢复正常的 PWM 运行
      DEVICE_DELAY_US (1000U);->运行正常 PWM 运行 1ms
    此致、
    Ryan Ma

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

    尊敬的 Abayomi:

    如果这是您需要的、我还要补充以下内容。

    /*
     * Copyright (c) 2020 Texas Instruments Incorporated - http://www.ti.com
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     */
    
    #include "board.h"
    
    //*****************************************************************************
    //
    // Board Configurations
    // Initializes the rest of the modules. 
    // Call this function in your application if you wish to do all module 
    // initialization.
    // If you wish to not use some of the initializations, instead of the 
    // Board_init use the individual Module_inits
    //
    //*****************************************************************************
    void Board_init()
    {
    	EALLOW;
    
    	PinMux_init();
    	SYNC_init();
    	EPWM_init();
    	EPWMXBAR_init();
    
    	EDIS;
    }
    
    //*****************************************************************************
    //
    // PINMUX Configurations
    //
    //*****************************************************************************
    void PinMux_init()
    {
    	//
    	// PinMux for modules assigned to CPU1
    	//
    	
    	//
    	// EPWM1 -> myEPWM1 Pinmux
    	//
    	GPIO_setPinConfig(myEPWM1_EPWMA_PIN_CONFIG);
    	GPIO_setPadConfig(myEPWM1_EPWMA_GPIO, GPIO_PIN_TYPE_STD);
    	GPIO_setQualificationMode(myEPWM1_EPWMA_GPIO, GPIO_QUAL_SYNC);
    
    
    }
    
    //*****************************************************************************
    //
    // EPWM Configurations
    //
    //*****************************************************************************
    void EPWM_init(){
        EPWM_setEmulationMode(myEPWM1_BASE, EPWM_EMULATION_FREE_RUN);	
        EPWM_setClockPrescaler(myEPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);	
        EPWM_setTimeBasePeriod(myEPWM1_BASE, 12000);	
        EPWM_setTimeBaseCounter(myEPWM1_BASE, 11999);	
        EPWM_setTimeBaseCounterMode(myEPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);	
        EPWM_disablePhaseShiftLoad(myEPWM1_BASE);	
        EPWM_setPhaseShift(myEPWM1_BASE, 0);	
        EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, 6000);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setCounterCompareValue(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, 0);	
        EPWM_setCounterCompareShadowLoadMode(myEPWM1_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_PERIOD);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);	
        EPWM_setActionQualifierAction(myEPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_NO_CHANGE, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);	
        EPWM_setRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_RED_LOAD_ON_CNTR_ZERO);	
        EPWM_disableRisingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);	
        EPWM_setFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE, EPWM_FED_LOAD_ON_CNTR_ZERO);	
        EPWM_disableFallingEdgeDelayCountShadowLoadMode(myEPWM1_BASE);	
        EPWM_setTripZoneAction(myEPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_DISABLE);	
        EPWM_setTripZoneAction(myEPWM1_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_HIGH);	
        EPWM_setTripZoneAction(myEPWM1_BASE, EPWM_TZ_ACTION_EVENT_DCAEVT2, EPWM_TZ_ACTION_LOW);	
    
        EPWM_selectDigitalCompareTripInput(myEPWM1_BASE, EPWM_DC_TRIP_TRIPIN4, EPWM_DC_TYPE_DCAH);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM1_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);	
        EPWM_setTripZoneDigitalCompareEventCondition(myEPWM1_BASE, EPWM_TZ_DC_OUTPUT_A2, EPWM_TZ_EVENT_DCXH_LOW);	
        EPWM_setDigitalCompareEventSyncMode(myEPWM1_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED);	
    }
    
    //*****************************************************************************
    //
    // EPWMXBAR Configurations
    //
    //*****************************************************************************
    void EPWMXBAR_init(){
    	myEPWMXBAR0_init();
    }
    
    void myEPWMXBAR0_init(){
    		
    
    }
    
    //*****************************************************************************
    //
    // SYNC Scheme Configurations
    //
    //*****************************************************************************
    void SYNC_init(){
    	SysCtl_setSyncOutputConfig(SYSCTL_SYNC_OUT_SRC_EPWM1SYNCOUT);
    	//
    	// For EPWM1, the sync input is: SYSCTL_SYNC_IN_SRC_EXTSYNCIN1
    	//
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM4, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_EPWM7, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP1, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP4, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	SysCtl_setSyncInputConfig(SYSCTL_SYNC_IN_ECAP6, SYSCTL_SYNC_IN_SRC_EPWM1SYNCOUT);
    	//
    	// SOCA
    	//
    	SysCtl_enableExtADCSOCSource(0);
    	//
    	// SOCB
    	//
    	SysCtl_enableExtADCSOCSource(0);
    }

    此配置与 main.c 和 board.h 相同、将使 PWM 遵循 DCAEVT1.force 和 DCAEVT2.force 信号、生成此类波形:

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

    您好、Ryan、

    感谢您的回复、很抱歉您稍后回复。

    我运行了您的代码、然后生成了占空比。

    我将您的更改添加到我的代码中、它似乎能提供预期的结果、但结果并不完美。

    示波器的快照如下:

    通道 4 按预期运行正常 、但通道 5 不一致。   

    对于通道 5、标记 1 和 2 之间的占空比正常、预期结果为预期结果、 但不应发生标记 3 和 4 之间的占空比。  我试着看看是什么触发它,但我没有找到它。

    有时、这两个占空比合并为 1。  这不应该是这样。

    我们可以一起回顾我的代码吗?

    谢谢

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

    尊敬的 Abayomi:  

    这些边缘似乎每隔一段时间就会发生。 在同一周期内、是否有东西导致边沿再次变为高电平?

    此致、

    Ryan Ma

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

    您好、Ryan、

    感谢您的支持。

    PWM 是由逻辑模拟器采样率导致的。

    我正在获得所需的 PWM、但 PWM 开关存在非常大的延迟、无法确定其来源。

    处理 PWM 4 切换的代码如下:

    ___ INTERRUPT void EPWM::EPWM1ISRCPSFBHV2LVDC2DC ()

    /**<清除中断标志*/
    EPWM_clearEventTriggerInterruptFlag (EPWM1_BASE);

    uint16_t cou_dir = ePWM_getTimeBaseCounterDirection (EPWM4_BASE);
    if (cou_dir == EPWM_TIME_BASE_STATUS_COUNT_UP)//Q5

    Xbar _逆变 EPWMSignal (XBAR_TRIP9、true);
    }
    否则 if (cou_dir == ePWM_TIME_BASE_STATUS_COUNT_DOWN)//Q6

    Xbar _逆变 EPWMSignal (XBAR_TRIP5、true);
    GpioDataRegs.GPBTOGLE.bit.GPIO58 = 1;
    }
    暴露

    }

    /**<确认中断组*/
    PieCtrlRegs.PIEACK.ALL = PIEACK_GROUP3;
    }

    当 epwm1 上的 EPWM_INT_TBCTR_ZERO | EPWM_INT_TBCTR_PERIOD 处出现中断时、将调用上述代码。

    它是为了将通道 4 和 5 上指示的 PWM 之一发送至低电平。  这时会发生这种情况 、但在 PWM 变为低电平之前会有很大的延迟。  PWM 的快照如下:

    我将红色箭头标记为快照、以指示何时调用中断代码以及 PWM 何时应变为低电平。  逻辑模拟器的通道 0 和 1 是处理中断的 epwm1。 然而、在变为低电平之前会有较长的延迟。 这在标记 P3 中表示。

    通道 6 中的波形是被调用的中断函数中的切换。  显然存在延迟。

    这可能是什么问题和解决方案。

    谢谢

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

    尊敬的 Abayomi:

    由于您使用 ISR 将 PWM 触发为低电平、因此可能会发生 ISR 延迟、这导致您看到的延迟。

    您是否尝试过禁用其他中断、以了解您提供的 ISR 需要多长时间才能执行?  

    有关该主题的本应用手册可能会有用。

    https://www.ti.com/lit/ab/spradp8/spradp8.pdf

    此致、

    Ryan Ma