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.

[参考译文] TMS320F28379D:帮助 ECAP 无法正确捕获 PWM 输入

Guru**** 2463730 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1497019/tms320f28379d-help-with-ecap-not-correctly-capturing-pwm-input

器件型号:TMS320F28379D

工具与软件:

我正在尝试配置 ECAP、以持续测量 PWM 输入的周期和占空比。  我正在使用50%占空比10kHz PWM 进行测试。  ePWM0生成 PWM、我 也将 LaunchPad 上的 EPWM0A 连接到 LaunchPad 上的适当输入(GPIO104)、并适当配置 XBar。

使用逻辑分析仪、我 确认了 GPIO104上的50%占空比。

我看到 CAP1寄存器为0x26FB、CAP2=0x1C、CAP3=0x26FB、CAP4=0x1C、这当然与50%占空比不匹配。   

以下是配置详细信息、主要基于 ecap_ex2_capture_pwm.c  对于为什么我不正确捕捉 PWM 有任何建议?

谢谢!

GPIO 配置:

GPIO_setPinConfig(GPIO_104_GPIO104);
GPIO_setDirectionMode(104, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(104, GPIO_PIN_TYPE_STD);

XBAR_setInputPin(XBAR_INPUT7, 104);

eCAP 配置:

ECAP_setCaptureMode(ECAP1_BASE, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_4);

ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_1, ECAP_EVNT_FALLING_EDGE);
ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_2, ECAP_EVNT_RISING_EDGE);
ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_3, ECAP_EVNT_FALLING_EDGE);
ECAP_setEventPolarity(ECAP1_BASE, ECAP_EVENT_4, ECAP_EVNT_RISING_EDGE);

ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_1);
ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_2);
ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_3);
ECAP_enableCounterResetOnEvent(ECAP1_BASE, ECAP_EVENT_4);

ECAP_enableLoadCounter(ECAP1_BASE);
ECAP_startCounter(ECAP1_BASE);
ECAP_enableTimeStampCapture(ECAP1_BASE);
ECAP_reArm(ECAP1_BASE);

ECAP_enableInterrupt(ECAP1_BASE, ECAP_ISR_SOURCE_CAPTURE_EVENT_4);

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

    进一步评论:

    下降沿捕获看起来是正确的。  其中的值为~50us、这与匹配。  它是下降沿。

    如果切换上升沿和下降沿、问题出在上升沿:

    ECAP_setEventPolarity (ECAP_BASES[i]、ECAP_EVENT_1、ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity (ECAP_BASES[i]、ECAP_EVENT_2、ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity (ECAP_BASES[i]、ECAP_EVENT_3、ECAP_EVNT_RISING_EDGE);
    ECAP_setEventPolarity (ECAP_BASES[i]、ECAP_EVENT_4、ECAP_EVNT_FALLING_EDGE);


    如果我将所有边沿设置为上升沿、我会得到所有 CAP 寄存器的0x1C。

    因此、上升沿捕捉似乎就是问题所在。

    我还尝试了所有不同的输入限定设置、但行为没有变化。

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

    您好、Ryan、

    示例2 工作正常。  我更改为引脚104、也更改为 EPWM1、示例2 仍然正常工作。  

    为了与示例相匹配、我在项目中切换到了单次触发模式、但上升沿捕获仍然存在问题。  如果我查看 ECAP1的寄存器内容、它们看起来都像预期的那样。

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

    我为引脚104的配置提供了代码片段。 我在使用 epwm1时没有看到任何问题。

    您能确认吗?

    此致!

    Ryan Ma

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

    您好、Ryan、

    该问题与对 ECAP_enableLoadCounter (ECAP1_base)的调用有关;

    这将设置 ECCTL2.SYNCI_EN。  如果我在项目中禁用了该功能、那么问题就会解决、ECAP 正常工作。   

    我将配置 XBARINPUT5用于其他目的、但将 GPIO 悬空/断开。  XBARINPUT5 连接到 EXTSYNC1

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

    尊敬的 Mark:  

    获取时、设置了同步输入、导致 TSCTR 发生变化。

    很好的收获!

    此致、

    Ryan Ma