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

ADC采集电源电压问题

如题。我的代码如下

uint16 adc;

HalAdcSetReference( HAL_ADC_REF_125V );

adc = HalAdcRead( HAL_ADC_CHN_VDD3, HAL_ADC_RESOLUTION_10 );

float volt = (adc*1.25*3)/512;

请问老师上面的代码正确么?我用的usb供电,为何显示的电压为3.6v?

cedar_xuesong:

/********************************************************************** @fnbattMeasure** @briefMeasure the battery level with the ADC and return*it as a percentage 0-100%.** @returnBattery level.*/
static uint8 battMeasure( void )
{uint16 adc;uint8 percent;/*** Battery level conversion from ADC to a percentage:** The maximum ADC value for the battery voltage level is 511 for a* 10-bit conversion.The ADC value is references vs. 1.25v and* this maximum value corresponds to a voltage of 3.75v.** For a coin cell battery 3.0v = 100%.The minimum operating* voltage of the CC2540 is 2.0v so 2.0v = 0%.** To convert a voltage to an ADC value use:**(v/3)/1.25 * 511 = adc** 3.0v = 409 ADC* 2.0v = 273 ADC** We need to map ADC values from 409-273 to 100%-0%.** Normalize the ADC values to zero:** 409 - 273 = 136** And convert ADC range to percentage range:** percent/adc = 100/136 = 25/34** Resulting in the final equation, with round:** percent = ((adc - 273) * 25) + 33 / 34*/// Call measurement setup callbackif (battServiceSetupCB != NULL){battServiceSetupCB();}// Configure ADC and perform a readHalAdcSetReference( HAL_ADC_REF_125V );adc = HalAdcRead( battServiceAdcCh, HAL_ADC_RESOLUTION_10 );// Call measurement teardown callbackif (battServiceTeardownCB != NULL){battServiceTeardownCB();}if (adc >= battMaxLevel){percent = 100;}else if (adc <= battMinLevel){percent = 0;}else{if (battServiceCalcCB != NULL){percent = battServiceCalcCB(adc);}else{uint16 range =battMaxLevel - battMinLevel + 1;// optional if you want to keep it even, otherwise just take floor of divide// range += (range & 1);range >>= 2; // divide by 4percent = (uint8) ((((adc - battMinLevel) * 25) + (range - 1)) / range);}}return percent;
}

请参考TI协议栈里面的Batt Profile

赞(0)
未经允许不得转载:TI中文支持网 » ADC采集电源电压问题
分享到: 更多 (0)