تم النشر 2026-04-01
يقدم هذا الدليل شرحًا عمليًا كاملاً لكود تعديل عرض النبض (PWM) للتحكم في المعيارمضاعفاتالمحركات. إذا كنت تبحث عن الكود الدقيق وتعليمات الأسلاك ومبادئ التوقيت لإجراء ذلكمضاعفاتتحرك إلى زاوية دقيقة، لقد وصلت إلى المكان الصحيح. تركز هذه المقالة على المعيار المقبول عالميًا لـمضاعفاتالتحكم - إشارة PWM بتردد 50 هرتز مع عرض نبض يتراوح بين 1 مللي ثانية و2 مللي ثانية - ويوفر أمثلة على أكواد العمل التي لا تتوافق مع الأجهزة، مما يضمن إمكانية تطبيقها على أي نظام أساسي لوحدة التحكم الدقيقة.
في جوهره، لا يتعلق التحكم في أجهزة تناظرية قياسية بإرسال حزم بيانات معقدة، بل يتعلق بتوليد نبضة كهربائية محددة ومتكررة. تفسر الدوائر الداخلية للمؤازرة عرض هذه النبضة لتحديد الموضع المستهدف لعمود الخرج الخاص بها.
يتم تعريف إشارة التحكم القياسية بواسطة معلمتين رئيسيتين:
1. الفترة (التكرار):تتكرر الإشارة كل 20 مللي ثانية (ملي ثانية). وهذا يعادل تردد 50 هرتز (1 / 0.02 ثانية = 50 هرتز).
2. عرض النبض (دورة العمل):تكون مدة الإشارة عالية (المنطق 1) خلال فترة 20 مللي ثانية. تحدد هذه القيمة زاوية المؤازرة مباشرةً.
يعد التعيين بين عرض النبضة والزاوية بمثابة جزء مهم من المعلومات. بالنسبة للغالبية العظمى من الماكينات القياسية، تكون العلاقة خطية وتتبع هذه المواصفات القياسية الصناعية:
1.0 مللي ثانية نبض:يقوم بتدوير المؤازرة إلى 0 درجة (عكس اتجاه عقارب الساعة بالكامل).
1.5 مللي ثانية نبض:يقوم بتدوير المؤازرة إلى 90 درجة (الموضع المركزي).
2.0 مللي ثانية نبض:يقوم بتدوير المؤازرة إلى 180 درجة (في اتجاه عقارب الساعة بالكامل).
في حين أن العديد من الماكينات تلتزم بهذا المعيار، فمن الضروري التحقق من النطاق الدقيق لطرازك المحدد، حيث أن بعض الماكينات عالية العزم أو الماكينات المتخصصة قد يكون لها نقاط نهاية مختلفة قليلاً (على سبيل المثال، 0.9 مللي ثانية إلى 2.1 مللي ثانية). تم تصميم أمثلة التعليمات البرمجية أدناه للسماح بالتعديل السهل لثوابت عرض النبضة الدنيا والقصوى.
منطق الكود متسق عبر جميع الأنظمة الأساسية: قم بتهيئة مؤقت/عداد لتوليد إشارة 50 هرتز ثم قم بتعديل "في الوقت المحدد" لتلك الإشارة لضبط زاوية المؤازرة. يوضح الكود الزائف التالي المنطق الأساسي الذي يمكنك تكييفه مع أي بيئة برمجة.
// --- ثوابت التكوين --- #define PWM_FREQUENCY_HZ 50 #define PERIOD_MS (1000 / PWM_FREQUENCY_HZ) // يتم الحساب حتى 20 مللي ثانية #define PULSE_MIN_MS 1.0 // عرض النبض عند 0 درجة #define PULSE_MAX_MS 2.0 // عرض النبض عند 180 درجة #define ANGLE_MIN 0 #define ANGLE_MAX 180 // --- وظيفة تعيين زاوية لعرض النبضة --- float angleToPulseWidth(int angle_degrees) { // تقييد الزاوية على النطاق الصالح if (angle_degrees ANGLE_MAX) angle_degrees = ANGLE_MAX; // التعيين الخطي من نطاق الزاوية إلى نطاق عرض النبضة floatpulse_width = PULSE_MIN_MS + ( (float)(angle_degrees - ANGLE_MIN) / (ANGLE_MAX - ANGLE_MIN))(PULSE_MAX_MS - PULSE_MIN_MS)؛ عودة عرض النبض؛ } // --- مفهوم حلقة التحكم الرئيسية --- // في التنفيذ الحقيقي، سيتم التعامل مع ما يلي بواسطة جهاز توقيت الأجهزة. // 1. اضبط دبوس الإخراج عاليًا. // 2. انتظر (تأخير) لعرض النبض المحسوب (على سبيل المثال، 1.5 مللي ثانية). // 3. اضبط دبوس الإخراج على LOW. // 4. انتظر ما تبقى من فترة 20 مللي ثانية (PERIOD_MS -pulse_width).
ولجعل هذا قابلاً للتنفيذ على الفور، إليك تطبيقات ملموسة لاثنين من منصات التطوير الأكثر شيوعًا. تظل المبادئ متطابقة، مما يدل على إمكانية نقل معيار 50 هرتز و1-2 مللي ثانية.
هذه هي نقطة الدخول الأكثر شيوعًا للهواة. اردوينومضاعفاتتلخص المكتبة تعقيد مؤقت الأجهزة، مما يوفر واجهة نظيفة. يعتمد هذا المثال على الممارسة القياسية المتمثلة في توصيل سلك إشارة المؤازرة بمنفذ رقمي قادر على تعديل عرض النبضة (PWM).
#يشمل// إنشاء كائن مؤازر Servo myServo; // تحديد الدبوس المتصل بسلك إشارة المؤازرة const int servoPin = 9; void setup() { // إرفاق كائن المؤازرة بالدبوس // تقوم المكتبة تلقائيًا بإعداد إشارة 50 هرتز myServo.attach(servoPin); // --- السيناريو الشائع: توسيط المؤازرة عند بدء التشغيل --- // في العديد من التطبيقات الآلية، من الضروري البدء من موضع معروف // آمن لتجنب الإجهاد الميكانيكي. يعد التوسيط بزاوية 90 درجة // من أفضل الممارسات العالمية. myServo.write(90); // الانتقال إلى الموضع المركزي تأخير (1000)؛ // السماح بالوقت للوصول إلى الموضع } void Loop() { // امسح من 0 إلى 180 درجة for (int angle = 0; angle = 0; angle--) { myServo.write(angle); تأخير (15)؛ } }
ملحوظة: اليكتب()تقوم الوظيفة تلقائيًا بتحويل الزاوية (0-180) إلى عرض النبض الصحيح (1-2 مللي ثانية).
في Raspberry Pi، تقوم عادةً بإنشاء إشارة PWM في البرنامج، الأمر الذي يتطلب توقيتًا دقيقًا. الRPi.GPIOتوفر المكتبة واجهة PWM مدعومة بالأجهزة على دبابيس محددة للحصول على إشارات أكثر دقة. يعكس هذا المثال النهج القياسي للتحكم بمؤازرة واحدة على كمبيوتر أحادي اللوحة يعمل بنظام التشغيل Linux.
استيراد RPi.GPIO كوقت استيراد GPIO # تعريفات الدبوس servo_pin = 18 # استخدم دبوسًا يدعم PWM للأجهزة، مثل GPIO 18 GPIO.setmode(GPIO.BCM) GPIO.setup(servo_pin, GPIO.OUT) # إعداد PWM: تردد 50 هرتز pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # ابدأ بدورة عمل بنسبة 0% def set_angle(angle): """تحويل زاوية (0-180) إلى دورة عمل لإشارة 50 هرتز.""" # Constrain angle angle = max(0, min(180, angle)) # زاوية الخريطة (0-180) لعرض النبضة (1-2 مللي ثانية) # لفترة 20 مللي ثانية (50 هرتز)، دورة العمل = (pulse_width_ms) / 20) 100 عرض النبضة = 1.0 + (الزاوية / 180.0)1.0 # يعين 1.0-2.0 مللي ثانية دورة الخدمة = (pulse_width_ms / 20.0)100.0 pwm.ChangeDutyCycle(duty_cycle) # --- السيناريو الشائع: معايرة مؤازرة جديدة --- # عند دمج مؤازرة لأول مرة، من المهم التحقق من حدودها الميكانيكية الحقيقية. يوضح الكود أدناه روتين معايرة آمن. محاولة: # اختبار موضع المركز print("الانتقال إلى 90 درجة...") set_angle(90) time.sleep(2) # اختبار موضع 0 درجة (نبض 1.0 مللي ثانية) print("الانتقال إلى 0 درجة...") set_angle(0) time.sleep(2) # اختبار موضع 180 درجة (نبض 2.0 مللي ثانية) print("الانتقال إلى 180 درجة...") set_angle(180) time.sleep(2) # العودة إلى المركز print("Returning to center.") set_angle(90) time.sleep(1) باستثناء KeyboardInterrupt: print("Stopped by user") أخيرا: pwm.stop() GPIO.cleanup()
ملاحظة: تستخدم هذه الطريقة حساب دورة العمل. بالنسبة لإشارة 50 هرتز، تتوافق نبضة قدرها 1 مللي ثانية مع دورة تشغيل قدرها (1/20)100 = 5%. نبضة 2 مللي ثانية هي (2/20)100 = 10%.
حتى مع وجود الكود الصحيح، فإن العديد من المشكلات المتعلقة بالأجهزة يمكن أن تمنع المؤازرة من العمل. سيساعدك فهم هذه السيناريوهات الشائعة على تشخيص المشكلات وحلها بسرعة.
1. إمدادات الطاقة غير كافية:هذه هي القضية الأكثر شيوعا. يمكن للمؤازرة النموذجية أن تسحب 200-500 مللي أمبير عند الحركة وحتى التيارات المماطلة الأعلى. غالبًا ما تكون منافذ USB الخاصة بوحدات التحكم الدقيقة (عادةً 500 مللي أمبير) غير كافية، خاصة بالنسبة للماكينات المتعددة.
حل:استخدم مصدر طاقة خارجيًا مخصصًا (على سبيل المثال، 5 فولت من حزمة بطارية أو مصدر طاقة منظم). تأكد من توصيل الأرض (GND) الخاصة بوحدة التحكم الدقيقة بأرضية مصدر الطاقة الخارجي.
2. قيم التوقيت غير الصحيحة:إذا اهتز المؤازرة أو طنينها أو لم ينتقل إلى النطاق الكامل، فمن المحتمل ألا تتطابق حدود عرض النبضة مع مواصفات المؤازرة.
حل:راجع ورقة بيانات المؤازرة لمعرفة نطاق عرض النبض الدقيق. الاختلاف الشائع هو 0.9 مللي ثانية إلى 2.1 مللي ثانية. ضبطPULSE_MIN_MSوPULSE_MAX_MSالثوابت في التعليمات البرمجية الخاصة بك وفقا لذلك.
3. انحراف التردد في برنامج PWM:على منصات مثل Raspberry Pi التي لا تحتوي على دبابيس PWM للأجهزة المخصصة، يمكن أن تعاني PWM التي تم إنشاؤها بواسطة البرامج من عدم تناسق التوقيت بسبب تعدد المهام في نظام التشغيل.
حل:بالنسبة للتطبيقات المهمة أو عالية السرعة، استخدم لوحة تحكم مؤازرة مخصصة (مثل PCA9685) تعمل على تفريغ التوقيت إلى شريحة أجهزة مخصصة، مما يضمن توليدًا مستقرًا بمعدل 50 هرتز.
لقيادة مؤازرة بنجاح باستخدام رمز PWM، تذكر هذه المبادئ الأساسية الثلاثة:
1. توحيد الإشارة:تهدف دائمًا إلى توليد إشارة دقيقة بتردد 50 هرتز. عرض النبض هو المتغير الوحيد الذي يتحكم في الموضع.
2. زوايا الخريطة إلى البقول:استخدم التعيين الخطي من 1.0 مللي ثانية (0 درجة) إلى 2.0 مللي ثانية (180 درجة) كخط أساسي. تعمل هذه الصيغة مع أكثر من 90% من الماكينات القياسية.
3. إعطاء الأولوية للسلطة:تأكد من أن مصدر الطاقة الخاص بك يمكنه توصيل التيار المطلوب. إن المؤازرة التي ترتعش بشكل غير منتظم هي دائمًا مشكلة في الطاقة وليست مشكلة في الكود.
خطوة العمل:ابدأ برمز المسح البسيط على النظام الأساسي الذي اخترته باستخدام مؤازرة واحدة. بمجرد عمل عملية المسح، استبدل الزوايا المشفرة بمدخلات المستشعر أو قيم عصا التحكم أو المواضع المحسوبة لدمج المؤازرة في مشروعك الأكبر. من خلال الالتزام بمعيار 50 هرتز والتحقق من مصدر الطاقة لديك، يمكنك إنشاء أساس قوي لأي تطبيق للتحكم في الحركة.
وقت التحديث: 2026-04-01