锂电池经过2个1M的电阻分压,P6.6引脚就接在两个电阻中间;
代码如下:
/*
ADC配置
*/
void ADC_Init(void)
{P6SEL |= BIT6;//选择P6.6作为输入;
// ADC12CTL0 &= ~ADC12ENC;ADC12CTL0 = ADC12SHT02 + ADC12REF2_5V + ADC12ON;ADC12CTL1 = ADC12SHP;// 采样保持脉冲来自采样定时器ADC12MCTL0= ADC12SREF_1+ADC12INCH_6;//选择参考电压源、现在a5通道REFCTL0 |= REFMSTR + REFVSEL_2;//使能REF管理,内部参考电压选择2.5v、打开内部参考电压REFCTL0 |= REFON;//内部基准源电压会导致整体功耗多将近180ua;所以这里选择关闭,每次使用ADC的时候开启,使用完之后关闭;__delay_cycles(75);ADC12CTL0 |= ADC12ENC;// ADC12使能
}
/*
得到电池电量的值;
*/
int Get_BatValue(void)
{float ADC_Value[20];//定义一个数组用来保存直接采到的值;float lingshi_data,ADC_total=0;int reValue;short int i=0;unsigned char j=0;for(i=0;i<20;i++){ADC12CTL0 |= ADC12SC;// 启动转换while ( !(ADC12IFG & BIT0) );// 等待转换完成ADC_Value[i] = ADC12MEM0/4096.0*2.5;}for(i=0;i<19;i++)for(j=0;j<19-i;j++){if(ADC_Value[j]>ADC_Value[j+1]){lingshi_data = ADC_Value[j];ADC_Value[j]=ADC_Value[j+1];ADC_Value[j+1]=lingshi_data;}}for(i=5;i<15;i++){ADC_total = ADC_total + ADC_Value[i];}ADC_total = (ADC_total/10);reValue = (int)ADC_total;return reValue;
}
发现这样采集到的电压值和用万用表测量出来的差了不少,而且一次采20个点,发现抖动的也比较厉害?
原因在哪里呢?
灰小子:
注意下阻抗匹配,msp430的adc阻抗好像只有几十k
TI中文支持网



