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

Adc采样电压

问题:我想使用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,测量的数值好像不精确啊。

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