0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【笔记】提高ADC精度的4种方法(附代码)

撞上电子 2023-06-09 09:38 次阅读

1. 参考电压不准确:

-使用外部参考电压:将外部参考电压连接到芯片的参考电压引脚,确保参考电压的稳定性和准确性。例如,连接一个精密参考电压芯片,如LM4040,来提供稳定的参考电压。

-校准参考电压:通过测量实际参考电压并校准内部参考电压的偏差来提高准确性。首先,使用一个已知准确的参考电压源进行测量,然后将测量结果与期望值进行比较,并校准相应的参数,如内部参考电压的缩放系数。

示例代码:

//使用外部参考电压HAL_ADCEx_InjectedReferenceVoltageConfig(&hadc1,ADC_EXTERNALTRIGCONV_T1_CC1,ADC_INJECTED_RANK_1,ADC_EXTERNALTRIGINJECCONVEDGE_RISING,VREF_EXT);// 校准参考电压float measuredVref = measureExternalReferenceVoltage(); // 测量实际参考电压float expectedVref = getExpectedReferenceVoltage(); // 获取期望参考电压float vrefCalibrationFactor = expectedVref / measuredVref; // 计算校准因子HAL_ADCEx_Calibration_SetValue(&hadc1,ADC_SINGLE_ENDED,ADC_CALIB_OFFSET,vrefCalibrationFactor);//应用校准因子

2. 输入信号干扰:

-硬件滤波:在输入信号线上添加低通滤波器电路,以滤除高频噪声和干扰。这可以通过在输入信号线和地之间添加电容器来实现。滤波器的截止频率应根据应用的要求进行选择。

-软件滤波:使用软件滤波算法对采样数据进行滤波处理。常用的软件滤波算法包括移动平均滤波、中值滤波等。根据应用的实际需求,选择适当的滤波算法来平滑采样数据。

示例代码:

//硬件滤波ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = ADC_CHANNEL_1;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;sConfig.Offset = 0;HAL_ADC_ConfigChannel(&hadc1, &sConfig);// 软件滤波(移动平均滤波)#define FILTER_LENGTH 5uint32_t adcSamples[FILTER_LENGTH];uint32_t filteredValue = 0;
void filterADCValue(uint32_t newValue) { // 移动平均滤波 for (int i = FILTER_LENGTH - 1; i > 0; i--) { adcSamples[i] = adcSamples[i - 1]; filteredValue += adcSamples[i]; } adcSamples[0] = newValue; filteredValue += adcSamples[0]; filteredValue /= FILTER_LENGTH;}

3. 参考电压和输入信号之间的共模干扰:

-差分输入采样:使用差分输入模式进行采样,以抵消共模干扰。这需要使用带有差分输入的ADC芯片,并正确配置和连接差分输入信号。

-屏蔽共模干扰:在输入信号线和地之间添加屏蔽层,以减少共模干扰的影响。

示例代码:

// 差分输入采样ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = ADC_CHANNEL_DIFFERENTIAL_1_2;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;sConfig.Offset = 0;HAL_ADC_ConfigChannel(&hadc1,&sConfig);
// 屏蔽共模干扰ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel = ADC_CHANNEL_1;sConfig.Rank = 1;sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;sConfig.Offset = 0;sConfig.OffsetNumber = ADC_OFFSET_NONE;sConfig.OffsetSign = ADC_OFFSET_SIGN_POSITIVE;sConfig.OffsetShift = ADC_OFFSET_SHIFT_NONE;HAL_ADC_ConfigChannel(&hadc1,&sConfig);

4. ADC参考电压的稳定性:

-稳压器和滤波电容:使用稳压器和合适的滤波电容,以提供稳定的参考电压。选择低噪声、高稳定性的稳压器,并根据参考电压的负载要求选择合适的滤波电容。

-温度补偿:对参考电压进行温度补偿,以校正温度变化对参考电压的影响。通过使用温度传感器监测芯片的温度,并根据温度补偿曲线进行校准。

示例代码:

// 稳压器和滤波电容//在电路中使用低噪声、高稳定性的稳压器,并根据参考电压的负载要求选择合适的滤波电容。
// 温度补偿float measuredVref = measureExternalReferenceVoltage(); // 测量实际参考电压float expectedVref = getExpectedReferenceVoltage(); // 获取期望参考电压float vrefCalibrationFactor = expectedVref / measuredVref; // 计算校准因子float temperature = measureTemperature(); // 测量芯片温度float temperatureCompensation = getTemperatureCompensation(temperature); //计算补偿值
float calibratedVref = measuredVref * vrefCalibrationFactor * temperatureCompensation; // 根据校准因子和温度补偿计算校准后的参考电压setReferenceVoltage(calibratedVref); // 设置校准后的参考电压

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    95

    文章

    5651

    浏览量

    539479
  • 电压
    +关注

    关注

    45

    文章

    5082

    浏览量

    114416
收藏 人收藏

    评论

    相关推荐

    adc的参考电压与转换结果的精度有何关系

    的定义、影响精度的因素以及提高精度方法。 首先,让我们回顾一下ADC的基本原理。ADC是一种电子设备,用于将模拟信号转换为数字信号。它是现
    的头像 发表于 12-28 10:42 969次阅读

    详述ADC精度和分辨率的差异

    在与使用模数转换器(ADC)的系统设计人员进行交谈时,我最常听到的一个问题就是: “你的16位ADC精度也是16位的吗?” 这个问题的答案取决于对分辨率和精度概念的基本理解。尽管
    发表于 12-20 06:55

    高速ADC的特征测试和生产测试方法评估笔记

    电子发烧友网站提供《高速ADC的特征测试和生产测试方法评估笔记.pdf》资料免费下载
    发表于 11-27 10:28 1次下载
    高速<b class='flag-5'>ADC</b>的特征测试和生产测试<b class='flag-5'>方法</b>评估<b class='flag-5'>笔记</b>

    单片机串口发送数据很慢?这种方法帮助你提高

    单片机串口发送数据很慢?这种方法帮助你提高
    的头像 发表于 11-02 17:43 1006次阅读
    单片机串口发送数据很慢?这<b class='flag-5'>种方法</b>帮助你<b class='flag-5'>提高</b>!

    如何提高AT32的ADC转换精度

    如何提高AT32的ADC转换精度设计者在使用AT32芯片ADC模块时,提供注意事项和软、硬件的设计建议。
    发表于 10-24 07:36

    ADC输入内阻不配情况下提高ADC准确度方法

    ADC输入内阻不配情况下提高ADC准确度方法
    发表于 10-19 07:39

    C8051F007单片机内部的12位ADC如何提高精度

    C8051F007单片机内部的12位ADC ,如何提高精度
    发表于 10-17 08:11

    C8051F007单片机内部的12位ADC如何提高精度

    C8051F007单片机内部的12位ADC ,如何提高精度
    发表于 10-16 14:04

    如何在STM32F10xxx上得到最佳的ADC精度

    的设计密切相关。本文旨在帮助用户了解ADC误差的产生,以及如何提高ADC精度,包含以下2个部分:● 介绍了与ADC设计相关的,诸如外部硬件
    发表于 10-10 06:26

    如何在STM32系列器件获取最佳的ADC精度

    了解与ADC相关的误差以及影响它们的参数。ADC精度不仅取决于ADC性能和功能,还取决于ADC周围的整体应用设计。此应用
    发表于 08-31 10:47 0次下载

    了解 ADC 代码错误率

    随着高速模数转换器(ADC)采样率的提高ADC输出数据中的代码错误(也称为闪烁代码)问题也随之增加。
    的头像 发表于 08-17 15:09 646次阅读
    了解 <b class='flag-5'>ADC</b> <b class='flag-5'>代码</b>错误率

    芯片功能测试的五种方法

    芯片功能测试常用5种方法有板级测试、晶圆CP测试、封装后成品FT测试、系统级SLT测试、可靠性测试。
    发表于 06-09 16:25

    是否有一种方法可以使用Arduino的代码块IDE与ESP MCU一起工作?

    你知道是否有一种方法可以使用 Arduino 的代码块 IDE 与 ESP MCU 一起工作?Code Blocks 是一个非常好的轻量级 IDE,已经适用于几乎所有的 Arduino 开发板。
    发表于 06-09 08:35

    过采样:提高ADC信噪比巧妙方法

    一般来说,我们可以提高ADC采样位数来提高ADC的信噪比,但是往往意味着ADC的成本可能也会更高。有没有不
    发表于 06-02 10:44 983次阅读
    过采样:<b class='flag-5'>提高</b><b class='flag-5'>ADC</b>信噪比巧妙<b class='flag-5'>方法</b>

    7种方法教您怎么进步电感Q值

    7种方法教您怎么进步电感Q值 7种方法教您怎么进步电感Q值电感Q值指的是电感质量因素,一般来说,电感Q值从十几到几百的都有。近日小编接到来自山东,江西,江苏等省份多个仪器外表及检测行业的客户发来
    发表于 05-19 15:08