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.
Hi All,
我用MSP430F6721内部的ADC测量主电源AVCC的电压,发现有0.04~0.06v的偏差,
AVCC real | ADC | Diff |
2.194 | 2.256 | 0.062 |
2.162 | 2.225 | 0.063 |
2.121 | 2.176 | 0.055 |
2.116 | 2.168 | 0.052 |
2.238 | 2.274 | 0.036 |
2.293 | 2.278 | -0.015 |
2.318 | 2.348 | 0.03 |
2.395 | 2.436 | 0.041 |
2.396 | 2.41 | 0.014 |
2.43 | 2.463 | 0.033 |
2.48 | 2.52 | 0.04 |
3.139 | 3.171 | 0.032 |
3.137 | 3.167 | 0.03 |
但是如果我把电压切换到辅助电源AUXVCC1 (3v), 这时候再来测AVCC电压,是非常准的。
不知为何, 请大侠指教。
附检测电压的代码:
float get_vccVoltage(void)
{
int i = 0;
int count = 0;
long lAdcVal = 0;
float voltage=0;
float averageVol = 0;
REFCTL0 |= REFMSTR | REFON;
ADC10CTL0 = ADC10SHT_8 + ADC10ON;
ADC10CTL1 = ADC10SHP;
ADC10CTL2 |= ADC10RES |ADC10SR;
ADC10MCTL0 = ADC10SREF_1 + ADC10INCH_12;
ADC10CTL0 |= ADC10ENC;
AUXADCCTL = AUXADC;
for (i = 0; i < 3; i++)
{
while(ADC10CTL0 & ADC10BUSY);
ADC10CTL0 |= ADC10ENC;
ADC10CTL0 |= ADC10SC; //start convert
while (ADC10CTL1 & ADC10BUSY)//(!(ADC10IFG & ADC10IFG0))
{
count++;
_NOP();
}
lAdcVal = ADC10MEM0;
lAdcVal = lAdcVal*CAL_ADC_GAIN_FACTOR/32768 + CAL_ADC_OFFSET;
if (lAdcVal <=0)
lAdcVal = 0;
_NOP();
voltage = (float)1.5*3 * lAdcVal/1023;
//lcd_display((int)(voltage * 1000));
//lcd_display((int)(lAdcVal));
POWER_PRINTF(printf("temp: %u, vol:%f\n", lAdcVal, voltage));
averageVol += voltage;
}
REFCTL0 = REFTCOFF;
ADC10CTL0 = 0;
AUXADCCTL = 0;
ADC10MCTL0 = 0;
return (averageVol/3);
}
Thanks,
Asky