ADC芯片的校准

有些DAC芯片中有校准用的寄存器(offset、gain),比如AD5764,而有些ADC芯片则没有,比如ads8689,那么就需要进行人为校准了。其实ads8689的线性度还是非常好的。
校准的时候需要ADC芯片对DAC芯片的输出进行测量,并将反馈结果记录在表中。通过excel中的折线图也可以对比看它们的线性度,之后利用python或者其他语言进行一元线性回归,即可求出k和b的值。
在这里插入图片描述
adc列是未校准的测量数据,meter列是高精度万用表的测量数据(以此为准),dac列则是校准过offset与gain寄存器的输出电压,现在通过python就可以很快的求出斜率跟截距了。公式就是最小二乘法。

import pandas as pd
import os
X = []
Y = []

def get_data(file_name):
    global X, Y
    data = pd.read_csv(file_name)
    X = data['adc'].values
    Y = data['meter'].values

if __name__ == '__main__':
    proj_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))     # 获取上级路径,这里根据个人需求自行修改
    file_path = proj_path + r'\Fluke8845A_V1\dist\LCC1_Volt_Test Thu Sep  3 10_34_49 2020.csv'
    get_data(file_path)
    Xsum = 0.0
    X_2sum = 0.0
    Ysum = 0.0
    XY = 0.0
    n = len(X)
    for i in range(n):
        Xsum += X[i]
        Ysum += Y[i]
        XY += X[i] * Y[i]
        X_2sum += X[i]**2
    k = (Xsum * Ysum / n - XY) / (Xsum**2 / n - X_2sum)
    b = (Ysum - k * Xsum) / n
    print('y = %f*x + (%f)' % (k, b))

最后将k与b带入到adc芯片的测量函数中就行了。

float ADS8689_Analog_Digital(void)
{
	static uint16_t temp;
	static double x;
	const float w = 3.0;
	if (mutex == 0)
	{
		memset(receive, 0, sizeof(receive));
		VOLT_OR_TEMP = 1;
		CLK_SysTickDelay(100);
		ADS8689_ReadWrite(ADS8689_NOP, 0x00, 0x0000);
		ADS8689_ReadWrite(ADS8689_NOP, 0x00, 0x0000);
		temp = ((uint16_t)receive[0] << 8) + receive[1];
		x = (float)((((temp - 32768) * range) * reference_voltage) / 65536);
		x *= w;
		if (PD10 == 1)	// channel A
		{
			x = ((x * 0.999232) - 0.000520363);
		}
		else 
		{
			x = ((x * 0.999240) - 0.000354834);
		}
		VOLT_OR_TEMP = 0;
		mutex = 1;
	}
	return x;
}

在这里插入图片描述
最后可以看到,校准后adc与meter之间的误差是很小的,比未校准之前效果好了很多。(这里单位都是mv)

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32ADC校准是指对STM32系列中的模数转换器(ADC)进行校准操作。校准操作是为了确保ADC的准确性和稳定性,在使用ADC进行数据采集时,可以得到更准确的结果。 根据引用中提到的内容,STM32系列中的一些MCU支持额外的校准模式,如共模校准和差分共模校准。这些模式可以在使用校准函数HAL_ADCEx_Calibration_Start时通过额外的参数进行选择。 根据引用中的说明,ADC校准是指通过对ADC的某些参数进行调整,来消除ADC的误差。ADC校准可以提高ADC的准确性和稳定性,特别是在精密测量和控制应用中非常重要。 在STM32中,使用HAL库的校准函数可以进行ADC校准操作。根据引用中的描述,调用HAL ADC校准函数可能会遇到问题。为了解决这个问题,需要参考相关文档和资料,查找正确的调用方法和参数设置。 综上所述,STM32ADC校准是对STM32系列中的ADC进行准确性校正的操作,可以通过HAL库提供的校准函数进行调用。具体的校准方法和参数设置,可以根据具体的芯片型号和应用需求来选择和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32L0 ADC使用HAL库关于校准问题的说明](https://blog.csdn.net/weixin_42328389/article/details/129518720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值