El 28BYJ-48 هو محرك متدرج أحادي القطب تكلفة منخفضة ودقة عالية، مثالية لمشاريع الإلكترونيات والطابعات ثلاثية الأبعاد وآلات CNC والروبوتات. إن حجمه الصغير واستهلاكه المنخفض للطاقة وسهولة استخدامه يجعله خيارًا شائعًا لهواة ومحترفي الإلكترونيات.
علاوة على ذلك، إلى جانب هذا المحرك، أ وحدة مع ULN2003، لسيطرتك. بهذه الطريقة، لدينا كل ما هو ضروري لنتمكن من استخدام هذا النظام بشكل كامل، باستخدام وحدة التحكم الدقيقة أو اللوحة اردوينو أو ما شابه ذلك.
ما هو محرك السائر 28BYJ-48؟
Un محرك السائر هو نوع من المحركات الكهربائية والذي يتحرك بخطوات زاوية منفصلة صغيرة، بدلاً من الدوران المستمر. يعمل باستخدام مجموعة من المغناطيسات الكهربائية التي يتم تفعيلها بتسلسل محدد. من خلال تنشيط مغناطيسات كهربائية مختلفة، يتم إنشاء مجال مغناطيسي يجذب دوار المحرك، مما يجعله يدور خطوة بخطوة. يعتمد عدد الخطوات لكل دورة ودقة الحركة على تصميم المحرك المحدد وتسلسل التحكم المستخدم.
ضمن المحركات السائر لدينا نوعان:
- أحادي القطب- تحتوي على مجموعة واحدة من الملفات وتتطلب وحدة تحكم خاصة لعكس التيار وجعل المحرك يدور في كلا الاتجاهين.
- ثنائي القطب- تحتوي على مجموعتين من الملفات المستقلة، مما يسمح لها بالدوران في كلا الاتجاهين دون الحاجة إلى وحدة تحكم خاصة.
في حالة 28BYJ-28 فهو من النوع أحادي القطب، كما ذكرت سابقًا. وتتميز ضمن هذه المجموعة بما يلي المواصفات:
- السائر أحادي القطب: تحكم بسيط باستخدام 4 كابلات فقط.
- المخفض المتكامل: يوفر دقة عالية (0.088 درجة لكل خطوة) وعزم دوران (3 نيوتن · سم).
- انخفاض الاستهلاك: 83 مللي أمبير (طراز 5 فولت) أو 32 مللي أمبير (طراز 12 فولت).
- تغذية: 5 فولت أو 12 فولت (حسب الموديل).
- سعر اقتصادي: بدءًا من 1.2 يورو لكل وحدة، أو أكثر قليلاً إذا كانت تتضمن وحدة ULN2003.
أما بالنسبة لل التطبيقات الممكنة، لقد ذكرت بعضًا منها من قبل، ولكن هنا أقدم لك مرة أخرى بعض الأفكار لمشاريعك:
- التحكم في الصمامات الهيدروليكية والهوائية.
- الروبوتات المفصلية والأذرع الآلية.
- تحديد موضع المستشعر.
- الجداول الدوارة للماسحات الضوئية.
- طابعات ثلاثية الأبعاد.
- آلات التصنيع باستخدام الحاسب الآلي.
محرك السائر لا يعمل بمفرده، بل يتطلب عنصرًا آخر. في هذه الحالة، يتم التحكم في 28BYJ-48 بواسطة لوحة مزودة بـ ULN2003 متكامل، والذي يسمح بتضخيم تيار مخرجات Arduino لتشغيل ملفات المحرك. ومن خلال تنشيط الملفات بالتسلسل الصحيح، يدور المحرك خطوة بخطوة بدقة كبيرة.
أنواع تسلسلات ومراحل التحكم
هناك تسلسلات تحكم مختلفة لـ 28BYJ-48، الأكثر شيوعًا هي:
- تسلسل موجة كامل: ينشط جميع الملفات في نفس الوقت.
- تسلسل نصف خطوة: يقوم بتنشيط ملفين متجاورين في نفس الوقت.
- تسلسل الخطوات المجهرية: يقوم بتنشيط ملف واحد في كل مرة.
لنرى المراحل بالتفصيل:
- تسلسل 1 المرحلة: في تسلسل أحادي الطور نقوم بتشغيل ملف واحد في كل مرة. بأخذ تسلسل الإشعال هذا إلى الطاولة، يجب إنشاء ما يلي في دبوس المحرك:
خطوة | A | B | أ' | ب' |
---|---|---|---|---|
1 | ON | يوم عطلة | يوم عطلة | يوم عطلة |
2 | يوم عطلة | ON | يوم عطلة | يوم عطلة |
3 | يوم عطلة | يوم عطلة | ON | يوم عطلة |
4 | يوم عطلة | يوم عطلة | يوم عطلة | ON |
- تسلسل على مرحلتين: نقوم بتشغيل ملفين مترابطين في كل مرحلة، وبالتالي يكون المجال المغناطيسي المتولد أكبر (41٪ أكثر) وبالتالي يكون للمحرك عزم دوران أكبر، أي أننا نحصل على قوة أكبر. كنقطة سلبية، ضاعفنا استهلاك الطاقة. أما بالنسبة للجدول فيكون:
خطوة | A | B | أ' | ب' |
---|---|---|---|---|
1 | ON | ON | يوم عطلة | يوم عطلة |
2 | يوم عطلة | ON | ON | يوم عطلة |
3 | يوم عطلة | يوم عطلة | ON | ON |
4 | ON | يوم عطلة | يوم عطلة | ON |
- تسلسل نصف خطوة: هذه مرحلة أخرى من المراحل التي سنراها، يمكنك تجربة ما يثير اهتمامك أكثر. هنا نقوم بتشغيل ملف واحد وملفين بالتناوب، مما يحقق دقة نصف خطوة. يتم استخدامه في التطبيقات التي تتطلب أعلى دقة، على الرغم من أنه قد تكون هناك مشاكل عندما يكون التطبيق عند الحد الأقصى لعزم الدوران. يؤدي التعبير عن التسلسل في شكل جدول إلى:
نصف خطوة | A | B | أ' | ب' |
---|---|---|---|---|
1 | ON | يوم عطلة | يوم عطلة | يوم عطلة |
2 | ON | ON | يوم عطلة | يوم عطلة |
3 | يوم عطلة | ON | يوم عطلة | يوم عطلة |
4 | يوم عطلة | ON | ON | يوم عطلة |
5 | يوم عطلة | يوم عطلة | ON | يوم عطلة |
6 | يوم عطلة | يوم عطلة | ON | ON |
7 | يوم عطلة | يوم عطلة | يوم عطلة | ON |
8 | ON | يوم عطلة | يوم عطلة | ON |
28BYJ-28 مع اردوينو
أول شيء هو توصيل بشكل صحيح الوحدة والمحرك 28byj-48 إلى لوحة Arduino الخاصة بنا، للقيام بذلك، عليك ببساطة إجراء الاتصالات التالية:
- الدبوس – من ULN2003 إلى GND لاردوينو.
- دبوس + من ULN2003 إلى Vcc (5 فولت أو في حالات أخرى، إذا كان محرك 12 فولت، فيجب استخدام مصدر طاقة بهذا الجهد) من Arduino.
- IN1 وIN2 وIN3 وIN4 لـ ULN2003 إلى المدخلات الرقمية D8 وD9 وD10 وD11 الخاصة بـ Arduino.
- محرك 28byj-48، ما عليك سوى توصيله بالمنفذ الموجود على وحدة ULN2003.
الآن وبعد أن أصبحت متصلاً، فإن الشيء التالي هو الاستخدام مثال في اردوينو IDE، والتي يمكنك استخدامها كما هي لتجربتها أو تعديلها حسب رغبتك. في هذا المثال، تم التعليق على جميع جداول الطور، مثل // أمام السطر، كما تعلم... إذا كنت تريد استخدام أحدها، فما عليك سوى حذف // أمام التعليمات.
//Definir los pines const int motorPin1 = 8; // 28BYJ48 In1 const int motorPin2 = 9; // 28BYJ48 In2 const int motorPin3 = 10; // 28BYJ48 In3 const int motorPin4 = 11; // 28BYJ48 In4 //Definición de variables int motorSpeed = 1200; //Velocidad del motor int stepCounter = 0; //Contador de pasos int stepsPerRev = 4076; //Pasos para un giro completo //Tablas de secuencia (descomentar la que necesites) //Secuencia 1-fase //const int numSteps = 4; //const int stepsLookup[4] = { B1000, B0100, B0010, B0001 }; //Secuencia 2-fases //const int numSteps = 4; //const int stepsLookup[4] = { B1100, B0110, B0011, B1001 }; //Secuencia media fase //const int numSteps = 8; //const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; void setup() { //Declarar los pines usados como salida pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { for (int i = 0; i < stepsPerRev * 2; i++) { clockwise(); delayMicroseconds(motorSpeed); } for (int i = 0; i < stepsPerRev * 2; i++) { anticlockwise(); delayMicroseconds(motorSpeed); } delay(1000); } void clockwise() { stepCounter++; if (stepCounter >= numSteps) stepCounter = 0; setOutput(stepCounter); } void anticlockwise() { stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; setOutput(stepCounter); } void setOutput(int step) { digitalWrite(motorPin1, bitRead(stepsLookup[step], 0)); digitalWrite(motorPin2, bitRead(stepsLookup[step], 1)); digitalWrite(motorPin3, bitRead(stepsLookup[step], 2)); digitalWrite(motorPin4, bitRead(stepsLookup[step], 3)); }