最近使用了基于hx711的電子秤進行小實驗,我是直接從淘寶上買的現成的模塊。從賣家那里得到的程序,發現根本不能直接用,我前后買了兩個,發現不同的傳感器使用的參數的不一樣的。網上買的現成的測量模塊主要由雙橋組成的應變片和hx711 24位A/D轉換器組成,基本的思路是:通過電橋不穩定,輸出不同的電壓,得到不同的重量。也就是說,對于整個模塊來說,1克的重量對應1個A/D輸出。由此我發現,不同的模塊,A/D輸出是不一樣的。我也參考了了很多網上有關程序的分析,發現都是理論分析,但是一用到實物中根本不太合適。因此,我通過寫這一個小帖子,用一點小技巧更快對基于hx711電子秤的實現。
首先,必須記住一點:實際重量與hx711輸出值成正比。那么首先寫一個程序子程序實現不同重量下A/D輸出的具體值,我做實驗是采用的是不放東西上去時記下當前A/D的輸出值x1,接著放一個標準重量為y1克的物體,記下當前A/D輸出值x2。接著就可以粗略計算出重量與A/D輸出值的線性關系,即:G=(d-x1)/(x2-x1/y1)。其中(G為實際的重量,單位為克,d為hx711的輸出值)。那么再寫一個程序,根據重量與A/D輸出值的線性關系,只要根據hx711實際輸出值就可以知道物體實際的重量。另外,如果還有一點誤差,根據實際情況,調整x1會得到更好的效果。
這是我最近做小項目時用到的一點點小技巧,可能存在一些不合理的地方,請大家多多包涵。具體實現代碼,看附件的文本的文檔。
單片機源程序如下:
- #include "HX711.h"
- #include "HX711.h"
- #include “reg52.h”
- sbit HX711_DOUT=P3^1;
- sbit HX711_SCK=P3^0;
- //****************************************************
- //延時函數
- //****************************************************
- void Delay__hx711_us(void)
- {
- _nop_();
- _nop_();
- }
- //****************************************************
- //讀取HX711
- //****************************************************
- //返回值為實際重量
- int get_Weight(void) //增益128
- {
- long count;
- unsigned char i;
- float weight=0;
- HX711_DOUT=1;
- Delay__hx711_us();
- HX711_SCK=0;
- count=0;
- // while(HX711_DOUT);
- for(i=0;i<24;i++)
- {
- HX711_SCK=1;
- count=count<<1;
- HX711_SCK=0;
- if(HX711_DOUT)
- count++;
- }
- HX711_SCK=1;
- Delay__hx711_us();
- HX711_SCK=0;
- weight=((long)(count-47625))/129; //式子中的參數根據實際測試參數進行調整,獲取方法參照另外一個文檔。count對應帖子中的d,47625對應x1,129對應(x2-x1/y1)。參數不合 //適時一般通過調整x1,可以完成微調。
- return(weight);
- }
復制代碼
0.png (5.64 KB, 下載次數: 31)
下載附件
2019-5-17 03:28 上傳
所有資料51hei提供下載:
基于hx711電子秤改進代碼.rar
(1.16 KB, 下載次數: 49)
2019-5-15 19:53 上傳
點擊文件名下載附件
基于hx711電子秤改進代碼 下載積分: 黑幣 -5
|