我用MSP430F6720在设计一个采集电压的装置,但是SD24采集出来的数字跳动幅度很大(有50多万),我觉得是电路设计有问题,网络太慢原理图传不上去,可以给我留个邮箱,我发到邮箱去,谢了
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采集出来的数字跳动幅度很大(有50多万),我觉得是电路设计有问题,网络太慢原理图传不上去,可以给我留个邮箱,我发到邮箱去,谢了
我的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接在一起了,当时我接在一起时就犯嘀咕。
断开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的放大倍数不影响输出噪声的结果,所以我怀疑是抽取滤波器出了问题
转换结果的计算需要根据 SD24DFx 和 SD24ALGN 这两个寄存器,具体请参考 用户手册 Table 29-3. Data Format Example for OSR = 256
肯定不是代码的问题,你既然能读出数据来那就说明程序没问题,这款芯片本身失调就比较大,你要是把失调去掉,你就会发现噪声其实也不是很大,注意多平均几次就好了
我是利用函数发生器作为模拟交流电输入,当我把输入去掉后,在IAR监测窗口中仍然能测到数据,而且变化也很大。。不知这是什么问题,方便将代码发给我吗?谢谢了。。
你好,我想问下怎么去掉失调,这个问题之前没有听说过,在英文手册里也没有看到。谢谢了,请问你有MSP430中文手册吗?方便发给我一份吗?