ชมรมโดรน

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 ให้ตรงกับทิศที่ตั้ง)
ตัวอย่างการเพิ่ม (+) และลด (−) ความเร็วใบพัดแต่ละท่า++++ขึ้น−−++ก้มหัว (ไปหน้า)−++−เอียงขวา−+−+หมุนตามเข็มแดง + = หมุนเร็วขึ้น · ฟ้า − = หมุนช้าลง · ภาพเป็นหลักการ ไม่ใช่ค่าจาก firmware จริง
เครื่องหมายบวกลบของแต่ละท่า แดง + = หมุนเร็วขึ้น ฟ้า − = หมุนช้าลง

ตัวอย่างคำนวณ

ให้ 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) ที่สั่งมอเตอร์ทีละตัวตรงๆ แต่ใช้ทดสอบมอเตอร์บนโต๊ะเท่านั้น ไม่ควรเรียกตอนบิน

ลองทำ

  1. คำนวณ M1–M4 เมื่อ Thr = 100, P = 0, R = 10 (เอียงขวา) และตรวจว่ารวมเท่าเดิมหรือไม่
  2. ถ้า Thr = 100 สั่ง P = 30 อะไรเกิดขึ้นกับ M1 (คำตอบ: 100 − 30 = 70 ยังอยู่ในช่วง แต่ M3 = 130 เกินเพดาน)
  3. ต้องการหมุนทวนเข็ม ค่า Y ควรเป็นบวกหรือลบ (ใช้เครื่องหมายด้านบน: ลบ)

On this page