摘要:
针对低速、低成本、快速搭建的特点,采用Arduino与LabVIEW来实现低成本上下位机数据采集系统。Arduino作为下位机,负责A/D转换以及数据传输;LabVIEW编写的数据采集软件作为上位机;上下位机利用RS-232串行接口实现通讯。
【注】一般认为上位机为主机,下位机为从机,上位机领导下位机按照上位机的意愿为上位机服务;同时下位机也可以主动向上位机发出请求,上位机响应下位机并配合完成某个请求。
数据采集,是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。相应能够完成数据采集的系统被称为数据采集系统。
数据采集系统的任务,就是采集传感器输出的模拟信号转换成计算机能识别的信号,并送入计算机,然后将计算得到的数据进行显示或打印,以便实现对某些物理量的监测,其中一些数据还将被生产过程中的计算机控制系统用来控制某些物理量。 【文献1】
一、Arduino下位机部分
数据采集系统中的Arduino下位机部分采用Arduino Leonardo实验板,如图1所示。
图1 Arduino Leonardo控制板
Arduino下位机部分需要完成两个功能:数据采集和数据传输,Arduino Leonardo控制板通过串口接受上位机命令,完成相应的数据采集,并将数据回传至上位机。
数据采集分为模拟量采集和数字量采集,设置采集路数各为2路,分别采用Arduino UNO上具有模拟量输入的管脚A0、A1和具有数字量输入的管脚2、3来实现。模拟量采用接至GND、3.3V和5V来实现不同电压值,数字量采用接至5V和GND实现高电平与低电平。【注】
【注】如果有电位器,可以用来测量分压值。由于手头没有电位器,我这里只是简单的实现。
Arduino Leonardo代码清单:
1 |
#define A0_COMMAND 0x10 //A0采集命令字 |
2 |
#define A1_COMMAND 0x11 //A1采集命令字 |
3 |
#define D0_COMMAND 0x20 //D0采集命令字 |
4 |
#define D1_COMMAND 0x21 //D1采集命令字 |
1 |
byte comdata[3]={0}; //定义数组数据,存放串口接收数据 |
1 |
int LED = 13; //定义LED连接的管脚 |
1 |
int A0_mark=0; //定义A0的标志位 |
2 |
int A1_mark=0; //定义A1的标志位 |
3 |
int D0_mark=0; //定义D0的标志位 |
4 |
int D1_mark=0; //定义D1的标志位 |
1 |
int AD_Value=0; //AD转换后的数字量 |
2 |
float float_AD_Value; //数字量换算成浮点电压量 |
3 |
int D_Value=0; //数字量测量的数据 |
1 |
void receive_data( void ); //接受串口数据 |
2 |
void test_data( void ); //测试串口数据是否正确,并更新数据 |
3 |
void do_command( void ); //执行更新的数据 |
1 |
void setup() |
2 |
{
|
3 |
Serial.begin(9600); |
4 |