ADC參考源
使用CC1310接触ADC后,有几块地方不是很明白:
1.)对于VDDS的概念不是很了解,是说输入电压不能超过4.1V吗
2.)在做ADC测试时,发现:
当我ADC引脚接地时,实际上电压是18mv,ADC值却是1056;
当我ADC引脚接3.3V时,实际上电压是3.8V,ADC值却是3342000;
当我ADC引脚接5V时,实际上电压是4.7V,ADC值却是392000;
他们之间的误差呈现这样是正常的吗
“
当我ADC引脚接5V时,实际上电压是4.7V,ADC值却是392000;
”
ADC引脚的输入超过最大允许值,会损坏芯片的。
12位的ADC 你怎么测的3342000? 转换后的电压信号?
你基准源多少,ADC Scale 功能打开了没有?
我想应该是转换后的电压信号,我是在ti提供的例程adcBufContinuousSampling做编辑
其中我没有看到ADC Scale这项指令
而测到的值是由下列函数执行没错吧
ADCBuf_convertAdjustedToMicroVolts(handle, completedChannel, completedADCBuffer, microVoltBuffer, ADCBUFFERSIZE);
但是我不知道它转换的原理方式,请专家指点一二...
逐级查看函数调用,可以找到具体的转化实现。如下
int_fast16_t ADCBufCC26XX_convertAdjustedToMicroVolts(ADCBuf_Handle handle, uint32_t adcChannel, void *adjustedSampleBuffer, uint32_t outputMicroVoltBuffer[], uint_fast16_t sampleCount) {
ADCBufCC26XX_Object *object;
uint16_t i;
uint32_t voltageRef;
object = handle->object;
voltageRef = (object->inputScalingEnabled) ? AUXADC_FIXED_REF_VOLTAGE_NORMAL : AUXADC_FIXED_REF_VOLTAGE_UNSCALED;
for (i = 0; i < sampleCount; i++) {
outputMicroVoltBuffer[i] = AUXADCValueToMicrovolts(voltageRef, ((uint16_t *)adjustedSampleBuffer)[i]);
}
return ADCBuf_STATUS_SUCCESS;
}
int32_t
AUXADCValueToMicrovolts(int32_t fixedRefVoltage, int32_t adcValue)
{
// Chop off 4 bits during calculations to avoid 32-bit overflow
fixedRefVoltage >>= 4;
return (((adcValue * fixedRefVoltage) + 2047) / 4095) << 4;
}