LabVIEW Arduino電子稱重系統(tǒng)(項目篇—1)
1
項目概述
質量是物理學中的7個基本量綱之一。在工業(yè)生產和日常生活中,我們都需要獲取一個物體的質量,比如購買某件商品時,需要確定其質量大小,或者以質量作為中間量以進一步獲得物體的其他參數(shù),如質心、偏心等。
稱重傳感器實際上是一種將質量信號轉變?yōu)榭蓽y量的電信號輸出的裝置。按照轉換方法的不同,稱重傳感器分為光電式、液壓式、電磁力式、電容式、磁極變形式、振動式、陀螺儀式、電阻應變式8類,其中,電阻應變式的使用最為廣泛。
電阻應變式稱重傳感器的工作原理:彈性體(彈性元件、敏感梁)在外力作用下產生彈性變形,使粘貼在它表面的電阻應變片(轉換元件)也隨同產生變形,電阻應變片變形后,它的阻值將發(fā)生變化(增大或減?。?,再經(jīng)相應的測量電路把這一電阻變化轉換為電信號(電壓或電流),從而完成將外力變換為電信號的過程。
由此可見,電阻應變片、彈性體和檢測電路是電阻應變式稱重傳感器中不可缺少的組成部分,下面簡述這三者的作用。
電阻應變片
電阻應變片是把一根電阻絲均勻地分布在一塊有機材料制成的基底上,即成為一片應變片,其最重要的參數(shù)是靈敏系數(shù)K。
需要說明的是:靈敏度系數(shù)K值的大小是由制作金屬電阻絲材料的性質決定的一個常數(shù),它和應變片的形狀、尺寸大小無關,不同的材料的K值一般在1.7~3.6。其次K值是一個無因次量,即它沒有量綱。
彈性體
彈性體是一個有特殊形狀的結構件,有兩個功能,首先是它承受稱重傳感器所受的外力,對外力產生反作用力,達到相對靜平衡。其次,它要產生一個高品質的應變場(區(qū)),使粘貼在此區(qū)的電阻應變片比較理想地完成機械形變至電信號的轉換。
需要說明的是,上面分析的應力狀態(tài)均是“局部"情況,而應變片實際感受的是“平均"狀態(tài)。
檢測電路
檢測電路的功能是把電阻應變片的電阻變化轉變?yōu)殡妷狠敵觥R驗榛菟沟请姌蚓哂泻芏鄡?yōu)點,如可以抑制溫度變化的影響,可以抑制側向力干擾,可以比較方便地解決稱重傳感器的補償問題等,所以惠斯登電橋在稱重傳感器中得到了廣泛的應用。因為全橋式等臂電橋的靈敏度最高,各臂參數(shù)一致,各種干擾的影響容易相互抵消,所以稱重傳感器均采用全橋式等臂電橋。
稱重傳感器的出線方式有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-短接,僅限于傳感器與稱重模塊距離較近,電壓損耗非常小的場合,否則測量存在誤差。稱重傳感器實物如下圖所示:
2
項目架構
本篇博文將介紹使用應變式稱重傳感器、HX711模塊、Arduino Uno和LabVIEW組成上下位機小量程電子稱重系統(tǒng),系統(tǒng)框圖如下圖所示:
項目架構
Arduino Uno作為下位機,負責HX711的讀寫以及數(shù)據(jù)傳輸,LabVIEW編寫的顯示軟件作為上位機,上下位機利用USB-TTL接口實現(xiàn)通信。另外,還可以通過此系統(tǒng)對未知傳感器進行標定,以修正誤差,提高測量精度。
HX711是一款專為高精度稱重傳感器而設計的24位A/D轉換器芯片。與同類型其他芯片相比,該芯片集成了包括穩(wěn)壓電源、片內時鐘振蕩器等其他同類型芯片所需要的外圍電路,具有集成度高、響應速度快、抗干擾性強等優(yōu)點。
HX711降低了電子稱重的整機成本,提高了整機的性能和可靠性。該芯片與后端MCU芯片的接口和編程非常簡單,所有控制信號由管腳驅動,無需對芯片內部的寄存器編程。輸入選擇開關可任意選取通道A或通道B,與其內部的低噪聲可編程放大器相連。
3
硬件環(huán)境
將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控制器之間的連接線也應該盡量短。若一定需要延長線,則最好使用帶電磁屏蔽的電纜線。效果如下圖所示:
4
Arduino功能設計
Arduino下位機部分需要完成以下功能:讀取和傳輸稱重傳感器的輸出信號,Arduino Uno控制板通過USB-TTL電纜接收上位機發(fā)來的命令,完成稱重傳感器的數(shù)據(jù)讀取之后,并將數(shù)據(jù)回傳至LabVIEW上位機軟件。HX711模塊主要完成輸出信號的高精度A/D轉換和給稱重傳感器提供激勵電源。
另外,還需要查看具體傳感器的靈敏度,以計算滿量程電壓和增益倍數(shù)。滿量程電壓的計算公式為︰滿量程輸出電壓=激勵電壓×靈敏度。以靈敏度1.0mV/V為例,假設供電電壓為5V,則滿量程電壓為5mV。
通過實際測量,HX711高精度A/D模塊輸出的供電電壓為4V左右,則傳感器滿量程電壓為4mV。由于HX711高精度A/D模塊增益倍數(shù)為128或64對應的滿量程差分輸入電壓分別為±20mV或±40mV。為了獲得更高的精度,選擇增益倍數(shù)為128倍。
Arduino Uno控制器負責讀取LabVIEW上位機發(fā)來的質量測量命令,并通過HX71獲取稱重傳感器輸出的電壓值,通過串口發(fā)送回上位機LabVIEW軟件。Arduino Uno控制器的程序代碼如代碼如下所示:
#include <HX711.h>HX711 hx(9, 10,128);#define HX711_COMMAND 0x10 //采集命令字 byte comdata[3]={0}; //定義數(shù)組數(shù)據(jù),存放串口接收數(shù)據(jù) void receive_data(void); //接受串口數(shù)據(jù)void test_do_data(void); //測試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù)double sum = 0; void setup(){ Serial.begin(9600); }void loop(){ while (Serial.available() > 0) //不斷檢測串口是否有數(shù)據(jù) { receive_data(); //接受串口數(shù)據(jù) test_do_data(); //測試數(shù)據(jù)是否正確并更新標志位 }}void receive_data(void) { int i ; for(i=0;i<3;i++) { comdata[i] =Serial.read(); //延時一會,讓串口緩存準備好下一個字節(jié),不延時可能會導致數(shù)據(jù)丟失, 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控制器發(fā)送電壓采集命令,Arduino控制器通過串口接收上位機命令,完成相應的數(shù)據(jù)采集之后并將采集的數(shù)據(jù)回傳,LabVIEW軟件將回傳的數(shù)據(jù)轉換為質量并顯示在前面板上。
2、通過使用標準砝碼對稱重系統(tǒng)進行標定,以獲得稱重傳感器的輸出電壓與質量的關系,從而擬合出傳感器的輸出電壓與質量的標定系數(shù),用于將傳感器的輸出電壓換算為所稱量的質量,而且通過精確的砝碼對稱重系統(tǒng)進行多次標定,有利于提高整個稱重系統(tǒng)的測量精度。
5.1、前面板設計
LabVIEW前面板分為稱重和標定兩個部分,稱重部分主要有讀取標定系數(shù)、單次稱重、多次稱重取平均值。標定部分主要有5階正反行程的標定、計算擬合系數(shù)和保存擬合系數(shù)。同時,在標定部分設有一個超時測量電壓的顯示框,以實時地顯示當前稱重傳感器輸出信號值的變化情況。小量程電子稱重系統(tǒng)的LabVIEW上位機前面板,如下圖所示:
5.2、程序框圖設計
由于在LabVIEW上位機的程序設計中需要多次調用電壓采集子程序,以向ArduinoUno控制器發(fā)送命令碼,并獲取Arduino Uno控制器返回的測量數(shù)據(jù),所以將電壓采集子程序設計成子Vl,不僅可以簡化程序設計,還便于調用。
電壓采集子程序的前面板和程序框圖,如下圖所示:
LabVIEW上位機主程序的結構為順序結構+While循環(huán)+事件結構。首先,在順序結構中的第一幀中,對所使用的數(shù)組、中間變量和顯示控件進行初始化,在順序結構的第二幀中,通過設置的串口號來初始化串口通信。然后,程序進入While循環(huán)和事件結構,不斷地檢測是否有事件得到響應,并執(zhí)行,事件結構有"測量_稱重”、“測量_讀取標定系數(shù)”"、“測量_計算平均值"、“標定_采集"、“標定_擬合"、“標定_保存"和“超時”。最后,關閉串口通信。
初始化程序框圖如下圖所示:
在“測量_稱重"事件結構中,通過“采集子程序"讀取Arduino Uno控制器返回的數(shù)據(jù),并利用標定系數(shù)計算得到所稱量的重量,同時利用稱重計數(shù)器將重量數(shù)據(jù)循環(huán)顯示在測量數(shù)據(jù)中?!皽y量_稱重"值改變事件程序框圖如下圖所示:
在“測量_讀取標定系數(shù)"事件結構中,通過“文件對話框"的選擇來讀取稱重傳感器的標定系數(shù),以用于計算所稱量的重量,同時顯示當前標定系數(shù),以表示當前所使用的標定系數(shù),進一步擴大了電子稱重系統(tǒng)的適用范圍,可以通過配置不同量程的稱重傳感器來實現(xiàn)不同范圍的稱重需求。“測量_讀取標定系數(shù)"值改變事件程序框圖如下圖所示:
在"測量_計算平均值"事件結構中,通過對測量數(shù)據(jù)數(shù)組的5個元素累加并除以5,得到所稱量的重量,這種通過多次測量取平均值的方法可以提高稱重精度,滿足較高精度的稱重需求。“測量_計算平均值"值改變事件程序框圖如下圖所示:
在“標定_采集"事件結構中,通過“采集子程序"讀取Arduino Uno控制器返回的稱重傳感器輸出的電壓信號,并利用標定計數(shù)器和條件結構將所采集到的數(shù)據(jù)依次顯示在正行程和反行程上?!皹硕╛采集"值改變事件程序框圖如下圖所示:
在“標定_擬合"事件結構中,通過將正行程和反行程數(shù)組中的電壓數(shù)據(jù)求平均值,與質量標準值數(shù)組利用線性擬合函數(shù)計算出擬合系數(shù),并顯示在標定系數(shù)上?!皹硕╛擬合”值改變事件程序框圖如下圖所示:
在“標定_保存"事件結構中,通過“文件對話框"來選擇標定系數(shù)的保存路徑,并檢查是否存在相同文件名的文件,如存在則提醒是否替換文件,然后將標定系數(shù)以配置文件的格式保存,后綴名為".ini"?!皹硕╛保存"值改變事件程序框圖如下圖所示:
當2秒內無事件被觸發(fā),則事件結構進入“超時"分支。在“超時"事件結構中,通過“采集子程序"讀取Arduino Uno控制器返回的稱重傳感器輸出信號,并將其顯示為前面板上的當前電壓值。“超時"事件結構如下圖所示:
除了傳感器的非線性之外,電阻應變式稱重傳感器溫度漂移的偏差值也不容忽視,可以在系統(tǒng)中加入溫度傳感器(例如DS18B20),并在計算重量時進行線性溫度漂移修正。
另外,選擇較高精度的稱重傳感器,還可以利用此小量程電子稱重系統(tǒng)實現(xiàn)物體的質量質心的測量,例如,固體火箭發(fā)動機的質量質心測量系統(tǒng)。
*博客內容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。