تم النشر 2026-04-04
توفر هذه المقالة دليلاً عمليًا كاملاً لكتابة برنامج يتحكم في المعيارمضاعفاتمحرك. سوف تتعلم بنية التعليمات البرمجية الدقيقة، ومعلمات إشارة PWM الهامة، وكيفية تنفيذ مثال عملي باستخدام وحدات التحكم الدقيقة الشائعة. ليست هناك حاجة إلى منصات خاصة بعلامة تجارية أو مملوكة؛ تنطبق المبادئ عالميًا.
أمضاعفاتيتم تحديد موضع المحرك فقط من خلال عرض النبضة المتكررة (تعديل عرض النبض، PWM).لكتابة أي برنامج تحكم مؤازر، يجب عليك توليد إشارة بتردد 50 هرتز (الفترة = 20 مللي ثانية) وتغيير عرض النبضة العالية بين 1.0 مللي ثانية و 2.0 مللي ثانية.هذه القاعدة الوحيدة هي أساس كل برمجة المؤازرة القياسية.
1.0 مللي نبض → 0 درجة(عكس اتجاه عقارب الساعة بالكامل)
1.5 مللي ثانية نبض → 90 درجة(وضعية الوسط)
2.0 مللي نبض → 180 درجة(كامل في اتجاه عقارب الساعة)
لاتباع هذا الدليل، قم بإعداد المكونات التالية (أوصاف عامة، بدون أسماء تجارية):
محرك مؤازر قياسي 5 فولت (3 أسلاك: طاقة، أرضي، إشارة)
لوحة تحكم دقيقة واحدة (أي لوحة منطقية مشتركة 5 فولت)
مصدر طاقة خارجي واحد بجهد 5 فولت (إذا كان المؤازرة تسحب تيارًا عاليًا)
أسلاك العبور واللوح
قبل أي تعليمة برمجية، قم بإنشاء الاتصالات المادية:
مثال الحالة الشائعة:غالبًا ما يقوم المبتدئ بتوصيل طاقة المؤازرة مباشرة إلى طرف 5V الخاص بوحدة التحكم الدقيقة. عندما يتحرك المؤازرة، تتم إعادة ضبط اللوحة بسبب زيادة التيار. الحل: استخدم مصدر إمداد خارجي بجهد 5 فولت (على سبيل المثال، بطاريات 4xAA) مع أرضية مشتركة.
يجب أن يقوم كل برنامج مؤازر أولاً بإعداد معلمات إشارة PWM. يوجد أدناه بنية تعليمات برمجية عامة (قابلة للتكيف مع أي بيئة تشبه لغة C):
// 1. تحديد الثوابت (لا تغير هذه القيم) #define SERVO_PIN 9 #define PWM_FREQUENCY_HZ 50 // 50 هرتز = 20 مللي ثانية #define PULSE_MIN_US 1000 // 1.0 مللي ثانية لـ 0° #define PULSE_MID_US 1500 // 1.5 مللي ثانية لـ 90 درجة #define PULSE_MAX_US 2000 // 2.0 مللي ثانية لـ 180 درجة// 2. وظيفة الإعداد (تعمل مرة واحدة عند التشغيل)void setup() { // تكوين الدبوس كإخراج pinMode(SERVO_PIN, OUTPUT); // تكوين أجهزة PWM للنبض الأولي 50 هرتز و1.5 مللي ثانية (الموضع المركزي) تكوين PWM(SERVO_PIN, PWM_FREQUENCY_HZ, PULSE_MID_US); تأخير (1000)؛ // السماح للمؤازرة بالاستقرار }// 3. المساعد: تحويل الزاوية (0-180) إلى عرض النبض بالميكروثانيةint angleToPulse(int angle) { // التعيين الخطي: الزاوية 0 -> 1000us، الزاوية 180 -> 2000us return PULSE_MIN_US + (angle)(PULSE_MAX_US - PULSE_MIN_US) / 180)؛ }
المنطق الرئيسي الذي يحرك المؤازرة إلى زاوية محددة:
// انقل المؤازرة إلى زاوية معينة (من 0 إلى 180) واحتفظ بهذا الوضعvoid setServoAngle(int angle) { // زاوية المشبك ضمن النطاق الصالح if (angle 180) angle = 180; intpulseWidthUs = angleToPulse(angle);// قم بإنشاء دورة واحدة مدتها 20 مللي ثانية مع النبض العالي المحددgeneratorPulse(SERVO_PIN,pulseWidthUs); // عالي لـpulseWidthUs ميكروثانية تأخيرMicrothans(pulseWidthUs); الكتابة الرقمية (SERVO_PIN، LOW)؛ تأخير(20 - (pulseWidthUs / 1000.0)); // ما تبقى من فترة 20 مللي ثانية }
![]()
ملحوظة:التوليد النبض ()يمثل التجريد التلاعب المباشر في تسجيل الأجهزة. في التطبيقات الحقيقية، يمكنك استخدام وحدة التحكم PWM الطرفية المدمجة في وحدة التحكم الدقيقة أو طريقة ضرب البتات البرمجية.
يوجد أدناه برنامج كامل يقوم بمسح المؤازرة من 0 درجة إلى 180 درجة والعودة، مع تأخيرات لمراقبة الحركة. يستخدم هذا المثال أسلوبًا شائعًا لضرب البتات يعمل على أي دبوس رقمي.
// كود العمل الكامل (لا يتطلب مكتبة، لا يعتمد على النظام الأساسي) int servoPin = 9; unsigned long PreviousMicros = 0; int currentAngle = 0; int stepDirection = 1; // 1 = زيادة الزاوية، -1 = تقليل الإعداد الفارغ() { pinMode(servoPin, OUTPUT); // ابدأ عند 90 درجة (مركز) currentAngle = 90; } حلقة باطلة () {currentMicros الطويل غير الموقع = micros ()؛ // تحديث موضع المؤازرة كل 20 مللي ثانية (50 هرتز) if (currentMicros - PreviousMicros >= 20000) { PreviousMicros = currentMicros; // أرسل نبضة PWM للزاوية الحالية intpulseWidth = 1000 + (currentAngle 1000 / 180); // 1000us إلى 2000us digitalWrite(servoPin, HIGH); تأخير ميكروثانية(pulseWidth); الكتابة الرقمية (servoPin، LOW)؛ // تغيير زاوية التأثير الكاسح (اختياري) currentAngle += stepDirection; إذا (currentAngle >= 180) {currentAngle = 180؛ stepDirection = -1; تأخير (500)؛ // توقف مؤقتًا عند الحد الأقصى } else if (currentAngle
مثال الحالة الشائعة:يكتب المستخدم رمزًا يرسل نبضات كل 5 مللي ثانية بدلاً من 20 مللي ثانية. يستقبل المؤازرة الإشارات بسرعة كبيرة، ويسخن بشكل زائد، ويهتز. الحل هو التأكد من وجود 20 مللي ثانية بالضبط بين بداية كل نبضة.
بالنسبة للمشاريع التي تحتاج إلى القيام بمهام متعددة (على سبيل المثال، قراءة المستشعرات أثناء تحريك المؤازرة)، استخدم جهاز حالة بدونتأخير():
lastPulseTime الطويل غير الموقع = 0; int targetAngle = 90; int currentPulseWidth = 1500; // ابدأ من المركز void updateServoNonBlocking() { unsigned long now = micros(); if (now - lastPulseTime >= 20000) { // انقضت 20 مللي ثانية lastPulseTime = now; // احسب عرض نبضة الهدف من targetAngle int targetPulse = 1000 + (targetAngle * 1000 / 180); // انتقل تدريجيًا إلى الهدف (حركة أكثر سلاسة) if (currentPulseWidth targetPulse) currentPulseWidth--; الكتابة الرقمية (servoPin، HIGH)؛ تأخير ميكروثانية(currentPulseWidth); الكتابة الرقمية (servoPin، LOW)؛ } }
يتصلupdateServoNonBlocking()مرارا وتكرارا في الحلقة الرئيسية الخاصة بك.
1. يعتمد موضع المؤازرة حصريًا على عرض النبضة العالي- 1.0 مللي ثانية (0°)، 1.5 مللي ثانية (90°)، 2.0 مللي ثانية (180°). لا شيء آخر يغير الزاوية.
2. يجب أن يتكرر النبض كل 20 مللي ثانية (50 هرتز)– أي انحراف يسبب الارتعاش أو ارتفاع درجة الحرارة أو عدم الحركة.
ابدأ ببرنامج اختبار بسيطهذا يضبط المؤازرة على 90 درجة فقط ويستمر. تحقق باستخدام المنقلة من أن البوق موجود في المركز. وهذا يؤكد صحة توقيتك قبل إضافة عمليات المسح أو منطق الاستشعار.
استخدم محلل المنطق أو راسم الذبذباتلقياس الإشارة الفعلية على دبوس الإشارة. قارن عرض النبض المقاس بالقيم المقصودة في الكود الخاص بك. هذه هي طريقة التصحيح الأكثر موثوقية.
استخدم دائمًا مصدر طاقة منفصلاًللماكينات التي تسحب أكثر من 200 مللي أمبير. تؤدي مشاركة الطاقة مع وحدة التحكم الدقيقة إلى إعادة التعيين والسلوك غير المنتظم. ربط جميع الأسباب معا.
أضف مكثفًا كهربائيًا بسعة 100-470 ميكروفارادعبر طاقة المؤازرة والمحطات الأرضية بالقرب من المؤازرة. وهذا يقلل من الضوضاء الكهربائية ويثبت إشارة التحكم.
قم بتوثيق ثوابت توقيت النبض لديكبالميكرو ثانية مباشرة في الكود. وهذا يساعدك عند إعادة زيارة المشروع بعد أشهر.
باتباع هذا الدليل، يمكنك كتابة برنامج تحكم مؤازر يمكن الاعتماد عليه على أي منصة للتحكم الدقيق دون الاعتماد على مكتبات معدة مسبقًا. يظل مبدأ PWM الأساسي متطابقًا في جميع الأنظمة. قم بتنفيذ المثال غير المحظور للتطبيقات في الوقت الفعلي، وتحقق دائمًا من صحة عرض النبض باستخدام أدوات القياس.
وقت التحديث: 2026-04-04