天天看點

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

目錄

1、項目概述

2、項目架構

3、硬體環境

4、Arduino功能設計

5、LabVIEW功能設計

5.1、前面闆設計

5.2、程式框圖設計

1、項目概述

品質是實體學中的7個基本量綱之一。在工業生産和日常生活中,我們都需要擷取一個物體的品質,比如購買某件商品時,需要确定其品質大小,或者以品質作為中間量以進一步獲得物體的其他參數,如質心、偏心等。

稱重傳感器實際上是一種将品質信号轉變為可測量的電信号輸出的裝置。按照轉換方法的不同,稱重傳感器分為光電式、液壓式、電磁力式、電容式、磁極變形式、振動式、陀螺儀式、電阻應變式8類,其中,電阻應變式的使用最為廣泛。

電阻應變式稱重傳感器的工作原理:彈性體(彈性元件、敏感梁)在外力作用下産生彈性變形,使粘貼在它表面的電阻應變片(轉換元件)也随同産生變形,電阻應變片變形後,它的阻值将發生變化(增大或減小),再經相應的測量電路把這一電阻變化轉換為電信号(電壓或電流),進而完成将外力變換為電信号的過程。

由此可見,電阻應變片、彈性體和檢測電路是電阻應變式稱重傳感器中不可缺少的組成部分,下面簡述這三者的作用。

  • 電阻應變片

電阻應變片是把一根電阻絲均勻地分布在一塊有機材料制成的基底上,即成為一片應變片,其最重要的參數是靈敏系數K。

需要說明的是:靈敏度系數K值的大小是由制作金屬電阻絲材料的性質決定的一個常數,它和應變片的形狀、尺寸大小無關,不同的材料的K值一般在1.7~3.6。其次K值是一個無因次量,即它沒有量綱。

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計
  • 彈性體

彈性體是一個有特殊形狀的結構件,有兩個功能,首先是它承受稱重傳感器所受的外力,對外力産生反作用力,達到相對靜平衡。其次,它要産生一個高品質的應變場(區),使粘貼在此區的電阻應變片比較理想地完成機械形變至電信号的轉換。

需要說明的是,上面分析的應力狀态均是“局部"情況,而應變片實際感受的是“平均"狀态。

  • 檢測電路

檢測電路的功能是把電阻應變片的電阻變化轉變為電壓輸出。因為惠斯登電橋具有很多優點,如可以抑制溫度變化的影響,可以抑制側向力幹擾,可以比較友善地解決稱重傳感器的補償問題等,是以惠斯登電橋在稱重傳感器中得到了廣泛的應用。因為全橋式等臂電橋的靈敏度最高,各臂參數一緻,各種幹擾的影響容易互相抵消,是以稱重傳感器均采用全橋式等臂電橋。

稱重傳感器的出線方式有4線和6線兩種,子產品或稱重變送器的接線也有4線和6線兩種,接線原則是:傳感器能接6線的不接4線,必須接4線的就要進行短接。

一般的稱重傳感器都是六線制的,當接成四線制時,電源線(EXC-,EXC+)與回報線(SEN-,SEN+)就分别短接了。SEN+和SEN-是補償線路電阻用的,SEN+和EXC+是通路的,SEN-和EXC-是通路的。EXC+和EXC-是給稱重傳感器供電的,但是由于稱重子產品和傳感器之間的線路損耗,實際上傳感器接收到的電壓會小于供電電壓。每個稱重傳感器都有一個mV/V的特性,它輸出的mV信号與接收到的電壓密切相關,SENS+和SENS-實際上是稱重傳感器内的一個高阻抗回路,可以将稱重子產品實際接收到的電壓回報給稱重子產品。在稱重傳感器上将EXC+與SENS+短接,EXC-與SENS-短接,僅限于傳感器與稱重子產品距離較近,電壓損耗非常小的場合,否則測量存在誤差。稱重傳感器實物如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

2、項目架構

本篇博文将介紹使用應變式稱重傳感器、HX711子產品、Arduino Uno和LabVIEW組成上下位機小量程電子稱重系統,系統框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

Arduino Uno作為下位機,負責HX711的讀寫以及資料傳輸,LabVIEW編寫的顯示軟體作為上位機,上下位機利用USB-TTL接口實作通信。另外,還可以通過此系統對未知傳感器進行标定,以修正誤差,提高測量精度。

HX711是一款專為高精度稱重傳感器而設計的24位A/D轉換器晶片。與同類型其他晶片相比,該晶片內建了包括穩壓電源、片内時鐘振蕩器等其他同類型晶片所需要的外圍電路,具有內建度高、響應速度快、抗幹擾性強等優點。

HX711降低了電子稱重的整機成本,提高了整機的性能和可靠性。該晶片與後端MCU晶片的接口和程式設計非常簡單,所有控制信号由管腳驅動,無需對晶片内部的寄存器程式設計。輸入選擇開關可任意選取通道A或通道B,與其内部的低噪聲可程式設計放大器相連。

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

項目資源下載下傳請參見:LabVIEWArduino電子稱重系統【實戰項目】-單片機文檔類資源

3、硬體環境

将HX711子產品的VCC、GND、SCK和DOUT分别接至Arduino Uno控制器的5V、GND、D9和D10;并将HX711子產品的E+、E-、A+和A-分别接稱重傳感器的激勵電壓正、負,輸出電壓正、負(具體接線請查閱所使用的傳感器接線說明),最後将HX711子產品的B+和B-接GND。

為了減少幹擾信号,HX711高精度A/D子產品與電阻式稱重傳感器之間的連接配接線應盡量短,過長的話會受到幹擾,HX711高精度A/D子產品與Arduino Uno控制器之間的連接配接線也應該盡量短。若一定需要延長線,則最好使用帶電磁屏蔽的電纜線。效果如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

4、Arduino功能設計

Arduino下位機部分需要完成以下功能:讀取和傳輸稱重傳感器的輸出信号,Arduino Uno控制闆通過USB-TTL電纜接收上位機發來的指令,完成稱重傳感器的資料讀取之後,并将資料回傳至LabVIEW上位機軟體。HX711子產品主要完成輸出信号的高精度A/D轉換和給稱重傳感器提供激勵電源。

另外,還需要檢視具體傳感器的靈敏度,以計算滿量程電壓和增益倍數。滿量程電壓的計算公式為︰滿量程輸出電壓=激勵電壓×靈敏度。以靈敏度1.0mV/V為例,假設供電電壓為5V,則滿量程電壓為5mV。

通過實際測量,HX711高精度A/D子產品輸出的供電電壓為4V左右,則傳感器滿量程電壓為4mV。由于HX711高精度A/D子產品增益倍數為128或64對應的滿量程差分輸入電壓分别為±20mV或±40mV。為了獲得更高的精度,選擇增益倍數為128倍。

Arduino Uno控制器負責讀取LabVIEW上位機發來的品質測量指令,并通過HX71擷取稱重傳感器輸出的電壓值,通過序列槽發送回上位機LabVIEW軟體。Arduino Uno控制器的程式代碼如代碼如下圖所示:

#include <HX711.h>
HX711 hx(9, 10,128);
#define HX711_COMMAND  0x10   //采集指令字

byte comdata[3]={0};      //定義數組資料,存放序列槽接收資料
 
void receive_data(void);      //接受序列槽資料
void test_do_data(void);         //測試序列槽資料是否正确,并更新資料
double sum = 0; 
void setup()
{
  Serial.begin(9600);      

}
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)
     {
        if(comdata[2] == HX711_COMMAND)
        {            
            for (int i = 0; i < 10; i++){
                sum += hx.read();}
            Serial.println(sum/10,2);          
        }
      }
   }
}            

複制

5、LabVIEW功能設計

LabVIEW上位機部分需要完成以下功能:

1、向下位機Arduino控制器發送電壓采集指令,Arduino控制器通過序列槽接收上位機指令,完成相應的資料采集之後并将采集的資料回傳,LabVIEW軟體将回傳的資料轉換為品質并顯示在前面闆上。

2、通過使用标準砝碼對稱重系統進行标定,以獲得稱重傳感器的輸出電壓與品質的關系,進而拟合出傳感器的輸出電壓與品質的标定系數,用于将傳感器的輸出電壓換算為所稱量的品質,而且通過精确的砝碼對稱重系統進行多次标定,有利于提高整個稱重系統的測量精度。

5.1、前面闆設計

LabVIEW前面闆分為稱重和标定兩個部分,稱重部分主要有讀取标定系數、單次稱重、多次稱重取平均值。标定部分主要有5階正反行程的标定、計算拟合系數和儲存拟合系數。同時,在标定部分設有一個逾時測量電壓的顯示框,以實時地顯示目前稱重傳感器輸出信号值的變化情況。小量程電子稱重系統的LabVIEW上位機前面闆,如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

5.2、程式框圖設計

由于在LabVIEW上位機的程式設計中需要多次調用電壓采集子程式,以向ArduinoUno控制器發送指令碼,并擷取Arduino Uno控制器傳回的測量資料,是以将電壓采集子程式設計成子Vl,不僅可以簡化程式設計,還便于調用。

電壓采集子程式的前面闆和程式框圖,如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計
LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

LabVIEW上位機主程式的結構為順序結構+While循環+事件結構。首先,在順序結構中的第一幀中,對所使用的數組、中間變量和顯示控件進行初始化,在順序結構的第二幀中,通過設定的序列槽号來初始化序列槽通信。然後,程式進入While循環和事件結構,不斷地檢測是否有事件得到響應,并執行,事件結構有"測量_稱重”、“測量_讀取标定系數”"、“測量_計算平均值"、“标定_采集"、“标定_拟合"、“标定_儲存?imageView2/2/w/1620"和“逾時”。最後,關閉序列槽通信。

初始化程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

在“測量_稱重"事件結構中,通過“采集子程式?imageView2/2/w/1620"讀取Arduino Uno控制器傳回的資料,并利用标定系數計算得到所稱量的重量,同時利用稱重計數器将重量資料循環顯示在測量資料中。“測量_稱重"值改變事件程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

在“測量_讀取标定系數"事件結構中,通過“檔案對話框"的選擇來讀取稱重傳感器的标定系數,以用于計算所稱量的重量,同時顯示目前标定系數,以表示目前所使用的标定系數,進一步擴大了電子稱重系統的适用範圍,可以通過配置不同量程的稱重傳感器來實作不同範圍的稱重需求。“測量_讀取标定系數?imageView2/2/w/1620"值改變事件程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

在"測量_計算平均值"事件結構中,通過對測量資料數組的5個元素累加并除以5,得到所稱量的重量,這種通過多次測量取平均值的方法可以提高稱重精度,滿足較高精度的稱重需求。“測量_計算平均值?imageView2/2/w/1620"值改變事件程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

在“标定_采集"事件結構中,通過“采集子程式?imageView2/2/w/1620"讀取Arduino Uno控制器傳回的稱重傳感器輸出的電壓信号,并利用标定計數器和條件結構将所采集到的資料依次顯示在正行程和反行程上。“标定_采集"值改變事件程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

在“标定_拟合?imageView2/2/w/1620"事件結構中,通過将正行程和反行程數組中的電壓資料求平均值,與品質标準值數組利用線性拟合函數計算出拟合系數,并顯示在标定系數上。“标定_拟合”值改變事件程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

在“标定_儲存"事件結構中,通過“檔案對話框"來選擇标定系數的儲存路徑,并檢查是否存在相同檔案名的檔案,如存在則提醒是否替換檔案,然後将标定系數以配置檔案的格式儲存,字尾名為".ini"。“标定_儲存?imageView2/2/w/1620"值改變事件程式框圖如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

當2秒内無事件被觸發,則事件結構進入“逾時"分支。在“逾時"事件結構中,通過“采集子程式?imageView2/2/w/1620"讀取Arduino Uno控制器傳回的稱重傳感器輸出信号,并将其顯示為前面闆上的目前電壓值。“逾時"事件結構如下圖所示:

LabVIEW Arduino電子稱重系統(項目篇—1)目錄1、項目概述2、項目架構3、硬體環境4、Arduino功能設計5、LabVIEW功能設計

除了傳感器的非線性之外,電阻應變式稱重傳感器溫度漂移的偏內插補點也不容忽視,可以在系統中加入溫度傳感器(例如DS18B20),并在計算重量時進行線性溫度漂移修正。

另外,選擇較高精度的稱重傳感器,還可以利用此小量程電子稱重系統實作物體的品質質心的測量,例如,固體火箭發動機的品質質心測量系統。

項目資源下載下傳請參見:LabVIEWArduino電子稱重系統【實戰項目】-單片機文檔類資源