الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماذا لو صنعنا معا محرك سيرفو ؟؟ الأمر ممكن بمساعدة المبرمجين

بدأه maaas76 في 1 يناير 2009 · 11 رد · 4,692 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

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

تحياتي لكم

#2

بسم الله الرحمن الرحيم

تحية وبعد اخي بصراحة كثيرا هو اهتمامي بالمحركات وقد تم التركيز من قبلي على محركات الخطوة وبسبب ارتفاع سعرها وعدم توفرها

بالقياسات المطلوبة حاولت الاتجاه لمحركات بديلة وها انت قد تطرقت لحل اتمنى منك طرح ما لديك من خبرة وما وصلت له في هذا المجال

لنكمل معا ومع الاخوة من مبرمجين في المنتدى لان معلومة من كل فرد قد تكمل ما ينقص عند الاخر ولكن المشكلة في المنتدى تكمن عدم التواصل

بين المرجين والاقسام الالكترونية ادعو الله ان يتم التواصل بين الاقسام

وفقك الله وسدد خطاك

#3

السلام عليكم

أنا مبرمج وسيكون من دواعي سروري المساعدة ولو بمعلومة (كما تفضل الأخ نبيل)

رغم حداثتي في علم الإلكترونيات ولكنني سأبذل قصارى جهدي

للمساعدة.

وشكراً.

تم تعديل هذه المشاركة بواسطة LordCover في 2 يناير 2009 في 04:13

مؤسس شبكة مواقع إجابتي أول شبكة مواقع عربية للأسئلة والأجوبة

#4

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

كل الشكر للأخوة : نبيل السيد طه و LordCover

الأمر يبدو مشجعا وبسم الله أبدأ بطرح فكرتي

الموضوع بكل بساطة هو كتابة برنامج بحيث يكون هناك داخل المايكرو كونترولر عدادين تصاعديان و تنازليان و مقارين بين العدادين و إستخدام ثلاث مخارج للمايكروكونترولر تتبع لنتيجة المقارنة بحيث يكون المخرج الأول في الوضع 1 منطقي في حال كان العداد الأول أكبر من الثاني و المخرجان الآخران في الوضع 0 منطقي

و يكون المخرج الثاني في الوضع 1 منطقي في حال كان العدادان متساويي القيمة والمخرجان الآخران في الوضع 0 منطقي

ويكون المخرج الثالث في الوضع 1 منطقي في حال كان العداد الثاني أكبر من العداد الأول و المخرجان الآخران في الوضع 0 منطقي

أما عن طريق قيادة العدادين :

فبكل بساطة يخصص لكل عداد قطبين من المايكرو كونترولر بحيث يكون قطب لإدخال نبضات العد ( مدخل نبضات ) و قطب آخر لتحديد إتجاه العد تصاعديا أو تنازليا تبعا لحالته المنطقية 1 أو 0

قد قمت بكتابة البرنامج بالفعل و جربته على برنامج الـ (PicSimulator ) وقد عمل البرنامج غير أنني واجهت المشكلة التالية و هي مشكلة الحدود

أعني بمشكلة الحدود التالي :

لنقم مثلا بكتابة البرنامج بحيث يعد كل من العدادين بين القيمة 0 والقيمة 7 ثنائي (تصاعديا و تنازليا )

عند تشغل البرنامج يكون العدادان في القيمة 0 فتكون حالة مخارج المقارن بين العداد هي المخرج الثاني 1 منطقي والمخرجين الآخران 0 منطقي إرجع إلى الشرح أعلاه ممتاز أليس كذلك

الآن إذا أدخلنا نبضة للعداد الأول مع مراعاة أن يكون العد تصاعديا ( إرجع إلى شرح طريقة عمل العداد ) ماذا سيحدث ؟؟ أنا أقول لك : سترتفع قيمة العداد الأول من صفر إلى واحد و بالنتيجة أصبح العداد الأول أكبر من العداد الثاني ب 1 هنا سيكتشف المقارن ( الصاحي على طول ) أن العداد الأول أكبر من الثاني فيغير حالة مخارجه

فتصبح حالة خرج المقارن كالتالي : المخرج الأول في الوضع 1 منطقي والآخران 0 منطقي

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

المخرج الثاني 1 منطقي والآخران 0 منطقي و بملاحظة أننا لم نربط المخرج الثاني بأي إتجاه ( لأن العدادين متساويين في حال عمل المخرج الثاني بالقيمة 1 منطقي ) مما يوقف دوران المحرك

ملاحظة : نقوم بربط مخارج المقارن مع دارة قيادة المحرك بحيث كالتالي :

المخرج الأول في حال كونه في الوضع 1 يدور المحرك تصاعديا (دوران يمين مثلا )

المخرج الثاني لا تؤثر حالته في دارة قيادة المحرك

( يربط إلى ثنائي ضوئي للإشارة لتعادل العدادين داخل المايكرو كونترولر)

المخرج الثالث في حال كونه في الوضع 1 منطقي يدور المحرك تنازليا ( دوران يسار مثلا )

نأتي الآن للمشكلة العويصة التي لم أتمكن من حلها كوني مبتدئ بالبرمجة :

المشكلة هي عند الوصول بالعدادين للعدد 7 فبزيادة العدد الثاني يقفز العدد في العداد الأول من 7 إلى 0 ( لن يعد العداد إلى ما لا نهاية )

صح ؟؟؟ سأجيب عنك ( بدكتاتورية الواثق من الإجابة ) نعم

هنا ماذا سيحصل للمقارن المسكين ؟؟ سيجد أن العداد الأول فجأة أصبح أصغر بسبع عدات من العداد الثاني ( 7- 0 = 7 )

رغم أننا أعطينا العداد الأول نبضة واحدة تصاعدية وليس سبع عدات تنازلية صح ؟؟؟؟ نعم أكيد

و هكذا وبدل أن يوجه مقارننا المخدوع المحرك كي يعد بإنكودره المحترم عدة واحدة تصاعدية سيقول له إرجع سبع عدات تنازلية وأمرك لله .

صح ؟؟؟؟ للأسف هذا ما سيحدث ونفس الشيء سحدث عندما نصل إلى الصفر تنازليا

ولعل صورة المخطط الصندوقي المرفق توضح الأمر

فهل من مبرمج يستطيع حل هذه المشكلة

أرجو أن تكون فكرتي واضحة ولأي إستفسار أنا موجود إن شاء الله ولكن لا تؤاخذوني إن تأخر الرد قليلا

تحياتي للجميع .

post-84064-1230922625_thumb.jpg

تم تعديل هذه المشاركة بواسطة maaas76 في 2 يناير 2009 في 22:13

#5

ببساطة طبعا لن تجد ذاكرة تعد لمالانهاية

لكنك حدد القيمة العظمى التى تريد العد لها كما ذكرت فى مثالك 7

فذا وصل العداد للقيمة 7 فقبل ان تزيد عدة واحدة اخرى عليه قم بطرح قيمة العداد الاصغر من كلا العدادين وبذلك يكون الفرق بين العدادين مازال ثابت

لكن ماذا يحدث لو كانت قيمة العداد الاصغر صفر

ساعتها لا تزيد اى شئ على العداد بعد القيمة سبعة ليكون الفرق بينهم هو 7 ( او كما فهمت انا هى الدورة الكاملة )

هذا هو اقتراح ربما يكون خاطى لانى لا اعرف فيما ستستخدم هذين العدادين

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#6

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

الأخ حريف برمجة

أولا : أود أن أقول لك وبكل إعجاب يا أخي ما أروع عقولكم أيها المبرمجين و ما أسرع ما يتبادر الحل إلى أذهانكم الحقيقة لم يخطر مثل هذا الحل في بالي و إنما كنت مركزا على إيجاد حل مع المقارن وليس العدادات

ثانيا : شكرا جزيلا على الرد والفكرة التي طرحتها رغم أنني لم أفهمها كاملة لأنني كما أسلفت لست مبرمجا وإنما أكتب برامج بسيطة

ثالثا : شكرا مرة ثانية لأنك أوحيت لي بفكرة قد تكون حلا رائعا لهذه المشكلة وهي المحافظة على العدد الحدي بحيث لا يقفز العداد من أعلى قيمة إلى أدنى قيمة أو من أدنى قيمة إلى أعلى قيمة

أي كما في الشطر الأول من إجابتك أستطيع أن أضع شرط في البرنامج و هو بشكل مبسط : إذا وصل العداد 1 إلى العدد سبعة إطرح 1 من العدادين أي أن النتيجة ستبقى تحوم بين العددين 6 و 7 في حال العد التصاعدي بعد وصول العداد إلى العدد سبعة وأكون بذلك قد تغلبت على مشكلة القفز بين أعلى و أخفض قيمة للعداد ونفس الأمر ينطبق على العد التنازلي ففي حال وصول العدادين إلى العدد صفر أضع هنا نفس الشرط السابق معكوسا بحيث أقول للبرنامج إذا وصلت العدد صفر وكان العد تنازليا أضف العدد 1 الى العداد يحيث يبقى يحوم حول قيمتي العداد 1 و0 في حال العد التنازلي ,

سأحاول تنفيذ البرنامج من جديد وإن شاء الله سأعلمكم بالنتائج

و إن كان لديك أخي فكرة أخرى فلا تتردد في طرحها فمن الممكن أن أستعمل عدادات خارجية من عائلة : TTL أو CMOS فلو كان عندك فكرة لإيجاد الحل في المقارن وليس في العدادات فسأكون لك من الشاكرين .

تم تعديل هذه المشاركة بواسطة maaas76 في 3 يناير 2009 في 00:39

#7

فى مخططك الصندوقى كتبت عدادين ومقارن وكل هذا داخل الميكرو

بالتاكيد الميكرو يمكنه العد لاكثر من 7 على الاقل اذا استخدمت فى الذاكرة اكثر من بايت وهذا لدقة اكبر

وكما قلت وانت لم توضح لى هل ستستخدم العدادين فى الاتجاه فقط اى ان الفرق بينهم لن يهم ام ماذا

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#8

الأخ المحترم حريف برمجة شكرا على الرد و أتمنى أن تكون قد فهمت فكرتي

الفكرة ببساطة هي دوران المحرك و توقفه و تحديد إتجاه الدوران تبعا لقيمة الفرق بين العدادين أي

كما شرحت سابقا العداد الأول سنتحكم به من الخارج و ذلك بواسطة مدخلي العد والإتجاه

والعداد الثاني سيتحكم به دوران المحرك فإن دار المحرك بإتجاه عقارب الساعة فسيعد العداد الثاني تصاعديا والعكس بالعكس

والمقارن سوف يتحكم بالمحرك نفسه بحيث يسعى المحرك دائما كي يساوي بين قيمة العدادين وعندها فقط سيقف المحرك

وبهذا فإننا نتحكم و بشكل غير مباشر بمكان المحرك بدقة حسب القيمة التي ندخلها في العداد الأول

أرجو أن تكون الفكرة أوضح الآن مع تحياتي

#9
LordCover كتب:

السلام عليكم

أنا ابو مروة من العراق هوايتي الألكترون ارجو من مبرمجي الفجوال بيسك عمل مايلي وانا اتكفل بالدوائر الألكترونية الملحقة التي تعمل مع هذه الفكرة.

نستخدم الكمبيوتر وعن طريق منفذ الطابعة يوجد مدخلان لكل عداد مدخل للنبضات ومدخل يحدد الأتجاه

احد العدادين يتغير يدويا بواسطو انكودر فيسجل الزيادة او النقصان وهنا يجب ان يعد العداد الى اكثر من 9999 وهذا عمله بسيط بحيت نضع تيكست يعد لل 9 ثم يضيف 1 الى التيكست اللذي بجانبه ويصفر

والعداد الآخر بربط مع انكودر السيرفو وبنفس الطريقة يعد زيادة او نقصان حسب اتجاع السيرفو

وهن المهم يجب مقارنة العدادين وحسب النتيجة احتاج الى 3 مخارج للنتيجة لنربطها الى الكونترول اللذي سوف اصممه لأيقاف السيرفو عند تطابق العدادين

تمع تحيات ابو مروة العراقي


وشكراً.

#10

أعود و بعد وقت طويل إلى الموضوع

فقد تعلمت خلال الفترة لمنصرمة شيئا من البرمجة و الحمد لله كان كافيا لتنفيذ فكرتي و بعد أن طبقت الدارة حصلت للأسف على نتيجة كنت أتوقعها

لقد عملت الدارة كما خططت لها تماما غير أنني وقعت في مشكلة كنت أتوجس منها خيفة و قد تحققت و هي مشكلة التسارع في المحرك سواء بالإتجاه التصاعدي أو التنازلي كيف يعني ؟؟

عندما يقلع المحرك بأي إتجاه و عندما يتساوى العدادين يفترض أن يقف المحرك مباشرة و الواقع غير ذلك فالمحرك يحتاج إلى كبح و إلا سيدور قليلا أكثر من اللازم مما يئودي إلى أن العداد التابع للمحرك سيعد أكثر من العداد اللذي نتحكم به من الخارج فتعطي الدارة المحرك جهدا معاكسا يؤدي إلى دورانه في الإتجاه المعاكس و من جديد لا يستطيع التوقف في المكان المطلوب و ينعكس الدوران في حركة إهتزازية سريعة

و النتيجة إهتزاز المحرك حول الماكن الذي يفترض أن يقف فيه فهل من حلول لدى الأخوة المبرمجين ؟؟

هناك تقنية تدعى تعديل عرض النبضة (PWM) و هي مستخدمة بطريقة ما لكبح المحرك في المكان المطلوب غير أن لا فكرة لي عن كيفية إقحامها في البرنامج مع الشكر و التقدير

نسيت قضية أخرى و هي بطء عائلة الميكرو شيب من الفئة : 16F

لأنها تنفذ البرنامج بشكل تسلسلي و لكل تعليمة حسب ما أذكر يحتاج المايكروشيب 2 ميلي ثانية

مع الشكر و التقدير

تم تعديل هذه المشاركة بواسطة maaas76 في 1 نوفمبر 2010 في 17:46

#11

السلام عليكم ورحمة الله

نعم أظن أن الـ PWM هو الحل الأمثل حتي يمكنك التحكم في عملية التسارع حسب الفرق بين القيمة المرجعية والقيمة المقاسة أو (SETPOINT, MEASURED VALUE) . أي أن قيمة خرج pwm تتناسب طردياً مع الفرق بين القيمتين.

لكن - حسب علمي - حتي مع PWM يجب أن يكون هناك قيمة خطأ مسموحة +/-

#12
اقتباس
فهل من حلول لدى الأخوة المبرمجين ؟؟
مشكلتك طبيعية جدا وحلها ليس فى البرنامج بل فى النظام ككل

المفترض ان طريق التغزية العكسية لا يرجع للكنترولر بل الى دائرة المحرك نفسها

يمكنك مثلا استخدام نظام P.I.D فتقوم بعمل تكامل بالإضافة للتفاضل للإشارة الخطأ فسيقدى على ال÷تزاز الذى يحدث معك

صحيح نسيت اسأل ما هو حجم المحرك الذى تتعامل معه هل هو صغير أم كبير

بالنسبة لل pwm هى تتحكم فى مستوى الجهد المستمر الواصل للمحرك ولها حسابات خاصة مثل التردد حتى يقبله ملف المحرك بدون مقاومة عالية بالإضافة الى اقل عرض للنبضة حتى لا تشعر بالإهتزاز

لكن كحل لما يحدث معك لا اتخيله

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…