【已解决】BK431Q芯-SDK里面的ADC读取不准
Posted: 2023年 May 6日 09:29
试了三块芯片,读取的ADC值差距比较大,已经用万用表量了到单片机引脚上的电压都是一样的,如图,三块芯片ADC值最多的差了50,就是0.05V左右,我这个芯片本来就是经过缩小成五分之一再到引脚上的,实际相当于误差有0.25V,这样的误差太大了
试了三块芯片,读取的ADC值差距比较大,已经用万用表量了到单片机引脚上的电压都是一样的,如图,三块芯片ADC值最多的差了50,就是0.05V左右,我这个芯片本来就是经过缩小成五分之一再到引脚上的,实际相当于误差有0.25V,这样的误差太大了
如果对于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的参考点,如果明确知道自己的使用范围,可以更改参考点,会优化
请问校准地的通道填哪个呢,还有最后一个函数的形参应该怎么填呢calculate_adv_vol(uint16_t adc_value),填我检测出来的ADC值吗
校准参考点的电压是不是就是我要检测电量的引脚电压
你用哪个通道就校准哪个。校准参考点的电压目前需要客户自己测试GND和(1.0V)的ADC值,然后填入。
基于上面的操作,XY轴就成立了,calculate_adv_vol(uint16_t adc_value),在里面填ADC测试到的值,就能反推X的值,即真实值。
已经解决,谢谢,直接读出芯片内部基准电压对应的ADC值再比一下就可以了