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.

[FAQ] [参考译文] [常见问题解答] MSP430I2020:测量 SD ADC 噪声

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/719413/faq-msp430i2020-measuring-sd-adc-noise

器件型号:MSP430I2020
主题中讨论的其他器件:MSP-TS430RHB32A

工具/软件:TI C/C++编译器

测试条件:

- MSP-TS430RHB32A 板

-增益1

-测量结果= 10数据平均值

-示例程序"sd24_ex4_singleConversionSingleChannelPolling"

-电源电压:3.3V (Tenma 72-10480直流电源)

我已经测试了24位 ADC 功能并捕获了数据。

但是 、即使将 A0和 A1的引脚短接、我也会发现有很多噪声。 (结果随附)

最大电压= 0.00017767 V、最小电压。 = 0.000158358

差动 电压。 = 19.3uV

此致、

洪先生

e2e.ti.com/.../short_5F00_Tenma3V3.xlsx

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

    您是否在输入信号上使用了 DMM 或示波器以确保输入端不存在噪声?

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

    我已使用电池(Duracell AA)重新测试、27条记录的电压为12uV。 我可以改进一下吗?

    e2e.ti.com/.../bat_5F00_SHORT_5F00_GAIN4_5F00_2.xlsx

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

    您是否再次检查以确保噪声不是由输入信号引起的?

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

    是,由于 A0、A1短接在一起、因此它应该是相同的电压。

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

    抱歉、我将 A0+和 A0-短接在一起。 (不是 A0和 A1)

    此外 ,我还使用 Agilent 34401A 6/1/2数字万用表检查输入源的变化仅为3uV。 不应测量如此大的 ADC 振动

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

    Hung、您好、

    您是否在以下主题中看到了我的后续内容、即如何将 ADC 测量结果转换为电压?

    此外、您观察到的是 ADC 的 rms 噪声和19uV 也不奇怪。 如我在上面的线程中所述、如果通过软件过采样对样本求平均值、则可以获得更好的结果。 例如、如果采样频率为4000Hz、在 SD24 ISR 中、您可以保持样本的运行总和、然后将其除以样本数。 假设您每4个采样平均一次。 这将为您提供1000Hz 的有效采样率、但应有助于降低 rms 噪声。 它基本上是在软件中完成的低通滤波器。 我将其称为软件过采样、因为它不是 SD24模块的硬件过采样(OSR)。

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

    对于上述测量结果、我已经 取10个样本平均值。  它是否可以添加可以 减少数量的电路或组件 数量 ?

    洪先生

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

    您是否能够解决此不准确性问题? 如果您使用目标板对样本求平均值并读取所有24位数据、那么您应该能够实现我观察到的结果。

    此致、

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

    使用10个采样平均值后、我无法获得您的结果。 当我输入75mV 进行测试时、 52个样本的振动范围为34uV (非常大)。

    此致

    挂起

    e2e.ti.com/.../75mv.xlsx

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

    Hung、您好、

    我要附上我用于此测试的代码。 使用16的软件过采样(或平均)因数、我使用 i2041目标插座板在 Σ-Δ ADC 通道0 (A0.0+和 A0.0-短接)上的100个采样之间实现了小于10uV 的噪声。 我暂停 while (1)函数处的代码、将"Results[]"数组添加到 CCS 中的"Watch"窗口中、将该数组复制到 Excel 中、从样本中减去偏移(我使用双极格式)、然后转换为电压。 然后、我找到噪声值的最大差值。

    msp430i20xx_sd24_03_modified_for_sw_oversing.c

    /*-版权所有-、BSD_EX
    *版权所有(c) 2013、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430i20xx 演示- SD24,单通道上的连续转换
    //
    说明:此程序使用 SD24模块在
    单通道上执行连续//转换。 当一个转换
    //完成时、一个 SD24中断发生。
    //
    //通过向输入通道施加电压并在
    指定行设置断点//进行测试。 运行程序直到它到达断点、然后使用
    //调试器的观察窗口来查看转换结果。
    //
    ////结果(仅限高16位)存储在数组中"结果"
    //
    // ACLK = 32kHz,MCLK = SMCLK =校准后的 DCO = 16.384MHz,SD_CLK = 1.024MHz
    //*确保编译/运行此示例时包含 low_level_init.c *
    //
    注意: 有关 SD24模块所需的最小 Vcc -请参阅数据表
    // 使用1.2V ref 时、建议使用100nF 电容 btw Vref 和 AVss
    //
    // MSP430i20xx
    // --------
    // /|\| |
    // || |
    // -|RST |
    // | |//
    Vin1+->|A0.0+ VREF |-+
    // Vin1-->|A0.0- ||
    // | |-+- 100nF
    // | |-+-
    // | ||
    // | AVss |-+/// T.Witt
    
    
    // Texas Instruments、Inc
    // 2013年9月
    //使用 Code Composer Studio v5.5构建
    //*********
    #include "msp430.h"
    
    /*用于存储 SD24转换结果的数组*/
    volatile int j、index = 0;
    volatile unsigned long sum = 0;
    unsigned long results[100]; //运行平均值的最终结果
    
    //定义*/
    #define SW_over_s采样 因子 16
    
    /* main 函数*/
    void main (void){
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    SD24CTL = SD24REFS; //内部参考
    SD24INCTL0 = SD24GAIN_1; //在通道0上设置增益
    SD24CCTL0 |= SD24IE; //启用中断,OSR = 256 (默认值)
    
    _delay_cycles (3200); //对于1.2V 基准电压稳定、延迟~200us
    
    SD24CCTL0 |= SD24SC; //将位设置为开始转换
    _bis_SR_register (GIE); //启用中断
    
    while (1){ //无延迟循环,在此处设置断点或暂停
    }
    }
    
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=SD24_vector
    __interrupt void SD24_ISR (void)
    #elif defined (__GNU__)
    void __attribute__((interrupt (SD24_vector))) SD24_ISR (void
    
    编译器#else!
    #endif
    {
    长温度= 0;
    开关(__evo_in_range (SD24IV、SD24IV_SD24MEM3)){
    案例 SD24IV_NONE:break;
    案例 SD24IV_SD24OVIFG:中断;
    案例 SD24IV_SD24MEM0:
    
    //捕获 ADC 数据
    SD24CCTL0 &=~SD24LSBACC; //清除 LSBACC 位
    温度= SD24MEM0; //读取 SD24MEM0的高16位
    SD24CCTL0 |= SD24LSBACC; //设置 LSBACC 位
    temp = temp*256 +(SD24MEM0&0xff);//读取 SD24MEM0的低16位,与高位组合在一起
    
    //执行软件过采样
    sum+= temp; //将结果添加到运行总和
    J++;
    if (j >= sw_over_s采样 因子){//计算和存储平均值
    results[index+]= sum/sw_over_sing_factor;
    总和= 0;
    J = 0;
    }
    
    if (index >= 100){
    索引=0;
    }
    中断;
    案例 SD24IV_SD24MEM1:中断;
    案例 SD24IV_SD24MEM2:中断;
    案例 SD24IV_SD24MEM3:中断;
    默认值:break;
    }
    } 

    此致、

    James

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

    感谢您的代码!
    由于我们的工作电压需要用于测量0V 至450mV 的范围、因此增益16无法根据我们的特殊要求测量450mV。 (在我的设置中,我选择增益= 2)

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

    Hung、

    我很抱歉造成混淆。 我的代码中的因数16是平均采样数(在软件端)。 我将对硬件样本求和、然后在捕获了一定数量的样本后报告平均结果(此处为16)。 我的代码实际上使用的增益值为1 (在硬件侧)。 这有道理吗?

    此致、

    James