منصة توازن بمحركي BLDC: تصميم نظام غير مستقر لاختبار التحكم في الزمن الحقيقي

منصة توازن بمحركي BLDC: تصميم نظام غير مستقر لاختبار التحكم في الزمن الحقيقي

يوليو 6, 2026·
خالد حميدي
خالد حميدي
· 7 دقيقة قراءة

لماذا تبني آلة غير مستقرة عن قصد؟

أداة ضبط لم تُختبر إلا في المحاكاة لا تثبت الكثير. المحاكاة تعطيك إشارات نظيفة، وتوقيتاً مثالياً، ونظاماً يتصرف تماماً كما تقول معادلاته. أردت العكس: نظاماً يسقط في اللحظة التي يتوقف فيها التحكم، ويستجيب خلال أجزاء من الثانية، ويحمل معه كل مشكلات العالم الحقيقي من ضجيج المحركات ولاخطية المشغّلات ومحدودية قدرة المعالجة.

لذلك صممت منصة توازن بمحركي BLDC: عارضة صلبة حرة الدوران حول محور مركزي، في كل طرف منها محرك بدون فرش ومروحة. هي نفس مسألة البندول المقلوب الكلاسيكية، وهي تحاكي محور الميلان (Pitch) لطائرة بدون طيار ثنائية المراوح. إذا أخطأ المتحكم ارتطمت العارضة بالأرض، وإذا أصاب طفت مستوية على عمودين من الهواء.

كانت هذه المنصة نظام التحقق العتادي لـأداة ضبط PID ومراقبتها في الزمن الحقيقي.


التصميم الميكانيكي

نمذجت التجميع كاملاً في Fusion 360 قبل طباعة أي قطعة، وكان هناك متطلبان أساسيان:

  1. تناظر الكتلة. إذا لم يكن الذراعان متطابقين تماماً، تولّد الجاذبية عزماً ثابتاً على العارضة، فيضطر المتحكم لمقاومة انحياز دائم بدل أن يوازن.
  2. محور دوران منخفض الاحتكاك. الاحتكاك في المحور يخفي الديناميكية الحقيقية ويجعل النظام يبدو أكثر استقراراً مما هو عليه. لذلك يحتوي حامل المحور على محمل كريات (Ball Bearing) لتدور العارضة بحرية في مستوى الميلان.
تصيير Fusion 360 لمنصة التوازن بمحركي BLDC، منظر أمامي
تصيير من Fusion 360: أرجوحة متناظرة، حامل المحور المركزي، وقواعد المحركات في الطرفين.
تصيير Fusion 360 للمنصة مائلة حول محورها
التجميع نفسه في وضعية ميلان. للمنصة درجة حرية واحدة: الميلان حول المحور.

طُبعت جميع الأجزاء الإنشائية ثلاثياً بمادة PLA (كثافة ملء 25%، سماكة طبقة 0.2 mm)، ما منحني دقة هندسية جيدة وكتلة متكررة على الجانبين.

حامل المحور المطبوع ثلاثياً مع محمل الكريات
حامل المحور مع محمل الكريات.
القاعدة المطبوعة ثلاثياً لمنصة التوازن
القاعدة المطبوعة على شكل حرف A.
أول تجميع لمنصة التوازن
أول تجميع كامل: المحركات، والـ ESC، والتوصيلات.
منصة التوازن أثناء اختبارات الطاولة
على طاولة الاختبار، جاهزة لأول تجارب التشغيل.

الديناميكية: ما الذي يقاومه المتحكم

حالة النظام هي زاوية الميلان $\theta(t)$ مقاسة من وضع التوازن ($\theta = 0$). وبتطبيق قانون نيوتن الثاني للحركة الدورانية حول المحور:

مخطط الجسم الحر للأرجوحة بمحركي BLDC
مخطط الجسم الحر: قوتا الدفع F₁ وF₂ على بعدي l₁ وl₂ من المحور، ومركبتا الجاذبية لكل مجموعة محرك.
$$ \ddot{\theta} = \frac{l_1 F_1 - l_2 F_2 + l_1 m_1 g\cos\theta - l_2 m_2 g\cos\theta}{m_1 l_1^2 + m_2 l_2^2} $$

حيث $m_1, m_2$ كتلتا مجموعتي المحركين، و$l_1, l_2$ بعداهما عن المحور، و$F_1, F_2$ قوتا دفع المروحتين، و$g$ تسارع الجاذبية.

هنا تظهر قيمة التصميم المتناظر. عندما $m_1 = m_2 = m$ و$l_1 = l_2 = L$، تُلغي حدود الجاذبية بعضها تماماً:

$$ \ddot{\theta} = \frac{L\,(F_1 - F_2)}{2 m L^2} = \frac{F_1 - F_2}{2 m L} $$

تسارع العارضة يعتمد فقط على فرق الدفع. لا يوجد عزم إرجاع، فأي اضطراب صغير يكبر حتى توقفه تغذية راجعة فعّالة. ويتبع دفع كل مروحة القانون التربيعي الكلاسيكي:

$$ T = C_T \, \omega^2 $$

حيث $C_T$ ثابت دفع المروحة و$\omega$ سرعة الدوار. هذه العلاقة التربيعية لاخطية تقع مباشرة بين خرج المتحكم والقوة الفيزيائية.


الإلكترونيات ومعمارية العتاد

مخطط معمارية العتاد والاتصال
معمارية العتاد والاتصال: MPU6050 ← Arduino ← وحدتا ESC ← محركا BLDC، مع اتصال أداة الحاسوب عبر المنفذ التسلسلي.
المكوّنالدورالمواصفات الأساسية
EMAX RS2205 ×2محركات BLDC2300 KV، مراوح ثابتة الخطوة
Hobbywing Skywalker 20 A ×2وحدات ESCتحكم بإشارة PWM، نبضة 1–2 ms
MPU6050وحدة قياس عطالية IMU (عند المحور)جيروسكوب ومقياس تسارع ثلاثي المحاور، I²C @ 400 kHz
Arduino Unoالمتحكم الرئيسيATmega328P @ 16 MHz، اتصال تسلسلي @ 115200 bps
بطارية Li-Poالتغذية3S، 11.1 V، 1800 mAh
محوّل DC–DCتغذية المنطق5 V، 2 A، يعزل دارات المنطق عن ضجيج المحركات
PLA (طباعة ثلاثية)الهيكلكثافة ملء 25%، سماكة طبقة 0.2 mm

تُغذّى دارات المنطق عبر محوّل DC–DC مخصص بجهد 5 V لإبعاد ضجيج تبديل المحركات عن المتحكم الدقيق والحساس. لكن كما أظهرت التجارب، عزل التغذية وحده لا يكفي.

صورة منصة التوازن بمحركي BLDC مع تسمية المكونات
منصة التجربة الكاملة مع تسمية المكونات الرئيسية.

التحكم المدمج: من بيانات IMU الخام إلى فرق الدفع

يشغّل Arduino حلقة تحكم متقطعة مصممة لتعمل بتردد 100 Hz ($T_s = 10$ ms). وكل دورة تمر بالمراحل نفسها: تقدير ← مقارنة ← حساب ← تحديد ← توزيع.

المخطط الصندوقي لنظام التحكم PID المدمج
نظام التحكم المدمج: زاوية المرجع، متحكم PID، كتلة الإشباع، والتوزيع التفاضلي على خرجي PWM للمحرك الأيسر والأيمن.

1. تقدير الوضعية (المرشح التكاملي)

الجيروسكوب سريع لكنه ينجرف، ومقياس التسارع لا ينجرف لكنه مليء بالضجيج. لذلك أدمجهما بمرشح تكاملي (Complementary Filter). يُكامَل معدل الجيروسكوب:

$$ \theta_g[k] = \theta_g[k-1] + \dot{\theta}[k]\, T_s $$

ثم يُدمج مع زاوية الميل من مقياس التسارع $\theta_a[k]$ المحسوبة من $(a_x, a_y, a_z)$:

$$ \hat{\theta}[k] = \alpha \left( \hat{\theta}[k-1] + \dot{\theta}[k]\, T_s \right) + (1-\alpha)\, \theta_a[k], \qquad \alpha = 0.98 $$

مع $\alpha = 0.98$ يهيمن الجيروسكوب على الديناميكية السريعة، بينما تصحح الجاذبية الانجراف ببطء.

2. متحكم PID المتقطع

مع خطأ التتبع $e[k] = \theta_{ref}[k] - \hat{\theta}[k]$:

$$ u[k] = K_p\, e[k] + K_i \sum_{i=0}^{k} e[i]\, T_s + K_d\, \frac{e[k] - e[k-1]}{T_s} $$

3. الإشباع

لحماية المشغّلات والحد من تراكم التكامل (Windup)، يُقيَّد الخرج بحد متناظر $L$، وهو حد PID الذي يُضبط مباشرة من الأداة:

$$ u'[k] = \begin{cases} +L, & u[k] > +L \\ u[k], & -L \le u[k] \le +L \\ -L, & u[k] < -L \end{cases} $$

4. التوزيع التفاضلي

أخيراً تُوزَّع الإشارة المحدودة بشكل متناظر حول سرعة دفع محايدة $U_{base}$:

$$ PWM_1[k] = U_{base} - u'[k], \qquad PWM_2[k] = U_{base} + u'[k] $$

يتسارع محرك ويتباطأ الآخر، فيبقى الدفع الكلي ثابتاً تقريباً، ويتحول خرج المتحكم إلى أمر عزم صافٍ.

وفي الكود، الحلقة الأساسية مكتوبة بإيجاز مقصود:

void loop() {
  unsigned long currentTime = millis();
  mpu.update();
  angle = mpu.getAngleY();

  if (pid.Compute() && !emergency) {
    int motor1 = constrain(baseSpeed - out, 1000, 2000);
    int motor2 = constrain(baseSpeed + out, 1000, 2000);
    ESC.writeMicroseconds(motor1);
    ESC2.writeMicroseconds(motor2);
  }

  if (currentTime - lastSerialTime >= SERIAL_INTERVAL) {
    handleSerialCommands();          // non-blocking, newline-terminated
    lastSerialTime = currentTime;
  }
}

تُجمَّع الأوامر الواردة حرفاً حرفاً وتُطبَّق دفعة واحدة: أي كسب جديد يمر عبر pid.SetTunings() ويصبح فعّالاً خلال فترة عينة واحدة. ويُرسَل البث القياسي على مؤقت مستقل بمعدل محدود حتى لا يستحوذ على الحلقة، وتُحفظ القيم المضبوطة في EEPROM لتقلع المنصة بآخر إعداد ناجح.


ما الذي علّمني إياه العتاد

هذا الجزء الذي أعتز به أكثر. المنصة توازنت، والأداة ضبطتها مباشرة، لكن التجارب قاست أيضاً لماذا لم يكن التوازن سلساً تماماً، وحوّلت مشكلتين خفيتين إلى أرقام.

الاكتشاف الأول: الحلقة لم تكن تعمل فعلياً بـ 100 Hz

صُمم الكود ليعمل بتردد 100 Hz، لكن السجلات المختومة زمنياً أظهرت متوسط فترة حلقة فعلي يقارب 30 ms، أي نحو 33 Hz. معالج ATmega328P بنواة واحدة وثمانية بتات مضطر لتنفيذ قراءة الحساس عبر I²C، وحساب PID، وتحديث وحدتي ESC، والاتصال التسلسلي ثنائي الاتجاه بالتتابع في كل دورة.

في الأنظمة الشبيهة بالبندول المقلوب، القاعدة الشائعة أنها تحتاج معدل تحديث لا يقل عن نحو 50 Hz للحصول على استقرار متين. عند 33 Hz بقيت المنصة متوازنة، لكن مع تذبذبات مستمرة صغيرة السعة، لأن المتحكم ببساطة لم يكن يستطيع الاستجابة بالسرعة الكافية لرفض الاضطرابات.

ولفصل كلفة الاتصال عن كلفة الحساب، أضفت وضع إيقاف العرض (Visualization-Off) الذي يوقف بث القياسات. تحسنت سلاسة الاستجابة بشكل ملحوظ، وهذا يؤكد أن البث يضيف حملاً. لكن التذبذب لم يختفِ، فعنق الزجاجة الرئيسي هو المتحكم الدقيق نفسه لا البروتوكول.

الاكتشاف الثاني: المحركات كانت تسمّم إشارة الحساس

المشكلة الثانية كانت التداخل الكهرومغناطيسي (EMI). سجّلت الزاوية في حالة الاستقرار ضمن نوافذ مدتها 5 ثوانٍ تحت ثلاث حالات:

ضجيج إشارة زاوية IMU عند سرعات محرك مختلفة
الزاوية المقاسة في ثلاث حالات: (a) المحركات متوقفة، (b) دفع منخفض (1200 µs)، (c) دفع التوازن (1320 µs). لاحظ تضاعف مقياس المحور العمودي عشر مرات.
الحالةالانحراف المعياري σالقيمة من القمة إلى القمة
المحركات متوقفة0.014°0.080°
سرعة منخفضة (1200 µs)0.264°1.610°
سرعة التوازن (1320 µs)0.534°3.840°

عند دفع التوازن ارتفع ضجيج الحساس 37 ضعفاً في الانحراف المعياري و48 ضعفاً في القيمة من القمة إلى القمة مقارنة بحالة المحركات المتوقفة. وارتفاع الضجيج مع قدرة المحركات يشير بوضوح إلى تداخل كهرومغناطيسي من محركات BLDC ووحدات ESC. وهذا حرج للمتحكم: الحد التفاضلي يقرأ الضجيج عالي التردد كحركة حقيقية، فيصدر تصحيحات لم تكن العارضة بحاجة إليها.

الخلاصة الهندسية: في الأنظمة الكهروميكانيكية الصغيرة، كثيراً ما يكون السقف الحقيقي للأداء محدداً بالتوقيت وسلامة الإشارة لا بقانون التحكم. ولم يكن ممكناً قياس هذين الحدّين دون بث قياسات حي ومختوم زمنياً، ولهذا السبب وُجدت أداة الضبط.

الخطوات التالية

  • نقل المتحكم إلى متحكم دقيق أسرع بمعمارية 32 بت لرفع معدل الحلقة الفعلي بأمان فوق 100 Hz.
  • تحصين سلسلة القياس ضد التداخل الكهرومغناطيسي: التدريع، وتوجيه الكابلات، وموضع الحساس، وترشيح الزاوية المقاسة.
  • استخدام البيانات المسجّلة في تعريف النظام (System Identification) والضبط المعتمد على النموذج، ومقارنته بالضبط اليدوي المنفّذ بالأداة.

منشورات مرتبطة ضمن هذه السلسلة