日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Arduino與LabVIEW互動應(yīng)用02

 開啟美好每一天 2013-12-24

摘要:針對低速、低成本、快速搭建的特點,采用ArduinoLabVIEW來實現(xiàn)低成本上下位機數(shù)據(jù)采集系統(tǒng)。Arduino作為下位機,負責(zé)A/D轉(zhuǎn)換以及數(shù)據(jù)傳輸;LabVIEW編寫的數(shù)據(jù)采集軟件作為上位機;上下位機利用RS-232串行接口實現(xiàn)通訊。

【注】一般認為上位機為主機,下位機為從機,上位機領(lǐng)導(dǎo)下位機按照上位機機的意愿工作為上位機服務(wù);同時下位機也可以主動向上位機發(fā)出請求,上位機響應(yīng)下位機并配合完成某個請求。

數(shù)據(jù)采集,是指從傳感器和其它待測設(shè)備等模擬和數(shù)字被測單元中自動采集信息的過程。相應(yīng)能夠完成數(shù)據(jù)采集的系統(tǒng)被稱為數(shù)據(jù)采集系統(tǒng)。

數(shù)據(jù)采集系統(tǒng)的任務(wù),就是采集傳感器輸出的模擬信號轉(zhuǎn)換成計算機能識別的信號,并送入計算機,然后將計算得到的數(shù)據(jù)進行顯示或打印,以便實現(xiàn)對某些物理量的監(jiān)測,其中一些數(shù)據(jù)還將被生產(chǎn)過程中的計算機控制系統(tǒng)用來控制某些物理量。 【文獻1

一、Arduino下位機部分

數(shù)據(jù)采集系統(tǒng)中的Arduino下位機部分采用Arduino Leonardo實驗板,如圖1所示。

Arduino與LabVIEW互動應(yīng)用02-基于Arduino+LabVIEW的多路數(shù)據(jù)采集系統(tǒng) 
圖1 Arduino Leonardo控制板

Arduino下位機部分需要完成兩個功能:數(shù)據(jù)采集和數(shù)據(jù)傳輸,Arduino Leonardo控制板通過串口接受上位機命令,完成相應(yīng)的數(shù)據(jù)采集,并將數(shù)據(jù)回傳至上位機。

數(shù)據(jù)采集分為模擬量采集和數(shù)字量采集,設(shè)置采集路數(shù)各為2路,分別采用Arduino UNO上具有模擬量輸入的管腳A0、A1和具有數(shù)字量輸入的管腳2、3來實現(xiàn)。模擬量采用接至GND、3.3V和5V來實現(xiàn)不同電壓值,數(shù)字量采用接至5V和GND實現(xiàn)高電平與低電平。【注】

【注】如果有電位器,可以用來測量分壓值。由于手頭沒有電位器,我這里只是簡單的實現(xiàn)。

Arduino Leonardo代碼清單:

#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 LED = 13;             //定義LED連接的管腳

int A0_mark=0;            //定義A0的標(biāo)志位

int A1_mark=0;            //定義A1的標(biāo)志位

int D0_mark=0;            //定義D0的標(biāo)志位

int D1_mark=0;            //定義D1的標(biāo)志位


int AD_Value=0;          //AD轉(zhuǎn)換后的數(shù)字量

float float_AD_Value;    //數(shù)字量換算成浮點電壓量

int D_Value=0;           //數(shù)字量測量的數(shù)據(jù)


void receive_data(void);      //接受串口數(shù)據(jù)

void test_data(void);         //測試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù)

void do_command(void);        //執(zhí)行更新的數(shù)據(jù)


void setup()

{

  Serial.begin(9600);      

  pinMode(LED, OUTPUT);

  

}

void loop()

{

  while (Serial.available() > 0)   //不斷檢測串口是否有數(shù)據(jù)

   {

        receive_data();            //接受串口數(shù)據(jù)

        test_data();               //測試數(shù)據(jù)是否正確并更新標(biāo)志位

        do_command();              //執(zhí)行更新的數(shù)據(jù)

   }

}

void receive_data(void)       

{

   int i ;

   for(i=0;i<3;i++)

   {

      comdata[i] =Serial.read();

      //延時一會,讓串口緩存準(zhǔn)備好下一個字節(jié),不延時可能會導(dǎo)致數(shù)據(jù)丟失,

       delay(2);

   }

}


void test_data(void)

{

  if(comdata[0] == 0x55)            //0x55和0xAA均為判斷是否為有效命令

   {

     if(comdata[1] == 0xAA)

     {

        if(comdata[2] == A0_COMMAND)

          {   

              A0_mark=2;                //A0更新位置位  

          }

        if(comdata[2] == A1_COMMAND)

         

              A1_mark=2;                //A1更新位置位

          }

        if(comdata[2] == D0_COMMAND)

          {   

              D0_mark=2;                //D0更新位置位  

          }

        if(comdata[2] == D1_COMMAND)

         

              D1_mark=2;               //D1更新位置位

          }

      }

   }

}


void do_command(void)

{

  if(A0_mark==2)

  {

    A0_mark=0;                                 //復(fù)位A0更新位

    digitalWrite(LED, HIGH);                   //打開LED燈

    AD_Value = analogRead(A0);                 //讀取A0電壓值

    float_AD_Value=(float)AD_Value/1023*5.00;  //換算為浮點電壓值

    Serial.println(float_AD_Value,2);          //保留兩位小數(shù)發(fā)送數(shù)據(jù)

    delay(500);

    digitalWrite(LED, LOW);                     //關(guān)閉LED燈

  }

  if(A1_mark==2)

  {

    A1_mark=0;                                 //復(fù)位A1更新位

    digitalWrite(LED, HIGH);                   //打開LED燈

    AD_Value = analogRead(A1);                 //讀取A1電壓值

    float_AD_Value=(float)AD_Value/1023*5.00;  //換算為浮點電壓值

    Serial.println(float_AD_Value,2);          //保留兩位小數(shù)發(fā)送數(shù)據(jù)

    delay(500);

    digitalWrite(LED, LOW);                     //關(guān)閉LED燈

  }

  if(D0_mark==2)

  {

    D0_mark=0;                                 //復(fù)位D0更新位

    digitalWrite(LED, HIGH);                   //打開LED燈

    D_Value = digitalRead(2);                  //讀取D2數(shù)字量

    Serial.println(D_Value);                  //發(fā)送數(shù)字量測量數(shù)據(jù)

    delay(500);

    digitalWrite(LED, LOW);                     //關(guān)閉LED燈

  }

  if(D1_mark==2)

  {

    D1_mark=0;                                  //復(fù)位D1更新位

    digitalWrite(LED, HIGH);                    //打開LED燈

    D_Value = digitalRead(3);                   //讀取D1數(shù)字量

    Serial.println(D_Value);                   //發(fā)送數(shù)據(jù)量測量數(shù)據(jù)

    delay(500);

    digitalWrite(LED, LOW);                      //關(guān)閉LED燈

  }

}

二、LabVIEW上位機部分

LabVIEW與Arduino通訊已在《Arduino與LabVIEW互動應(yīng)用01-串口控制LED亮滅》一文中作了簡單的介紹,此處在上次的基礎(chǔ)上修改實現(xiàn)。

串口讀寫的程序框圖如圖2所示。首先,對選擇的通道的串口進行配置,然后串口寫入所需要測量的通道號,等待100ms,從串口中讀取Arduino下位機返回數(shù)據(jù),最后對數(shù)據(jù)進行適當(dāng)?shù)霓D(zhuǎn)換并顯示出來。Arduino與LabVIEW互動應(yīng)用02-基于Arduino+LabVIEW的多路數(shù)據(jù)采集系統(tǒng)

圖2 LabVIEW串口通訊最小部分

LabVIEW上位機前面板設(shè)計如圖3所示。

Arduino與LabVIEW互動應(yīng)用02-基于Arduino+LabVIEW的多路數(shù)據(jù)采集系統(tǒng)

圖3 LabVIEW上位機前面板

LabVIEW上位機程序框圖如圖4和圖5所示,由于有2路模擬量和2路數(shù)字量,此處僅給出一路模擬量和一路數(shù)字量的程序框圖。不同通道的模擬量或數(shù)字量的發(fā)送數(shù)據(jù)幀中,通道號不同;數(shù)字量與模擬量采集的發(fā)送數(shù)據(jù)幀中,命令號不同。發(fā)送數(shù)據(jù)幀中,具體的命令號和通道可以自己定義,不過需要上下位機的對應(yīng)起來。

Arduino與LabVIEW互動應(yīng)用02-基于Arduino+LabVIEW的多路數(shù)據(jù)采集系統(tǒng)

圖4 模擬量采集程序框圖

Arduino與LabVIEW互動應(yīng)用02-基于Arduino+LabVIEW的多路數(shù)據(jù)采集系統(tǒng)

圖5 數(shù)字量采集程序框圖

三、實驗與演示

通過將模擬量輸入A0依次接入GND、3.3V和5V,然后點擊“測量”按鈕,觀察面板上的儀表盤和數(shù)顯框中數(shù)值的變化。

通過將數(shù)字量輸入2依次接入GND和5V,然后點擊“測量”按鈕,觀察面板上的LED燈的變化,LED亮代表高電平、LED滅代表低電平。 

四、總結(jié)

在傳感器等領(lǐng)域經(jīng)常需要用到數(shù)據(jù)采集的功能,此應(yīng)用實現(xiàn)了命令發(fā)送與數(shù)據(jù)回傳功能,可以在此基礎(chǔ)上擴展功能,對相關(guān)傳感器的數(shù)據(jù)采集有一定的參考價值。

參考文獻:

文獻1:基于單片機的數(shù)據(jù)采集系統(tǒng)的控制器設(shè)計

文獻2:http:///

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多