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.

[参考译文] TMS320F280025C:TMS320F280025C

Guru**** 2455560 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1055894/tms320f280025c-tms320f280025c

器件型号:TMS320F280025C

下面有两个问题;

  1. 当在具有相同时钟(100MHz)的另一个控制器上使用 ECAP 模块捕获一个控制器的 PWM 时、我们将获得 PWM 频率实际值大约100Hz 的差异、并使用 ECAP 捕获一个控制器。

我们使用的是增量 ECAP、在上升沿和下降沿触发、以捕获 PWM 频率和占空比。

 

您能否帮助我们了解为什么我们在 ECAP 上获得100Hz 差异的频率值?

 

  1. 我们需要捕获一个控制器上的 PWM 生成与另一个控制器上的 ECAP ISR 之间的时间差。 除了使用 GPIO 引脚之外、您是否建议任何快速解决方案来测量两个不同控制器上事件之间的时间差?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Yogini、

    您测量的频率是多少?eCAP 是否从您的目标输出更高或更低的频率?

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

    您好 Frank、

    感谢您的回答。 我们需要在30kHz 至200kHz 的范围内配置 PWM。 目前,为了进行测试,我们将 PWM 频率保持在81KHz。 PWM 的实际计算频率为81037,测量时,我们可以在 CRO 上观察到相同的频率。

    但是,对于相同的 PWM,ECAP 的值为81168。

    我们有两个控制器、在一个控制器上生成 PWM、在另一个控制器的 ECAP 上捕获相同的 PWM。

    sysclock = 100MHz、

    ECAP 在事件1发生中断时处于连续 Δ 模式。 (即使通过设置事件3和事件4上的中断、也会产生相同的错误。)

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

    您好 Yogini、

    由于您要测量频率和占空比、因此您必须捕获3个事件(上升->下降->上升或下降->上升->下降)并在第3个事件上中断。 您可以确认吗? 更好的是、请提供您的 ECAP 配置代码、以便我可以查看是否正常。  

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

    您好 Frank、

    下面是我们正在使用的 ECAP 配置;

    //禁用,清除所有捕获标志和中断

    ECAP_disableInterrupt (ECAP1_base、
    (ECAP_ISR_SOURC_CAPTURE_EVENT_1 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_2 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_3 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_4 |
    ECAP_ISR_SOURC_COUNTER_OVERflow |
    ECAP_ISR_SOURC_COUNTER_PERIOD |
    eCAP_ISR_SOURC_COUNTER_COMPARE);
    ECAP_clearInterrupt (ECAP1_base、
    (ECAP_ISR_SOURC_CAPTURE_EVENT_1 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_2 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_3 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_4 |
    ECAP_ISR_SOURC_COUNTER_OVERflow |
    ECAP_ISR_SOURC_COUNTER_PERIOD |
    eCAP_ISR_SOURC_COUNTER_COMPARE);


    //禁用 CAP1-CAP4寄存器加载

    ECAP_disableTimeStampCapture (ECAP1_BASE);


    //配置 eCAP
    //启用捕捉模式。
    //连续模式,在事件4停止捕捉。
    //将事件的极性设置为上升沿。
    //将捕捉设置为时间差模式。
    //从 XBAR7中选择输入。(TBC)
    //启用 eCAP 模块。
    //启用中断。

    ECAP_STOPCounter (ECAP1_BASE);
    ECAP_enableCaptureMode (ECAP1_BASE);

    ECAP_setCaptureMode (ECAP1_base、ECAP_Continuous_CAPTURE_MODE、ECAP_EVENT_4);

    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_1、ECAP_EVNT_RISTING _EDGE);
    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_2、ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_3、ECAP_EVNT_RISTING _EDGE);
    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_4、ECAP_EVNT_FALLING_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 的//GPIO16
    Xbar_setInputPin (INPUTXBAR_base、XBAR_INPUT7、16);

    eCAP_enableLoadCounter (ECAP1_base);
    ///ECAP_setSyncOutMode (ECAP1_base、ECAP_SYNC_OUT_SYNCI);

    ECAP_setSyncOutMode (ECAP1_base、ECAP_SYNC_OUT_DISABLED);
    ECAP_setSyncInPulseSource (ECAP1_base、ECAP_SYNC_IN_PULSE_SRC_DISABLE);

    ECAP_startCounter (ECAP1_base);
    ECAP_enableTimeStampCapture (ECAP1_BASE);
    //ECAP_REARM (ECAP1_base);//在连续捕获模式下不需要

    ECAP_enableInterrupt (ECAP1_base、ECAP_ISR_SOURCE、CAPTURE_EVENT_1);

    //将 GPIO 16配置为 eCAP 输入//

    Xbar_setInputPin (INPUTXBAR_BASE、XBAR_INPUT7、16);
    GPIO_setPinConfig (GPIO_16_GPIO16);
    GPIO_setDirectionMode (16、GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode (16、GPIO_QUAL_异 步);

    另外,我们还将参考文件 SPRU807B  

    页码:34; 7.4:示例4

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

    您好 Frank、

    下面是我们正在使用的 ECAP 配置;

    //禁用,清除所有捕获标志和中断

    ECAP_disableInterrupt (ECAP1_base、
    (ECAP_ISR_SOURC_CAPTURE_EVENT_1 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_2 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_3 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_4 |
    ECAP_ISR_SOURC_COUNTER_OVERflow |
    ECAP_ISR_SOURC_COUNTER_PERIOD |
    eCAP_ISR_SOURC_COUNTER_COMPARE);
    ECAP_clearInterrupt (ECAP1_base、
    (ECAP_ISR_SOURC_CAPTURE_EVENT_1 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_2 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_3 |
    ECAP_ISR_SOURC_CAPTURE_EVENT_4 |
    ECAP_ISR_SOURC_COUNTER_OVERflow |
    ECAP_ISR_SOURC_COUNTER_PERIOD |
    eCAP_ISR_SOURC_COUNTER_COMPARE);


    //禁用 CAP1-CAP4寄存器加载

    ECAP_disableTimeStampCapture (ECAP1_BASE);


    //配置 eCAP
    //启用捕捉模式。
    //连续模式,在事件4停止捕捉。
    //将事件的极性设置为上升沿。
    //将捕捉设置为时间差模式。
    //从 XBAR7中选择输入。(TBC)
    //启用 eCAP 模块。
    //启用中断。

    ECAP_STOPCounter (ECAP1_BASE);
    ECAP_enableCaptureMode (ECAP1_BASE);

    ECAP_setCaptureMode (ECAP1_base、ECAP_Continuous_CAPTURE_MODE、ECAP_EVENT_4);

    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_1、ECAP_EVNT_RISTING _EDGE);
    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_2、ECAP_EVNT_FALLING_EDGE);
    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_3、ECAP_EVNT_RISTING _EDGE);
    ECAP_setEventPolarity (ECAP1_base、ECAP_EVENT_4、ECAP_EVNT_FALLING_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 的//GPIO16
    Xbar_setInputPin (INPUTXBAR_base、XBAR_INPUT7、16);

    eCAP_enableLoadCounter (ECAP1_base);
    ///ECAP_setSyncOutMode (ECAP1_base、ECAP_SYNC_OUT_SYNCI);

    ECAP_setSyncOutMode (ECAP1_base、ECAP_SYNC_OUT_DISABLED);
    ECAP_setSyncInPulseSource (ECAP1_base、ECAP_SYNC_IN_PULSE_SRC_DISABLE);

    ECAP_startCounter (ECAP1_base);
    ECAP_enableTimeStampCapture (ECAP1_BASE);
    //ECAP_REARM (ECAP1_base);//在连续捕获模式下不需要

    ECAP_enableInterrupt (ECAP1_base、ECAP_ISR_SOURCE、CAPTURE_EVENT_1);

    //将 GPIO 16配置为 eCAP 输入//

    Xbar_setInputPin (INPUTXBAR_BASE、XBAR_INPUT7、16);
    GPIO_setPinConfig (GPIO_16_GPIO16);
    GPIO_setDirectionMode (16、GPIO_DIR_MODE_IN);
    GPIO_setQualificationMode (16、GPIO_QUAL_异 步);

    另外,我们还将参考文件 SPRU807B  

    页码:34; 7.4:示例4

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

    您好 Yogini、

    感谢您提供代码。 我看到您正在捕获4个事件。 请在 EVENT4上生成中断并报告 CAP1-4的内容、而不是在 EVENT1上生成中断。 此外、为了进行调试、请将代码更改为执行单次触发模式。 您可以在 ISR 中重新进行 ARM 以使其保持运行。