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.

[参考译文] TMS320F28377S:具有 AMC1204的 SDFM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/589269/tms320f28377s-sdfm-with-amc1204

器件型号:TMS320F28377S
主题中讨论的其他器件: AMC1204、controlSUITE

我正在尝试使用 Σ-Δ 滤波器模块来测量隔离电压。 从较高的层面来看、我想读取500Hz 的电压。

我的硬件是 AMC1204和 TMS320F28377S Launchpad。

我首先想弄清楚的是如何正确连接它们。 我想连接到 GPIO58和 GPIO59以获得处理器上的第二个 SDFM (通道2)。 它们是否连接到 AMC1204的引脚6和7? 我想知道如何在 AMC1204上生成20MHz 的"调制器时钟输入"、在 F28377S 上生成"Sigma-Delta 2通道2时钟输入"。

我在 TRM 中读出 PWM12可用于同步事物、但使用什么来为芯片生成 Σ-Δ 时钟?  

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

    AMC1204有两种封装选项。 我相信您正在使用8引脚 SOIC 封装。

    AMC1204. 引脚7 (CLKIN)应该被连接至 SDFM 时钟通道
    AMC1204. 引脚6 (DATA)应该被连接至 SDFM 数据通道和
    任何 PWM 通道都可以为 AMC1204.pin7 (CLKIN 输入)提供20MHz 时钟

    有关参考原理图、请参阅 AMC1304 DS 的 PG 1。

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

    好的、太好了。 谢谢你。

    我所做的就是图58中 AMC1304数据表中提到的内容。

    我使用 EPWM11A 生成10MHz 方波、该方波将进入 AMC1204芯片上的 CLKIN 引脚和28377S Launchpad 上的 GPIO59/Launchpad 引脚14 / SD2_C2引脚。 当我从信号发生器输入电压时、我会看到数据引脚上的活动如预期的那样(当我用示波器测量它时)、但当我尝试读取28377S 中的寄存器时、我不会得到任何结果。

    这是我的代码(我将离开10MHz 方波 ePWM 初始化、因为我使用示波器测量了该代码、因此我知道它工作正常):

    1) 1)代码要初始化在启动时运行一次的 Sigma Delta 输入、我首先尝试将 GPIO58和 GPIO59配置为多路复用为输入7、该输入7应为 SD2_D2和 SD2_C2功能。 然后、我将介绍如何在处理器上配置第二个 Σ-Δ 模块... 是对还是错。

    2071.

    2072

         //初始化 GPIO

    2073

         EALLOW;

    2074

         GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 2U;

    2075

         GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 0U;

    2076.

    2077

         //GpioCtrlRegs.GPBDIR.ALL |= 0x80000;

    2078

         EDIS;

    2079

         EALLOW;

    2080

         GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 2U;

    2081.

         GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0U;

    2082年

    2083

         //GpioCtrlRegs.GPBDIR.ALL &= 0xFBFFFFFF;

    2084

         EDIS;

    2085

    2086

         //初始化 SDFM 2.

    2087

         EALLOW;

    2088

    2089

         //设置 SDMFILEN

    2090

         //设置主过滤器启用

    2091

         Sdfm2Regs.SDMFILEN.bit.MFE = 1U;

    2092年

    2093年

         //设置 SDCTLPM2

    2094

         Σ-Δ 滤波器模块的//设置模式

    2095

         Sdfm2Regs.SDCTLPARM2.bit.MOD = 0U;

    2096年

    2097

         //设置 SDDFPARM2

    2098

         //设置数据过滤器结构

    2099年

         Sdfm2Regs.SDDFPARM2.bit.st = 2U;

    2100

    2101.

         //为此启用过滤器

    2102.

         Sdfm2Regs.SDDFPARM2.bit.Fen = 1U;

    2103.

    2104.

         //将过采样率设置为(255 + 1)

    2105.

         Sdfm2Regs.SDDFPARM2.bit.DOSR = 255U;

    2106

    2107.

         //设置 SDIPARM2

    2108.

         //将数据字段的宽度设置为32位二进制补码

    2109.

         Sdfm2Regs.SDIPARM2.bit.DR = 1U;

    2110.

    2111

         //跳过设置 SDCMPH2

    2112

         //跳过设置 SDCMPL2

    2113

         //跳过设置 SDCPARM2

    2114.

         EDIS;

    2) 2)代码、以500Hz 的频率读取 Sigma Delta 寄存器、并将其写入到我将要作用域的名为"SDDATA2_Raw"的变量中。 现在、输出是纯零、因此我知道某件事情是不对的。 我知道我应该将其读取为一个 Int32、但我只是在寻找一个非零位值。

    1751.

     /*事件:':394'*/

    1752.

     

    1753.

       uint32_T * memindsrc =(uint32_T *)(&Sdfm2Regs.SDDATA2.all);

    1754.

       uint32_T*meminddst =(uint32_T*)(&RTB_MemoryCopy);

    1755

       *(uint32_T *)(meminddst)=*(uint32_T *)(memindsrc);

    1756

     

    1757.

    1758.

     /* DataStoreWrite:'/READ_SDDATA2_Raw*

    1759.

     SDDATA2_Raw = RTB_MemoryCopy;

    任何我出错的想法。 我认为我已将 Σ-Δ 信号正确地输入28377S 引脚、因为我已经在示波器上查看过它们。 我是否正确初始化 SDFM?

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

    为什么要使用位字段? TI 提供了 SDFM 驱动器、可让您的生活更轻松。

    您是否有机会了解 controlSUITE 中提供的 SDFM 示例代码?

    路径: \device_support\F2837xS\V210\F2837xS_Examples_CPU1\sdfm_files_sync_CPU

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

    您好、Manoj、

    我已经查看了控制套件中的驱动程序。 我想使用位字段、因为我希望 SDFM 中断驱动程序("Sdfm_configureInterrupt")不适用于我的应用程序、所以我想在没有驱动程序的情况下启动。

    如果可能的话、我想知道我是否可以设置 SDFM 以非常高的采样率捕获数据、然后在中断中进一步抽取数据、直到我能够以500Hz 或1000Hz 的采样率发送数据。 与以1000Hz 频率运行的 ADC 类似。

    谢谢、

    Daniel

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

    SDFM 数据速率由 SDCLK 和 OSR 控制。 这并不取决于您读取 SDFM 滤波器的速度。 必须知道 SDDATA 寄存器以(SDCLK 频率/ OSR)的速率变化。

    我相信您正试图避免中断、因为 SDFM 会非常频繁地中断 CPU。 我是对的吗?

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确。
    由于我的 SDCLK 为10MHz、OSR 为256、因此采样率为39kHz。 我想做两件事之一:
    1) 1)对来自 SDDATA 的39kHz 数据进行中断、并使用数字滤波器将其抽取至没有高于250Hz 频率内容的位置。 然后、我以500Hz 的频率读取抽取 SDDATA 变量。
    2) 2)在 AMC1204芯片的输入端放置一个模拟滤波器、该滤波器可滤除250Hz 以上的所有数据、然后以500Hz (或我选择的任何速度)的频率以异步方式读取 SDDATA、即使数据以39kHz 的频率传入也是如此。

    只要我在中断中执行的操作非常少(小滤波、甚至可以移动到 CLA)、我就可以使用中断。

    我需要帮助的是获取数据、以便从 SDDATA 寄存器中获取数据。 我认为 SDFM 未使用上面的代码正确配置。

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

    1) 1)您的 GPIO 多路复用器配置错误。

    GPIO58可配置为 SD1_D4
    GPIO59可配置为 SD1_C4

    GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 1U;
    GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 1U;

    GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3U;
    GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3U;

    2) 2)滤波器配置设置错误。 您已配置 SDFM2.Filterchannel2、而您必须配置 SDFM1.FilterChannel4 (SD1_D4 / SD1_C4)

    使用以下语句配置 SDFM1.Filterchannel4。

    Sdfm1Regs.SDCTLPARM4.bit.MOD = 0U;

    Sdfm1Regs.SDDFPARM4.bit.st = 2U;

    Sdfm1Regs.SDDFPARM4.bit.Fen = 1U;

    Sdfm1Regs.SDDFPARM4.bit.DOSR = 255U;

    Sdfm1Regs.SDIPARM4.bit.DR = 1U;


    我仍然建议您使用 SDFM 驱动器。 您只需不启用 SDFM 数据确认中断即可。

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

    您好、Manoj、

    感谢您的回答。 是否确定 GPIO58和 GPIO59用于 SDFM1通道4? 当我查看 TMS28377S 数据表的数据表时、我会看到以下内容... (GPIO58和 GPIO59是否可以配置为另一个引脚)?

    我正在努力集成 SDFM 驱动器、但在 MATLAB / Simulink 嵌入式编码器环境中、这有点不像以前那么简单。 这就是我尝试手动分配寄存器的最初原因。 这样、我就可以验证 Σ-Δ 模块是否正常工作、而不受 MATLAB 环境问题/集成外部驱动程序的问题的影响。

    Daniel

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

    我的差。 我是在研究 F280049 DS 而不是 F28377。

    忽略上面提到的 SDFM 设置语句。 但是、GPIOMUX 配置仍然正确。

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

    您好、Manoj、

    我已正确重新配置 GPIO。

    GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 1U;
    GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 1U;

    GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3U;
    GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3U;

    然后使用以下命令配置 SDFM:

    Sdfm2Regs.SDCTLPARM2.bit.MOD = 0U;
    Sdfm2Regs.SDDFPARM2.bit.st = 2U;
    Sdfm2Regs.SDDFPARM2.bit.Fen = 1U;
    Sdfm2Regs.SDDFPARM2.bit.DOSR = 255U;
    Sdfm2Regs.SDIPARM2.bit.DR = 1U;

    那么、从这里只读取 SDDATA2地址(Sdfm2Regs.SDDATA2.ALL 或0x5EA6)吗?

    当我读取该值(仅为零)时、实际上仍然没有获得任何输出。 我是否需要配置其他位来从此处"打开"SDFM? 我已经尝试启用了 MFE 位、但这对我来说没有什么影响。

    Sdfm2Regs.SDMFILEN.bit.MFE = 1U;

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

    32位格式的 SDFM2。 滤波器通道2的结果应该是从0x5EA6和0x5EA7读取

    SDFM2。 滤波器通道2的结果应该是从0x5EA7读取。

    请启用 Sdfm2Regs.SDCPARM1.bit.MFIE = 1;我想知道您是否遇到调制器时钟故障? 为了进行调试、也启用中断标志以进行数据确认、然后检查 SDIFLG 寄存器。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、检查存储器窗口中的 SDFM2寄存器以确保配置仍在进行中。 如果配置仍处于默认状态、则可能没有启用 EALLOW。

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

    您好、Manoj、

    当我查看 CCS 调试会话时、可以看到 GPIO 设置已更改、但我看到 Sdfm2Regs 中的所有零。

    我在这些语句中使用 EALLOW 和 EDIS。 您知道哪些因素会阻止 Sdfm2Regs 设置运行? 在设置 GPIO 之前、我是否需要设置这些值?

    谢谢、

    Dan

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

    您是否启用了 SDFM1和 SDFM2的模块时钟?

    这些指令启用模块时钟。
    CpuSysRegs.PCLKCR6.bit.SD1 = 1;
    CpuSysRegs.PCLKCR6.bit.SD2 = 1;

    在存储器窗口中发送 SDFM 寄存器的快照

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有这么做。 宾果游戏。 它现在正在工作!

    谢谢你。