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.

[参考译文] LP-AM263:ECAP 占空比问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1243008/lp-am263-ecap-duty-cycle-issue

器件型号:LP-AM263
主题中讨论的其他器件:SysConfig

您好!

我的目的是读取输入 PWM 信号的频率和占空比。 当输入信号的占空比为50%时、频率被正确读取。 但是、当我将占空比设置为75%时、频率会发生变化、这与直流不同。

示例:1800hz,输入信号的 DC 为50%。 输入信号的75%时。 频率更改为3600 Hz、DC 保持不变。

我将使用以下公式来计算此参数:

   DebugP_log ("freq! %d\r\n"、1000000000/(5*(cap1Count- cap2Count)+5*(cap1Count- cap3Count));//miseconds
   DebugP_log ("Duty! %d%'%\r\n"、100*5*(cap1Count- cap2Count)/(5*(cap1Count - cap3Count)+ 5 *(cap1Count - cap4Count));

设置与 ECAP_CAPTURE_PWM 项目的设置相同。

在中断中设置了 eCAP 时间戳

静态 void App_ecapIntrISR (void *句柄)
{
   volatile uint16_t status;

   状态= ECAP_getInterruptSource (gEcapBaseAddr);

   if (status 和 ECAP_ISR_SOURCE_CAPTURE_EVENT_4)
   {
       //获取捕获计数。 每次捕获应是 ePWM 计数的4倍
       //由于 ePWM 时钟分频器。
       cap1Count = ECAP_getEventTimeStamp (gEcapBaseAddr、ECAP_EVENT_1);
       cap2Count = ECAP_getEventTimeStamp (gEcapBaseAddr、ECAP_EVENT_2);
       cap3Count = ECAP_getEventTimeStamp (gEcapBaseAddr、ECAP_EVENT_3);
       cap4Count = ECAP_getEventTimeStamp (gEcapBaseAddr、ECAP_EVENT_4);



       SemaphoreP_POST (&gEscapSyncSemObject);

   }

   返回;

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

    您好 Alex:

    我认为您的计算逻辑对于频率可能是错误的。

    您要尝试对频率执行的操作是获得信号的周期、即完成一个完整周期所需的时间。 因此、您需要同时测量高电平和低电平的持续时间、然后据此进行计算。 我将假设您的 ECAP 设置如下(通过部分过程、我意识到您可能会降低 ECAP 计数、但计数方向目前并不重要):

    考虑到这一点、您需要根据高电平信号从 ECAP1到 ECAP2的变化以及低电平信号从 ECAP2到 ECAP3的变化来计算周期。

    但是、您当前的公式如下:

      DebugP_log ("freq! %d\r\n"、1000000000/(5*(cap1Count- cap2Count)+5*(cap1Count- cap3Count));//miliseconds

    从 ECAP2到 ECAP1的增量、但从 ECAP3返回到 ECAP1的增量。

    因此、您的频率测量可能实际上都是错误的。 但是、当占空比从50%变为75%时、结果是 ECAP1-ECAP2 =-50、现在等于-75。 但是对于  两者皆可 因为频率实际上没有改变、  eCAP1-ECAP3 计算结果为  相同  结果-100。 虽然频率实际上没有发生变化、但您的计算会由于占空比的变化而报告不同的频率。

    至于差值的幅度(2倍)、我认为这要么是1800Hz 测量的伪影也是错误的、要么是由于您使用了具体的公式来放大误差。

    如果我的假设是正确的、那么将公式从 (cap1Count- cap3Count)修改为 (cap2Count- cap3Count)将防止占空比影响频率计算。

    此致、

    拉尔夫·雅各比

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

    我今天将尝试它、然后返回并提供

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

    我已根据您的建议更改了公式:

     DebugP_log ("freq! %d\r\n "、1000000000/(ecap_tick_time*(cap1Count- cap2Count)+ecap_tick_time*(cap2Count- cap3Count));//miliseconds

    现在、我看到了以下内容、但我需要看到1.8kz、而不是7.2

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

    功率损耗公式与

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

    尊敬的 Alex:

    很抱歉回复中出现了延迟、但我想用类似的工具在最后做一些测量、以确保我正确地解读了您的图像。

    我将尝试根据您展示的内容弄 清楚如何获得4倍的结果、但我并不完全清楚误差可能在哪里。

    当您更改占空比时、它是否会报告7.2kHz 的频率? 或者频率是否仍随占空比的变化而变化? 这将是检查公式是否有任何积极效果的第一个方面。

    如果它随占空比变化、这表示当前公式仅捕获波形一半的周期。 那么、问题将是实际在何处触发 ECAP 信号。

    什么是  ECAP_TICK_TIME 设置、您能分享系统时钟的频率吗?

    此致、

    拉尔夫·雅各比

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

    您好、时钟设置如下所示:

    与示例 ECAP_CAPTURE_PWM 一样、ECAP_TICK_TIME 等于5。

    经过一些测试、我得到、我的公式报告该值、

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

    结果 与上一公式相同、我使用该公式 1000000000/(ECAP_TICK_TIME*(cap1Count- cap3Count)得到

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

    您好 Alex:

    这是一个奇怪的结果... 很抱歉、我实际上一直到星期三都不在办公室。 但是、为了尝试并弄清楚此处发生了什么情况、您能否打印出以下内容:cap1Count 到 cap4Count、用于某个序列?

    我很好奇1Count 和2Count 如何比较,因为1Count 和3Count 只是信号的第一部分。

    您还是否通过示波器观察过波形有多尖锐? 基本上确保没有缓慢的转换或噪声?

    另外、您在哪个 LaunchPad 引脚上进行测量?

    希望通过这些详细信息、我们能够清楚地看到这里的问题所在。

    此致、

    拉尔夫·雅各比

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

    我将使用功能发生器使该引脚上的 PWM 信号

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


    Cap1计数! 159939
    cap2计数! 21
    cap3计数! 43
    cap4计数! 65



    Cap1计数! 43
    cap2计数! 21
    cap3计数! 43
    cap4计数! 65


    Cap1计数! 159939
    cap2计数! 21
    cap3计数! 43
    cap4计数! 65


    Cap1计数! 159939
    cap2计数! 21
    cap3计数! 43
    cap4计数! 65

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

    我们可以在星期三举行调试会话吗?

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

    尊敬的 Alex:

    抱歉、我无法通过 E2E 提供调试会话。 您发布的打印结果完全不是我期望看到的结果。 尤其是 cap1Count 为43的情况。 您能否共享您正在使用的项目? 我想在我自己的 LaunchPad 上运行它。 我可以尝试配置类似的配置、但复制您的确切设置可以让我更好地了解您的配置、如果有任何相关因素导致了此问题。

    此致、

    拉尔夫·雅各比

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

    尊敬的 Alex:

    我一直在调整 ECAP 和1800Hz 信号的一些配置、这些值与我的预期值相差甚远。

    您能否提供.syscfg 文件和 ECAP 配置?

    此致、

    拉尔夫·雅各比

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

    是的、我可以提供 SysConfig、但代码否

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

    e2e.ti.com/.../4276.dummy.zip

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

    实际上、我已经分享了所有公式和时钟配置、我不知道还可以添加哪些内容。 您能否提供您的频率测量实施方案?

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

    您好 Alex:

    感谢您的分享。 有两点更新。

    首先、我得到了这个解决方案:

    您能否提供频率测量的实施?

    以下是我在多个频率和占空比组合中测试过的公式:

            //
            // Get the capture counts.
            //
            cap2Count = ECAP_getEventTimeStamp(gEcapBaseAddr, ECAP_EVENT_2);
            cap3Count = ECAP_getEventTimeStamp(gEcapBaseAddr, ECAP_EVENT_3);
            cap4Count = ECAP_getEventTimeStamp(gEcapBaseAddr, ECAP_EVENT_4);
    
            frequencyArray[ecap1IntCount] = (200000000 / (cap2Count + cap3Count) );
            dutyCycleArray[ecap1IntCount] = ( cap3Count / (cap2Count + cap3Count) ) * 100;
    

    我还没有找到,但我认为第4场比赛可以停止。 我不使用该计数来获取频率和占空比结果。

    我打印从应用程序而不是 ISR 中写入结果。

    编辑: 我还应解释... 200000000是 ePWM 源时钟、它是系统时钟。 捕获计数基于边沿之间发生的时钟周期数、因此使用两个后续读数可获得信号的高电平和低电平部分。 然后、组合值是信号的测量周期、因此您只需将源时钟值与计数值相除即可获取信号频率。

    对于占空比、cap3Count 反映信号为高电平时的周期、这就是应该用作占空比计算的分子的值。

    最后、我将所有这些变量设置为  浮点 为了执行浮点计算而不进行任何截断。 如果不按照编写的方式使用浮点数、占空比公式会损坏(不过快速修复 方法是先将 cap3Count 乘以100、然后执行除法过程)。

    示例:

    计算频率:25009.378906
    计算得出的占空比:75.003120

    cap1Count! 159939
    cap2计数! 21
    cap3计数! 43
    cap4计数! 65[/报价]

    与您的 SysConfig 相比、现在回过头来看看这些结果、我认为您正在以1800Hz 的频率馈送快得多的信号。 我将您发送给我的 SysConfig 与我自己进行了比较、发现与 ECAP 方面的差异可以忽略不计。 但在 ePWM 方面、看起来 ePWM 明显更快、因为它只有10个时基周期。

    此致、

    拉尔夫·雅各比

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

    您还能否共享您的 SysConfig?

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

    您好 Alex:

    当然可以! 请参见随附的。

    e2e.ti.com/.../6746.example.syscfg

    此致、

    拉尔夫·雅各比

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

    您好、我已经尝试过您的设置、它比以前要好得多。 但仍然不是我想拥有的东西。

     我在逻辑分析仪上看到的。

    结果差异很大、并不反映实际设置。 这就是我得到的结果。

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

    更多结果

    BTW 您使用的振幅是多少、在本例中是3伏?

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

    尊敬的 Alex:

    是的、我使用的是3伏电压。

    这些结果是否源于在 EPWM9引脚上使用连续信号并不停地运行 ECAP? 或者频率是否发生变化? 如果变化幅度多大、在多长时间间隔内变化?

    我之前试过很多频率和占空比、但没有看到这样的问题、因此我希望确保能够更好地复制信号的确切条件、看看我是否可以观察到相同的情况。

    我可能无法在星期一之前进行测试、但希望提前知道、这样我就可以在星期一上午安排测试的优先级。

    此致、

    拉尔夫·雅各比

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

    测试过程中频率始终相同。 请参见波形图片。 1.25kHz、40%直流和3V 振幅。 我使用了您的 ePWM 和 ECAP 配置。

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

    您好 Alex:

    今天、我安排了一项更长的测试、以1250Hz、40%占空比、3.3V 信号长时间运行 ECAP 采集、并且未观察到任何明显的测量变化。

    在本测试中、我使用了外部信号、而不是 AM263模块的 EPWM、但我确实对来自 AM263的 EPWM 的50%占空比1250 Hz 信号进行了简短测试。

    您在哪里计算和打印结果? 我的代码被设置为不在 ISR 中打印结果、以尽量缩短代码执行所花费的时间。 此外、是否对变量使用浮点值来读取计数并存储计算值?

    如果您使用的是相同的设置、我很想知道为什么我们看到的结果差别如此大。 只是想想想什么软件相关的差异可能会影响这一点。

    此致、

    拉尔夫·雅各比

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

    大家好、我正在使用以下代码、它在50ms 的 FreeRTOS 周期性 taske2e.ti.com/.../3733.ecap.c 内连续运行

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

    请将我的实施与您的实施进行比较。 如果我错了,请给我发短信。

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

    如果可能、您还可以分享您的示例

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

    尊敬的 Alex:

    感谢您发布代码。 我会更详细地介绍它、但乍一看、与我的相比、似乎没有什么是不合适的。  

    我的示例中的代码如下所示、最初作为  ecap_capture_no_pwm_am263x-lp_r5fss0-0_nortos_ti-arm-clang 启动

    e2e.ti.com/.../ecap_5F00_capture_5F00_pwm.c

    此致、

    拉尔夫·雅各比

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

    尊敬的 Alex:

    如前所述、我无法获得与执行周期性任务时相当的 FreeRTOS。 如果您可以帮助提供专门用于周期性任务创建的 FreeRTOS 配置、以及将 ECAP 任务插入 FreeRTOS、那么我可以很好地实施相同的配置并进行测试。

    此致、

    拉尔夫·雅各比