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:SDFM 外设 — 问题

Guru**** 2907270 points

Other Parts Discussed in Thread: TMS320F28P650DH, AM2434, C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1576191/am2434-sdfm-peripheral---questions

器件型号:AM2434
Thread 中讨论的其他器件: C2000WARESysConfig

工具/软件:

您好、  

  1. SDFM IP 是否与 C2K 系列相同?  
  2. AM24x 中的 SDFM 版本是什么? (请参阅表 3-48。  https://www.ti.com/lit/ug/spru566u/spru566u.pdf?中的 Σ — Δ 滤波器 (SDFM) 模块类型描述 ts = 1760442862279)  
  3. 是否可以在不复位 SDFM 模块的情况下动态更改 OSR?
  4. 所有与 SDFM 模块相关的软件是否可用、或者某些软件作为库提供?

此致

Geoffrey

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

    尊敬的 Geoffrey:

    我们为 SDFM 提供了固件支持。 您可以在电机控制 SDK 中找到示例工程:
    https://www.ti.com/tool/download/MOTOR-CONTROL-SDK AM243X/11.00.00.06

    有关受支持功能的信息、请参阅电机控制 SDK 文档、该文档提供了有关 SDK 中可用功能和支持的详细信息:
    https://software-dl.ti.com/processor-industrial-sw/esd/motor_control_sdk/am243x/11_00_00_06/docs/api_guide_am243x/CURRENT_SENSE.html

    关于 AM243x 上可用的 SDFM 硬件接口、请参阅 AM243x 技术参考手册 (TRM) 中的“6.4.5.2.2.3.5 Σ — Δ(SD) 抽取滤波“部分:
    www.ti.com/.../spruim2h.pdf

    此致、

    Achala Ram   

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

    尊敬的 Achala:  

    感谢链接 sot the documentation 但它没有回答我的问题. 特别是:

    1. 是否可以在不复位 SDFM 模块的情况下动态更改 OSR?
    2. 是否所有与 SDFM 模块相关的软件都可以在源文件中获得、或者某些软件以库形式提供?

    此致

    Geoffrey  

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

    尊敬的 Geoffrey:

    是否可以在不重置 SDFM 模块的情况下动态更改 OSR?

    您能否分享有关用例方面如何以及何时要更改的更多详细信息?是的、您可以在运行时更改 OSR 值而无需重置模块、但请注意、累加器和微分器仍将包含旧值。 在更改 OSR 后、所有寄存器值将需要 2-3 个样本(取决于滤波器类型)才能稳定。  

    是否所有与 SDFM 模块相关的软件都以源文件形式提供、或者有些软件以库形式提供?

    与 SDFM 模块相关的所有软件仅在 SDK 中提供。 示例位于示例文件夹中、固件和驱动程序源文件位于源文件夹中。  

     BR、

    Achala Ram

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

    您好、  

    Geoffrey 的问题符合我的需求、因此我可以完成这些问题:

    1.和 2. 例如、C2000 SDFM 有 fifo、但 PRU SDFM 似乎并非如此。 那么、您是否有 C2000 SDFM 和 AM243x PRU SDFM 之间的差异列表?

    3.我已经有关于 C2000 的这个问题(TMS320F28P650DH:动态更改 OSR - C2000 微控制器论坛 — C2000TM︎ 微控制器 — TI E2E 支持论坛)、但由于 AM243x PRU SDFM 是硬件 AD SW 的组合、答案可能有所不同。 借助 C2000、我尝试在 SDFM ISR 中更改 OSR、这会影响输出数据、但在 AM2434 上、没有发生任何事情、就好像未考虑我的新 OSR 值一样

    4、问题是关于 PRU 软件,而不是驱动程序。 SDFM 功能是否仅以二进制形式提供、或者如果我想增强源代码、是否可以拥有源代码?

    谢谢

    Gildas

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

    嗨、Gildas、

    我已经有关于 C2000 的这个问题(TMS320F28P650DH:动态更改 OSR - C2000 微控制器论坛 — C2000︎ 微控制器 — TI E2E 支持论坛)TM、但由于 AM243x PRU SDFM 是硬件和软件的组合、答案可能有所不同。 使用 C2000 时、我尝试更改 SDFM ISR 中的 OSR、这会影响输出数据、但在 AM2434 上、没有发生任何事情、就好像未考虑我的新 OSR 值一样

    您能否详细说明您使用的 SDK 版本以及如何更改 OSR 值?

    问题与 PRU 软件有关、而不是驱动程序。 SDFM 函数是否仅以二进制形式提供、或者如果我想增强它、是否可以获得源代码?

    是的、您可以增强 PRU SDFM 固件。 源文件和固件工程可在以下位置找到:`moto_control_sdk_am243x_09_02_00_11\source\current_sense\sdfm\firmware`  

    BR、

    Achala Ram

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

    尊敬的 Achala:

    好吧、C2000 SDFM 和 PRU SDFM 的功能并不相同。

    在 C2000 上、我使用 C2000Ware_6_00_00_00 和 Ware_Motor Control_SDK_5_04_00_00。 我通过 在 FIFO 级别 ISR 内调用 SDFM_setFilterOverSamplingRatio 来更改 OSR

    在 AM243 上、我使用 mcu_plus_sdk_am243x_11_01_00_17 和 motor_control_sdk_am243x_11_00_00_06。 我尝试通过 在数据就绪 ISR 内调用 SDFM_setFilterOverSamplingRatio 来更改 OSR

    感谢提供 SDFM 源代码的路径

    此致

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

    嗨、Gildas、

    在 AM243 上、我使用 MCU_PLUS_SDK_am243x_11_01_00_17 和 MOTOR_CONTROL_SDK_am243x_11_00_00_06。 我尝试通过 在数据就绪 ISR
    内调用 SDFM_setFilterOverSamplingRatio 来更改 OSR

    您能否分享一下您正在使用的示例?

    您是否还可以检查并验证是否正在更新 SDFM 寄存器值(特别是 OSR 字段)?

    寄存器地址可以在 am243x TRM 中的“ 6.4.14.5 PRU_ICSSG 寄存器“部分中找到:  ti.com/lit/ug/spruim2h/spruim2h.pdf?ts = 1761112036321&ref_url=https ps%253A%252F%252Fwww.ti.com%252Fproduct%252FAM2434

    有关如何检查寄存器的说明、请参阅调试指南:

    https://software-dl.ti.com/processor-industrial-sw/esd/motor_control_sdk/am243x/11_00_00_06/docs/api_guide_am243x/EXAMPLES_CURRENT_SENSE.html#autotoc_md114

    BR、  

    Achala.  

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

    尊敬的 Achala:

    我使用 TI 的示例 ICSS_sdfm_three_channel_with_Continuous_mode_am243x-lp_r5fss0-0_freertos_ti-arm-clang 、其中我修改了 pruSdfmIrqHandlerCh0 以在 10 次中断后添加 SDFM_setOverSamplingRatio (gHPruSdfm、SDFM_CH0124)、并在 125 次中断后添加到 125 次中断。

    我查看了寄存器 PRU_ICSSG0_PR1_CFG_SLV_PR1_CFG__SLV_REGS_pru0_sd_sample_size_reg0、该寄存器的值不受 SDFM_setFilterOverSamplingRatio 的影响。

    我已尝试在“Memory Browser“中手动更改寄存器值、  并将其考虑在内、我可以看到对滤波器输出值的影响

    Gildas

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

    您好、

    您可以共享更新后的文件吗? 您需要确保在调用之前未启用 snoop 模式并且正确初始化了 SDFM 句柄 SDFM_setFilterOverSamplingRatio

    BR、

    Achala Ram

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

    您好、

    void pruSdfmIrqHandlerCh0(void *args)
    {
        /* debug, inncrement PRU SDFM IRQ count */
        gPruSdfmIrqCntCh0++;
        /* Clear interrupt at source */
        PRUICSS_clearEvent(gPruIcssHandle, PRU_TRIGGER_HOST_SDFM_EVT_CH0);
    
        if(sdfmPruIdxCntCh0 < MAX_SAMPLES)
        {
            sdfm_ch_samples[SDFM_CH0][sdfmPruIdxCntCh0] = SDFM_getFilterData(gHPruSdfm, 0) >> 6;
    
            sdfmPruIdxCntCh0++;
        }
    
        if (sdfmPruIdxCntCh0 == 10)
        {
            SDFM_setFilterOverSamplingRatio(gHPruSdfm, SDFM_CH0, 124);
        }
        if (sdfmPruIdxCntCh0 == 20)
        {
            SDFM_setFilterOverSamplingRatio(gHPruSdfm, SDFM_CH0, 125);
        }
    }
    

    我更新了样本副本、以便在缓冲区已满而不是循环存储时停止存储样本、并添加了 OSR 值设置。

    关于监测模式、我不知道如何检查、但我已通过验证在第 463 行的 sdfm_example.c 中设置了我的默认 OSR(SysConfig 中的值)  

            if(pSdfmPrms->snoopModeEnable != 1)
            {
                SDFM_setFilterOverSamplingRatio(hSdfm, SDFM_CH, pSdfmPrms->channelPrms[SDFM_CH].filterOsr);
            }
    

    因此、监测模式被禁用

    此致

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

    嗨、Gildas、

    我检查了 OSR 配置是否由固件完成。 它在初始化序列期间执行一次性配置、因此固件不会考虑运行时所做的任何更改。 我们将修复此问题、它将在下一个版本中提供。

    作为权变措施、您可以通过 R5 内核直接写入寄存器值。

    示例:

    ``μ s

        if (sdfmPruIdxCntCh0 == 10)
        {
            //HW_WR_FIELD32(Register_address, register_field, value);
            HW_WR_FIELD32((gHPruSdfm->pruicssCfg + CSL_ICSSCFG_SDPRU0SAMPLESIZEREGISTER0 + (SDFM_CH_NUMBER * 8)),
                CSL_ICSSCFG_SDPRU0SAMPLESIZEREGISTER0_PRU0_SD_SAMPLE_SIZE0, osr_value - 1);
        }

    您可以在此处获取有关 sdfm 寄存器及其字段的详细信息: software-dl.ti.com/.../EXAMPLES_CURRENT_SENSE.html

    BR、

    Achala.  

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

    谢谢、解决方法是可以的