【求助】BK3431-SDK的ADC读取不准
Posted: 2023年 Apr 21日 08:42
adc_init初始化后,adc_get_value取值,ADC读取不准,偏大很多
adc_init初始化后,adc_get_value取值,ADC读取不准,偏大很多
您好。BK3431Q芯片平台的ADC是10位的,采样范围在 init_analog_xvr_reg() 函数中配置。
我们提供的sdk已根据不同版本芯片(D/G版本)设定不同的采样范围,关系如下:
对于D版本芯片,0x00对应的是0V,0x3FF对应1.2V;
对于G版本芯片,0x00对应的是0V,0x3FF对应1.0V;
对应的换算,通过adc_ger_value读取adc值后,通过下面的公式换算成Vadc值。
D版本:Vadc=(1.2 * adc ) / 1023,单位:v
G版本:Vadc=(1.0 * adc) / 1023,单位:v
此时可用Vadc与用工具测量测点电压值比较下是否存在误差。
如外部电路有对应分压,按比例再换算成最终值。
抱歉,经查adc_get_value这个函数,有个地方不对(对adc结果多做了移位操作),调整成如下即可:
Code: Select all
uint16_t adc_get_value(void)
{
uint16_t adc_cnt;
adc_cnt=0;
adc_flag =0;
REG_APB7_ADC_CFG |= SET_ADC_EN+(0x01 << BIT_ADC_MODE );
while (!adc_flag)
{
adc_cnt++;
if(adc_cnt>300)
{
//UART_PRINTF("g_adc_value_timeout\r\n");
break;
}
Delay_us(10);
}
if(adc_flag==1)
{
g_adc_value=(REG_APB7_ADC_DAT);
//UART_PRINTF("g_adc_value=%x\r\n",g_adc_value);
}
REG_APB7_ADC_CFG &= ~(SET_ADC_EN+(0x03 << BIT_ADC_MODE )); //ADC值读取完成后必须把使能位清除
return g_adc_value;
}