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.

[参考译文] MSP-EXP430FR5994:采样率和纯正弦波

Guru**** 2617255 points

Other Parts Discussed in Thread: ENERGIA

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/668952/msp-exp430fr5994-sampling-rate-and-pure-sine-wave

器件型号:MSP-EXP430FR5994
主题中讨论的其他器件:Energia

您好!

给定 Launchpad 的默认采样率是多少?如何进行一般设置?
另一方面、如何生成纯正弦波以计算 THD 因数?
我在 Energia 工作。

此致、
ADI

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

    我假设您在参考采样率时使用的是 ADC 外设。 您是否在 Energia 中使用 AnalogRead()方法? 查看有关 AnalogRead()方法的文档,Energia 似乎实现了单次 ADC 转换,大约需要100微秒来完成(典型值)。 因此、采样率由您调用方法的速率驱动。 您可以设置计时器以建立周期性采样率。

    Energia.nu/.../

    如果您需要更确定性的时序和/或更快的性能、可能需要考虑切换到 C、而不是使用抽象的 Energia 库。

    良好的函数发生器将是开始 THD 测量的好地方。

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

    是的,我使用 AnalogRead()方法。 因此、这意味着该限制为10ksps。
    通过设置计时器,您是指使用毫秒()? 或者、您能更详细地说明一下吗?

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

    是的、Millis ()或 micros ()可用于设置一个间隔、从而为您提供稍微更具确定性的采样。

    例如、您可以使用如下所示的方法每 ms 扫描1ksps:

    unsigned long compareValue;

    compareValue = micros();
    while (1)

    compareValue += 1000;
    while (micros ()< compareValue)

    //等待

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

    考虑到我测量交流电压和电流、20ms 的周期对于我或 N x 20ms 更有趣。 因此、这意味着每个周期必须提供200个读数。 此外,我必须提供持续监控,micros()将在70分钟内溢出,而 Millis()在50天内也会溢出。 你怎么看?

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

    我看到 Energia 示例中有一个毫秒计时器示例(剪切/粘贴如下)。
    您可以对其进行修改以满足您的时序要求、并且可以在中断处理程序中调用以测量 ADC。

    /*
    使用 OneMsTaskTimer 触发的1个任务的示例程序
    循环为空、因为所有操作都在 ISR 中完成
    使用 LED 运行1个任务。

    电路:
    *连接到 VCC 的通用 LED。
    *连接到 I/O 的 LED

    此示例代码位于公共域中。

    *

    #include "OneMsTaskTimer.h"

    CONST int 心跳引脚= RED_LED;
    INT STATUS = 0;

    OneMsTaskTimer_t myTask ={5、FLASH、0、0};

    void setup(){
    //打开硬件串行端口
    PinMode (心跳引脚、输出);
    OneMsTaskTimer::add (&myTask);// 1ms 周期
    OneMsTaskTimer::start();



    void loop(){


    //中断处理程序传递给 OneMsTaskTimer
    void flash(){
    if (status){
    digitalWrite (心跳引脚、高电平);
    }否则{
    digitalWrite (心跳引脚、低电平);

    状态^= 0x0001;