لمحة عامّة
المرمّز الدّوراني هو نوع من حسّاسات الموضع التي تُستخدم لتحديد الموضع الزاوي لمحور دوّار. ويقوم المرمّز بتوليد إشارة كهربائية إمّا تماثليّة أو رقميّة متناسبة مع الحركة الدّورانيّة.
يوجد العديد من أنواع المرمّزات الدورانية والتي تُصنَّف إمّا بحسب نوع الإشارة أو تقنية التّحسّس. في هذا المقال سنستخدم مرمّز دوراني تزايدي والذي يعدّ من أبسط حسّاسات الموضع لقياس الدوران.
يسمى هذا النوع من المرمّزات أيضاً بالمرمّز التربيعي quadrature أو المرمّز الدّوراني النّسبي ويكون خرجه عبارة عن سلسلة من النبضات المربعة.
آلية عمل المرمّزات الدورانية:
يتم توليد النبضات المربعة كالتالي: يمتلك المرمّز قرصاً يحتوي على مناطق تلامس يوجد بينها مسافات متساوية وتكون هذه المناطق متصلة مع القطب المشترك C، كما يوجد قطبا تلامس منفصلان A وB كما هو مبين بالشكل 3.
عندما يبدأ القرص بالدوران سيتلامس القطبان A وB مع القطب المشترك وستتولّد إشارتا الخرج المربعتان تبعاً لذلك.
يمكن استخدام أي من الخرجين لتحديد الموقع الزاوي وذلك عن طريق عدّ النبضات في إشارة الخرج. ولكن إذا أردنا تحديد اتجاه الدوران فيجب الانتباه إلى إشارتي الخرج في نفس الوقت.
يمكننا الملاحظة أنّ الفرق في الطور بين إشارتي الخرج هو 90 درجة. إذا كان المرمّز يدور باتجاه عقارب الساعة فسيكون الخرج A يسبق الخرج B.
فإذا قمنا بحساب عدد النبضات كلّما تغيرت الإشارة من LOW إلى HIGH أو من HIGH إلى LOW يمكننا ملاحظة أنّه في تلك اللحظة يكون لإشارتي الخرج قيمتان مختلفتان. وبالعكس عندما يكون المرمّز يدور عكس عقارب الساعة ستكون قيمتا الإشارتين متساويتين. يمكننا اعتماداً على ما سبق برمجة المتحكم الصغري لقراءة موقع المرمّز واتجاه دورانه.
مثال على وصل المرمز الدوراني مع الأردوينو:
سنقوم بتطبيق عملي باستخدام الأردوينو. سنستخدم وحدة المرمّز الدوراني الحاوية على 5 أقطاب. القطب الأوّل هو الخرج A والقطب الثاني هو الخرج B والقطب الثالث هو BUTTON والقطبين الباقيين هما التغذية والأرضي.
يمكننا وصل أقطاب الخرج مع أي قطب رقمي للأردوينو.
الكود البرمجي: التحميل من هنا
شرح الكود البرمجي:
أولاً نقوم بتحديد الأقطاب التي سيُوصل إليها المرمّز ونقوم بتعريف بعض المتحوّلات التي سيحتاجها البرنامج. في قسم الـsetup من البرنامج يجب أن نحدّد القطبين الذين وصلناهما مع المرمّز على أنّهما قطبا دخل، ونقوم بتهيئة الاتصال التسلسلي لطباعة النتيجة على الواجهة التسلسلية، كما نقوم بقراءة القيمة الابتدائية للخرج A ونخزّنها ضمن المتحوّل aLastState.
في قسم الـLoop نقوم بقراءة الخرج A مرة ثانية ولكننا نقوم بوضع قيمة القراءة ضمن المتحول aState. أي إذا قمنا بتدوير المرمّز وتولّدت نبضة سيصبح شرط if الأول محققاً. باستخدام شرط if الثاني نحدّد اتجاه الدوران. إذا كان الخرج B مختلفاً عن حالة الخرج A سيتم زيادة العداد بمقدار 1 وإلّا فسيتم إنقاصه. في النهاية وبعد عرض النتيجة على الواجهة التسلسلية يجب تحديث قيمة المتحوّل aLastState بقيمة المتحوّل aState.
لتطبيق المثال قم بتحميل الكود إلى الأردوينو وشغّل الواجهة التسلسلية وقم بتدوير المرمز فتحصل على النتائج على الواجهة التسلسلية. وحدة المرّمز التي استخدمت في هذا المثال تقوم ب30 عدّة كلّ دورة كاملة.
التحكم بمحرك خطوي stepper باستخدام مرمز دوراني:
الكود البرمجي: التحميل من هنا
المصدر:هنا
ترجمة: عدي ناصر ,مراجعة: علي العلي ,تدقيق لغوي: سلام أحمد ،تصميم : علي العلي ،تحرير: علي العلي.