MSP430F6720的SD24输出噪声很大
我用MSP430F6720在设计一个采集电压的装置,但是SD24采集出来的数字跳动幅度很大(有50多万),我觉得是电路设计有问题,网络太慢原理图传不上去,可以给我留个邮箱,我发到邮箱去,谢了
亲;这种情况;与原理及PCB地线处理有关。建议原理及PCB都传一下。
SD24需要配置内部的OSR,你配置成多少?
OSR的配置还与数据有效输出位数有关,你实际上读取了多少位数据?
我的OSR是1024,时钟采用FLL的DCOCLKdiv输出,频率为1MHZ多点(FLL的DCOCLK频率大约在9MHZ=32768*299),信号输入采用OPA2335缓冲输入
我读到的位数为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中文手册吗?方便发给我一份吗?