在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁(yè) > 博客 > LabVIEW控制Arduino采集多路模擬量、數(shù)字量(進(jìn)階篇—1)

            LabVIEW控制Arduino采集多路模擬量、數(shù)字量(進(jìn)階篇—1)

            發(fā)布人:美男子玩編程 時(shí)間:2022-06-22 來源:工程師 發(fā)布文章

            1


            項(xiàng)目概述


            數(shù)據(jù)采集,是指從傳感器和其他待測(cè)設(shè)備的模擬和數(shù)字被測(cè)單元中自動(dòng)采集信息的過程。能夠?qū)崿F(xiàn)數(shù)據(jù)采集功能的系統(tǒng)叫作數(shù)據(jù)采集系統(tǒng)。


            數(shù)據(jù)采集系統(tǒng)的任務(wù),就是將傳感器輸出的信號(hào)轉(zhuǎn)換成計(jì)算機(jī)能識(shí)別的信號(hào)并送入計(jì)算機(jī)進(jìn)行處理,然后將處理得到的數(shù)據(jù)進(jìn)行顯示或打印,以便實(shí)現(xiàn)對(duì)某些物理量的監(jiān)測(cè),其中一些參數(shù)還會(huì)被計(jì)算機(jī)控制系統(tǒng)用于計(jì)算輸出的控制量,以實(shí)現(xiàn)將某些物理量的控制在某一水平。


            Arduino控制器均具有模擬輸入功能,Uno擁有6路模擬輸入端口(A0到A5),每一路具有10位的分辨率(即輸入有1024個(gè)不同值),默認(rèn)輸入信號(hào)范圍為0到5V,并且可以通過AREF調(diào)整參考電壓。



            2


            項(xiàng)目架構(gòu)


            采用Arduino Uno與LabVIEW來實(shí)現(xiàn)低成本上下位機(jī)數(shù)據(jù)采集系統(tǒng),具有模擬量和數(shù)字量?jī)煞N采集功能,可以滿足低速、低成本的數(shù)據(jù)采集需求。其中,Arduino Uno作為下位機(jī),負(fù)責(zé)A/D轉(zhuǎn)換以及數(shù)據(jù)傳輸,LabVIEW編寫的數(shù)據(jù)采集軟件作為上位機(jī),上下位機(jī)通過USB-TTL接口實(shí)現(xiàn)通信。如下圖所示為多路數(shù)據(jù)采集系統(tǒng)框圖。


            圖片



            3


            硬件環(huán)境


            數(shù)據(jù)采集系統(tǒng)中的Arduino下位機(jī)部分采用Arduino Uno控制器,模擬量采用電位器分壓來實(shí)現(xiàn)不同電壓值,數(shù)字量采用撥動(dòng)開關(guān)在5V和GND之間切換實(shí)現(xiàn)高電平與低電平。多路數(shù)據(jù)采集系統(tǒng)硬件連接如下圖所示:


            圖片



            4


            Arduino功能設(shè)計(jì)


            Arduino下位機(jī)部分需要完成兩個(gè)功能:數(shù)據(jù)采集和數(shù)據(jù)傳輸,Arduino Uno控制板通過USB-TTL電纜接收上位機(jī)發(fā)來的命令,完成相應(yīng)的數(shù)據(jù)采集,并將采集的數(shù)據(jù)回傳至LabVIEW上位機(jī)軟件。


            數(shù)據(jù)采集分為模擬量采集和數(shù)字量采集兩種,此處設(shè)置采集路數(shù)各為2路,分別采用Arduino Uno控制器上具有模擬量輸入的管腳A0、A1和具有數(shù)字量輸入的管腳2、3。


            Arduino Uno控制器負(fù)責(zé)讀取LabVIEW上位機(jī)發(fā)來的采集命令,并采集相應(yīng)的數(shù)據(jù),通過串口發(fā)送回上位機(jī)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};      //定義數(shù)組數(shù)據(jù),存放串口接收數(shù)據(jù) int AD_Value=0;          //AD轉(zhuǎn)換后的數(shù)字量float float_AD_Value;    //數(shù)字量換算成浮點(diǎn)電壓量int D_Value=0;           //數(shù)字量測(cè)量的數(shù)據(jù) void receive_data(void);      //接受串口數(shù)據(jù)void test_do_data(void);         //測(cè)試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù) void setup(){  Serial.begin(9600);        pinMode(2, INPUT);  pinMode(3, INPUT);}void loop(){  while (Serial.available() > 0)   //不斷檢測(cè)串口是否有數(shù)據(jù)   {        receive_data();            //接受串口數(shù)據(jù)        test_do_data();               //測(cè)試數(shù)據(jù)是否正確并更新標(biāo)志位   }}void receive_data(void)       {   int i ;   for(i=0;i<3;i++)   {      comdata[i] =Serial.read();      //延時(shí)一會(huì),讓串口緩存準(zhǔn)備好下一個(gè)字節(jié),不延時(shí)可能會(huì)導(dǎo)致數(shù)據(jù)丟失,       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;  //換算為浮點(diǎn)電壓值                 Serial.println(float_AD_Value,2);          //保留兩位小數(shù)發(fā)送數(shù)據(jù)                                        break;            case A1_Command:                    AD_Value = analogRead(A1);                 //讀取A0電壓值                 float_AD_Value=(float)AD_Value/1023*5.00;  //換算為浮點(diǎn)電壓值                 Serial.println(float_AD_Value,2);          //保留兩位小數(shù)發(fā)送數(shù)據(jù)                                        break;            case D0_Command:                    D_Value = digitalRead(2);                  //讀取D2數(shù)字量                 Serial.println(D_Value);                  //發(fā)送數(shù)字量測(cè)量數(shù)據(jù)                                     break;            case D1_Command:                    D_Value = digitalRead(3);                  //讀取D2數(shù)字量                 Serial.println(D_Value);                  //發(fā)送數(shù)字量測(cè)量數(shù)據(jù)                                      break;                         }       }   }}



            5


            LabVIEW功能設(shè)計(jì)


            LabVIEW上位機(jī)部分需要完成兩個(gè)功能:向下位機(jī)發(fā)送命令幀和將數(shù)據(jù)顯示在前面板上,Arduino Uno控制板通過串口接收上位機(jī)命令,完成相應(yīng)的數(shù)據(jù)采集,并將數(shù)據(jù)回傳至上位機(jī)。


            數(shù)據(jù)采集分為模擬量采集和數(shù)字量采集,設(shè)置采集路數(shù)各為2路,分別采用ArduinoUno上具有模擬量輸入的管腳A0、A1和具有數(shù)字量輸入的管腳2、3來實(shí)現(xiàn)。模擬量采用電位器分壓來實(shí)現(xiàn)不同電壓值,數(shù)字量采用撥動(dòng)開關(guān)在5V和GND之間切換實(shí)現(xiàn)高電平與低電平。


            5.1、前面板設(shè)計(jì)


            LabVIEW前面板分為模擬量采集和數(shù)字量采集兩個(gè)部分,模擬量采集部分主要針對(duì)模擬量輸出的傳感器,數(shù)字量采集部分主要針對(duì)數(shù)字量的輸入。

            LabVIEW上位機(jī)前面板設(shè)計(jì)如下圖所示:


            圖片


            5.2、程序框圖設(shè)計(jì)


            由于有2路模擬量和2路數(shù)字量,不同通道的模擬量或數(shù)字量的發(fā)送數(shù)據(jù)幀中,通道號(hào)不同,數(shù)字量與模擬量采集的發(fā)送數(shù)據(jù)幀中,命令號(hào)不同。發(fā)送數(shù)據(jù)幀中,具體的命令號(hào)和通道號(hào)可以自定義,此處模擬量通道0的采集命令為0x55AA10,模擬量通道1的采集命令為0x55AA11,數(shù)字量通道0的采集命令為0x55AA20,數(shù)字量通道1的采集命令為0x55AA21。

            LabVIEW上位機(jī)程序框圖如下所示:


            圖片圖片圖片圖片圖片圖片


            Arduino Uno上的模擬輸入擁有10位的分辨率,可以滿足一般的數(shù)據(jù)采集的需求同時(shí)可以更改參考電壓來提高最小分辨率。


            對(duì)于高精度的應(yīng)用,需要外部擴(kuò)展高分辨率的ADC(模數(shù)轉(zhuǎn)換器)和高精度的電壓基準(zhǔn)源。


            對(duì)于連續(xù)數(shù)據(jù)采集的應(yīng)用,可以采用LabVIEW Interface for Arduino函數(shù)庫(kù)中的模擬采樣庫(kù)中的Get Finite Analog Sample函數(shù)節(jié)點(diǎn)來實(shí)現(xiàn)。


            對(duì)于遠(yuǎn)距離的數(shù)據(jù)采集的應(yīng)用,可以采用RS-485總線、無線串口方式或網(wǎng)絡(luò)方式實(shí)現(xiàn)。


            *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



            關(guān)鍵詞: LabVIEW Arduino

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉