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

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

3天内不再提示

基于CW32的仪表精度测量实现(三):标定与校准

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2024-09-02 10:07 次阅读

标定的概念

标定是一种校准过程,它通过与已知的标准或参考值进行比较来确保测量设备、仪器或系统的准确性和可靠性。这个过程涉及调整设备,以消除系统误差和提高测量结果与真实值的一致性,从而确保数据的精确度和可重复性。

1.为什么去标定

我们使用单片机ADC读取的电压电流值由于制造公差、温度变化、时间老化、电源波动等因素引起的初始误差和漂移,我们需要对电压电流进行标定校准,使得我们得到的电压电流值是正确的。

2.标定的方法

标定的方法多种多样,我们需要根据自己的需求来选择相应的方法,常见的标定方法如下所示:

(1)直接比较法:

将待标定的测量设备与一个已知准确度的标准设备进行比较,直接读取并记录差异。

(2)多点标定法:在多个已知的标准点上进行测量,收集数据点,然后通过数学模型(如多项式拟合)来确定设备输出与标准值之间的关系。(3)线性回归法:使用最小二乘法等统计技术,通过拟合最佳拟合线来确定设备输出与标准输入值之间的线性关系。(4)分段线性标定:当测量设备的响应在不同输入范围内呈现不同的线性度时,可以采用分段线性标定,即在不同的输入范围内使用不同的线性模型。

(5)非线性标定:

对于非线性设备,使用非线性函数(如指数、对数或S形曲线)来描述输入与输出之间的关系。

标定的实现

1.CW32开发板的实物图和原理图

wKgZombRpWeAaSMEAABpnBq-Jys92.webp

wKgaombRpWiAUdKPAACQegNOZ1A90.webp

2.软件代码讲解

(1)滤波算法在做电压值的校准之前,我们根据传感器采集到的是连续性的时间序列信号,所以我们可以采用了均值滤波对单片机采集到的AD值进行滤波处理。在程序中我首先初始化总和、最大值和最小值变量,然后在一个循环中累加数组 value 中所有元素的值,并同时更新最大值和最小值。循环结束后,从总和中减去最大值和最小值,以排除可能的异常数据点,最后将调整后的总和除以数组元素数减去2,得到并返回一个滤除极端值后的均值。这种方法有助于减少数据中的噪声,特别是当数据集中包含异常高值或低值时。代码如下所示:

uint32_t Mean_Value_Filter(uint16_t *value, uint32_t size) //均值滤波 { uint32_t sum = 0; //ADC采样数据和 uint16_t max = 0; uint16_t min = 0xffff; //min初值取最大是为了将第一个数据记录 int i; for(i = 0; i < size; i++) { sum += value[i]; if(value[i] > max) { max = value[i]; } if(value[i] < min) { min = value[i]; } } sum -= max + min; //去除最大最小值 sum = sum / (size - 2); return sum; }

(2)分段线性标定

在代码中定义了电压校准的相关变量X06和X12,分别代表着6V对应的AD代码值和12V对应的AD代码值。其中还定义了纵坐标的变量Y06和Y12,这个对应着电压值6V和12V。最后定义了坐标轴的斜率K,如下所示:

//5V与15V 校准 unsigned int X06=0; unsigned int X12=0; unsigned int Y06=6; unsigned int Y12=12; float K; //斜率

在标定校准之前,我们需要计算斜率,根据两点确定一条直线算出该区间内的斜率K,如下图所示:

void Count_K(void) { K = (Y12 - Y06); K = K/(X12 - X06); }

我们还需要存储校准值,我们在一个数组中存了三个数据,第一个数据是判断位(0xaa),判断当前是否存储过校准值。其中两个是6V对应的AD代码值和12V对应的AD代码值。存储之前需要擦除然后才能写入数据。代码如下所示:

void flash_calibration(void) { uint16_t dat[5]; dat[0]=0xaa; dat[1]=X06; dat[2]=X12; flash_erase(); flash_write(0,dat,5); }

我们除了写入校准值还要读取校准值,先读取校准值,判断第一个数据是否为0xaa,如果不是0xaa,代表没校准过,需要赋一个初始化进行存储。例如

X06 = 6.0/23/1.5*4096;如果第一个值是0xaa,那就可以把存储过的值赋给我们的变量就可以了,代码如下所示。

void judge_calibration(void) { uint16_t dat[5]; flash_read(0,dat, 5); if(dat[0]!=0xaa) { X06 = 6.0/23/1.5*4096; X12 = 12.0/23/1.5*4096; flash_calibration(); } else { X06=dat[1]; X12=dat[2]; } }

我们可以通过按键对每一个区间的信号进行校准,比如说我们这次校准的是6~12V区间内的信号,初始化时可以通过按下一次按键对6V时候的数据校准,再按一次按键就可以对12V时候的数据校准,代码如下所示:

void button_select_calibration(void) { if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_12) == GPIO_Pin_RESET)//按键按下 { mode++; if(mode >2) mode =0; while(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_12) == GPIO_Pin_RESET); } if(mode == 0) { DisPlay_dianya(V_Buffer); } else if(mode == 1) { X06=Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE); flash_calibration(); Count_K(); Volt_Cal(); DisPlay_dianya(V_Buffer); } else if(mode == 2) { X12=Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE); flash_calibration(); Count_K(); Volt_Cal(); DisPlay_dianya(V_Buffer); } }

3.分段线性标定分析和处理

在这个程序中,我们的思想是同时两路AD采集,一个是测量电压的,一个是测量电流的,同时读取AD数据,进而能对二者一起校准。代码如下所示:

void Get_ADC_Value(void) { static uint8_t cnt; ADC_GetSqr0Result(&Volt_Buffer[cnt]); ADC_GetSqr3Result(&Curr_Buffer[cnt]); cnt++; if(cnt >= ADC_SAMPLE_SIZE) { cnt = 0; } }

我们在电压电流表上测量了大量的数据,如下图所示:

wKgZombRpWiAWf-8AABvboEyiB421.webp

在上面图中可以看出实际的电压值和测量的电压值存在一定的偏差,我们将它们的偏差值做成一个折线图给大家看看,如下图所示。

wKgaombRpWiAfqYBAAAf1kr476M66.webp

常见标定的原理是:使用AD值作为X轴,电压(电流)值作为Y轴;在电压(电流)为0的时候标定为Xmin,在电压(电流)为最大量程的时候标定为Xmax,根据数学公式两点确定一条直线,可以得到这条直线的斜率K。根据Y=kx公式我们可以通过输出每一个AD值得到对应的电压(电流)值。

wKgZombRpWmALqB1AAAUUga_egI43.webp

常见的标定是在只有最小值和最大值之间做了标定,如果这两个值的范围很大,使用中间的AD值也会出现误差,所以我们就需要多做几组标定,使得数据更加准确,这样就形成了分段线性标定。效果图如下所示。

wKgaombRpWmAWHArAAASTNoL9KU43.webp

如果我们求X3到X2之间的电压值,可以根据公式:Y=k×(Xad-X2)+5得到准确的电压值,在这条折线上标的点越多,测量得到的电压值就越准确。

4.标定的结果

标定之前的实验数据显示,误差在0.08V左右,数据如下所示:

wKgZombRpWiAWf-8AABvboEyiB421.webp

误差的折线图如下所示:

wKgZombRpWqABpTmAAAlwsAN6x428.webp

实物的测量图显示误差在0.08左右,结果如下所示:

wKgaombRpWqAGX3zAABpQrAkGv819.webp

在6V标定之后实验数据显示误差在0.01V左右,数据如下所示:

wKgZombRpWqAQ8LMAABY5pnoZwo77.webp

标定校准后的误差的折线图如下所示,可以看出6V标定后的误差范围在0V到0.03V之间的,所以证明了多处标定,得到的测量值就越精确。

wKgaombRpWuAQBLZAAA4zBrY1Y483.webp

经过标定校准后的电压显示没有误差,结果如下所示:

wKgZombRpWuABqhBAABkziS0Y7094.webp



审核编辑 黄宇

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

    关注

    0

    文章

    8

    浏览量

    8275
  • CW32
    +关注

    关注

    1

    文章

    218

    浏览量

    722
收藏 人收藏

    评论

    相关推荐

    次元测量校准方法

    在现代制造业中,精确的测量对于保证产品质量至关重要。次元测量仪作为一种高精度测量工具,广泛应用于汽车、航空、电子等行业。为了确保
    的头像 发表于 01-06 09:38 290次阅读

    化工厂过程仪表的维护与校准

    随着化工行业的快速发展,过程仪表成为化工厂监测和控制生产过程的核心设备。化工行业的安全生产对检测工具的精度和可靠性提出了更高要求,因此过程仪表的维护和校准的重要性不容忽视。
    的头像 发表于 12-03 17:50 384次阅读

    武汉芯源半导体CW32芯片重庆地区线下技术交流会成功举办

    2024年10月19日,武汉芯源半导体授权CW32生态社区主办的“CW32芯片-重庆地区技术交流会”在重庆市科技工作者众创之家成功举办。此次交流会汇聚重庆地区的嵌入式开发工程师和电子信息类企业代表,共同探讨CW32芯片在仪器
    的头像 发表于 10-24 10:55 550次阅读

    基于CW32仪表精度测量实现(一):相关滤波原理

    一、滤波的概念 滤波是指通过某种方法将信号中的某些频率成分增强或抑制,达到去除噪声、改善信号质量、分离信号等目的的过程。滤波器是实现滤波功能的关键组件,它可以改变信号的频谱特性,对不同频率区域的信号
    的头像 发表于 08-30 18:53 302次阅读
    基于<b class='flag-5'>CW32</b>的<b class='flag-5'>仪表</b><b class='flag-5'>精度</b><b class='flag-5'>测量</b><b class='flag-5'>实现</b>(一):相关滤波原理

    红外温度传感器的校准标定工作

    红外温度传感器广泛应用于各种红外测温仪等非接触式温度测量。这一类的测温产品在生产和校准检定过程中,需要使用黑体或者面源对其进行标定
    的头像 发表于 08-16 09:49 768次阅读
    红外温度传感器的<b class='flag-5'>校准</b><b class='flag-5'>标定</b>工作

    武汉芯源半导体成功举行无锡地区CW32线下技术交流研讨会

    2024年7月12日,武汉芯源半导体有限公司在无锡地区成功举办了CW32系列MCU的线下技术交流研讨会。此次活动分别在行业龙头企业客户的研发中心和代理商无锡梓轩电子会议室内举行,吸引了来自无锡地区两轮车仪表及电动工具等领域的众多客户及工程师参与。
    的头像 发表于 07-24 11:00 548次阅读

    【项目展示】基于CW32的遥控循迹小车

    CW32循迹小车.zip_免费高速下载|百度网盘-分享无限制  一、概述 CW32循迹、遥控小车具有循迹和遥控两种功能,小车的硬件模块由CW32F030C8T6小蓝板、智能小车控制底板、BT04-E
    的头像 发表于 05-31 17:33 1406次阅读
    【项目展示】基于<b class='flag-5'>CW32</b>的遥控循迹小车

    基于CW32的有刷直流电机控制实验:直流电机闭环位置和速度控制实验

    DAP-Link插入电脑后未识别到芯片,则将中间两根线的接线对换。 程序下载 将 DAP-Link 与电脑相连后检查是否识别到CW32: 如图就是已经识别到CW32,可以开始下载程序。 闭环速度位置说明 程序
    的头像 发表于 05-31 17:01 648次阅读
    基于<b class='flag-5'>CW32</b>的有刷直流电机控制实验<b class='flag-5'>三</b>:直流电机闭环位置和速度控制实验

    CW32数字电压电流表软件进阶教程-3.电压电流标定

    标定是通过测量标准器的偏差来补偿仪器系统误差,从而改善仪器或系统准确度、精度的操作。为了提高电压电流表在测量时的测量
    的头像 发表于 05-31 16:20 834次阅读
    <b class='flag-5'>CW32</b>数字电压电流表软件进阶教程-3.电压电流<b class='flag-5'>标定</b>

    CW32数字电压电流表软件教程-实验四:数码管动态显示

    显示不同的值需要用到CW32的定时器功能,在定时器的中断服务程序里面执行显示刷新的动作。有关CW32的定时器和中断的相关知识请查看链接:【CW32F003E4核心板】入门学习教程。本文只讲述如何配置定时器中断并执行数码管刷新函数
    的头像 发表于 05-31 15:23 598次阅读
    <b class='flag-5'>CW32</b>数字电压电流表软件教程-实验四:数码管动态显示

    坐标测量机的精度如何保证?

    坐标测量机(CoordinateMeasuringMachine,CMM)的精度保证涉及多个方面,包括机械设计、环境控制、校准、操作技巧、维护保养等:1、机械系统设计:
    的头像 发表于 05-22 10:21 1048次阅读
    <b class='flag-5'>三</b>坐标<b class='flag-5'>测量</b>机的<b class='flag-5'>精度</b>如何保证?

    芯源半导体首个CW32嵌入式创新实验室揭牌

    武汉芯源半导体,一家知名的MCU(微控制器)厂商,近日携手上海科学技术职业学院,共同揭牌了“CW32嵌入式创新实验室”。此次合作旨在搭建起企业与高校之间的紧密桥梁,实现资源共享和优势互补。
    的头像 发表于 05-08 10:37 480次阅读

    产教融合,校企合作——武汉芯源半导体首个CW32嵌入式创新实验室顺利揭牌!

    2024年4月24日上午,武汉芯源半导体有限公司与上海科学技术职业学院共同举办的“CW32嵌入式创新实验室揭牌仪式”在上海科学技术职业学院第二会议室隆重举行。活动现场,武汉芯源半导体与上海
    的头像 发表于 05-06 13:42 474次阅读
    产教融合,校企合作——武汉芯源半导体首个<b class='flag-5'>CW32</b>嵌入式创新实验室顺利揭牌!

    CW32量产烧录工具

    本节主要介绍CW32微控制器的烧录器CW-Writer,以及与之配合的软件CW-Programmer的使用方法。烧录器CW-Writer通过ISP协议,可
    的头像 发表于 04-25 15:22 1492次阅读
    <b class='flag-5'>CW32</b>量产烧录工具

    CW32快速开发入门

    CW32快速开发入门
    的头像 发表于 04-24 18:56 2113次阅读
    <b class='flag-5'>CW32</b>快速开发入门