【已解决】BK431Q芯-SDK里面的ADC读取不准

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


Post Reply
15179276401
Posts: 49

试了三块芯片,读取的ADC值差距比较大,已经用万用表量了到单片机引脚上的电压都是一样的,如图,三块芯片ADC值最多的差了50,就是0.05V左右,我这个芯片本来就是经过缩小成五分之一再到引脚上的,实际相当于误差有0.25V,这样的误差太大了

Attachments
1683336253937.png
TripleJay
Posts: 49

Re: BK431Q芯-SDK里面的ADC读取不准

如果对于adc采样精度要求较高的话建议软件层面上校准参考电压,并换算实际采样电压

Code: Select all

#define CALIB_COUNT 16
static uint16_t calibrate(uint8_t ch){
    uint32_t calib_temp=0;
    adc_init(ch,0);
    for(int i=0;i<CALIB_COUNT;i++)
    {
        calib_temp += adc_get_value(ch,1);
        Delay_us(1000);
    }
    return calib_temp/16;
}
static uint16_t REF_G;
static uint16_t REF_V;
#define REF_VOL 1.0
//选择校准地的通道
void calibrate_gnd(uint8_t ch){
    REF_G=calibrate(ch);
}
//选择校准参考点电压的通道
void calibrate_ref_1v(uint8_t ch){
    REF_V=calibrate(ch);
}

float calculate_adv_vol(uint16_t adc_value){
    return ((adc_value-REF_G)*REF_VOL)/(REF_V-REF_G);
}

例子为0-1V的参考点,如果明确知道自己的使用范围,可以更改参考点,会优化

15179276401
Posts: 49

Re: BK431Q芯-SDK里面的ADC读取不准

请问校准地的通道填哪个呢,还有最后一个函数的形参应该怎么填呢calculate_adv_vol(uint16_t adc_value),填我检测出来的ADC值吗

15179276401
Posts: 49

Re: BK431Q芯-SDK里面的ADC读取不准

校准参考点的电压是不是就是我要检测电量的引脚电压

TripleJay
Posts: 49

Re: BK431Q芯-SDK里面的ADC读取不准

你用哪个通道就校准哪个。校准参考点的电压目前需要客户自己测试GND和(1.0V)的ADC值,然后填入。
基于上面的操作,XY轴就成立了,calculate_adv_vol(uint16_t adc_value),在里面填ADC测试到的值,就能反推X的值,即真实值。

15179276401
Posts: 49

Re: BK431Q芯-SDK里面的ADC读取不准

已经解决,谢谢,直接读出芯片内部基准电压对应的ADC值再比一下就可以了

Post Reply