• <tfoot id="jgr1e"><wbr id="jgr1e"></wbr></tfoot>
    <li id="jgr1e"><ins id="jgr1e"></ins></li>
    <dl id="jgr1e"><input id="jgr1e"><optgroup id="jgr1e"></optgroup></input></dl>
    <tt id="jgr1e"><dd id="jgr1e"><video id="jgr1e"></video></dd></tt>
  • 加入星計劃,您可以享受以下權(quán)益:

    • 創(chuàng)作內(nèi)容快速變現(xiàn)
    • 行業(yè)影響力擴(kuò)散
    • 作品版權(quán)保護(hù)
    • 300W+ 專業(yè)用戶
    • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
    • 5000+ 長期合作伙伴
    立即加入
    • 正文
    • 相關(guān)推薦
    • 電子產(chǎn)業(yè)圖譜
    申請入駐 產(chǎn)業(yè)圖譜

    我們一起來DIY一個電子秤吧

    2021/02/01
    1689
    • 1評論
    閱讀需 11 分鐘
    加入交流群
    掃碼加入
    獲取工程師必備禮包
    參與熱點(diǎn)資訊討論

     

    實(shí)現(xiàn)目標(biāo)

    • 實(shí)現(xiàn) HX711 模塊的驅(qū)動實(shí)現(xiàn)電子秤的校準(zhǔn)準(zhǔn)確輸出待測物品的重量

     

    所需工具及環(huán)境

     

    本文源碼

    注意:

    HX711 AD 模塊的 DOUT 引腳與 STM32 的 PA6 相連;

    HX711 AD 模塊的 PD_SCK 引腳與 STM32 的 PA7 相連。

    后臺回復(fù)關(guān)鍵字“HX711”,獲取HX711模塊資料及工程源碼。

    電子秤模塊

    上圖所示的即為壓力稱重傳感器,其輸出電壓信號,壓力越大輸出電壓信號越大 。

    稱重傳感器采用電阻應(yīng)變片橋式電路實(shí)現(xiàn),主要由彈性體和電阻應(yīng)變片等組成。

    應(yīng)用場景:

    • 價格計算秤計數(shù)秤稱重秤零售秤

    稱重傳感器模塊有靈敏度和激勵電壓兩個重要參數(shù),比如兩個參數(shù)的值可能為如下值:

    靈敏度:1.0mV/V

    激勵電壓:3~12V

    滿量程輸出電壓 = 激勵電壓 * 靈敏度

    比如激勵電壓是 5V,則輸出最大電壓是 5mV。

     

    應(yīng)變片

    電阻應(yīng)變片把導(dǎo)體形變的物理信號轉(zhuǎn)換成電阻變化的信號。

    稱重傳感器模塊上的膠基(硅橡膠)下面存放的就是應(yīng)變片。

     

    應(yīng)變片一般由金屬絲為材料制作的應(yīng)變電阻,當(dāng)金屬絲受外力作用時,其長度和截面積都會發(fā)生變化,進(jìn)而其電阻值即會發(fā)生改變。

    當(dāng)金屬絲受外力作用而伸長時,其長度增加,而截面積減少,電阻值便會增大。

    當(dāng)金屬絲受外力作用而壓縮時,長度減小而截面增加,電阻值則會減小。

    金屬應(yīng)變片對電阻絲材料有較高的要求,一般要求靈敏度系數(shù)大,電阻溫系數(shù)小,具有優(yōu)良的機(jī)械加工和焊接性能等,康銅是目前應(yīng)用最廣泛的應(yīng)變絲材料。

    稱重傳感器模塊上下表面各有一個應(yīng)變片,每個應(yīng)變片內(nèi)有 2 個壓力電阻。一共為 4 個壓力電阻,組成全橋式電路。全橋電路可以提高所測的精度,而且電橋本身也能實(shí)現(xiàn)自補(bǔ)償(溫度補(bǔ)償)。

     

     

    橋式傳感器

    電橋電路的被測量者的狀態(tài)量一般是非常微弱的,比如在稱重傳感器中,就是把電阻片的電阻變化率ΔR/R 轉(zhuǎn)換成電壓輸出,然后提供給放大電路放大后進(jìn)行測量。

     

    上圖中的電橋電路,由四個電阻 R1、R2、R3、R4 組成一個四邊形的回路,每一邊稱作電橋的“橋臂”。

    a、b、c、d 為四個結(jié)點(diǎn),a、c 結(jié)點(diǎn)之間接入電源,另外兩個結(jié)點(diǎn)(b、d)之間電壓差作為輸出電壓。

    b、d 點(diǎn)的電壓相等時稱為“電橋平衡”;反之,稱為“電橋不平衡”。

    電橋平衡的條件:上下兩個橋臂的左右橋臂電阻的比例相等。

    若橋路的四個橋臂相鄰電阻的電阻值變化趨勢相同,橋路輸出電壓為 0。

    若相鄰電阻的電阻值變化趨勢相反,橋路就會有電壓輸出。

    全橋的四個橋臂都為應(yīng)變片的話,由于溫度變化而引起的電阻值漂移數(shù)值一致,就可以相互抵消,進(jìn)而全橋能夠?qū)崿F(xiàn)溫度的自補(bǔ)償。

    應(yīng)用橋式電路可以有效提高傳感器的靈敏度。

     

    HX711 AD 模塊原理圖

     

    該方案使用內(nèi)部時鐘振蕩器(XI=0),10Hz 的輸出數(shù)據(jù)速率(RATE=0,可配置為 80Hz)。

    電源(2.7~5.5V)直接取用與 MCU 芯片相同的供電電源。片內(nèi)穩(wěn)壓電源電路通過片外 PNP 管 S8550 和分壓電阻 R12、R13 向傳感器和 A/D 轉(zhuǎn)換器提供穩(wěn)定的低噪聲模擬電源。

    通道 A 模擬差分輸入可直接與橋式傳感器的差分輸出相接。

    由于橋式傳感器輸出的信號較小,為了充分利用 A/D 轉(zhuǎn)換器的輸入動態(tài)范圍,該通道的可編程增益較大,為 128 或 64。這些增益所對應(yīng)的滿量程差分輸入電壓分別±20mV 或±40mV。

    通道 B 為固定的 32 增益,所對應(yīng)的滿量程差分輸入電壓為±80mV。

     

    安裝方法

     

    連線

    HX711 AD 模塊可以將電壓轉(zhuǎn)換為數(shù)字信號,HX711 AD 模塊與稱重傳感器接線方式:

    • 紅線接 HX711 模塊的激勵電壓正(E+)黑線接 HX711 模塊的激勵電壓負(fù)(E-)綠線(或藍(lán)線)接 HX711 模塊的 A+白線接 HX711 模塊的 A-

     

     

    稱重原理

    當(dāng)彈性體因承載產(chǎn)生形變時,電阻應(yīng)變片受到拉伸或壓縮而產(chǎn)生變形,它的阻值將發(fā)生變化(增大或減?。?,從而使電橋失去平衡,從而產(chǎn)生相應(yīng)的差動信號,供后續(xù)電路(本實(shí)例是 HX711)測量和轉(zhuǎn)換。

    應(yīng)變片中的電阻絲的電阻相對變化量與材料力學(xué)中的軸向應(yīng)變關(guān)系,在很大范圍內(nèi)是線性的。

    因?yàn)槭芾髴?yīng)變片的阻值 R 的變化量很小,為了方便測量這一微小的變化量,所以采用全橋式電路可以把被測量的本底去掉,轉(zhuǎn)換成一個在 0 值附近變化的毫伏級的輸出電壓,進(jìn)而經(jīng)過放大器之后,通過 A/D 轉(zhuǎn)換器求得這個輸出電壓。

    由上我們可以近似認(rèn)為應(yīng)力的變化和電阻的變化量成正比,我們利用這一特性,進(jìn)而實(shí)現(xiàn)物品重量的測量。

    下面我們介紹一下測量這個電壓的 A/D 模塊:HX711。

     

    HX711 簡介

    HX711 是一款專為高精度電子秤而設(shè)計的 24 位 A/D 轉(zhuǎn)換器芯片。與同類型其它芯片相比,該芯片集成了包括穩(wěn)壓電源、片內(nèi)時鐘振蕩器等其它同類型芯片所需要的外圍電路,具有集成度高、響應(yīng)速度快、抗干擾性強(qiáng)等優(yōu)點(diǎn)。

    降低了電子秤的整機(jī)成本,提高了整機(jī)的性能和可靠性。

    該芯片與后端 MCU 芯片的接口和編程非常簡單,所有控制信號由管腳驅(qū)動,無需對芯片內(nèi)部的寄存器編程。

    輸入選擇開關(guān)可任意選取通道 A 或通道 B,與其內(nèi)部的低噪聲可編程放大器相連。

    通道 A 的可編程增益為 128 或 64,對應(yīng)的滿額度差分輸入信號幅值分別為±20mV 或±40mV。通道 B 則為固定的 32 增益,常用于系統(tǒng)參數(shù)檢測。

    芯片內(nèi)提供的穩(wěn)壓電源可以直接向外部傳感器和芯片內(nèi)的 A/D 轉(zhuǎn)換器提供電源,系統(tǒng)板上無需另外的模擬電源。芯片內(nèi)的時鐘振蕩器不需要任何外接器件。上電自動復(fù)位功能簡化了開機(jī)的初始化過程。

     

    芯片特點(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 與傳感器相連,作為小信號輸入通道;

    通道 B 用于系統(tǒng)參數(shù)檢測,如電池電壓檢測。

     

    與單片機(jī)通信

    HX711 芯片與單片機(jī)的通訊只需要兩個引腳,時鐘引腳PD_SCK及數(shù)據(jù)引腳DOUT,用來輸出數(shù)據(jù),選擇輸入通道和增益。

    當(dāng)數(shù)據(jù)輸出管腳 DOUT 為高電平時,表明 A/D 轉(zhuǎn)換器還未準(zhǔn)備好輸出數(shù)據(jù),此時串口時鐘輸入信號 PD_SCK 應(yīng)為低電平。當(dāng) DOUT 從高電平變低電平后,PD_SCK 應(yīng)輸入 25 至 27 個不等的時鐘脈沖。

    其中第一個時鐘脈沖的上升沿將讀出輸出 24 位數(shù)據(jù)的最高位(MSB),直至第 24 個時鐘脈沖完成,24 位輸出數(shù)據(jù)從最高位至最低位逐位輸出完成。

    第 25 至 27 個時鐘脈沖用來決定下一次 A/D 轉(zhuǎn)換的輸入通道和增益。

    如下圖所示,脈沖數(shù)為 25 個時,代表輸入通道為 A,增益為 128 倍。

     

    注意: 芯片上電復(fù)位之后,通道 A 和增益 128 會被自動選擇作為第一次 A/D 轉(zhuǎn)換的輸入通道和增益。

    通道 A 的可編程增益為 128 或 64,對應(yīng)的滿額度差分輸入信號幅值分別為±20mV 或±40mV。

     

    計算輸出電壓

    對于單片機(jī)來說,只需要通過兩個普通的 IO 口與 HX711 的 PD_SCK、DOUT 引腳相連,并根據(jù)以上時序進(jìn)行編程,即可完成對 HX711 芯片的控制,控制程序如下。

     

    AD 值獲取

    long HX711_Read(void) // 增益 128
    {
     long val = 0;      //val 為讀取到的值,通過移位,一位一位讀?。?
     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; 
    }
    

     

    測量校準(zhǔn)

    (1)測量空載情況下的 AD 值

    void Get_Maopi(void)
    {    
     Weight_Maopi = HX711_Read();
    }
    

    為了驗(yàn)證方便,我們在硬件上電復(fù)位的時候,獲取毛重的值,即在 main 函數(shù)中的 while(1)循環(huán)前面調(diào)用上面的函數(shù)獲取毛重值,然后將此 A/D 值保存至全局變量Weight_Maopi中。

     

    (2)測量一個已知重量物品的 AD 值

    已知重量的物品可以選擇標(biāo)準(zhǔn)砝碼:

     

    或者拿家里做糕點(diǎn)的電子秤:

    或者拿一個已知重量的物品,比如:

    因?yàn)槲覀冞@里需要對咱們自制的電子秤進(jìn)行驗(yàn)證,所以我們選用電子秤來測量物品重量。

     

    (3)獲取比例系數(shù)

    通過 printf 函數(shù)打印出上面變量的值:

    printf("Weight=%d,Weight_Shiwu=%ld ,Maopi=%ld,(Weight-Maopi)=%ld rn",(int)Weight,Weight_Shiwu,Weight_Maopi,(Weight_Shiwu-Weight_Maopi)); 
    

     

    物品 重量 AD 值
    空載 0g 8512030
    充電寶 221g 8600300

    因?yàn)檩敵龅?A/D 編碼值和輸出電壓是成正比的,而輸出電壓和重量成正比,利用上面的兩個值,求得 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為空載不放物品的時候的 A/D 值。兩個 A/D 值的差值與 K 的商即為待測物品的重量。

    Get_Weight() 函數(shù)的返回值即為求得的真實(shí)重量,單位 g。

    結(jié)果展示

    擴(kuò)展

    此外,程序可以增加的功能還有:

    1. LCD 顯示矩陣鍵盤輸入及語音播報功能標(biāo)準(zhǔn)砝碼校準(zhǔn)功能(如 500g),其實(shí)就是修正系數(shù)的自我修正功能去皮功能金錢累加功能計算金額等等功能

     

    思考

    今天主要介紹一下稱重傳感器模塊的使用,下面內(nèi)容大家可以思考一下。

    • 全橋電路的優(yōu)點(diǎn)?HX711 芯片輸出的數(shù)據(jù)編碼與電壓的轉(zhuǎn)換?HX711 測量精度的優(yōu)化?稱重傳感器模塊的其他應(yīng)用電路?提高稱重的精度?(分段求取比例系數(shù)?)

    模塊雖小,內(nèi)容倒很多,哪里有理解不到位的地方,歡迎留言區(qū)指出,以免誤導(dǎo)大家。

    相關(guān)推薦

    電子產(chǎn)業(yè)圖譜

    公眾號『嵌入式從0到1』,號主:程序員小哈,是一個軟硬件全棧開發(fā)工程師(12年工作經(jīng)驗(yàn)的老司機(jī)),電子發(fā)燒友論壇鴻蒙版塊版主,公眾號內(nèi)容專注于嵌入式學(xué)習(xí)。堅持原創(chuàng),寫有圖、有視頻的保姆級教程文章,篇篇有干貨。做一個講清楚,說明白,大家學(xué)得會的交流平臺。