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

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

3天内不再提示

关于ADC数值标定转换为物理量数值的方法

GReq_mcu168 来源:今日头条 作者:今日头条 2022-05-26 15:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

处理器经过模数转换得到数值之后,需要经过进一步的转换得到表征真实物理量的数值。

得到了物理量数值,就可以进行显示,故障判断等操作。

我们需要找到从模数转换数值到物理量之间的转换关系;

比如,用14位的ADC对市电电压进行采样,得到了某个数据,该数据并不是电压值,而需要经过转换关系得到电压值。

如果传感器信号处理电路的线性度都比较好,可以在整个测量范围内采用线性关系进行转换,如下:

a033c832-dcbb-11ec-ba43-dac502259ad0.png

a0423bba-dcbb-11ec-ba43-dac502259ad0.jpg

ADC与物理量的线性关系

x为ADC读到的数值,y为物理量的数值,比如电压值、电流值、温度值、压力值等等。

有两个问题需要注意:

1) k,b的数值从何而来

2) 单片机如何转换

一、k, b数值的确认

我通常采用三种方法来确认k、b数值:

1)正向推导,根据传感器、信号处理电路的线性关系推导得到:

以下图的三相线电压测量电路为例:

a04f3450-dcbb-11ec-ba43-dac502259ad0.png

三相线电压测量电路

电压互感器的参数为:

初次级的变比:1mA:1mA

初级限流电流为:400kΩ;

次级线圈电阻为:17Ω;

次级采样电阻为:100Ω;

运放组成的处理电路的参数为:

放大倍数:47/(4.7+0.1//0.017)=9.969。

根据这些参数,假设相电压的真有效值为U,按照下面步骤推导:

  • 初级电流为a056d57a-dcbb-11ec-ba43-dac502259ad0.png

  • 次极输出电压=次极电流*100//4700=

a05e8f22-dcbb-11ec-ba43-dac502259ad0.png

  • 运放输出电压=次极输出电压*放大倍数

a06f2832-dcbb-11ec-ba43-dac502259ad0.png

  • 单片机读到的14位ADC的数值=

a080d708-dcbb-11ec-ba43-dac502259ad0.png

  • ADC与线电压的关系为:

a08d6734-dcbb-11ec-ba43-dac502259ad0.png

  • 进一步得到:

a09e5120-dcbb-11ec-ba43-dac502259ad0.png

  • 为了减少量化误差,提供精度,我们对换算得到的电压保留一位小数,当用整数来表示需,需要扩大10倍,得到:

a0b0fc1c-dcbb-11ec-ba43-dac502259ad0.png

从而得到了ADC与扩大10倍的线电压之间的线性转换关系,其k=3.302264,b=0;

2)分段线性化以及最小二乘法确认转换关系

在另一篇文章中详述。

二、 单片机如何转换

当我们得到ADC数值与物理量之间的线性转换关系:

a033c832-dcbb-11ec-ba43-dac502259ad0.png

我们需要在程序中将物理量计算出来。

低端的单片机都没有硬件浮点数计算能力,即使是32位的cortex-M0/cortex-M3内核的处理器(如STM32F0xx以及STM32F1xx系统处理器)也没有硬件浮点数计算能力。

当我们通过浮点数进行转换运算时,会消耗大量的时间。

我的做法是,将k转变为整以一个整数后再除以另一个整数,

而对物理量保留小数点,利用扩大整10倍的整数进行存储时,b可以直接四舍五入为整数;

即:

a0c4d7c8-dcbb-11ec-ba43-dac502259ad0.png

,其中,M、N、b都是整数。

在STM32F103的处理器上,我做了一些测算:

采用64MHz的时间频率,

计算65535次的浮点数转换的耗时为:164ms。

单次运算耗时为:2.5us。

转化为整数乘除运算,计算65535次耗时为:20ms。

单次运算耗时为:0.31us。

当转为整数运算时,可能会扩大舍入误差。

我的做法是,根据整数M、N的位数取大数,比如16位的数。

如果k小于1,则将N固定为65535。

M=round(k*65535)。

如果k大于等于1,则将M固定为65535。

N=round(65535/k)。

在上例中,k=3.302264,则M=65535,N=round(65535/3.302264)=19845。

const STRConfigCalDef g_pt_calvoldefs[PT_VOLTAGE_NUM] =
{
{65535, 19845, 0},
{65535, 19845, 0},
{65535, 19845, 0}
};
U16  pt_calval(U16 val, U16 pm, U16 pn, signed int pk,){
U32 uwDataA;
signed int uwDataB;
U16 resval;
uwDataA = (U32)val * pm;
if(pn == 0){
pn = 1;
}
uwDataA = (U32)val * pm;
uwDataA = (U32)uwDataA / pn;
uwDataB = (signed int)uwDataA;
uwDataB = uwDataB + pk;
if(uwDataB < 0){
uwDataB = 0;
}
  if(uwDataB > 65535){
uwDataB = 65535;
}
resval = (U16)uwDataB;
return(resval)
}

a0d21f46-dcbb-11ec-ba43-dac502259ad0.jpg

转为整数运算的转换算法

审核编辑 :李倩


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

    关注

    2573

    文章

    54372

    浏览量

    786074
  • adc
    adc
    +关注

    关注

    100

    文章

    7397

    浏览量

    553805
  • 数值
    +关注

    关注

    0

    文章

    80

    浏览量

    14684

原文标题:ADC数值标定转换为物理量数值的方法及注意事项

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是参比电流?数值大小对电能表有什么影响?

    计量检定时的一个参数值,用作误差检测、精度校准的一个数值
    的头像 发表于 12-05 10:15 269次阅读
    什么是参比电流?<b class='flag-5'>数值</b>大小对电能表有什么影响?

    简仪科技高密度多物理量自动化测试解决方案

    用户采用先进的微纳工艺从事太赫兹集成器件科研和开发。在研发中经常需要进行繁复的高密度多物理量测量。用户采用传统分立仪器测试的困难在于高度依赖实验人员经验,缺乏标准化、自动化试验平台。
    的头像 发表于 10-18 11:22 1046次阅读
    简仪科技高密度多<b class='flag-5'>物理量</b>自动化测试解决方案

    数字电压表设计教程之模数转换原理分析

    自然界中的物理量,例如压力、温度等都是模拟,要对这些物理量进行控制和检测,就需要一种能在模拟信号与数字信号之间起转换作用的电路——模数转换
    的头像 发表于 08-26 16:16 4015次阅读
    数字电压表设计教程之模数<b class='flag-5'>转换</b>原理分析

    数字电路—15、数值比较器

    数值比较器:能够比较数字大小的电路。
    发表于 03-26 14:16

    TLV5616数据转换过程中当数字量为奇数值时写不进去或着转换不出模拟,怎么解决?

    1、TLV5616存在数据间隔转换 2、 数据转换过程中当数字量为奇数值时写不进去或着转换不出模拟的问题! 芯片工作外围:5v (VCC
    发表于 02-14 08:12

    ADS1118转换热电阻电桥信号,但是转换数值不断变化,没有稳定的数值,为什么?

    我用ADS1118转换热电阻电桥信号,大概0.3V左右的电压。使用的命令字为0x058B,其他的0x048B,0x058A,0x058E都用过,但是转换数值不断变化,没有稳定的数值
    发表于 02-08 07:45

    ADS1248增益设1之外的数值时,转换结果不对是哪里出了问题?

    我采用的是差分输入,其中一个输入端接地,当PGA=1时,ADS的转换结果正确切基本只有后8位在跳动,但是将增益设为其它数值时,转化结果就不对.不断提高 增益到128,转化结果会一直增大,但是不满足
    发表于 02-07 06:41

    请问如何用Verilog实现将ascaii码数值字符串转换成定点数?

    我需要接收一个ascaii码字符串,内容是12位有效数字的数值,带小数。我不知道怎么把小数部分转换成定点数。
    发表于 01-23 21:57

    一文看懂ADC转换过程

    1、A /D转换的一般步骤和取样定理模拟量到数字量的转换过程: 取样:把时间连续变化的信号变换为时间离散的信号。 保持:保持取样信号,使有充分时间将其变为数字信号。 取样定理: 量化和编码:  量化
    的头像 发表于 01-23 17:43 2976次阅读
    一文看懂<b class='flag-5'>ADC</b><b class='flag-5'>转换</b>过程

    ADS1158如何在自动扫描模式下,用通道读命令,顺序读取通道转换数值

    ADS1158如何在自动扫描模式下,用通道(寄存器格式)读命令,顺序读取通道转换数值,我现在无论是采用脉冲命令方式还是START为HIGH转换的方式读取的通道的顺序都是乱的;
    发表于 01-17 06:54

    ADC124S021同时使用两个通道,两个通道的转换数据发生串扰怎么解决?

    用DSP的SPI接口接ADC124S021,如果只是进行单通道的信号采集,则转换后的数值稳定,但是同时使用两个通道时则两个通道的数据发生串扰现象。如,我单独使用2通道,则转换
    发表于 12-30 07:41

    LDC1000测试结果,数值慢慢上升然后基本稳定下来,这是什么原因造成的?

    如上图所示,图中,Rp为读取的ldc寄存器的值(还没有转换为电阻值),下面的Fre也是相应的寄存器的值。 可以看到数值慢慢上升然后基本稳定下来,这是什么原因造成的
    发表于 12-27 07:44

    RS232接口转换为TTL信号的方法

    RS232接口转换为TTL信号的方法主要包括使用专门的RS232转TTL转换器以及自制转换电路两种方式。以下是这两种方法的详细步骤和注意事项
    的头像 发表于 12-19 09:36 4127次阅读

    ADC084S101采集的数值总是有误差,为什么?

    ADC084S101采集的数值总是有误差,感觉像是与运放阻抗匹配不匹配,这方面不是太懂 现在电路AD前端运放为opa4348做跟随,运放后端一个低通r=500ohm,c=560p; 如果每通
    发表于 12-13 06:03

    ADC08060测试数值偏低的原因?怎么解决?

    请教下,ADC08060 使用中发现部分产品有不良,主要表现在测试的数值在部分条件下偏低,请教下该怎么debug,先查找分析哪些信号会比较好。
    发表于 12-12 07:06