写点什么

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

  • 2022 年 6 月 05 日
  • 本文字数:2649 字

    阅读完需:约 9 分钟

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 接口实现通信。如下图所示为多路数据采集系统框图。


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

3、硬件环境

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

​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 上位机前面板设计如下图所示:

​5.2、程序框图设计

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

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






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

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

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

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

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

发布于: 刚刚阅读数: 4
用户头像

【研究方向】物联网、嵌入式、AI、Python 2018.02.09 加入

嵌入式工程师,创客爱好者,公众号:美男子玩编程,全网粉丝10万+,软著专利10余项。 CSDN博客专家、微软MVP、华为云云享专家、阿里云专家博主、知乎认证科学技术领域答主。

评论

发布
暂无评论
LabVIEW控制Arduino采集多路模拟量、数字量(进阶篇—1)_单片机_不脱发的程序猿_InfoQ写作社区