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.

[参考译文] MSP430F6779:有助于在 EVM430F6779 上实现≥6000 S/s 的采样率、以进行电压和电流测量

Guru**** 2609895 points
Other Parts Discussed in Thread: MSP430F6779

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1575424/msp430f6779-help-achieving-6000-s-s-sampling-rate-on-evm430f6779-for-voltage-and-current-measurement

器件型号:MSP430F6779


工具/软件:

大家好:

我目前在本科生论文项目中使用 EVM430F6779 评估板、需要测量高达 50 次谐波的电压和电流。 为了实现这一点、我知道我需要大约 6000 个样本/秒的最低采样频率、理想情况下、我希望将其提高一点、以获得出色的测量分辨率。

问题是、我不确定需要修改代码或配置的哪些部分才能达到该采样率。 我一直在浏览emeter-setup.c和等文件emeter-structs.h、认为可能需要调整设置、例如过采样率 (OSR)、SD24_B 模块配置或采样率定义。 不过、我对于哪些参数专门控制最终采样率、或者如何在不中断其余计量功能的情况下正确调整这些参数并不充满信心。

有人能指导我完成正确的步骤或最佳实践、以便在 MSP430F6779 平台上将采样率提高到至少 6000 S/s(或更高,如果可能)? 非常希望能就我应该重点介绍哪些寄存器、定义或代码部分提供任何建议。

非常感谢您的帮助!

— 胡安·阿博莱达

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

    SD24 中使用的 sinc 滤波器的频率响应在通带中并不是平坦的。 这意味着 谐波会衰减。 多少钱? 您必须进行数学计算并确定它是否可以接受。

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

    您好、David、感谢您对 sinc 通带的关注不是平坦的。 现在我不关注这种衰减;我将在稍后对其进行量化并决定是否需要进行补偿。

    我尝试实现的是≥6kS/s、理想情况下为 8192S/s、可以轻松分析 60Hz 系统上高达 50 次谐波 (3kHz) 的频率。 据我了解、在 MSP430F6779 的 SD24_B 上、采样率根据以下公式设置:

    • Fs = FM/OSR、其中
      FM(调制器时钟)由 SMCLK 使用 SD24SSELx / SD24PDIVx / SD24DIVx、和产生
      OSR 通过 SD24BOSRx 为每个通道设置。

    我的计划是通过以下两种方式之一获得 FS = 8192 S/s:

    选项 A(最少更改):

    • 保持现有的调制器时钟(典型演示设置具有 SMCLK→SD24_B 预分频、因此 FM = 2.097152MHz)。

    • 在我使用的通道(即)上设置 OSR = 256SD24BOSR = 256 - 1

    • 这可得出 Fs = 2.097152MHz / 256 = 8192S/s。

    选项 B(如果我真的希望 OSR = 128):(我正在尝试使用这个选项)

    • 将调制器时钟降至 FM = 1.048576MHz(例如,调整 SD24PDIVx 和/或 SD24DIVx)、

    • 保持 OSR = 128、这也会导致 FS = 1.048576MHz / 128 = 8192 S/s

    • 如果不改变 Fm、OSR=128 会使我达到~16.384 KS/s、这是我不想达到的。

    我计划代码中的以下内容:

    • 在中emeter-setup.c

      • 设置SD24BOSR为 256-1(或保持 128-1、但随后根据选项 B 降低 FM)。

      • 确认 SD24_B 时钟源/预分频器 (SD24SSELx/SD24PDIVx/SD24DIVx) 与上述目标 FM 匹配。

      • 在原始捕获期间使用单通道转换(而不是组)来简化时序和缓冲。

      • 考虑SD24INTDLYx我是否确实启动/停止以使 sinc 稳定。

    • emeter-structs.h(以及它引用的任何位置)中:

      • 设置#define SAMPLE_RATE 8192#define SAMPLES_PER_10_SECONDS 81920ul该位、以便计量代码中的任何块计数器/计时器跟踪新速率。

    操作(非实时流式传输):

    • 一次捕获一个通道、原始数据为 1 秒(8192 个样本)(我将存储 16 位以减小大小)。

    • RAM 中的缓冲区并以页面大小的块刷写到闪存;1s ~16 位总计为@ 16KB。

    • 然后通过我现有的 DL/T645 链接在块中下载这些样本(我重复使用现有的闪存上传命令和分块逻辑)、并 THD 在 PC/RPi 上处理 FFT/RPI/FP。

    • 我知道 sinc 通带衰减会略微偏置更高的谐波;我将暂时停止、并在需要时稍后纠正。

    您(或任何人)能否确认以上是此平台上的正确方法?
    具体问题:

    1. SD24SSELx / SD24PDIVx / SD24DIVx 是否确实是我唯一需要的旋钮(除了 SD24BOSRx)来确定 SD24_B 的 Fm(从而确定 FS)?

    2. 在更改 FS 时、我应该重新访问任何其他 SD24_B 寄存器(对齐,PGA 增益,基准,中断延迟,转换启动模式)?

    3. 在 TI 演示堆栈上、是否有与原始采样率(例如,4096 S/s)相关的 FIR/相位校正表或假设、当移至 8192 S/s 时应重新生成这些信息?

    4. 对于 DL/T645 上传、是否有任何最佳做法来增加每帧的有效负载、或者将小块固定块粘在最安全的路线上?

    非常感谢任何指导!

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

    您好、David、感谢您对 sinc 通带的关注不是平坦的。 现在我不关注这种衰减;我将在稍后对其进行量化并决定是否需要进行补偿。

    我尝试实现的是≥6kS/s、理想情况下为 8192S/s、可以轻松分析 60Hz 系统上高达 50 次谐波 (3kHz) 的频率。 据我了解、在 MSP430F6779 的 SD24_B 上、采样率根据以下公式设置:

    • Fs = FM/OSR、其中
      FM(调制器时钟)由 SMCLK 使用 SD24SSELx / SD24PDIVx / SD24DIVx、和产生
      OSR 通过 SD24BOSRx 为每个通道设置。

    我的计划是通过以下两种方式之一获得 FS = 8192 S/s:

    选项 A(最少更改):

    • 保持现有的调制器时钟(典型演示设置具有 SMCLK→SD24_B 预分频、因此 FM = 2.097152MHz)。

    • 在我使用的通道(即)上设置 OSR = 256 SD24BOSR = 256 - 1

    • 这可得出 Fs = 2.097152MHz / 256 = 8192S/s。

    选项 B(如果我真的希望 OSR = 128):(我正在尝试使用这个选项)

    • 将调制器时钟降至 FM = 1.048576MHz(例如,调整 SD24PDIVx 和/或 SD24DIVx)、

    • 保持 OSR = 128、这也会导致 FS = 1.048576MHz / 128 = 8192 S/s

    • 如果不改变 Fm、OSR=128 会使我达到~16.384 KS/s、这是我不想达到的。

    我计划代码中的以下内容:

    • 在中 emeter-setup.c

      • 设置 SD24BOSR 为 256-1(或保持 128-1、但随后根据选项 B 降低 FM)。

      • 确认 SD24_B 时钟源/预分频器 (SD24SSELx/SD24PDIVx/SD24DIVx) 与上述目标 FM 匹配。

      • 在原始捕获期间使用单通道转换(而不是组)来简化时序和缓冲。

      • 考虑 SD24INTDLYx 我是否确实启动/停止以使 sinc 稳定。

    •  emeter-structs.h (以及它引用的任何位置)中:

      • 设置 #define SAMPLE_RATE 8192  #define SAMPLES_PER_10_SECONDS 81920ul 该位、以便计量代码中的任何块计数器/计时器跟踪新速率。

    操作(非实时流式传输):

    • 一次捕获一个通道、原始数据为 1 秒(8192 个样本)(我将存储 16 位以减小大小)。

    • RAM 中的缓冲区并以页面大小的块刷写到闪存;1s ~16 位总计为@ 16KB。

    • 然后通过我现有的 DL/T645 链接在块中下载这些样本(我重复使用现有的闪存上传命令和分块逻辑)、并 THD 在 PC/RPi 上处理 FFT/RPI/FP。

    • 我知道 sinc 通带衰减会略微偏置更高的谐波;我将暂时停止、并在需要时稍后纠正。

    您(或任何人)能否确认以上是此平台上的正确方法?
    具体问题:

    1. SD24SSELx / SD24PDIVx / SD24DIVx 是否确实是我唯一需要的旋钮(除了 SD24BOSRx)来确定 SD24_B 的 Fm(从而确定 FS)?

    2. 在更改 FS 时、我应该重新访问任何其他 SD24_B 寄存器(对齐,PGA 增益,基准,中断延迟,转换启动模式)?

    3. 在 TI 演示堆栈上、是否有与原始采样率(例如,4096 S/s)相关的 FIR/相位校正表或假设、当移至 8192 S/s 时应重新生成这些信息?

    4. 对于 DL/T645 上传、是否有任何最佳做法来增加每帧的有效负载、或者将小块固定块粘在最安全的路线上?

    非常感谢任何指导!

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

    首先、复制您的帖子不会有任何帮助。 没有答复并不是因为没有人能看到它。

    我知道 sinc 通带衰减会略微偏置更高的谐波;

    奈奎斯特频率下、–12dB 是“轻微的“?

    将这与截断结果相结合、我预测大多数谐波将消失。

    我不知道 DL/T645 协议是什么或它的限制。 但通过使用 DMA、捕获数据应该几乎不需要 CPU 周期。 让它们以流式方式输出数据。 只要该通道足够快、您就应该能够连续执行此操作。

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

    你好大卫,对不起重复的帖子。 我误以为我是在回应我自己,而不是你。

    在您关于正弦通带不是平坦的注意事项之后、我绘制了 SINC³ μ s 频率响应。 OSR = 32 时、目标频带内的衰减看起来非常低。 不过、我这样做时假设调制器时钟设置为 FM=FS×OSR。 在 当前设置中、我取 FS=4096 S/s 、OSR =256(就像在电表结构和电表设置中一样)、因此 FM=1,048,576 Hz。 我在 slaa577g 演示代码中似乎找不到的是 FM 是明确配置的(即 SD24SSELx / SD24PDIVx / SD24DIVx 路径)、因此我对我的假设是正确的不是 100%有把握。 如果您可以指出调制器时钟在代码库中设置的确切位置(或确认预期的 Mf_Mf)、我真的很感激。

    此外、在今天与我的顾问和员工讨论后、我们决定使用 DMA 将样本移出、这完全是出于您提到的原因(尽量减少 CPU,持续进行流式传输)。 不过、我对 MSP430F6779 上连接此器件的最干净方法有点不确定。 如果您有指导、我将非常感激—例如、从 SD24_B 触发使用哪个 RS、您是否建议SD24BMEMx将乒乓(双缓冲器)方案馈入环形缓冲器、以及您在以~8 kS/s× 16 位通过 UART/DMA-232 将数据推出时遇到的任何陷阱。

    再次感谢推动 sinc 响应。我将量化通带损耗、并决定在锁定此代码中的确切 FM /FS 路径后是否需要进行补偿。

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

    OSR 与 SINAD/ENOB 性能直接相关。 (数据表中的图 5-17。) OSR= 32 是一个可怕的想法,如果你有兴趣的谐波会很小。

    我没有关于推动 MSP430 SD24/DMA 性能的经验。 我已经从 MPU9250 (32KSPS) 进行了高速率采集并录制到 SD 卡。 相同的想法,但非常不同的细节。

    (经过编辑,以参考数据表而不是指南。)

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

    您好、David—快速跟进、感谢您抽出宝贵的时间。

    1. 您能详细说明一下为什么这是一个坏主意吗? 我会发现、低 OSR 会损害 SINAD/ENOB、而 Δ V 压降 sinc³ 用不了、但我想看看您看到的关键失效模式(例如,谐波实际上会“消失“而只是读取低电平)。

    2. 如果我将 OSR 固定为 128、您是否认为这足以捕获小谐波、或者您强烈建议跳到 256?

    3. 假设我保持高 OSR,而是通过增加调制器时钟 fOSR.M 来提高采样率 Mf_Mf ,在 Mf_Mf slaa577g 代码中确切地配置了 fOSR.M ? 我正在寻找设置 SD24SSELx / SD24PDIVx / SD24DIVx 的特定线路(我会相应地将 SD24BOSRx 设置为 128−1 或 256−1)。 该文件是在emeter-setup.c (SD24_B INIT) 和hal_UCS.c(时钟树)之间拆分的、还是集中在一个位置?

    4. 最后、您是否知道 MSP430F6779 SD24_B→DMA→UART/SD 的良好 DMA 示例/线程? 一个显示 SD24_B 的 DMAxTSEL 映射和简单乒乓缓冲器的链接将提供很大帮助。

    非常感谢指导—您的笔记帮助我摆脱了错误的权衡。

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

    对于#1、谐波的振幅通常会随着频率的增加而减小。 到了 50 岁,你的目标,他们是微小的。 但您知道或应该知道您需要测量的级别。 (我当然不会。) 该要求设置所需的 SINAD。

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

    好的、谢谢。

    我还有一个问题、David。

    我遵循文档“使用 MSP430F677x (A) 实现三相电子电度表“中概述的步骤、当我尝试打开和编译基本工程时、几个文件会出现以下错误。 我已经编译了这个文件在另一台计算机上,它的工作没有任何修改。 我不知道为什么它不会让我在这台计算机上执行全部重建。

    我该怎么办?