Cầu Wheatstone là gì: cân bằng, điện áp ra, mắc strain gauge cầu 1/4, 1/2, toàn cầu và bù nhiệt
Cầu Wheatstone: điều kiện cân bằng, điện áp ra khi không cân bằng, mắc strain gauge cầu 1/4, 1/2, toàn cầu, độ phi tuyến, bù nhiệt bằng gauge giả, nối 3 dây, đọc bằng HX711; script Python.
Cầu Wheatstone là mạch bốn điện trở mắc thành hình thoi, dùng để đo những thay đổi điện trở rất nhỏ: điện trở chưa biết, nhiệt điện trở, và nhất là strain gauge trong cảm biến biến dạng, load cell. Bài này giải thích cầu Wheatstone là gì, điều kiện cân bằng, công thức điện áp ra khi cầu không cân bằng, ba cách mắc strain gauge (cầu 1/4, cầu 1/2, toàn cầu), vì sao cầu 1/4 hơi phi tuyến, cách bù nhiệt độ và bù điện trở dây nối, kèm script Python tính điện áp ra.
1. Cầu Wheatstone là gì

Cầu Wheatstone là hai mạch chia áp cùng nối vào một nguồn Vex: R1 và R2 tạo điện áp ở điểm S−, R4 và R3 tạo điện áp ở điểm S+. Điện áp ra là hiệu hai điểm đó:
Vo = Vex × ( R3 / (R3 + R4) − R2 / (R1 + R2) )
- Cầu cân bằng khi Vo = 0, tức R1 / R2 = R4 / R3. Đây là cách đo điện trở chính xác cổ điển: thay một cạnh bằng điện trở chưa biết, chỉnh một cạnh khác tới khi đồng hồ chỉ 0, rồi tính ra điện trở chưa biết. Kết quả không phụ thuộc điện áp nguồn.
- Cầu không cân bằng: khi một điện trở thay đổi một lượng nhỏ ΔR, Vo lệch khỏi 0 một lượng tỉ lệ với ΔR. Strain gauge dùng cách này.
Điểm mạnh của cầu là đo được hiệu rất nhỏ trên nền điện áp lớn: strain gauge 120 Ω chịu biến dạng 1000 µε (0,1 %) chỉ đổi 0,24 Ω; đo trực tiếp bằng cầu chia áp thì phải phân biệt 1,6 mV trên nền 1,65 V, còn ở cầu thì Vo bắt đầu từ 0 nên khuếch đại thẳng được.
2. Ba cách mắc strain gauge vào cầu

Strain gauge đổi điện trở ΔR/R = GF × ε, với GF (hệ số gauge) khoảng 2 cho gauge lá kim loại và ε là biến dạng. Tùy số gauge thật trong cầu:
- Cầu 1/4: một gauge, ba điện trở cố định cùng giá trị. Vo/Vex ≈ GF·ε/4. Đơn giản nhất, nhưng nhạy với nhiệt độ và điện trở dây.
- Cầu 1/2: hai gauge ở hai cạnh kề. Đo uốn: một gauge mặt trên bị kéo, một gauge mặt dưới bị nén, Vo/Vex = GF·ε/2 và tự bù nhiệt. Đo kéo dọc trục: gauge thứ hai đặt ngang, chỉ chịu biến dạng Poisson, Vo/Vex ≈ GF·ε(1 + ν)/4.
- Toàn cầu: bốn gauge, hai kéo, hai nén. Vo/Vex = GF·ε, nhạy nhất, bù nhiệt tốt nhất. Load cell bán sẵn đều là toàn cầu.

Với cầu 1/4, công thức chính xác là Vo/Vex = (GF·ε/4) / (1 + GF·ε/2): điện áp ra thấp hơn công thức gần đúng một chút, sai khoảng 0,1 % ở 1000 µε và 0,5 % ở 5000 µε. Đo biến dạng nhỏ thì bỏ qua được; đo biến dạng lớn thì dùng công thức chính xác. Cầu 1/2 uốn và toàn cầu có hai gauge thay đổi ngược chiều nên tuyến tính hoàn toàn.
3. Bù nhiệt độ và bù dây nối

Điện trở gauge đổi theo nhiệt độ, và vật liệu được dán gauge cũng giãn nở theo nhiệt độ: gauge "thấy" biến dạng dù không có lực. Gauge tự bù nhiệt (loại chọn theo hệ số giãn nở của thép, nhôm) giảm được phần lớn, phần còn lại xử lý bằng mạch cầu:
- Gauge giả: dán thêm một gauge trên miếng cùng vật liệu, đặt cạnh, không chịu lực, mắc vào nhánh kề với gauge đo. Hai nhánh kề đổi giống nhau theo nhiệt độ nên Vo không đổi.
- Cầu 1/2, toàn cầu tự bù nhiệt vì mọi gauge cùng nhiệt độ.
- Nối 3 dây: với cầu 1/4 nối 2 dây, cả hai dây nằm trong nhánh gauge. Dây 0,5 Ω mỗi sợi với gauge 120 Ω làm cầu lệch tương đương khoảng 4167 µε ngay khi chưa tải, giảm độ nhạy khoảng 0,8 %, và trôi theo nhiệt độ của dây. Nối 3 dây đặt một dây ở nhánh gauge, một dây ở nhánh kề nên điện trở dây tự triệt tiêu; dây thứ ba chỉ dẫn điện áp, không có dòng.
4. Đọc điện áp cầu bằng vi điều khiển
Điện áp ra vài mV quá nhỏ cho ADC 12 bit của ESP32 (mỗi bước khoảng 0,8 mV). Hay dùng:
- Module HX711: ADC 24 bit có khuếch đại 128 lần, thiết kế cho cầu load cell; đọc được cầu 1/4 với điện trở hoàn thiện cầu. Ví dụ cân điện tử ở bài cân điện tử với ESP32, HX711 và load cell.
- ADS1115: ADC 16 bit vi sai có khuếch đại, đọc được cầu 1/4 khi biến dạng đủ lớn; ví dụ có ở bài cảm biến biến dạng strain gauge.
- Khuếch đại đo lường (INA125, INA128, AD620) đưa tín hiệu lên mức vôn cho ADC thường.
Điện trở hoàn thiện cầu (ba điện trở cố định của cầu 1/4) nên là loại sai số nhỏ, hệ số nhiệt thấp (0,1 %, 25 ppm/°C), đặt cạnh nhau để cùng nhiệt độ. Cấp cầu bằng chính điện áp tham chiếu của ADC (đo tỉ số) thì điện áp nguồn trôi không làm sai kết quả.
5. Script tính điện áp ra của cầu
Script tính điện áp ra chính xác từ bốn điện trở cho cầu 1/4, 1/2 và toàn cầu, sai số phi tuyến của cầu 1/4 so với công thức gần đúng, và độ lệch do điện trở dây khi nối 2 dây. Chỉ dùng thư viện chuẩn của Python 3.
# PYWORLD.VN - Tính điện áp ra của cầu Wheatstone với strain gauge mắc 1/4, 1/2, toàn cầu; sai số phi tuyến, nhiệt độ, dây dẫn
# PYWORLD.VN - Chạy: python tinh_cau_wheatstone.py --gf 2.0 --vex 3.3 --r 120 --day 0.5
# PYWORLD.VN - Nút cầu: E+ ở trên; S- là điểm giữa R1 (trên trái), R2 (dưới trái); S+ là điểm giữa R4 (trên phải), R3 (dưới phải)
import argparse
def dien_ap_ra(r1: float, r2: float, r3: float, r4: float, vex: float) -> float:
"""Vo = S+ - S- của cầu Wheatstone, vôn."""
return vex * (r3 / (r3 + r4) - r2 / (r1 + r2))
def cau(cach: str, bien_dang: float, gf: float, r: float, vex: float, poisson: float = 0.3) -> float:
"""Điện áp ra (V) cho từng cách mắc; bien_dang tính theo đơn vị (1e-6 = 1 µε)."""
keo = r * (1 + gf * bien_dang) # gauge bị kéo
nen = r * (1 - gf * bien_dang) # gauge bị nén (mặt đối diện khi uốn)
ngang = r * (1 - gf * poisson * bien_dang) # gauge đặt ngang, chịu biến dạng Poisson
if cach == "1/4":
return dien_ap_ra(r, r, keo, r, vex)
if cach == "1/2 uon":
return dien_ap_ra(r, r, keo, nen, vex)
if cach == "1/2 poisson":
return dien_ap_ra(r, r, keo, ngang, vex)
if cach == "toan cau":
return dien_ap_ra(keo, nen, keo, nen, vex)
raise ValueError(cach)
def he_so_tuyen_tinh(cach: str, gf: float, poisson: float = 0.3) -> float:
"""Vo/Vex theo công thức gần đúng tuyến tính, nhân với biến dạng."""
return {"1/4": gf / 4, "1/2 uon": gf / 2, "1/2 poisson": gf * (1 + poisson) / 4, "toan cau": gf}[cach]
def bien_dang_bieu_kien_day(r_day: float, r: float, gf: float, so_day: int) -> float:
"""Biến dạng biểu kiến (đơn vị) do điện trở dây nối gauge ở cầu 1/4: 2 dây thì cả hai dây nằm trong nhánh gauge."""
if so_day == 2:
return 2 * r_day / r / gf
return 0.0 # 3 dây: một dây ở nhánh gauge, một dây ở nhánh kề nên phần lớn bị triệt tiêu (lý tưởng)
def main() -> None:
p = argparse.ArgumentParser(description="Cầu Wheatstone với strain gauge")
p.add_argument("--gf", type=float, default=2.0, help="hệ số gauge")
p.add_argument("--vex", type=float, default=3.3, help="điện áp cấp cho cầu (V)")
p.add_argument("--r", type=float, default=120, help="điện trở gauge (ohm)")
p.add_argument("--day", type=float, default=0.5, help="điện trở mỗi dây nối (ohm)")
a = p.parse_args()
print(f"GF {a.gf:g}, cap cau {a.vex:g} V, gauge {a.r:g} ohm")
print(f"{'ue':>6} {'1/4 (mV)':>10} {'sai so 1/4':>11} {'1/2 uon':>9} {'toan cau':>9}")
for ue in (100, 500, 1000, 2000, 5000):
e = ue * 1e-6
v4 = cau("1/4", e, a.gf, a.r, a.vex)
tt = he_so_tuyen_tinh("1/4", a.gf) * e * a.vex
print(f"{ue:6d} {v4 * 1000:10.4f} {(v4 - tt) / tt * 100:10.2f}% {cau('1/2 uon', e, a.gf, a.r, a.vex) * 1000:9.4f}"
f" {cau('toan cau', e, a.gf, a.r, a.vex) * 1000:9.4f}")
bk = bien_dang_bieu_kien_day(a.day, a.r, a.gf, 2)
print(f"Day noi 2 x {a.day:g} ohm, cau 1/4 noi 2 day: lech {bk * 1e6:.0f} ue ngay khi chua tai; noi 3 day: gan 0")
if __name__ == "__main__":
main()

Đổi tham số theo gauge và mạch đang dùng: gauge 350 Ω với --r 350 thì độ lệch do dây giảm còn khoảng một phần ba, đó là một lý do gauge 350 Ω được chuộng khi dây dài.
6. Lỗi hay gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Số đo trôi theo giờ trong ngày | cầu 1/4 không bù nhiệt, nắng chiếu | gauge giả, cầu 1/2, che nắng |
| Điểm 0 lệch lớn khi chưa tải | dây nối 2 dây dài, điện trở hoàn thiện sai số lớn | nối 3 dây, điện trở 0,1 %, trừ điểm 0 |
| Dấu kết quả ngược | gauge ở nhánh khác, đảo S+ S− | đổi S+ S− hoặc đổi dấu trong chương trình |
| Số nhảy nhiều | dây dài không xoắn, gần động cơ, nguồn nhiễu | dây xoắn có vỏ chống nhiễu, lọc trung bình |
| Đo lực nhỏ không nhạy | cầu 1/4, cấp cầu thấp | dùng cầu 1/2 hoặc toàn cầu, HX711 khuếch đại 128 |
7. Xem thêm
- Đo biến dạng bằng cảm biến strain gauge
- Cảm biến lực load cell: cấu tạo, nguyên lý, tự đọc HX711
- Các nguồn sai số khi đo lực bằng load cell
- Strain gauge 120 Ω, 350 Ω hàn sẵn dây
- Module ADC 24 bit HX711
Bài quan trắc công trình (SHM) cùng cụm chủ đề cho thấy cách các cảm biến biến dạng được dùng để theo dõi cầu, nhà, đập.
Xem thêm