hx711是一款用得比較多的器件,該芯片與后端MCU 芯片的接口和編程非常簡單,所有控制信號(hào)由管腳驅(qū)動(dòng),無需對芯片內(nèi)部的寄存器編程。輸入選擇開關(guān)可任意選取通道A 或通道B,與其內(nèi)部的低噪聲可編程放大器相連。hx711接單片機(jī)的方法都是大同小異的,那么hx711模塊接32位單片機(jī)哪個(gè)引腳了?比如STM32。
首先我們要知道hx711模塊是要求5V左右提供電工作電壓,而且芯片手冊有個(gè)要求:數(shù)字電源(DVDD)應(yīng)使用與 MCU 芯片相同的的數(shù)字供電電源。
一般情況下與32位單片機(jī)接的引腳主要三個(gè)。
11 腳PD_SCK 數(shù)字輸入 斷電控制(高電平有效)和串口時(shí)鐘輸入
12 腳 DOUT 數(shù)字輸出 串口數(shù)據(jù)輸出
16 腳 DVDD 電源 數(shù)字電源: 2.6 ~ 5.5V
供電電源
數(shù)字電源(DVDD)應(yīng)使用與MCU 芯片相同的的數(shù)字供電電源。HX711 芯片內(nèi)的穩(wěn)壓電路可同時(shí)向 A/D 轉(zhuǎn)換器和外部傳感器提供模擬電源。穩(wěn)壓電源的供電電壓(VSUP)可與數(shù)字電源(DVDD)相同。穩(wěn)壓電源的輸出電壓值(VAVDD)由外部分壓電阻R1、R2 和芯片的輸出參考電壓VBG 決定,VAVDD=VBG(R1+R2)/R2。應(yīng)選擇該輸出電壓比穩(wěn)壓電源的輸入電壓(VSUP)低至少100mV。
如果不使用芯片內(nèi)的穩(wěn)壓電路,管腳VSUP應(yīng)連接到DVDD 或AVDD 中電壓較高的一個(gè)管腳上。管腳VBG 上不需要外接電容,管腳VFB 應(yīng)接地,管腳BASE 為無連接。時(shí)鐘選擇如果將管腳 XI 接地,HX711 將自動(dòng)選擇使用內(nèi)部時(shí)鐘振蕩器,并自動(dòng)關(guān)閉外部時(shí)鐘輸入和晶振的相關(guān)電路。這種情況下,典型輸出數(shù)據(jù)速率為10Hz 或80Hz。如果需要準(zhǔn)確的輸出數(shù)據(jù)速率,可將外部輸入時(shí)鐘通過一個(gè)20pF 的隔直電容連接到XI管腳上,或?qū)⒕д襁B接到XI 和XO 管腳上。這種情況下,芯片內(nèi)的時(shí)鐘振蕩器電路會(huì)自動(dòng)關(guān)閉,晶振時(shí)鐘或外部輸入時(shí)鐘電路被采用。此時(shí),若晶振頻率為11.0592MHz, 輸出數(shù)據(jù)速率為準(zhǔn)確的10Hz 或80Hz。輸出數(shù)據(jù)速率與晶振頻率以上述關(guān)系按比例增加或減少。使用外部輸入時(shí)鐘時(shí),外部時(shí)鐘信號(hào)不一定需要為方波??蓪CU 芯片的晶振輸出管腳上的時(shí)鐘信號(hào)通過20pF 的隔直電容連接到XI管腳上,作為外部時(shí)鐘輸入。外部時(shí)鐘輸入信號(hào)的幅值可低至150mV。
串口通訊
串口通訊線由管腳PD_SCK 和DOUT 組成,用來輸出數(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í)鐘脈沖用來選擇下一次A/D 轉(zhuǎn)換的輸入通道和增益。
上圖為HX711芯片應(yīng)用于計(jì)價(jià)秤的一個(gè)參考電路圖。該方案使用內(nèi)部時(shí)鐘振蕩器(XI=0),10Hz的輸出數(shù)據(jù)速率(RATE=0)。電源(2.7~5.5V)直接取用與MCU 芯片相同的供電電源。通道A與傳感器相連,通道B通過片外分壓電阻與電池相連,用于檢測電池電壓。
HX711在Arduino上的接線方式
1. VCC 可以是 2.6-5.5 中的任意值,因?yàn)槲覀兪褂玫氖?Arduino ,所以直接5V供電,GND 接地。
2. SCK 接 Arduino 的 Pin 9,DT 接 Pin10,這兩個(gè)接腳可以在程序中改變。
3. E+、E-、A+ 和 A- 分別接橋式傳感器的:激勵(lì)電壓正、負(fù),輸出電壓正、負(fù)
?。‥+ 接紅線;E- 接黑線;A+ 接綠或藍(lán)線;A- 接白線)。
4. B+ 和 B- 接通道B的傳感器,也可以通過分壓電路接電源,用來檢測電源電壓。不用的話最好接GND,不過有網(wǎng)友試驗(yàn)不接也沒問題。
示例代碼
#include 《HX711.h》 // 包含庫的頭文件
HX711 hx(9, 10); // 數(shù)據(jù)接腳定義
void setup() {
Serial.begin(9600);
}
void loop()
{
double sum = 0; // 為了減小誤差,一次取出10個(gè)值后求平均值。
for (int i = 0; i 《 10; i++) // 循環(huán)的越多精度越高,當(dāng)然耗費(fèi)的時(shí)間也越多
sum += hx.read(); // 累加
Serial.println(sum/10); // 求平均值進(jìn)行均差
}
給的示例程序非常簡單,但是我查看庫中含有很多示例沒有給出的函數(shù):
HX711(byte sck, byte dout, byte amp = 128, double co = 1); // 定義 sck、dout 接腳,增益倍數(shù)(默認(rèn)128)和修正系數(shù)(默認(rèn)1)
void set_amp(byte amp); // 改變增益倍數(shù)和對應(yīng)的通道,至少調(diào)用一次 read() 后起作用
bool is_ready(); // 返回 hx711 是否可用,在 read() 函數(shù)中會(huì)被調(diào)用
long read(); // 返回傳感器電壓值,如果 hx711 不可用則程序會(huì)暫停在此函數(shù)
double bias_read(); // 返回:(read() - 偏移值) * 修正系數(shù)
void tare(int t = 10); // 將皮重添加到偏移值,影響每次 read(); 的調(diào)用
void set_co(double co = 1); // 修改修正系數(shù)(默認(rèn)為1)
void set_offset(long offset = 0); // 修改偏移值(默認(rèn)為0)
可以看到,HX711還可以使用四參數(shù)方式定義,同時(shí)指定增益倍數(shù)及修正系數(shù)。在程序運(yùn)行中還可以隨時(shí)改變增益倍數(shù),修正系數(shù)以及利用偏移值實(shí)現(xiàn)去皮重等功能,非常實(shí)用。
這里唯一需要解釋的是第一個(gè)函數(shù),
HX711 hx(9, 10); // 這樣用說明只定義SCK和DOUT接腳,AMP默認(rèn)使用A通道的128位增益,修正系數(shù)默認(rèn)為1;
HX711 hx(9, 10, 64); // 這樣用說明定義SCK和DOUT接腳,AMP使用A通道的64增益,修正系數(shù)默認(rèn)為1;
HX711 hx(9, 10, 32, 1.4); // 這樣用說明定義SCK和DOUT接腳,AMP使用B通道的32位增益,修正系數(shù)為1.4;
這里有關(guān)通道和增益倍數(shù)的選擇,資料中已經(jīng)提及過,A通道只有128和64位兩種增益倍數(shù),對應(yīng)滿載電壓為 20mV 和 40mV,B通道只有固定的32位增益倍數(shù),滿載電壓為 80mV,使用時(shí)各個(gè)通道輸入電壓不要超過對應(yīng)增益倍數(shù)的滿載電壓。當(dāng)然,程序中額可以隨時(shí)切換增益倍數(shù)和通道,使用set_amp(amp)函數(shù)即可,當(dāng)然,amp 的值只能是 128、64或32。
再強(qiáng)調(diào)一句,如果增益倍數(shù)選擇32位增益,那么讀出的數(shù)據(jù)就是B通道的。
評論