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

عداد نبض تراكمي

مغلق
بدأه مهدي عبد المنعم في 13 أبريل 2006 · 13 رد · 1,791 مشاهدة · في التحكم الصناعي وربط الحاسب بالعالم الخارجي
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

بعد التحية الى جميع الاعضاء والمشرفين:

كتبت برنامج على الفيجوال بيسيك وفق مايلي:

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

مركب على المحرك وحدة تقطيع ضوئية ENCODER احصل من هذه الوحدة على عدد النبضات التي تحركها المحرك :

ان المحرك ياخذ الاوامر من الحاسب عن طريق البوابة التفرعية(H378) التي تشغل الحاكمة للمحرك.

عد نبضات المحرك يكون بادخال الاشارة من الENCODER الاشارة تتارجح مابين الصفر و5 فولت

الية العد هي كالتالي :

1- فحص حالة المدخل ووضع القيمة في متغير

2- تاخير زمني باستخدام FOR NEXT

3-فحص حالة المدخل ووضع القيمة في متغير أخر.

4- اذا كانت قيمة المتغير الاول تساوي الصفر المنطقي والمتغير الثاني واحد منطقي اذا اضف واحد الى المتغير COUNTER . لكن هذه الالية

غير موثوقة لانه يوجد ضياع للنبضات هل بالامكان المساعدة في ايجاد الية موثوقة او طريقة افضل.

ملاحظة :وضعت التاخير الزمني لتبطيئ سرعة الحاسب قليلا لكن هذا يقلل من الاستجابة للمدخل فيضيع النبضات.

شكرا للجميع.

#2

السلام عليكم.

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

موضوع عداد نبض تراكمي في منتدى مبرمجي لغة Microsoft Visual Basic

فاقترحت عليه أن يكون الموضوع في منتدى الإلكترونيات لأنه أولى أن يكون هنا على أن يناقش في منتدى لغة Visual Basic.

سأطلب منك بعض التفصيل:

ما هي السرعة القصوى التي يصل إليها المحرك؟

كم نبضة تصل لمنفذ LPT لكل دورة كاملة للمحرك؟ هل نبضة واحدة أم عدة نبضات؟

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

إن كان ولا بد من استعمال المحرك ذو التيار المستمر العادي, فما هي التقنية التي اعتمدتها في إيقاف حركته بعد عدد النبضات المطلوبة, او المسافة المحددة له أن يقطعها؟ هل هناك نسبة خطأ مقبولة إن تمادا في حركته بعض الشيء؟

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

الطريقة التي طرحتها لك من قبل في الوصلة أعلاه, تعتبر عملية.

فلا داعي لعمل تأخير زمني في هذه الحالة كيفما كانت سرعة الحاسب.

المنفذ LPT للحاسب له حددود في سرعته, فسرعته تصل إلى 50kbytes ولا تتعدى في أقصى الحالات 150kbytes.

البرنامج سيكون له قلب نابض على شكل حلقة repeat until تتم فيها عملية قراءة عدد النبضات القادمة من Encoder ( الأجدر أن تكون عملية القراءة في Thread).

في انتظار تدخلات الإخوة وإبداء آرائهم

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#3

الهدف هو مكنة ثقب فيبر الكترونية:

1-السرعة القصوىلمحور الدوران (الحامل لل encoder )هي 120 دوررة /الدقيقة .

2-تصل الى منفذ الLPT خلال دورة واحدة 30 نبضة.

3- اختيار المحرك هو امر مفروض لطبيعة التصميم .

4-ان المحرك مربوط على علبة سرعة تقوم بتخفيض سرعة المحرك 3000دورة/الدقيقة الى 120 دورة/الدقيقة لذلك اذا اخل المحرك بدرجة نحو الامام تقوم الية البرنامج بارجاعه درجة نحو الخلف هذه عملية التصحيح.

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

يكون في النهاية العمل غير ناجح .

شكرا جزيلا .

#4

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

30 نبضة لكل دورة و120 دورة في كل دقيقة وكل دقيقة فيها 60 ثانية = 216000 نبضة لكل ثانية ستصل إلى lpt!!

يجب أن تراعي أن السرعة القصوى للمنفذ لا تتعدى في حالاتها القصوى النظرية 130Kbytes :( .

ناهيك أنك تعمل في بيئة نظام تشغيل متععد المهام Multitask OS, يعني لن يتوفر لديك سوى سرعة في أبعد الحدود ستكون 50kbytes.

يلزمك تخفيض عدد النبضات لكل دورة من 120 إلى عدد آخر أقل مثلا كأقصى عدد 6 نبضات لكل دورة.

يجب أن تقوم بعمل برنامج تجريبي يقوم بعد النبضات القادمة من Fonction generator حتى تتمكن من معرفة دقته ونجاحه وفي نفس الوقت يمكنك معرفة الحددود القصوى التي يمنه الوصول إليها.

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#5

في الملف المرفق طريقة لقياس Freqency للإشارة القادمة من المجس نحو المربط Ack للمنفذ الطابعة.

الإختيار للمربط Ack كدخل عفوي لأني لا أعرف ما هو المربط الذي استعملته لقراءة encoder.

الملف المضغوط يحتوي على الملف التنفيذي للتطبيق كما يحتوي على السورس مكتوبة بلغة الديلفي :P .

لغة الباسكال لغة بسيطة وقريبة من لغة الخواريزميات.

جرب بإدخال إشارة كهربائية مربعة 0 - 5volts على المربط Ackو هو المربط العاشر في منفذ الطابعة. إذات أمكن أن تكون هذه الإشارة من مولد الإشارات Fonction generator حيث يمكنك مقارنة Frengency للمولد مع freqency المحسوبة في البرنامج.

LptPulseCounter.rar

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#6

يبدو انه حصل التباس :

ان المحرك يقوم بالازاحة يمين ويسار ومجاله هو 15 سم وكل دورة واحدة للمحرك تقوم بالازاحة 3مم ويعطي الencoder ح30 نبضة (1نبضة لكل 1 ديزم)

على افتراض ان المحرك بدا من الصفر وسوف يقطع كامل المسافة (15 سم)

عدد الدورات =150مم/3مم=50 دورة

عدد النبضات=50*30 =1500 نبضة

الزمن الازم ل50 دورة هو نصف دقيقة تقريبا

عدد النبضات خلال الثانية =1500/30=50 نبضة في الثانية الواحدة .

وليس 216000 نبضة .

هذه المرة غلبتك :P :lol: :D

شكرا على هذا البرنامج الجميل لكنه لايعد النبضات بشكل تراكمي

بل يعدها لحظيا .

بالمناسبة القلوب عند بعضها لانك استخدمت القطب الذي استخدمه

لك خالص الشكر. :rolleyes:

;)

#7
مهدي عبد المنعم كتب:
يبدو انه حصل التباس :

ان المحرك يقوم بالازاحة يمين ويسار ومجاله هو 15 سم وكل دورة واحدة  للمحرك تقوم بالازاحة 3مم ويعطي الencoder  ح30 نبضة (1نبضة لكل 1 ديزم)

على افتراض ان المحرك بدا من الصفر وسوف يقطع كامل المسافة (15 سم)

عدد الدورات =150مم/3مم=50 دورة

عدد النبضات=50*30 =1500 نبضة

الزمن الازم ل50 دورة هو نصف دقيقة تقريبا

عدد النبضات خلال الثانية =1500/30=50 نبضة في الثانية الواحدة .

وليس 216000 نبضة .

هذه المرة غلبتك :P  :lol:  :D

شكرا على هذا البرنامج الجميل لكنه لايعد النبضات بشكل تراكمي

بل يعدها لحظيا .

بالمناسبة القلوب عند بعضها لانك استخدمت القطب الذي استخدمه

لك خالص الشكر. :rolleyes:

;)

:lol: جميل جدا.

50 نبضة في الثانة ممتاز.

لقد وضعت بالمرفقات ملف تنفيذي يحسب عدد النبضات التراكمي, نفش البرنامج + بعض التعديلات أهمها استخدام تقنية thread لقراءة المربط Ack في حلقة لا منتهية حتى إيقاف البرنامج.

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

القلوب عند بعضها :P حظا موفقا

LptPulseCounter1.01_.rar

تم تعديل هذه المشاركة بواسطة ikossan في 16 أبريل 2006 في 06:18

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#8

السلام عليكم.

هذه نسخة جديدة منقحة.

طبقتها في البيت, استعملت زر و مقاومة + led :lol: لأنني لا أملك Function generator.

البرنامج يحسب بدقة كل ضغطة زر, بالضبط KeyDown أي عند كل positive transition from high to low..

17_04_06_10_32_29_1145295149PICT1.jpg

B)

LptPulseCounter1.02.rar

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#9

السلام عليكم :

اليك هذا البرنامج عداد نبض تراكمي بالصيغتين

المصدر والبرنامج التنفيذي :

جرب هذ البرنامج

B) (h) B) :rolleyes:

counter_pulse.zip

#10

أرجو أن تعذرني لأني لا أعرف البرمجة بالفيزيال بزيك.

لقد اطلعت على برنامجك في notepad و لم أفهم استعمالك لععد من المتغيرات مثل f1, f2 ,f3 و vp1, vp2 ,vp3.

على أين يمكن أنك تحتاج لها في مواضع أخرى من برنامجك.

لقد عدلت في الكود للإجرائية التي تقوم بالعد:

Dim counter As Integer      ' counter of transition from High to low( from pulse= 0 to pulse = 64)
Dim pulse As Integer        ' State of Ack Line: if Ack = 0 => pulse = 64 / if Ack = 1 => pulse = 0
Dim Old_Pulse As Integer    ' To save the older value of pulse ( the old state of Ack line);

Private Sub Form_Load()
Out 888, 0
Label1.Caption = counter
'....
'Initialization of variables in the begin of programm
counter = 0
pulse = 0
Old_Pulse = 0
End Sub

Public Sub counter1()
pulse = Inp(Val(889))
pulse = pulse And 64
'=====================
If (pulse = 64  and old_pulse = 0) Then     ' is a transition from High to Low?
    counter = counter + 1
    Label1.Caption = counter
    ' do somting..
End If
old_pulse = pulse   ' saving the value of pulse for use the next time
End Sub

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#11

السلام عليكم :

بغض النظر عن الكود هل جربت البرنامج ومدى الموثوقية

اريد فقط ان اعرف هل هو موثوق

:D :D :lol:

#12

جربته وهو شغال :D .

غير أنني لم أجربه للسرعات عالية حتى أحكم هل هو موثوق أم لا.

هل لديك مولد للإشارات الكهربائية Function Generator؟؟

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#13

:rolleyes: ليس لدي مولد اشارات كهربائية

انما اعتمد بالنبضات على ال encoder المركب على المحرك والذي يعطي سرعة نبض

عندما يدور 50 Hz

بامكانك استخدام دارة الطنين 555 لهذا الغرض

#14

أعتقد أن 555 غير موثوق أكثر من البرنامج نفسه :lol: .. 555 يعتمد على المكثفات ذات نسبة خطأ 20% و على المقاومات ذات نسبة الخطأ 5%.

يعني لو كان ولابد من إنشاء مولد للنبضات سأعتمد على quartz من سرعة صغيرة مثل 433Khz وأقسمها بواسطة عداد ك 4040 أو 4060 أو 4027 :rolleyes: ..

الأرجح الحصول على مولد النبضات من المعهد أو الجامعة و تجريب البرنامج بواسطته.

مرت أكثر من 4 سنوات لم أستخدم تطبيقات إلكترونية :unsure: رغم أن تخصصي إلكترونيات.. هذا راجع لمجال العمل..

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

هذا الموضوع مغلق.

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