LabVIEW控制Arduino采集多路模拟量、数字量(进阶篇—1)

简介: 数据采集,是指从传感器和其他待测设备的模拟和数字被测单元中自动采集信息的过程。能够实现数据采集功能的系统叫作数据采集系统。

1、项目概述

数据采集,是指从传感器和其他待测设备的模拟和数字被测单元中自动采集信息的过程。能够实现数据采集功能的系统叫作数据采集系统。


数据采集系统的任务,就是将传感器输出的信号转换成计算机能识别的信号并送入计算机进行处理,然后将处理得到的数据进行显示或打印,以便实现对某些物理量的监测,其中一些参数还会被计算机控制系统用于计算输出的控制量,以实现将某些物理量的控制在某一水平。


Arduino控制器均具有模拟输入功能,Uno拥有6路模拟输入端口(A0到A5),每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V,并且可以通过AREF调整参考电压。


2、项目架构

采用Arduino Uno与LabVIEW来实现低成本上下位机数据采集系统,具有模拟量和数字量两种采集功能,可以满足低速、低成本的数据采集需求。其中,Arduino Uno作为下位机,负责A/D转换以及数据传输,LabVIEW编写的数据采集软件作为上位机,上下位机通过USB-TTL接口实现通信。如下图所示为多路数据采集系统框图。


b1f90e3210c440fd92c6361d799e20a0.png


项目资源下载请参见:LabVIEW控制Arduino采集多路模拟量、数字量-单片机文档类资源

https://download.csdn.net/download/m0_38106923/85486643


3、硬件环境

数据采集系统中的Arduino下位机部分采用Arduino Uno控制器,模拟量采用电位器分压来实现不同电压值,数字量采用拨动开关在5V和GND之间切换实现高电平与低电平。多路数据采集系统硬件连接如下图所示:


6544de2188444433b62c4e55f551460c.png


4、Arduino功能设计

Arduino下位机部分需要完成两个功能:数据采集和数据传输,Arduino Uno控制板通过USB-TTL电缆接收上位机发来的命令,完成相应的数据采集,并将采集的数据回传至LabVIEW上位机软件。


数据采集分为模拟量采集和数字量采集两种,此处设置采集路数各为2路,分别采用Arduino Uno控制器上具有模拟量输入的管脚A0、A1和具有数字量输入的管脚2、3。


Arduino Uno控制器负责读取LabVIEW上位机发来的采集命令,并采集相应的数据,通过串口发送回上位机LabVIEW软件。Arduino Uno控制器的程序代码如代码如下所示:


#define A0_Command  0x10   //A0采集命令字
#define A1_Command  0x11   //A1采集命令字
#define D0_Command  0x20   //D0采集命令字
#define D1_Command  0x21   //D1采集命令字
byte comdata[3]={0};      //定义数组数据,存放串口接收数据
int AD_Value=0;          //AD转换后的数字量
float float_AD_Value;    //数字量换算成浮点电压量
int D_Value=0;           //数字量测量的数据
void receive_data(void);      //接受串口数据
void test_do_data(void);         //测试串口数据是否正确,并更新数据
void setup()
{
  Serial.begin(9600);      
  pinMode(2, INPUT);
  pinMode(3, INPUT);
}
void loop()
{
  while (Serial.available() > 0)   //不断检测串口是否有数据
   {
        receive_data();            //接受串口数据
        test_do_data();               //测试数据是否正确并更新标志位
   }
}
void receive_data(void)       
{
   int i ;
   for(i=0;i<3;i++)
   {
      comdata[i] =Serial.read();
      //延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,
       delay(2);
   }
}
void test_do_data(void)
{
  if(comdata[0] == 0x55)            //0x55和0xAA均为判断是否为有效命令
   {
     if(comdata[1] == 0xAA)
     {
        switch(comdata[2])
          {   
            case A0_Command:   
                 AD_Value = analogRead(A0);                 //读取A0电压值
                 float_AD_Value=(float)AD_Value/1023*5.00;  //换算为浮点电压值
                 Serial.println(float_AD_Value,2);          //保留两位小数发送数据                       
                 break;
            case A1_Command:   
                 AD_Value = analogRead(A1);                 //读取A0电压值
                 float_AD_Value=(float)AD_Value/1023*5.00;  //换算为浮点电压值
                 Serial.println(float_AD_Value,2);          //保留两位小数发送数据                       
                 break;
            case D0_Command:   
                 D_Value = digitalRead(2);                  //读取D2数字量
                 Serial.println(D_Value);                  //发送数字量测量数据                    
                 break;
            case D1_Command:   
                 D_Value = digitalRead(3);                  //读取D2数字量
                 Serial.println(D_Value);                  //发送数字量测量数据                     
                 break;               
          }
       }
   }
}


5、LabVIEW功能设计

LabVIEW上位机部分需要完成两个功能:向下位机发送命令帧和将数据显示在前面板上,Arduino Uno控制板通过串口接收上位机命令,完成相应的数据采集,并将数据回传至上位机。


数据采集分为模拟量采集和数字量采集,设置采集路数各为2路,分别采用ArduinoUno上具有模拟量输入的管脚A0、A1和具有数字量输入的管脚2、3来实现。模拟量采用电位器分压来实现不同电压值,数字量采用拨动开关在5V和GND之间切换实现高电平与低电平。


5.1、前面板设计

LabVIEW前面板分为模拟量采集和数字量采集两个部分,模拟量采集部分主要针对模拟量输出的传感器,数字量采集部分主要针对数字量的输入。


LabVIEW上位机前面板设计如下图所示:

40c111a56a60415bb0139a96167357fe.png



5.2、程序框图设计

由于有2路模拟量和2路数字量,不同通道的模拟量或数字量的发送数据帧中,通道号不同,数字量与模拟量采集的发送数据帧中,命令号不同。发送数据帧中,具体的命令号和通道号可以自定义,此处模拟量通道0的采集命令为0x55AA10,模拟量通道1的采集命令为0x55AA11,数字量通道0的采集命令为0x55AA20,数字量通道1的采集命令为0x55AA21。


LabVIEW上位机程序框图如下所示:

0351f50d96c2457e9a7e2e3fb1b698c0.png

4039c24bad9947739bbcfbfcf4b38e73.png

a237a9a88ab349ff89f3e92aed5e1694.png

c9f70c62c5af4fe088cd850725b27599.png

0790839e2b2a4f1ba5af4f1c2539c31d.png

238c79ae8b3d440c988c412f031f052c.png

Arduino Uno上的模拟输入拥有10位的分辨率,可以满足一般的数据采集的需求同时可以更改参考电压来提高最小分辨率。


对于高精度的应用,需要外部扩展高分辨率的ADC(模数转换器)和高精度的电压基准源。


对于连续数据采集的应用,可以采用LabVIEW Interface for Arduino函数库中的模拟采样库中的Get Finite Analog Sample函数节点来实现。


对于远距离的数据采集的应用,可以采用RS-485总线、无线串口方式或网络方式实现。


相关文章
|
6月前
|
数据格式
LabVIEW编程LabVIEW开发控制安东电子LU-926U04Y四路调节模例程与相关资料
LabVIEW编程LabVIEW开发控制安东电子LU-926U04Y四路调节模例程与相关资料
37 1
|
6月前
|
传感器 存储 数据处理
汇编语言与接口技术实验报告——单总线温度采集
汇编语言与接口技术实验报告——单总线温度采集
64 0
|
传感器 芯片
MCU如何实现对外部脉冲信号的计数功能?
MCU如何实现对外部脉冲信号的计数功能?
第五章:单片机控制
第五章:单片机控制
74 0
|
传感器 存储
手持VH501TC多功能混合传感器信号采集读数仪使用方法
电池仓位于设备背面下半部分, 仅当使用 5 号电池供电时需要操作电池仓,锂电池供电的设备无需操作电池仓。默认情况下,电池仓盖处于锁定状态无法直接打开,在需要安装或者更换电池时,应将水平拨动开关推至解锁侧,在电池安装完成后必须将开关推至锁定侧。注意:在安装电池时必须按照仓内+/-符号对应电池的正/负极,错误的安装极性会永久性损坏设备。
手持VH501TC多功能混合传感器信号采集读数仪使用方法
|
传感器 存储 物联网
多功能手持读数仪振弦混合信号采集仪的版本区别
VH501TC手持采集读数仪,设备是专用的多类型传感器手持式读数仪,主测传感类型为单弦式振弦传感器,辅测传感类型为电压、电流传感。采用 32 位 ARM 处理器和大尺寸全彩屏、阵列按键设计,彩屏,不受阳光影响,清楚明了。操作界面简单友好,各项数据全屏显示,如振弦频率,频模,温度,采集质量,时间显示,电压电流,激励电压,激励方法,温度传感器及剩余电量。指示灯显示说明运行情况,DB9和通讯航空接口连接稳固,后盖更换电池方便。按键回弹手感好,整机好握持,单手操作,操作舒适,在完成快速测读的同时还具备很好的操控体验。外壳坚固耐用,方便携带能在不同工况场景下使用。
多功能手持读数仪振弦混合信号采集仪的版本区别
|
传感器
LabVIEW控制Arduino采集多路DS18B20温度数值(进阶篇—3)
本篇博文将实现LabVIEW控制Arduino采集多路DS18B20温度数值,关于LabVIEW控制Arduino在基础篇已经讲解过很多种类温度传感器的采集方法。
|
传感器 监控 程序员
LabVIEW控制Arduino采集热电偶温度数值(进阶篇—2)
在之前的博文中,介绍了LabVIEW控制Arduino采集LM35温度传感器数值和LabVIEW控制Arduino采集热敏电阻温度数值的方法。本篇博文将基于热电偶搭建一款温度监控系统。
LabVIEW控制Arduino采集光敏电阻数值(基础篇—14)
利用光敏电阻和LIAT中的光敏函数库,通过Arduino Uno控制板的模拟端口采集与光敏电阻串联电阻的分压值上传给LabVIEW软件,并除以光照系数以获得光照值,实现一个光强计的功能。
LabVIEW控制Arduino采集热敏电阻温度数值(基础篇—13)
利用热敏电阻和LIAT中的热敏电阻函数节点,通过Arduino Uno控制板的模拟端口采集与热敏电阻串联电阻的分压值上传给LabVIEW软件,并除以温度系数以获得温度值,实现一个温度计的功能。