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

转为整数运算的转换算法

审核编辑 :李倩


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

    关注

    2550

    文章

    51049

    浏览量

    753174
  • adc
    adc
    +关注

    关注

    98

    文章

    6496

    浏览量

    544499
  • 数值
    +关注

    关注

    0

    文章

    80

    浏览量

    14359

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    ADS1120读取K type的数值很小是怎么回事?

    我参考data sheet Table 22. Register Settings 的设定, 测室温,读回的数值对照k type的温度电压转换表,数值极小(
    发表于 12-04 08:03

    labview字符串数组转化为数值数组

    在LabVIEW中,将字符串数组转换为数值数组是一项常见的任务,尤其是在处理数据采集、信号处理或用户输入时。 1. 理解LabVIEW的数据类型 在开始之前,了解LabVIEW中的数据类型是非
    的头像 发表于 09-04 17:47 2267次阅读

    plc模拟和数字量之间的转换方法

    物理量,如温度、压力、流量等;数字量是指离散的物理量,如开关状态、计数器等。在实际应用中,PLC需要对这两种数据类型进行转换,以实现对各种设备的控制和监控。本文将介绍PLC中模拟
    的头像 发表于 08-30 10:51 2585次阅读

    将模拟转换为数字量,采用什么转换

    (如温度、压力、声音或图像等随时间连续变化的物理量)转变为数字信号(以二进制数值表示的离散信号)。 模数转换器的转换过程一般包括四个主要步骤:采样、保持、量化、编码。前两个步骤在采样-
    的头像 发表于 08-30 09:24 821次阅读

    数字量与模拟的关系如何算

    物理量,如电压、电流、温度等。它们可以取任意值,并在整个范围内连续变化。 数字量 :数字量是离散的、不连续变化的,通常表示为二进制代码(0和1的组合)。数字量在时间上和数值上都是断续变化的,反映了信息的量化表示。 二、转
    的头像 发表于 08-30 09:16 696次阅读

    电感传感器能够测量哪些物理量?

    电感传感器是一种利用电感效应来检测物理量的装置,它将被测量转换为线圈的自感或互感的变化来测量。电感传感器能够测量的物理量相当广泛,主要包括但不限于以下几个方面: 位移 :电感传感器可以直接测量线位移
    的头像 发表于 08-29 11:08 861次阅读

    PLC对模拟信号的处理过程及方法 详解版

    )。 PLC通过计算转换,将这些模拟信号转换为内部的数值信号。从而实现系统的监控及控制。从现场的物理信号到PLC内部处理的
    的头像 发表于 07-30 16:31 406次阅读
    PLC对模拟<b class='flag-5'>量</b>信号的处理过程及<b class='flag-5'>方法</b> 详解版

    传感器可测量的不包括什么

    传感器是一种能够将物理量、化学或生物转换为可测量的电信号的装置。它们广泛应用于工业、医疗、环境监测、交通、农业等领域。然而,并非所有的
    的头像 发表于 07-25 09:46 634次阅读

    数值比较器的级联端有什么作用

    数值比较器是一种数字电路,用于比较两个数字信号的大小。在数字电路设计中,数值比较器被广泛应用于各种场景,如算术运算、数据排序、信号处理等。级联端是数值比较器的一个重要组成部分,它允许多个数值
    的头像 发表于 07-10 10:37 1080次阅读

    PLC获取模拟方法

    、压力、流量等,它们经过传感器转换为电信号后,需要被PLC准确读取和处理。本文将详细阐述PLC获取模拟方法,包括硬件结构、信号转换、编程配置等方面,旨在为读者提供全面而深入的指导。
    的头像 发表于 06-18 10:58 725次阅读

    请问如何通过UART从ADC传输数值

    你好! 我有一个从 7 个通道读取数值ADC_MEASUREMENT 应用程序。 我只想通过 UART 将数值传送到 Arduino。 模数转换器的
    发表于 06-04 12:31

    STM8 ADC1读出了16192数值是哪里的问题?

    刚接触学习STM8 ADC 使用ADC1,AIN4通道 stm8s的VCC 为5V,ADC测量NTC电阻电压时读数15600左右,直接将AIN4接入VCC,读出来16192左右的数值
    发表于 04-17 07:59

    单模光纤数值孔径一般是多少

    单模光纤是一种用于光通信和光传感的关键元件,具有优异的传输性能和高带宽。其中,数值孔径是单模光纤重要的参数之一。本文将详细介绍单模光纤的数值孔径,包括定义、计算方法、影响因素等内容,以及单模光纤
    的头像 发表于 04-09 17:13 2412次阅读

    什么是光纤的数值孔径,其物理意义是什么

    光纤的数值孔径是指光纤传输中心芯的直径与光纤外层材料的折射指数之间的参数差异。它是光纤传输的一个重要指标,对于确定光纤传输性能、光信号传输质量等具有重要作用。 为了更好地理解光纤的数值孔径,我们需要
    的头像 发表于 01-22 10:55 4466次阅读