26735浏览
查看: 26735|回复: 0
打印 上一主题 下一主题

[项目] LabVIEW Arduino电子称重系统(项目篇—1)

[复制链接]
本帖最后由 不脱发的程序猿 于 2022-6-19 23:51 编辑

1、项目概述
质量是物理学中的7个基本量纲之一。在工业生产和日常生活中,我们都需要获取一个物体的质量,比如购买某件商品时,需要确定其质量大小,或者以质量作为中间量以进一步获得物体的其他参数,如质心、偏心等。
称重传感器实际上是一种将质量信号转变为可测量的电信号输出的装置。按照转换方法的不同,称重传感器分为光电式、液压式、电磁力式、电容式、磁极变形式、振动式、陀螺仪式、电阻应变式8类,其中,电阻应变式的使用最为广泛。
电阻应变式称重传感器的工作原理:弹性体(弹性元件、敏感梁)在外力作用下产生弹性变形,使粘贴在它表面的电阻应变片(转换元件)也随同产生变形,电阻应变片变形后,它的阻值将发生变化(增大或减小),再经相应的测量电路把这一电阻变化转换为电信号(电压或电流),从而完成将外力变换为电信号的过程。
由此可见,电阻应变片、弹性体和检测电路是电阻应变式称重传感器中不可缺少的组成部分,下面简述这三者的作用。
  • 电阻应变片
电阻应变片是把一根电阻丝均匀地分布在一块有机材料制成的基底上,即成为一片应变片,其最重要的参数是灵敏系数K。
需要说明的是:灵敏度系数K值的大小是由制作金属电阻丝材料的性质决定的一个常数,它和应变片的形状、尺寸大小无关,不同的材料的K值一般在1.7~3.6。其次K值是一个无因次量,即它没有量纲。
  • 弹性体
弹性体是一个有特殊形状的结构件,有两个功能,首先是它承受称重传感器所受的外力,对外力产生反作用力,达到相对静平衡。其次,它要产生一个高品质的应变场(区),使粘贴在此区的电阻应变片比较理想地完成机械形变至电信号的转换。
需要说明的是,上面分析的应力状态均是“局部"情况,而应变片实际感受的是“平均"状态。
  • 检测电路
检测电路的功能是把电阻应变片的电阻变化转变为电压输出。因为惠斯登电桥具有很多优点,如可以抑制温度变化的影响,可以抑制侧向力干扰,可以比较方便地解决称重传感器的补偿问题等,所以惠斯登电桥在称重传感器中得到了广泛的应用。因为全桥式等臂电桥的灵敏度最高,各臂参数一致,各种干扰的影响容易相互抵消,所以称重传感器均采用全桥式等臂电桥。
称重传感器的出线方式有4线和6线两种,模块或称重变送器的接线也有4线和6线两种,接线原则是:传感器能接6线的不接4线,必须接4线的就要进行短接。
一般的称重传感器都是六线制的,当接成四线制时,电源线(EXC-,EXC+)与反馈线(SEN-,SEN+)就分别短接了。SEN+和SEN-是补偿线路电阻用的,SEN+和EXC+是通路的,SEN-和EXC-是通路的。EXC+和EXC-是给称重传感器供电的,但是由于称重模块和传感器之间的线路损耗,实际上传感器接收到的电压会小于供电电压。每个称重传感器都有一个mV/V的特性,它输出的mV信号与接收到的电压密切相关,SENS+和SENS-实际上是称重传感器内的一个高阻抗回路,可以将称重模块实际接收到的电压反馈给称重模块。在称重传感器上将EXC+与SENS+短接,EXC-与SENS-短接,仅限于传感器与称重模块距离较近,电压损耗非常小的场合,否则测量存在误差。称重传感器实物如下图所示:
2、项目架构
本篇博文将介绍使用应变式称重传感器、HX711模块、Arduino Uno和LabVIEW组成上下位机小量程电子称重系统,系统框图如下图所示:
Arduino Uno作为下位机,负责HX711的读写以及数据传输,LabVIEW编写的显示软件作为上位机,上下位机利用USB-TTL接口实现通信。另外,还可以通过此系统对未知传感器进行标定,以修正误差,提高测量精度。
HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其他芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其他同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。
HX711降低了电子称重的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。
项目资源下载请参见:LabVIEWArduino电子称重系统【实战项目】-单片机文档类资源
3、硬件环境
将HX711模块的VCC、GND、SCK和DOUT分别接至Arduino Uno控制器的5V、GND、D9和D10;并将HX711模块的E+、E-、A+和A-分别接称重传感器的激励电压正、负,输出电压正、负(具体接线请查阅所使用的传感器接线说明),最后将HX711模块的B+和B-接GND。
为了减少干扰信号,HX711高精度A/D模块与电阻式称重传感器之间的连接线应尽量短,过长的话会受到干扰,HX711高精度A/D模块与Arduino Uno控制器之间的连接线也应该尽量短。若一定需要延长线,则最好使用带电磁屏蔽的电缆线。效果如下图所示:
4、Arduino功能设计
Arduino下位机部分需要完成以下功能:读取和传输称重传感器的输出信号,Arduino Uno控制板通过USB-TTL电缆接收上位机发来的命令,完成称重传感器的数据读取之后,并将数据回传至LabVIEW上位机软件。HX711模块主要完成输出信号的高精度A/D转换和给称重传感器提供激励电源。
另外,还需要查看具体传感器的灵敏度,以计算满量程电压和增益倍数。满量程电压的计算公式为︰满量程输出电压=激励电压×灵敏度。以灵敏度1.0mV/V为例,假设供电电压为5V,则满量程电压为5mV。
通过实际测量,HX711高精度A/D模块输出的供电电压为4V左右,则传感器满量程电压为4mV。由于HX711高精度A/D模块增益倍数为128或64对应的满量程差分输入电压分别为±20mV或±40mV。为了获得更高的精度,选择增益倍数为128倍。
Arduino Uno控制器负责读取LabVIEW上位机发来的质量测量命令,并通过HX71获取称重传感器输出的电压值,通过串口发送回上位机LabVIEW软件。Arduino Uno控制器的程序代码如代码如下所示:
  1. #include <HX711.h>
  2. HX711 hx(9, 10,128);
  3. #define HX711_COMMAND  0x10   //采集命令字
  4. byte comdata[3]={0};      //定义数组数据,存放串口接收数据
  5. void receive_data(void);      //接受串口数据
  6. void test_do_data(void);         //测试串口数据是否正确,并更新数据
  7. double sum = 0;
  8. void setup()
  9. {
  10.   Serial.begin(9600);      
  11. }
  12. void loop()
  13. {
  14.   while (Serial.available() > 0)   //不断检测串口是否有数据
  15.    {
  16.         receive_data();            //接受串口数据
  17.         test_do_data();               //测试数据是否正确并更新标志位
  18.    }
  19. }
  20. void receive_data(void)      
  21. {
  22.    int i ;
  23.    for(i=0;i<3;i++)
  24.    {
  25.       comdata[i] =Serial.read();
  26.       //延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,
  27.        delay(2);
  28.    }
  29. }
  30. void test_do_data(void)
  31. {
  32.   if(comdata[0] == 0x55)            //0x55和0xAA均为判断是否为有效命令
  33.    {
  34.      if(comdata[1] == 0xAA)
  35.      {
  36.         if(comdata[2] == HX711_COMMAND)
  37.         {            
  38.             for (int i = 0; i < 10; i++){
  39.                 sum += hx.read();}
  40.             Serial.println(sum/10,2);         
  41.         }
  42.       }
  43.    }
  44. }
复制代码

5、LabVIEW功能设计
LabVIEW上位机部分需要完成以下功能:
1、向下位机Arduino控制器发送电压采集命令,Arduino控制器通过串口接收上位机命令,完成相应的数据采集之后并将采集的数据回传,LabVIEW软件将回传的数据转换为质量并显示在前面板上。
2、通过使用标准砝码对称重系统进行标定,以获得称重传感器的输出电压与质量的关系,从而拟合出传感器的输出电压与质量的标定系数,用于将传感器的输出电压换算为所称量的质量,而且通过精确的砝码对称重系统进行多次标定,有利于提高整个称重系统的测量精度。
5.1、前面板设计
LabVIEW前面板分为称重和标定两个部分,称重部分主要有读取标定系数、单次称重、多次称重取平均值。标定部分主要有5阶正反行程的标定、计算拟合系数和保存拟合系数。同时,在标定部分设有一个超时测量电压的显示框,以实时地显示当前称重传感器输出信号值的变化情况。小量程电子称重系统的LabVIEW上位机前面板,如下图所示:
5.2、程序框图设计
由于在LabVIEW上位机的程序设计中需要多次调用电压采集子程序,以向ArduinoUno控制器发送命令码,并获取Arduino Uno控制器返回的测量数据,所以将电压采集子程序设计成子Vl,不仅可以简化程序设计,还便于调用。
电压采集子程序的前面板和程序框图,如下图所示:
LabVIEW上位机主程序的结构为顺序结构+While循环+事件结构。首先,在顺序结构中的第一帧中,对所使用的数组、中间变量和显示控件进行初始化,在顺序结构的第二帧中,通过设置的串口号来初始化串口通信。然后,程序进入While循环和事件结构,不断地检测是否有事件得到响应,并执行,事件结构有"测量_称重”、“测量_读取标定系数”"、“测量_计算平均值"、“标定_采集"、“标定_拟合"、“标定_保存"和“超时”。最后,关闭串口通信。
初始化程序框图如下图所示:
在“测量_称重"事件结构中,通过“采集子程序"读取Arduino Uno控制器返回的数据,并利用标定系数计算得到所称量的重量,同时利用称重计数器将重量数据循环显示在测量数据中。“测量_称重"值改变事件程序框图如下图所示:
在“测量_读取标定系数"事件结构中,通过“文件对话框"的选择来读取称重传感器的标定系数,以用于计算所称量的重量,同时显示当前标定系数,以表示当前所使用的标定系数,进一步扩大了电子称重系统的适用范围,可以通过配置不同量程的称重传感器来实现不同范围的称重需求。“测量_读取标定系数"值改变事件程序框图如下图所示:
在"测量_计算平均值"事件结构中,通过对测量数据数组的5个元素累加并除以5,得到所称量的重量,这种通过多次测量取平均值的方法可以提高称重精度,满足较高精度的称重需求。“测量_计算平均值"值改变事件程序框图如下图所示:
在“标定_采集"事件结构中,通过“采集子程序"读取Arduino Uno控制器返回的称重传感器输出的电压信号,并利用标定计数器和条件结构将所采集到的数据依次显示在正行程和反行程上。“标定_采集"值改变事件程序框图如下图所示:
在“标定_拟合"事件结构中,通过将正行程和反行程数组中的电压数据求平均值,与质量标准值数组利用线性拟合函数计算出拟合系数,并显示在标定系数上。“标定_拟合”值改变事件程序框图如下图所示:
在“标定_保存"事件结构中,通过“文件对话框"来选择标定系数的保存路径,并检查是否存在相同文件名的文件,如存在则提醒是否替换文件,然后将标定系数以配置文件的格式保存,后缀名为".ini"。“标定_保存"值改变事件程序框图如下图所示:
当2秒内无事件被触发,则事件结构进入“超时"分支。在“超时"事件结构中,通过“采集子程序"读取Arduino Uno控制器返回的称重传感器输出信号,并将其显示为前面板上的当前电压值。“超时"事件结构如下图所示:
除了传感器的非线性之外,电阻应变式称重传感器温度漂移的偏差值也不容忽视,可以在系统中加入温度传感器(例如DS18B20),并在计算重量时进行线性温度漂移修正。
另外,选择较高精度的称重传感器,还可以利用此小量程电子称重系统实现物体的质量质心的测量,例如,固体火箭发动机的质量质心测量系统。
项目资源下载请参见:LabVIEWArduino电子称重系统【实战项目】-单片机文档类资源

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail