4. การผสมแรงมอเตอร์ (Motor Mixing)
จากคำสั่ง "ไปหน้า" ไปเป็นรอบของมอเตอร์ทั้ง 4 ใบ
เราสั่งโดรนแค่ 4 เรื่องคือ ขึ้น–ลง, ก้ม–เงย, เอียงข้าง, หมุนหัว แต่มอเตอร์มี 4 ตัว ที่ต้องมีตัวกลางแปลงคำสั่ง 4 เรื่องเป็นความเร็วมอเตอร์ 4 ตัว ตัวกลางนี้เรียกว่า Motor Mixing
หลักการ ไม่ใช่โค้ดของ RCSA
Firmware ของ Flight Controller RCSA ไม่เปิดเผย หน้านี้จึงอธิบายสูตรผสมแบบมาตรฐานที่โดรน X-quad ทั่วไปใช้ ซึ่งตรงกับพฤติกรรมที่เราสังเกตได้ ไม่ใช่ตัวเลขจริงข้างในเครื่อง
สูตรหลัก
ให้ Thr = กำลังรวม (ขึ้น–ลง) P = ก้ม/เงย R = เอียงข้าง Y = หมุนหัว แต่ละใบพัดคำนวณจาก
M1 (หน้าขวา, ตามเข็ม) = Thr − P − R − Y
M2 (หน้าซ้าย, ทวนเข็ม) = Thr − P + R + Y
M3 (หลังซ้าย, ตามเข็ม) = Thr + P + R − Y
M4 (หลังขวา, ทวนเข็ม) = Thr + P − R + Yเครื่องหมายแต่ละช่องมีเหตุผลทั้งหมด
- P (ก้มหัว = ไปหน้า): ใบหน้าลดลง (−) ใบหลังเพิ่มขึ้น (+) ท้ายยก หัวก้ม
- R (เอียงขวา): ใบฝั่งขวาลดลง (−) ใบฝั่งซ้ายเพิ่มขึ้น (+) ฝั่งซ้ายยก ตัวเอียงขวา
- Y (หมุนตามเข็ม): คู่ทวนเข็ม (M2, M4) เพิ่ม คู่ตามเข็ม (M1, M3) ลด แรงบิดสุทธิเหลือไปทางตามเข็ม (ปรับเครื่องหมาย Y ให้ตรงกับทิศที่ตั้ง)
ตัวอย่างคำนวณ
ให้ Thr = 100 ลอยนิ่งอยู่ ต้องการก้มหัวไปหน้านิดหน่อย P = 8 ไม่เอียงข้าง ไม่หมุน
M1 = 100 − 8 − 0 − 0 = 92
M2 = 100 − 8 + 0 + 0 = 92
M3 = 100 + 8 + 0 − 0 = 108
M4 = 100 + 8 − 0 + 0 = 108
รวม = 400 (เท่ากับตอนลอยนิ่ง)สังเกตว่าผลรวมยัง = 400 นั่นคือแรงยกรวมไม่เปลี่ยน แต่ใบหลังแรงกว่าใบหน้า โดรนจึงก้มหัว ตัวเลข 100 และ 8 เป็น "หน่วยสมมุติ" ไม่ใช่ RPM จริง
ต่อไปผสมหลายท่าพร้อมกัน เช่นไปหน้า (P=8) และเอียงขวา (R=5) และหมุนตามเข็ม (Y=3)
M1 = 100 − 8 − 5 − 3 = 84
M2 = 100 − 8 + 5 + 3 = 100
M3 = 100 + 8 + 5 − 3 = 110
M4 = 100 + 8 − 5 + 3 = 106ทุกท่าบวกลบกันได้ตรงๆ เป็นเหตุผลที่ FC ทำท่าผสมได้ในเสี้ยววินาที
ขีดจำกัด: มอเตอร์ไม่ได้หมุนเร็วได้ไม่จำกัด
ถ้า Thr = 95 แล้วสั่งก้มแรงมากจน M1 ต้อง = −10 ก็ทำไม่ได้ (มอเตอร์ติดลบไม่ได้) ส่วน M3 ต้อง 125 แต่สูงสุดได้ 100 FC จึงต้อง ตัดแต่งให้อยู่ในช่วง ซึ่งทำให้ท่าที่ได้ไม่เต็มที่ เหตุผลหนึ่งที่โดรนที่แบกของหนักเอียงและเลี้ยวช้าลง เพราะ Thr สูงอยู่แล้ว เหลือที่ให้ผสมน้อย
ทำไมเราไม่ต้องทำเอง
ในโค้ดของชมรมไม่มีการผสมแรงเลย เราสั่งระดับสูง (fw, ml, set_yaw) FC ทำสูตรด้านบนเองที่ความถี่หลายร้อยครั้งต่อวินาที มีคำสั่ง pArduino->motor(num, speed) ที่สั่งมอเตอร์ทีละตัวตรงๆ แต่ใช้ทดสอบมอเตอร์บนโต๊ะเท่านั้น ไม่ควรเรียกตอนบิน
ลองทำ
- คำนวณ M1–M4 เมื่อ Thr = 100, P = 0, R = 10 (เอียงขวา) และตรวจว่ารวมเท่าเดิมหรือไม่
- ถ้า Thr = 100 สั่ง P = 30 อะไรเกิดขึ้นกับ M1 (คำตอบ: 100 − 30 = 70 ยังอยู่ในช่วง แต่ M3 = 130 เกินเพดาน)
- ต้องการหมุนทวนเข็ม ค่า Y ควรเป็นบวกหรือลบ (ใช้เครื่องหมายด้านบน: ลบ)