• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

ADC校准问题

9383dab1911bec3c 2018-11-29 浏览量:1058
对芯片进行ADC校准,分别采用3.8V 和4.2V进行校准,采用一元二次方程y=ax+b,计算出a、b的值,但是用4V进行检验的时候,误差还是有40mv左右,这是什么问题导致的?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 电路上的元器件,比如电阻什么的,精度不高会产生误差;温度不一样也会产生误差,况且这么小的误差,应该影响不大。
    • 发布于 2018-11-30
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:14
  • 40mv相当于1v来说误差很小了,不必在意。

    • 发布于2018-11-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 器件误差,你给的校准电压也可能有偏差,温度也有影响的。
    • 发布于2018-11-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个误差是由于你电路上的原因吧,或是你的参数电压不稳定
    • 发布于2018-11-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 按照这个说明,使用这个自校准函数前应当使ADC处于掉电状态下,但是这样似乎就与英文的参考手册矛盾了。经过探查,方才知道ST的参考手册叙述文笔和结构编排是TM有多烂!

    依据手册介绍,我将STM32的ADC分为三种状态:掉电状态、上电状态、工作状态。

    当芯片启动运行时,ADC处于掉电状态。当第一次将ADON位设定为1时,ADC从掉电状态进入上电状态,也就是手册里说的“从掉电状态下唤醒”,这时ADON位已经为1。当我们再次设定ADON位等于1时,这时ADC会按照此时的ADC_CR1、ADC_CR2等寄存器的设置开始转换工作,也就进入了工作状态。这也就是下图红框中话的含义。
    <ignore_js_op> 

    接下来再分析HAL_ADCEx_Calibration_Start这个函数,通过一层一层查找,方知这个函数之所以要放在HAL_ADC_Start()之前或HAL_ADC_Stop()之后是因为这个函数本身就会执行将ADON置1这么一条语句。

    也就是,执行自校准时ADC必须处于前面所说的上电状态,如果ADC在工作状态下——正在转换或者进行过转换——则要将ADON位清零,使ADC关闭进入掉电状态下,之后再将ADON置1,进入上电状态,之后再校准,再之后该注入组的注入该规则组的SCAN。也就是函数的使用说明和英文版的参考手册并不矛盾,而是TMD ST根本就没把这个说清楚!

    接下来在顺便说一下为什么当ADON=1时再次设定置ADON位为1会进入工作状态(知道的就不必往下看了)

    原因就是这句话
    <ignore_js_op> 
    看过正点原子教程的应该都有这个印象,在ADC转换实验中原子将ADC_CR2的EXTSEL位设定为111,将EXTTRIG位设定为1,之后通过SWSTART位置1的方式来启动转换。其实根本不用这么复杂,只需要将ADON再置1就可以启动转换,无论这个转换是单个通道还是还是通道组,效果与软件触发方式完全一样。


    接下来再说说规则组的连续转换。
    昨天晚上一直在尝试这个,想在中断中读取多个通道的值,一直不成功,只能得到最后一个被转换通道的值,现在才发现,又TM被ST的参考手册坑!了!

    关于连续转换模式,手册里是这么说的,
    <ignore_js_op> 
    一个规则通道被转换完毕后EOC会被置位同时进入中断。

    但是,在ADC中断章节又是这么说的,
    <ignore_js_op> 
    一个通道组转换完毕后才进入中断,而非单个通道。这也就是说,当规则组采用中断方式时ADC_DR里必定放置的是最后被转换的那个通道的值。那么是不是上面那个连续转换模式的说明写错了。又前后翻了手册n遍发现不是。
    • 发布于2018-11-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 可能是你的元件有误差,电路问题,电压电流干扰等等都会引起
    • 发布于2018-11-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 1%的误差应该还是可以接受的,可以用其他仪表再比对下测量结果。
    • 发布于2018-11-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 可能芯片线性不好吧,用4v校准试试看
    • 发布于2018-12-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个还要看线路接入情况,不过40mV应该在误差范围了吧
    • 发布于2018-12-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个ADC不会是绝对的线性关系的,而且还要考虑到信号存在纹波,可能出现误差
    • 发布于2018-12-11
    • 举报
    • 评论 0
    • 0
    • 0

  • ADC的校准一般都是很精准的,这个要看看是不是干扰的问题
    • 发布于2019-01-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 主要是看你的线路误差,这个跟你的线路有关系
    • 发布于2019-01-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

ADC校准问题