我們一起來(lái)DIY一個(gè)電子秤吧
實(shí)現(xiàn)目標(biāo)
- 實(shí)現(xiàn)HX711模塊的驅(qū)動(dòng)
- 實(shí)現(xiàn)電子秤的校準(zhǔn)
- 準(zhǔn)確輸出待測(cè)物品的重量
所需工具及環(huán)境
- Keil 5
- STM32F103RET6核心板(本平臺(tái)自制專用核心板,隨便找一個(gè)開(kāi)發(fā)板亦可)
- 電子秤模塊
本文源碼
注意:
HX711 AD模塊的DOUT引腳與STM32的PA6相連;
HX711 AD模塊的PD_SCK引腳與STM32的PA7相連。
后臺(tái)回復(fù)關(guān)鍵字“HX711”,獲取HX711模塊資料及工程源碼。
電子秤模塊
上圖所示的即為壓力稱重傳感器,其輸出電壓信號(hào),壓力越大輸出電壓信號(hào)越大 。
稱重傳感器采用電阻應(yīng)變片橋式電路實(shí)現(xiàn),主要由彈性體和電阻應(yīng)變片等組成。
應(yīng)用場(chǎng)景:
- 價(jià)格計(jì)算秤
- 計(jì)數(shù)秤
- 稱重秤
- 零售秤
稱重傳感器模塊有靈敏度和激勵(lì)電壓兩個(gè)重要參數(shù),比如兩個(gè)參數(shù)的值可能為如下值:
靈敏度:1.0mV/V
激勵(lì)電壓:3~12V
滿量程輸出電壓 = 激勵(lì)電壓 * 靈敏度
比如激勵(lì)電壓是5V,則輸出最大電壓是5mV。
應(yīng)變片
電阻應(yīng)變片把導(dǎo)體形變的物理信號(hào)轉(zhuǎn)換成電阻變化的信號(hào)。
稱重傳感器模塊上的膠基(硅橡膠)下面存放的就是應(yīng)變片。
應(yīng)變片一般由金屬絲為材料制作的應(yīng)變電阻,當(dāng)金屬絲受外力作用時(shí),其長(zhǎng)度和截面積都會(huì)發(fā)生變化,進(jìn)而其電阻值即會(huì)發(fā)生改變。
當(dāng)金屬絲受外力作用而伸長(zhǎng)時(shí),其長(zhǎng)度增加,而截面積減少,電阻值便會(huì)增大。
當(dāng)金屬絲受外力作用而壓縮時(shí),長(zhǎng)度減小而截面增加,電阻值則會(huì)減小。
金屬應(yīng)變片對(duì)電阻絲材料有較高的要求,一般要求靈敏度系數(shù)大,電阻溫系數(shù)小,具有優(yōu)良的機(jī)械加工和焊接性能等,康銅是目前應(yīng)用最廣泛的應(yīng)變絲材料。
稱重傳感器模塊上下表面各有一個(gè)應(yīng)變片,每個(gè)應(yīng)變片內(nèi)有2個(gè)壓力電阻。一共為4個(gè)壓力電阻,組成全橋式電路。全橋電路可以提高所測(cè)的精度,而且電橋本身也能實(shí)現(xiàn)自補(bǔ)償(溫度補(bǔ)償)。
橋式傳感器
電橋電路的被測(cè)量者的狀態(tài)量一般是非常微弱的,比如在稱重傳感器中,就是把電阻片的電阻變化率ΔR/R轉(zhuǎn)換成電壓輸出,然后提供給放大電路放大后進(jìn)行測(cè)量。
上圖中的電橋電路,由四個(gè)電阻R1、R2、R3、R4組成一個(gè)四邊形的回路,每一邊稱作電橋的“橋臂”。
a、b、c、d為四個(gè)結(jié)點(diǎn),a、c結(jié)點(diǎn)之間接入電源,另外兩個(gè)結(jié)點(diǎn)(b、d)之間電壓差作為輸出電壓。
b、d點(diǎn)的電壓相等時(shí)稱為“電橋平衡”;反之,稱為“電橋不平衡”。
電橋平衡的條件:上下兩個(gè)橋臂的左右橋臂電阻的比例相等。
若橋路的四個(gè)橋臂相鄰電阻的電阻值變化趨勢(shì)相同,橋路輸出電壓為0。
若相鄰電阻的電阻值變化趨勢(shì)相反,橋路就會(huì)有電壓輸出。
全橋的四個(gè)橋臂都為應(yīng)變片的話,由于溫度變化而引起的電阻值漂移數(shù)值一致,就可以相互抵消,進(jìn)而全橋能夠?qū)崿F(xiàn)溫度的自補(bǔ)償。
應(yīng)用橋式電路可以有效提高傳感器的靈敏度。
HX711 AD模塊原理圖
該方案使用內(nèi)部時(shí)鐘振蕩器(XI=0),10Hz的輸出數(shù)據(jù)速率(RATE=0,可配置為80Hz)。
電源(2.7~5.5V)直接取用與MCU芯片相同的供電電源。片內(nèi)穩(wěn)壓電源電路通過(guò)片外PNP管S8550和分壓電阻R12、R13向傳感器和A/D轉(zhuǎn)換器提供穩(wěn)定的低噪聲模擬電源。
通道A模擬差分輸入可直接與橋式傳感器的差分輸出相接。
由于橋式傳感器輸出的信號(hào)較小,為了充分利用A/D轉(zhuǎn)換器的輸入動(dòng)態(tài)范圍,該通道的可編程增益較大,為128或64。這些增益所對(duì)應(yīng)的滿量程差分輸入電壓分別±20mV或±40mV。
通道B為固定的32增益,所對(duì)應(yīng)的滿量程差分輸入電壓為±80mV。
安裝方法
連線
HX711 AD模塊可以將電壓轉(zhuǎn)換為數(shù)字信號(hào),HX711 AD模塊與稱重傳感器接線方式:
- 紅線接HX711模塊的激勵(lì)電壓正(E+)
- 黑線接HX711模塊的激勵(lì)電壓負(fù)(E-)
- 綠線(或藍(lán)線)接HX711模塊的A+
- 白線接HX711模塊的A-
稱重原理
當(dāng)彈性體因承載產(chǎn)生形變時(shí),電阻應(yīng)變片受到拉伸或壓縮而產(chǎn)生變形,它的阻值將發(fā)生變化(增大或減小),從而使電橋失去平衡,從而產(chǎn)生相應(yīng)的差動(dòng)信號(hào),供后續(xù)電路(本實(shí)例是HX711)測(cè)量和轉(zhuǎn)換。
應(yīng)變片中的電阻絲的電阻相對(duì)變化量與材料力學(xué)中的軸向應(yīng)變關(guān)系,在很大范圍內(nèi)是線性的。
因?yàn)槭芾髴?yīng)變片的阻值R的變化量很小,為了方便測(cè)量這一微小的變化量,所以采用全橋式電路可以把被測(cè)量的本底去掉,轉(zhuǎn)換成一個(gè)在0值附近變化的毫伏級(jí)的輸出電壓,進(jìn)而經(jīng)過(guò)放大器之后,通過(guò)A/D轉(zhuǎn)換器求得這個(gè)輸出電壓。
由上我們可以近似認(rèn)為應(yīng)力的變化和電阻的變化量成正比,我們利用這一特性,進(jìn)而實(shí)現(xiàn)物品重量的測(cè)量。
下面我們介紹一下測(cè)量這個(gè)電壓的A/D模塊:HX711。
HX711簡(jiǎn)介
HX711是一款專為高精度電子秤而設(shè)計(jì)的24位A/D轉(zhuǎn)換器芯片。與同類型其它芯片相比,該芯片集成了包括穩(wěn)壓電源、片內(nèi)時(shí)鐘振蕩器等其它同類型芯片所需要的外圍電路,具有集成度高、響應(yīng)速度快、抗干擾性強(qiáng)等優(yōu)點(diǎn)。
降低了電子秤的整機(jī)成本,提高了整機(jī)的性能和可靠性。
該芯片與后端MCU 芯片的接口和編程非常簡(jiǎn)單,所有控制信號(hào)由管腳驅(qū)動(dòng),無(wú)需對(duì)芯片內(nèi)部的寄存器編程。
輸入選擇開(kāi)關(guān)可任意選取通道A 或通道B,與其內(nèi)部的低噪聲可編程放大器相連。
通道A 的可編程增益為128 或64,對(duì)應(yīng)的滿額度差分輸入信號(hào)幅值分別為±20mV或±40mV。通道B 則為固定的32 增益,常用于系統(tǒng)參數(shù)檢測(cè)。
芯片內(nèi)提供的穩(wěn)壓電源可以直接向外部傳感器和芯片內(nèi)的A/D 轉(zhuǎn)換器提供電源,系統(tǒng)板上無(wú)需另外的模擬電源。芯片內(nèi)的時(shí)鐘振蕩器不需要任何外接器件。上電自動(dòng)復(fù)位功能簡(jiǎn)化了開(kāi)機(jī)的初始化過(guò)程。
芯片特點(diǎn)
- 兩路可選擇差分輸入;
- 片內(nèi)低噪聲可編程放大器,可選增益為64 和128;
- 可選擇10Hz 或80Hz 的輸出數(shù)據(jù)速率;
- 工作電壓范圍:2.6 ~ 5.5V;
- 工作溫度范圍:-20 ~ +85℃;
- 16 管腳的SOP-16 封裝;
- 校準(zhǔn)后稱重精度:1g
HX711內(nèi)部框圖
HX711引腳定義
建議使用通道A與傳感器相連,作為小信號(hào)輸入通道;
通道B用于系統(tǒng)參數(shù)檢測(cè),如電池電壓檢測(cè)。
與單片機(jī)通信
HX711芯片與單片機(jī)的通訊只需要兩個(gè)引腳,時(shí)鐘引腳PD_SCK及數(shù)據(jù)引腳DOUT,用來(lái)輸出數(shù)據(jù),選擇輸入通道和增益。
當(dāng)數(shù)據(jù)輸出管腳DOUT為高電平時(shí),表明A/D轉(zhuǎn)換器還未準(zhǔn)備好輸出數(shù)據(jù),此時(shí)串口時(shí)鐘輸入信號(hào)PD_SCK應(yīng)為低電平。當(dāng)DOUT從高電平變低電平后,PD_SCK應(yīng)輸入25至27個(gè)不等的時(shí)鐘脈沖。
其中第一個(gè)時(shí)鐘脈沖的上升沿將讀出輸出24位數(shù)據(jù)的最高位(MSB),直至第24個(gè)時(shí)鐘脈沖完成,24位輸出數(shù)據(jù)從最高位至最低位逐位輸出完成。
第25至27個(gè)時(shí)鐘脈沖用來(lái)決定下一次A/D轉(zhuǎn)換的輸入通道和增益。
如下圖所示,脈沖數(shù)為25個(gè)時(shí),代表輸入通道為A,增益為128倍。
注意: 芯片上電復(fù)位之后,通道A和增益128會(huì)被自動(dòng)選擇作為第一次A/D轉(zhuǎn)換的輸入通道和增益。
通道A 的可編程增益為128 或64,對(duì)應(yīng)的滿額度差分輸入信號(hào)幅值分別為±20mV或±40mV。
計(jì)算輸出電壓
對(duì)于單片機(jī)來(lái)說(shuō),只需要通過(guò)兩個(gè)普通的IO口與HX711的PD_SCK、DOUT引腳相連,并根據(jù)以上時(shí)序進(jìn)行編程,即可完成對(duì)HX711芯片的控制,控制程序如下。
AD值獲取
long HX711_Read(void) //增益128 { long val = 0; //val為讀取到的值,通過(guò)移位,一位一位讀?。?/span> unsigned char i = 0; HX711_IN = 1; delay_us(1); HX711_SCK=0; //SCK=0 val = 0; //判斷模塊是否準(zhǔn)備好 while(HX711_IN); for(i=0;i<24;i++) { HX711_SCK=1; val=val<<1; delay_us(1); HX711_SCK=0; if(HX711_IN) val++; delay_us(1); } HX711_SCK=1; val = val^0x800000; delay_us(1); HX711_SCK=0; delay_us(1); return val; }
測(cè)量校準(zhǔn)
(1)測(cè)量空載情況下的AD值
void Get_Maopi(void) {
Weight_Maopi = HX711_Read();
}
為了驗(yàn)證方便,我們?cè)谟布想姀?fù)位的時(shí)候,獲取毛重的值,即在main函數(shù)中的while(1)循環(huán)前面調(diào)用上面的函數(shù)獲取毛重值,然后將此A/D值保存至全局變量Weight_Maopi中。
(2)測(cè)量一個(gè)已知重量物品的AD值
已知重量的物品可以選擇標(biāo)準(zhǔn)砝碼:
或者拿家里做糕點(diǎn)的電子秤:
或者拿一個(gè)已知重量的物品,比如:
因?yàn)槲覀冞@里需要對(duì)咱們自制的電子秤進(jìn)行驗(yàn)證,所以我們選用電子秤來(lái)測(cè)量物品重量。
(3)獲取比例系數(shù)
通過(guò)printf函數(shù)打印出上面變量的值:
printf("Weight=%d,Weight_Shiwu=%ld ,Maopi=%ld,(Weight-Maopi)=%ld \r\n",(int)Weight,Weight_Shiwu,Weight_Maopi,(Weight_Shiwu-Weight_Maopi));
物品 | 重量 | AD值 |
---|---|---|
空載 | 0g | 8512030 |
充電寶 | 221g | 8600300 |
因?yàn)檩敵龅腁/D編碼值和輸出電壓是成正比的,而輸出電壓和重量成正比,利用上面的兩個(gè)值,求得AD值和重量的線性方程的K。
K = (8600300-8512030) / 221 = 88270/221 = 399.41
AD與重量轉(zhuǎn)換
代碼實(shí)現(xiàn)
float Get_Weight(void) { float fWeight = 0.0; Weight_Shiwu = HX711_Read(); fWeight = Weight_Shiwu-Weight_Maopi; if(fWeight <= 0) fWeight = 0; fWeight = ((float)fWeight/dK); return fWeight; }
代碼中的dK即為上面求得線性方程的K,其中Weight_Shiwu為當(dāng)前電子秤上物品的A/D值,Weight_Maopi為空載不放物品的時(shí)候的A/D值。兩個(gè)A/D值的差值與K的商即為待測(cè)物品的重量。
Get_Weight() 函數(shù)的返回值即為求得的真實(shí)重量,單位g。
結(jié)果展示
擴(kuò)展
此外,程序可以增加的功能還有:
- LCD顯示
- 矩陣鍵盤輸入及語(yǔ)音播報(bào)功能
- 標(biāo)準(zhǔn)砝碼校準(zhǔn)功能(如500g),其實(shí)就是修正系數(shù)的自我修正功能
- 去皮功能
- 金錢累加功能
- 計(jì)算金額等等功能
思考
今天主要介紹一下稱重傳感器模塊的使用,下面內(nèi)容大家可以思考一下。
- 全橋電路的優(yōu)點(diǎn)?
- HX711芯片輸出的數(shù)據(jù)編碼與電壓的轉(zhuǎn)換?
- HX711測(cè)量精度的優(yōu)化?
- 稱重傳感器模塊的其他應(yīng)用電路?
- 提高稱重的精度?(分段求取比例系數(shù)?)
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!