问题:我想使用P0_4作为电压检测引脚,检测2530芯片自身的供电电压,请问我以下的步骤是否正确?
#define HAL_ADC TRUE
void read_voltage( void )
{
uint16 voltage = 0;
P0SEL |= BV(4);
P0DIR &= ~BV(4);
HalAdcInit();//adcRef = HAL_ADC_REF_VOLT;
voltage = HalAdcRead( HAL_ADC_CHANNEL_4, HAL_ADC_RESOLUTION_14 );
printf( "voltage is %d %d\r\n", HI_UINT16[voltage], LO_UINT16[voltage]);
}
得出的打印值为 0x0F,0xFF;用万用表测出的电压值为2.9v。请问是哪里出了问题?
gaoyang9992006:
你要知道你的参考电压是多少,如果高于参考电压,得到一个满量程的值那是不足为怪的。
gaoyang9992006:
查找头文件
#define HAL_ADC_REF_VOLTHAL_ADC_REF_AVDD
有以上定义,根据你的配置,你用VDD作为参考,去检测VDD,当然是结果满量程了,这说明没问题的。
如果你想检测自身的实际电压,你需要找到一个确定已知的稳定电压作为参考。
gaoyang9992006:
所以你测量的结果是没问题的,你可以再将该端口接地测一下,应该是0,然后弄个可变电阻接到VDD和GND之间,测量触点滑动的变化,肯定是没问题的。
user6069081:
回复 gaoyang9992006:
你好,当我用一下配置时打印的数值为0x03,0xff
void Read_Voltage( void ) {uint16 adc_value = 0;P0SEL |= BV(4);//外设功能P0DIR &= ~BV(4);//置0为输入APCFG |= 0x10;HalAdcSetReference(HAL_ADC_REF_125V);adc_value = HalAdcRead( HAL_ADC_CHANNEL_4, HAL_ADC_RESOLUTION_12 );printf( "Voltage is %x %x\r\n", HI_UINT16(adc_value), LO_UINT16(adc_value) ); }
gaoyang9992006:
回复 user6069081:
你这次测的还是那个2.9V的电压?你最好一次多测一个数据,同一个配置测至少三个数据:GND,VCC,0.5VCC。这样才好判断啊。
Viki Shi:
提供一个网上的例子供参考: www.cnblogs.com/…/6159338.html
gaoyang9992006:
回复 user6069081:
另外你被测量的电压应该在0到参考电压之间比较妥当,如果较大,可以通过分压后测量。
user6069081:
回复 gaoyang9992006:
测量接地脚确实是测得0x0000;然后我用稳压电源输出0.5v到测量脚,测得的数值为0x0225,参考电压为HAL_ADC_REF_125V,采样精度为HAL_ADC_RESOLUTION_12,测量的数值好像不精确啊。
TI中文支持网