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.
关于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);
}