先看看程序
osal_pwrmgr_device(PWRMGR_ALWAYS_ON);
APCFG = 0xFF; P1 = 0x01;//设置P1_0口为高电平
P1DIR |= (1<<0);//设置端口输出状态
P1INP |= (1<<0);//while P1 in input mode,the port state is 3-state HalAdcSetReference(HAL_ADC_REF_AVDD);
// // SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR_SENSOR_12, SIMPLEPROFILE_CHAR_SENSOR_LEN, SENSOR_SendData12);
// // SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR_SENSOR_34, SIMPLEPROFILE_CHAR_SENSOR_LEN, SENSOR_SendData34);
// // SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR_SENSOR_56, SIMPLEPROFILE_CHAR_SENSOR_LEN, SENSOR_SendData56);
SENSOR_SendData[0]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_7, HAL_ADC_RESOLUTION_14)<<3)); //将14bit数据统一转换为16bit,方便以后扩展,<<3是因为其输出最高位为符号位,恒为0,。sunming
SENSOR_SendData[1]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_6, HAL_ADC_RESOLUTION_14)<<3));
SENSOR_SendData[2]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_5, HAL_ADC_RESOLUTION_14)<<3));
SENSOR_SendData[3]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_4, HAL_ADC_RESOLUTION_14)<<3));
SENSOR_SendData[4]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_3, HAL_ADC_RESOLUTION_14)<<3));
SENSOR_SendData[5]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_2, HAL_ADC_RESOLUTION_14)<<3));
SENSOR_SendData[6]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_1, HAL_ADC_RESOLUTION_14)<<3));
SENSOR_SendData[7]=(0xFFFF-(HalAdcRead(HAL_ADC_CHANNEL_0, HAL_ADC_RESOLUTION_14)<<3));
osal_pwrmgr_device(PWRMGR_BATTERY);
只要加了
osal_pwrmgr_device(PWRMGR_BATTERY);这一句,AD采集就不准确了,P1_0配置高电平无效。但是想控制功耗必须要运行此句。
有什么办法可以保证ADC采集的准确吗?
gs Fong:
采集AD的话,必须要是要再高功耗模式下,才能采集吗??
da qin zheng sheng:
进入PM3,PM2,PM1后ADC应该停止工作的!
gs Fong:
回复 da qin zheng sheng:
不是你说这个问题
我采集ADC前先关闭电源省电管理osal_pwrmgr_device(PWRMGR_ALWAYS_ON);
采集完后再打开。但是这么做会发现ADC采集会有问题。
测试得功耗一直保持在0-2mA,而且测试模拟I/O引脚的电压也不正确。
正常来说如果正确的话,能看到电流表从12mA到0-2mA一个转变。
我的P1_0脚是作为模拟I/O口的电源电压。
gs Fong:
回复 da qin zheng sheng:
主要是我先配置P1_0 为高电平后,测它电压正确来说应该是约3.3V的。
但是我发现只要调用 osal_pwrmgr_device(PWRMGR_BATTERY); 这个语句后。
这个引脚就会变为低电平了。导致会采集不准确。这个是什么原因呢?
有TI员工帮忙解答下吗???