Cảm biến mô men xoắn: cấu tạo, nguyên lý strain gauge 45°, cách chế tạo và bàn thử công suất
Cảm biến mô men xoắn hoạt động thế nào: strain gauge xiên 45° trên trục, vành trượt, biến áp quay, đo góc xoắn, từ giảo, cách chế tạo và bàn thử mô men, công suất với ESP32.
Mô men xoắn cho biết một trục đang "vặn" mạnh tới đâu: ốc được siết bao nhiêu, động cơ kéo khỏe cỡ nào, người đạp xe đang dồn bao nhiêu lực vào bàn đạp. Biết mô men và tốc độ quay là tính được công suất cơ học thật sự mà trục truyền đi. Bài viết giải thích vì sao đo mô men xoắn khó hơn đo lực, cách dán strain gauge xiên 45° trên trục, các cách lấy tín hiệu từ trục đang quay, quy trình chế tạo cảm biến, và cách tự làm một bàn thử mô men, công suất cho động cơ nhỏ với load cell, HX711 và ESP32.
1. Mô men xoắn và công suất
- Mô men xoắn T = F × r: lực F đặt vuông góc với cánh tay đòn dài r. Đơn vị N·m; 1 kgf·m ≈ 9,81 N·m. Cờ lê dài 0,3 m, tay đẩy 100 N, mô men là 30 N·m.
- Công suất P = T × ω, với ω = 2π × n / 60 là tốc độ góc (rad/s) khi n tính bằng vòng/phút. Trục truyền 50 N·m ở 1500 vòng/phút mang 50 × 157,1 ≈ 7854 W, khoảng 7,9 kW.
- Mô men tĩnh và mô men quay: siết ốc, thử độ bền mối ghép là đo tĩnh (trục gần như không quay). Đo trên trục động cơ, hộp số, trục máy bơm là đo quay, khó hơn nhiều vì cảm biến quay theo trục.
- Đo trực tiếp và đo phản lực: cảm biến lắp nối tiếp giữa hai đoạn trục đo trực tiếp; cảm biến phản lực đo lực giữ vỏ máy đứng yên, theo định luật lực và phản lực thì bằng mô men trên trục.
2. Nguyên lý: trục xoắn và strain gauge xiên 45°

Khi bị xoắn, trục không dài ra hay ngắn đi mà các thớ vật liệu trượt lên nhau: trục chịu ứng suất cắt. Strain gauge chỉ đo được biến dạng kéo hoặc nén theo chiều dài lá điện trở. Phân tích ứng suất cho thấy ứng suất cắt thuần tương đương với kéo theo một hướng 45° và nén theo hướng −45° so với trục. Vì vậy strain gauge đo mô men luôn dán xiên 45°, thường là hai cặp lá hình chữ V đặt đối xứng hai bên trục.
- Với trục tròn đặc đường kính d: ứng suất cắt ở mặt ngoài τ = 16T / (πd³); biến dạng ở hướng 45° là ε = τ / (2G), với G là mô đun cắt (thép khoảng 79 GPa).
- Ví dụ trục thép 20 mm chịu 50 N·m: τ ≈ 31,8 MPa, ε ≈ 201 µm/m. Cầu đủ dùng strain gauge hệ số 2,0 cho khoảng 0,40 mV/V, tức 2 mV khi kích 5 V.
- Bốn strain gauge nối cầu đủ thì biến dạng do uốn trục, do lực dọc trục và do nhiệt độ tự triệt tiêu; chỉ còn tín hiệu của mô men xoắn.
- Muốn tín hiệu lớn hơn, nhà sản xuất làm một đoạn trục thu nhỏ ("cổ đo") hoặc trục rỗng: ứng suất tăng mạnh vì tỉ lệ nghịch với lập phương đường kính.

Cờ lê lực là dụng cụ đo mô men tĩnh quen thuộc nhất. Loại thanh chỉ thị dùng một thanh thép uốn cong và một kim; loại tách dùng lò xo và cơ cấu bật; loại điện tử dán strain gauge lên thân cờ lê, đọc bằng mạch ADC và hiển thị số, có thể lưu kết quả từng mối siết. Cờ lê lực cơ khí thông thường có sai số khoảng ±4 % và cần hiệu chuẩn định kỳ.
3. Lấy tín hiệu từ trục đang quay

| Cách | Hoạt động | Ưu điểm | Hạn chế |
|---|---|---|---|
| Vành trượt, chổi than | Bốn vòng đồng quay theo trục, chổi than tì lên dẫn nguồn kích và tín hiệu | Đơn giản, rẻ | Chổi mòn, nhiễu tiếp xúc làm bẩn tín hiệu mV; giới hạn tốc độ |
| Biến áp quay, phát số | Cuộn dây không chạm cấp nguồn cho mạch trên trục; mạch đo và gửi số liệu bằng sóng hoặc cảm ứng | Không mòn, quay nhanh, tín hiệu số ít nhiễu | Đắt hơn, có khe hở lắp đặt |
| Đo góc xoắn | Hai đĩa răng ở hai đầu thanh xoắn; độ lệch pha xung giữa hai cảm biến tỉ lệ với góc xoắn | Không chạm, bền; dùng trong cảm biến mô men tay lái trợ lực điện | Cần thanh xoắn đủ mềm, độ phân giải phụ thuộc số răng |
| Từ giảo | Ứng suất làm thay đổi độ từ thẩm của trục thép đã từ hóa; cuộn dây quanh trục đọc thay đổi | Không chạm, không dán gì lên trục; dùng cho xe đạp trợ lực, hộp số | Nhạy với từ trường ngoài, cần trục vật liệu phù hợp |

4. Chế tạo cảm biến mô men xoắn

- Trục: thép hợp kim cường độ cao, có đoạn thu nhỏ làm cổ đo, hai đầu là mặt bích hoặc đầu trục có rãnh then để lắp nối tiếp vào hệ truyền động; nhiệt luyện và mài.
- Dán strain gauge: dùng loại lá đôi xiên ±45° (gọi là rosette chữ V), dán hai bộ đối xứng 180° quanh cổ đo để triệt uốn; quy trình làm sạch, dán, sấy giống load cell.
- Nối cầu và bù: cầu đủ bốn nhánh, điện trở chỉnh điểm không và bù độ nhạy theo nhiệt độ.
- Truyền tín hiệu: lắp vành trượt, hoặc đặt mạch khuếch đại, ADC và cuộn rotor của biến áp quay trên trục, vỏ ngoài là stator đứng yên.
- Cân bằng động: cảm biến quay hàng nghìn vòng/phút phải được cân bằng để không gây rung cho hệ truyền động.
- Hiệu chuẩn: kẹp một đầu, lắp tay đòn dài biết trước vào đầu kia, treo quả cân chuẩn theo cả hai chiều xoắn: T = m × g × chiều dài tay đòn.
5. Ứng dụng thường gặp
- Thử nghiệm động cơ, hộp số, máy bơm: đo công suất và hiệu suất thật.
- Siết ốc có kiểm soát trong lắp ráp ô tô, xe máy, thiết bị: mỗi mối siết được ghi lại.
- Tay lái trợ lực điện: cảm biến mô men trên thanh xoắn cho biết người lái đang xoay vô lăng mạnh tới đâu để motor trợ lực tương ứng.
- Xe đạp trợ lực: cảm biến mô men ở trục giữa giúp motor trợ lực theo đúng sức đạp.
- Robot cộng tác: cảm biến mô men ở khớp giúp robot dừng ngay khi va vào người.
6. Thực hành: bàn thử mô men phản lực và công suất động cơ nhỏ
Cảm biến mô men quay rất đắt. Với động cơ nhỏ, có thể đo mô men phản lực: đặt vỏ động cơ trên hai gối đỡ cho nó xoay tự do quanh trục, gắn một tay đòn vào vỏ và cho tay đòn tì lên load cell. Khi trục kéo tải, vỏ muốn quay ngược lại; load cell giữ nó và đo lực. Mô men bằng lực nhân chiều dài tay đòn. Đây cũng là nguyên lý của "phanh Prony" và các băng thử động cơ kiểu nôi từ hơn một thế kỷ trước.

Linh kiện
- ESP32 DevKit V1 30 chân và module HX711.
- Một load cell thanh uốn nhỏ (1 kg hoặc 5 kg tùy động cơ).
- Một cảm biến tốc độ: cảm biến Hall dạng công tắc (ngõ ra cực thu hở) với một nam châm nhỏ dán trên trục, hoặc cảm biến quang phản xạ với một vạch trắng.
- Hai gối đỡ (vòng bi) giữ động cơ, tay đòn bằng thanh nhôm, tải cho động cơ (cánh quạt, phanh ma sát).
- Dây cắm test board.
| Thiết bị | Nối tới ESP32 |
|---|---|
| HX711 VCC, GND, DT, SCK | 3V3, GND, D32, D33 (load cell nối HX711 như bài cảm biến lực) |
| Cảm biến Hall: nguồn, GND, ngõ ra | 3V3, GND, GPIO27 (chương trình bật điện trở kéo lên bên trong) |
Chương trình
/*
PYWORLD.VN - Đo mô men xoắn phản lực và công suất động cơ bằng ESP32: load cell dưới cánh tay đòn + cảm biến tốc độ
HX711: DT = GPIO32, SCK = GPIO33; cảm biến tốc độ (Hall hoặc quang, 1 xung mỗi vòng, ngõ ra kéo xuống) vào GPIO27
Mô men = lực trên load cell × chiều dài tay đòn; công suất = mô men × tốc độ góc. Gõ "t" để trừ bì, "c200" để hiệu chuẩn
*/
#define CHAN_DT 32
#define CHAN_SCK 33
#define CHAN_TOC_DO 27
const float CANH_TAY_DON_M = 0.150; // Khoảng cách từ tâm trục động cơ tới điểm tì lên load cell (m)
const int XUNG_MOI_VONG = 1; // Số nam châm hoặc vạch phản quang trên trục
const float G = 9.80665; // m/s²
float heSoN = 43800.0; // Số đếm HX711 cho mỗi newton; tìm bằng lệnh c<khối lượng gam>
int32_t diemKhong = 0;
volatile uint32_t demXung = 0;
portMUX_TYPE khoaNgat = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR ngatTocDo() {
demXung = demXung + 1; // Chỉ hàm ngắt này ghi vào biến
}
// Đọc một mẫu 24 bit kênh A (hệ số 128) của HX711 bằng 25 xung SCK
bool docHx711(int32_t *ketQua) {
uint32_t batDau = millis();
while (digitalRead(CHAN_DT) == HIGH) {
if (millis() - batDau > 500) {
return false;
}
delay(1);
}
uint32_t giaTri = 0;
portENTER_CRITICAL(&khoaNgat);
for (int i = 0; i < 24; i++) {
digitalWrite(CHAN_SCK, HIGH);
delayMicroseconds(1);
giaTri = (giaTri << 1) | (uint32_t)digitalRead(CHAN_DT);
digitalWrite(CHAN_SCK, LOW);
delayMicroseconds(1);
}
digitalWrite(CHAN_SCK, HIGH);
delayMicroseconds(1);
digitalWrite(CHAN_SCK, LOW);
portEXIT_CRITICAL(&khoaNgat);
if (giaTri & 0x800000) {
giaTri |= 0xFF000000;
}
*ketQua = (int32_t)giaTri;
return true;
}
bool docTrungBinh(int soMau, int32_t *ketQua) {
int64_t tong = 0;
for (int i = 0; i < soMau; i++) {
int32_t mau;
if (!docHx711(&mau)) {
return false;
}
tong += mau;
}
*ketQua = (int32_t)(tong / soMau);
return true;
}
void xuLyLenh() {
if (!Serial.available()) {
return;
}
String lenh = Serial.readStringUntil('\n');
lenh.trim();
int32_t trungBinh;
if (lenh == "t" && docTrungBinh(16, &trungBinh)) {
diemKhong = trungBinh;
Serial.printf("Da tru bi: diem khong = %ld\n", (long)diemKhong);
} else if (lenh.startsWith("c") && docTrungBinh(16, &trungBinh)) {
// Treo quả cân đã biết khối lượng đúng tại điểm tì lên load cell
float lucN = lenh.substring(1).toFloat() / 1000.0f * G;
if (lucN > 0) {
heSoN = (trungBinh - diemKhong) / lucN;
Serial.printf("He so moi: %.1f dem/N (ghi vao bien heSoN trong code)\n", heSoN);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(CHAN_DT, INPUT);
pinMode(CHAN_SCK, OUTPUT);
digitalWrite(CHAN_SCK, LOW);
pinMode(CHAN_TOC_DO, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(CHAN_TOC_DO), ngatTocDo, FALLING);
delay(500);
if (docTrungBinh(16, &diemKhong)) {
Serial.printf("\nBang thu mo men: tay don %.3f m, diem khong = %ld\n", CANH_TAY_DON_M, (long)diemKhong);
} else {
Serial.println("\nKhong thay HX711: kiem tra DT, SCK, VCC, GND");
}
}
void loop() {
static uint32_t mocTruoc = millis();
xuLyLenh();
int32_t tho;
if (!docTrungBinh(4, &tho)) {
Serial.println("Khong doc duoc HX711");
delay(1000);
return;
}
uint32_t bayGio = millis();
if (bayGio - mocTruoc < 1000) {
return;
}
// Lấy số xung trong khoảng thời gian vừa qua rồi đặt lại bộ đếm
portENTER_CRITICAL(&khoaNgat);
uint32_t soXung = demXung;
demXung = 0;
portEXIT_CRITICAL(&khoaNgat);
float giay = (bayGio - mocTruoc) / 1000.0f;
mocTruoc = bayGio;
float lucN = (tho - diemKhong) / heSoN;
float moMen = lucN * CANH_TAY_DON_M; // N.m
float vongPhut = soXung * 60.0f / XUNG_MOI_VONG / giay;
float congSuat = moMen * 2.0f * PI * vongPhut / 60.0f; // W = N.m × rad/s
Serial.printf("Luc %.2f N | Mo men %.3f N.m | %.0f vong/phut | Cong suat %.1f W\n", lucN, moMen, vongPhut, congSuat);
}
Giải thích
- Hàm đọc HX711 phát 25 xung SCK như bài cảm biến lực; hệ số được tính theo số đếm mỗi newton.
- Ngắt trên GPIO27 đếm xung tốc độ; mỗi giây chương trình lấy số xung, đặt lại bộ đếm và tính vòng/phút.
- Mô men (N·m) = lực (N) × 0,150 m. Công suất (W) = mô men × 2π × vòng/phút / 60.
- Hiệu chuẩn: tắt động cơ, gõ
tđể trừ bì. Treo một quả cân (ví dụ 200 g) đúng tại điểm tay đòn tì lên load cell, gõc200; ghi hệ số in ra vào biếnheSoN.
Kết quả mong đợi

Khi tăng tải, mô men tăng còn tốc độ giảm; công suất đạt lớn nhất ở khoảng giữa. Kết quả gồm cả ma sát của gối đỡ, nên gối đỡ càng trơn tru, mô men đo được càng sát mô men thật trên trục.
An toàn: che chắn phần quay, kẹp chặt đế bàn thử, không đứng thẳng hàng với cánh quạt; với động cơ điện lưới phải có aptomat và nối đất vỏ.
7. Xử lý lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Mô men âm khi chạy | Động cơ quay ngược chiều với hướng tay đòn tì vào load cell | Đổi chiều quay hoặc đặt load cell ở phía bên kia tay đòn |
| Tốc độ luôn bằng 0 | Nam châm đặt sai cực, cảm biến Hall quá xa | Lật nam châm, đưa cảm biến lại gần 2 đến 5 mm; kiểm tra chân GPIO27 |
| Tốc độ gấp đôi thực tế | Có hai nam châm hoặc tín hiệu bị dội | Sửa XUNG_MOI_VONG; thêm tụ nhỏ lọc nhiễu ở ngõ ra cảm biến |
| Mô men dao động mạnh | Động cơ rung, tay đòn nảy trên load cell | Kẹp tay đòn chắc vào load cell, tăng số mẫu trung bình |
| Mô men khi đứng yên khác 0 | Trọng lượng tay đòn đè lên load cell | Gõ t để trừ bì sau khi lắp xong |
8. Xem thêm
- Làm cân điện tử với ESP32, HX711 và load cell.
- Dùng ngắt GPIO trên ESP32 để đếm xung.
- Đo biến dạng bằng cảm biến strain gauge.
- Module HX711 và strain gauge hàn sẵn dây.
- Các bài khác trong loạt: cảm biến lực, encoder tương đối.
Xem thêm