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.

MSP430F6720的SD24输出噪声很大

Other Parts Discussed in Thread: MSP430F6720, OPA2335, OPA335, MSP430F6736

我用MSP430F6720在设计一个采集电压的装置,但是SD24采集出来的数字跳动幅度很大(有50多万),我觉得是电路设计有问题,网络太慢原理图传不上去,可以给我留个邮箱,我发到邮箱去,谢了

  • 亲;这种情况;与原理及PCB地线处理有关。建议原理及PCB都传一下。

  • SD24需要配置内部的OSR,你配置成多少?

    OSR的配置还与数据有效输出位数有关,你实际上读取了多少位数据?

  • 我的OSR是1024,时钟采用FLL的DCOCLKDIV输出,频率为1MHZ多点(FLL的DCOCLK频率大约在9MHZ=32768*299),信号输入采用OPA2335缓冲输入

    新建文件夹.zip
  • 我读到的位数为31位(包括一个符号位),输入信号在1.2V(差分)是达到最大值,为1073741823,在-1.2V时为1073741823的补码,按说满幅时候应该是对的。

    +0000552452-------------+0000028167
    +0000497502-------------+0000038753
    +0000547978-------------+0000023694
    +0000547662-------------+0000023377
    +0000572420-------------+0000048137

    上面是我用串口打印出的数据,左边是SD24_0的数据,两个输入端我接到一起了;右边是SD_1的数据,的两个输入端我全部接地

  • 0通道和1通道之间的差别怎么那么大?!两个通道内部的配置是一样的吗?

    你的输入接地是在OPA2335之前还是之后呢?是不是运放的偏置引起的问题?

    你有没有实际计算过这两个结果实际相差多少mV?

  • 我是在OPA2335前面接在一起的,应该不是偏置问题,我测量的OPA335的输出为0.6V,结果理论上应该是差几百微伏,我万用表是三位半的,测不到uV电压。

    会不会是因为VASYS和VDSYS这两个管脚的问题,我把这两个管脚分别与AVCC与DVCC接在一起了,当时我接在一起时就犯嘀咕。

  • 建议断开OPA335跟SD24之间的连接,直接将SD24的输入短路并连接到地,看看这两个通道的结果分别是什么,并换算成实际电压看看是多少uV!

  • 断开OPA2335并输入短路接地后还是原来那么大,应该是600uV左右,都快上毫伏了,下面是打印出来的数据,以前那个通道1弄错了,和通道0的一样

    +0000658598-------------+0000658598
    +0000658890-------------+0000658890
    +0000667396-------------+0000667396
    +0000580294-------------+0000645830

  • 对了,再说一下我AD的配置,采用双通道多次转换模式,完成后中断,时钟采用32768倍频299次后,在8分频,得到1.2MHZ的频率,供给SD24。下面是AD的配置程序:

    extern void ADC_Initializer()
    {
    SD24BCTL0 = SD24SSEL_1; // Select SMCLK as SD24_B clock source
    SD24BCCTL0=SD24DF_1+SD24SCS_4+SD24SNGL;
    SD24BOSR0=1023; //oversampling ratio 1024

    SD24BCCTL1=SD24DF_1+SD24SCS_4+SD24SNGL; //channel1设置为单次转换
    SD24BOSR1=1023; //oversampling ratio 1024
    SD24BIE = SD24IE0+SD24IE1; // Enable channel 1 interrupt

    }

    #pragma vector=SD24B_VECTOR
    __interrupt void SD24BISR(void)
    {
    static uint ADC_Read_Counter=0;
    static long Temp_Sum=0;
    long Temp=0;
    switch (SD24BIV)
    {
    int i;
    case SD24BIV_SD24OVIFG: // SD24MEM Overflow
    break;
    case SD24BIV_SD24TRGIFG: // SD24 Trigger IFG
    break;
    case SD24BIV_SD24IFG0: // SD24MEM0 IFG
    i=SD24BMEML0;
    Pipe_Voltage=(((long)SD24BMEMH0)<<16)+i;

    break;
    case SD24BIV_SD24IFG1: // SD24MEM1 IFG
    i=SD24BMEML0;
    Battery_Voltage=(((long)SD24BMEMH1<<16)+i);
    break;
    }
    }

  • 还有个现象,我将通道0输入切换到ManchesterDecoder(将调制器关闭),通道1保持正常输入,结果串口打印结果变成如下:

    -1073807361-------------+0000655359
    -1073807361-------------+0000655359
    -1073807361-------------+0000655359
    -1073807361-------------+0000655359
    -1073807361-------------+0000655359

    好像通道1也受到影响了,但是若要是将通道1切换到ManchesterDecoder,通道0保持正常输入,则通道0不受通道1影响,如下:

    +0000608546--------------1073788638
    +0000521522--------------1073810126
    +0000611120--------------1073786064
    +0000518928--------------1073812720
    +0000605984--------------1073791200
    +0000612820--------------1073784364

    我这里的负值是原来结果取反加一后的结果

  • 有个神奇的发现,SD24BMEMH0一直都是9这个数字,SD24BMEML0基本上是随机数,PGA的放大倍数不影响输出噪声的结果,所以我怀疑是抽取滤波器出了问题

  • 额。。。。怎么没人回话了

  • 这个ADC内部的SD24的失调电压还是蛮大的: 2.3mV @ PGA=1:

  • 转换结果的计算需要根据 SD24DFx 和 SD24ALGN 这两个寄存器,具体请参考 用户手册 Table 29-3. Data Format Example for OSR = 256

  • 嗯,确实是,终于找着问题了,失调还好说,我测量噪声也有20uV大小,也只好将就的用了,勉强满足设计要求。以后一定要好好看手册,引以为鉴。谢谢了啊

  • 楼主你好,我在用MSP430F6736来做电压采集时也遇到了同样的问题,经过SD24_B得到的电压值变化很大,能麻烦您把代码发给我吗?邮箱:sharizh@163.com

    谢谢了。

  • 肯定不是代码的问题,你既然能读出数据来那就说明程序没问题,这款芯片本身失调就比较大,你要是把失调去掉,你就会发现噪声其实也不是很大,注意多平均几次就好了

  • 我是利用函数发生器作为模拟交流电输入,当我把输入去掉后,在IAR监测窗口中仍然能测到数据,而且变化也很大。。不知这是什么问题,方便将代码发给我吗?谢谢了。。

  • 代码不方便发给你,公司的东西,不好拿出来,不好意思

  • 你好,我想问下怎么去掉失调,这个问题之前没有听说过,在英文手册里也没有看到。谢谢了,请问你有MSP430中文手册吗?方便发给我一份吗?