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.

[参考译文] AM2434:ECAP -时间锁存问题

Guru**** 2393725 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1424499/am2434-ecap---time-latch-problem

器件型号:AM2434

工具与软件:

您好!

我正在尝试在我的电路板和项目上使用 ECAP (外设#1、而不是#0)。

与 SDK 示例工程不同、我不使用 ISR 函数。

我尝试进行了一些健全性测试、但与示例输出不同、结果有些奇怪。

我已将引脚 C17 (MCAN1_TX)配置 为模式2 - APWM_ECAP1。

我将使用信号发生器在50%和25%占空比下生成1kHz 方波脉冲(2个不同的测试用例)。

这是我的配置代码:

   /*禁用 CAP1-CAP4寄存器加载*/
   ECAP_captureLoadingDisable (gEcapBaseAddr);

   /*配置 eCAP */
   ECAP_counterControl (gEcapBaseAddr、ECAP_COUNTER_STOP);
   /*启用捕获模式*/
   ECAP_operatingModeSelect (gEcapBaseAddr、ECAP_CAPTURE_MODE);

   /*单次触发模式、在事件4时停止捕捉*/
   ECAP_oneShotModeConfig (gEcapBaseAddr、ECAP_CAPTURE_EVENT4_STOP);
//   ecap_Continuous ModeConfig (gEcapBaseAddr);

   /*将事件的极性设置为上升、下降、上升、下降沿*/
   ECAP_captureEvtPolarityConfig (gEcapBaseAddr、
                                ecap_capture_event_rising、
                                ecap_capture_event_falling、
                                ecap_capture_event_rising、
                                ecap_capture_event_falling);

   /*在时间差模式下设置捕获*/
   ECAP_captureEvtCntRstConfig (gEcapBaseAddr、
                                ecap_capture_event_reset_counter_reset、
                                ecap_capture_event_reset_counter_reset、
                                ecap_capture_event_reset_counter_reset、
                               ecap_capture_event_reset_counter_reset);

   ECAP_counterControl (gEcapBaseAddr、ECAP_COUNTER_FREE_RUNNING);
   ECAP_syncInOutSelect (gEcapBaseAddr、ECAP_ENABLE_COUNTER、ECAP_SYNC_IN);

   /*启用 eCAP 模块*/
   ECAP_captureLoadingEnable (gEcapBaseAddr);


但是-使用时未获得正确的结果:

       ECAP_oneShotReArm (gAcapBaseAddr);

####  假设寄存器加载###时存在延迟


       /*读取计数器值并打印最后一次迭代。 */
       cap1Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_1);
       cap2Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_2);
       cap3Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_3);
       cap4Count = ECAP_timeStampRead (gEcapBaseAddr、ECAP_CAPTURE_EVENT_4);

cap1Count 有时显示不合理的值、如200,000,000。

此外、我还希望在50% PWM 的情况下、上升沿/下降沿的值相等、但实际上并非如此、

在25%的情况下-没有与50% DC 情况非常相似的数据一致性。

另请注意、APWM_ECAP0的引脚 D18用于 Σ-Δ 时钟。

提前感谢

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

    尊敬的 Eyriel Ronen:

    我已经看了代码和这种代码似乎是好的.

    我怀疑你没有得到正确的结果,因为下面可能的情况..

    检查     CRO 中的驱动1kHz 信号并确认该信号以适当的 电压电 平正确驱动1KHz。

    而且,我不知道你是如何计算频率和占空比后得到计数值.

    对值进行计数后、用户需要对 ECAP 时钟频率(即125MHz)进行分  频、如果缺少该时钟分频 操作、则需要对 ECAP 频率进行 FRE 和占空比计算。

    另一个问题是、如果您不使用中断、那么如果您处于一个短模式、则会捕获4次采样的信号。 之后,再次喂入输入不会创建计数器的开始...

    因此、对于每个新的馈送信号以及收集样本后、您需要再次启动一个短模式、否则计数器不会给出任何结果。

    如果上述建议对您不起作用、我如何在我这边重现此问题?

    此致、

    Anil。