TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MSP430 SD16 A 问题再发一帖,请大神指点

关于SD16 A折腾了好几天了,特来求助TI大神。之前我已经将SD16 A ”调通",但一些细节并没有去追究,先在面临如下一个问题:

我需要用MSP430FG479 的SD16 A测两个模拟电压,479只有channel 0通道(USER GUIDER说up to channel 6,不知哪款芯片有?),然后我选择了A2,A3两对模拟差分输入,通过定时开启每个差分输入(A2-A3)来检测两个模拟输入端(见代码A),但奇怪发现这种方法得到的结果不对,A2得到的结果和A3是一样的(A2应该比A3小一倍),A3的结果是正常的。于是我单独测试A2、A3,发现结果都对,然后我注意到了滤波器延时的问题,我选择了默认SD16INTDLY0=0,接着我分析了USER GUIDER,之前忽略滤波输出问题,经过梳状滤波器提高ADC精度(这个原理没怎么明白,大神有资料可以推荐下么?),我之前用的是默认的512过采样率,采集高16位,SD16LSBACC=0,我尝试改采样率,但结果一点都没变?(指导书里说当输出位数超过16位,需要读取两次SD16MEM0,这两个结果怎么合并得真实结果?)

//SD16 A初始化代码

void SD16A_ADC_init()
{

  SD16CTL|=SD16REFON;                                  //开启内部参考电压1.2V
  SD16CTL|=SD16DIV_3;                                    //MCLK 8分频
  SD16CCTL0|=SD16SNGL;                              //单次转换
  SD16AE|=SD16AE3+SD16AE2;                      //开启ADC2,ADC3模拟输入通道功能
  SD16CCTL0|=SD16UNI+SD16OSR_512;    //单极性输出0000-0xffffFF,先输出高16位(OSR=256,输出24位)
 }

代码A:   ADC采样函数

//输入参数SD_INCH:模拟差分通道

uint SD16A_Sample(uint SD_INCH)
{
   SD16INCTL0|=SD_INCH;  SD16CCTL0|=SD16SC;
  while(!(SD16CCTL0&SD16IFG));//等待转换结束
  return(SD16MEM0);
}

灰小子:

有本《MSP430系列单片机系统工程设计与实践》,里面对SD16讲解的比较详细,你可以参考下

liming pi:

回复 灰小子:

谢谢你的指教,详尽看了下,能解决我部分疑惑,但有两点书本也没有说清楚:

(1)关于过采样率OSR和SD16MEM0数据输出关系,书本例子:例如在OSR=256或者128,都是直接读取结果寄存器一次。这个结果就是真实的结果吗?不需要处理?

(2)关于模拟输入通道选择,只需要使用SD16INCHx来选择CH0-CH7。如第一帖中附录A程序,没有什么问题啊,但为什么在模拟通道轮流输入就会发生问题呢?

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430 SD16 A 问题再发一帖,请大神指点
分享到: 更多 (0)