جدول المحتويات:

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

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

فيديو: كيف تفسر اتجاه الدوران من مفتاح دوار رقمي مع الموافقة المسبقة عن علم: 5 خطوات
فيديو: اخراج التيوب وعملية التسكير عند افاقة المريض من التخدير extubation #تخدير #عمليات_التجميل 2024, يوليو
Anonim
كيف تفسر اتجاه الدوران من مفتاح دوار رقمي مع الموافقة المسبقة عن علم
كيف تفسر اتجاه الدوران من مفتاح دوار رقمي مع الموافقة المسبقة عن علم

الهدف من Instructable هو توضيح كيفية توصيل مفتاح دوار رقمي (رباعي مشفر) مع متحكم دقيق. لا تقلق ، سأشرح ما تعنيه التربيعية المشفرة بالنسبة لنا. ستسمح هذه الواجهة والبرنامج المصاحب للمتحكم الدقيق بالتعرف على اتجاه الدوران لكل حركة من كاشف إلى آخر ، لقد استخدمت مؤخرًا هذا النوع من المفاتيح في مشروع متحكم يتطلب إدخال نقطة ضبط الضغط باستخدام مقبض مع 16 يمسك بدلا من أزرار أعلى / أسفل. كانت الفكرة هي السماح للمستخدم "بالاتصال" بالضغط المطلوب. نتيجة لذلك ، كان علينا تطوير برنامج روتيني للحصول على معلومات الموقع من المفتاح واستنتاج اتجاه الدوران من أجل زيادة أو تقليل نقطة ضبط الضغط للنظام الرئيسي. في هذا Instructable ، سأغطي الواجهة المادية بالنسبة للميكروكونترولر ، نظرية التشغيل للمفتاح الدوار ، نظرية التشغيل للبرنامج بالإضافة إلى روتين الاستنتاج. أخيرًا ، سأريك تطبيقي لروتين الخصم. مع تقدمنا ، سأحاول إبقاء الأمور عامة إلى حد ما بحيث يمكن تطبيق الفكرة على أكبر عدد ممكن من الأنظمة الأساسية ، لكنني سأشارك أيضًا ما فعلته حتى تتمكن من رؤية تطبيق معين.

الخطوة 1: الأجزاء

القطع
القطع

من أجل تنفيذ ذلك ، ستحتاج إلى: مفتاح دوار (مشفر رباعيًا) سحب المقاومات منصة تحكم دقيقة مناسبة لمشروعي ، استخدمت جهاز التشفير البصري Grayhill 61C22-01-04-02. تستدعي ورقة البيانات الخاصة بالمفتاح الدوار مقاومات سحب 8.2 كيلو أوم على خطي البيانات القادمين من المفتاح. ستحتاج إلى التحقق من ورقة البيانات الخاصة ببرنامج التشفير الذي تختار استخدامه. يمكن أيضًا طلب المفتاح الدوار الذي استخدمته بمفتاح زر ضغط محوري. إنها ميزة مفيدة لإجراء التحديدات التي تم الاتصال بها ، وما إلى ذلك ، لكنني لن أناقش واجهتها هنا. لديّ "منصة تحكم دقيقة مناسبة" مدرجة لأنه (على ما أعتقد) يمكن تنفيذ ذلك على أكثر من منصة واحدة. لقد رأيت الكثير من الأشخاص يستخدمون متحكمات أخرى لـ Instructables لذلك أريد أن أوضح النهج العام أيضًا. لقد كتبت كل الكود في PIC Basic Pro للاستخدام مع شريحة PIC16F877A. حقًا ، الشيء الأساسي الذي تحتاجه في الميكروكونترولر هو القدرة على المقاطعة عندما يكون هناك تغيير منطقي على أي من الدبابيس. في PIC16F877A ، يسمى هذا مقاطعة تغيير PORTB. قد تكون هناك أسماء أخرى لها على وحدات التحكم الأخرى. تعد ميزة مقاطعة وحدة التحكم الدقيقة هذه جزءًا مما يجعل هذا التنفيذ أنيقًا للغاية.

الخطوة 2: واجهة الجهاز

واجهة الأجهزة
واجهة الأجهزة

الحل "البسيط" هو أن يكون لديك مفتاح "رمي أحادي القطب 16" مع 16 وصلة بالمتحكم الدقيق. سيتم بعد ذلك ربط كل مخرج من مفاتيح التبديل بدبوس على وحدة التحكم الدقيقة بحيث يمكن فحص كل موضع اتصال بواسطة المتحكم الدقيق. هذا هو الاستخدام المفرط لدبابيس الإدخال / الإخراج. تزداد الأمور سوءًا إذا أردنا توفير أكثر من 16 وظيفة (حواجز) لنا على المفتاح. سيتطلب كل موضع إضافي على المفتاح مدخلاً إضافيًا للميكروكونترولر. سرعان ما يصبح هذا استخدامًا غير فعال للغاية للمدخلات الموجودة في وحدة التحكم الدقيقة ، أدخل جمال المفتاح الدوار ، حيث يحتوي المفتاح الدوار على مخرجات اثنين فقط للمتحكم الدقيق المدرجين على أنهما A و B في ورقة البيانات. لا يوجد سوى أربعة مستويات منطقية محتملة يمكن أن تأخذها هذه الأسطر: AB = 00 و 01 و 10 و 11. وهذا يقلل بشكل كبير من عدد خطوط الإدخال التي يجب أن تستخدمها في توصيل المحول بالمتحكم الدقيق. لذا فقد قلصنا عدد سطور الإدخال إلى اثنين فقط. ماذا الآن؟ يبدو أننا نحتاج حقًا إلى 16 حالة مختلفة ولكن هذا المفتاح الجديد يحتوي على أربعة فقط. هل أطلقنا النار على أقدامنا؟ لا. واصل القراءة. سنغطي قليلاً من النظرية الكامنة وراء عملية التبديل الدوار لشرحها.

الخطوة 3: نظرية تشغيل الأجهزة

نظرية الأجهزة للعملية
نظرية الأجهزة للعملية
نظرية الأجهزة للعملية
نظرية الأجهزة للعملية
نظرية الأجهزة للعملية
نظرية الأجهزة للعملية

يمكن استشعار اتجاه الدوران باستخدام مفتاح "رمي أحادي القطب 16" المذكور أعلاه ولكنه يستخدم الكثير من المدخلات على المتحكم الدقيق. يقلل استخدام المفتاح الدوار من عدد المدخلات إلى المتحكم الدقيق ، لكننا الآن بحاجة إلى تفسير الإشارات القادمة من المفتاح وترجمتها إلى اتجاه دوران ، وقد ذكرت سابقًا أن المفتاح كان مشفرًا من التربيع. هذه أيضًا واحدة من الأناقة الرئيسية في هذا الحل. هذا يعني أن هناك رمزًا من 2 بت يقدمه المحول يتوافق مع موضع المحول. قد تفكر: "إذا كان هناك إدخال ثنائي بت في وحدة التحكم الدقيقة ، فكيف نمثل جميع الوظائف الـ 16؟" هذا سؤال جيد. نحن لا نمثلهم جميعًا. نحتاج فقط إلى معرفة المواضع النسبية للمقبض حتى نتمكن من تحديد اتجاه الدوران. الوضع المطلق للمقبض غير ذي صلة. بالنسبة للدوران في اتجاه عقارب الساعة ، يتكرر الرمز الذي يقدمه المحول كل أربعة حواجز ويكون مشفرًا باللون الرمادي. يعني الرمز الرمادي أنه لا يوجد سوى تغيير بت واحد لكل تغيير موضع. بدلاً من حساب إدخال AB لأعلى للدوران في اتجاه عقارب الساعة في ثنائي مثل: 00 ، 01 ، 10 ، 11 ، يتغير مثل هذا: 00 ، 10 ، 11 ، 01. لاحظ أنه بالنسبة للنمط الأخير ، هناك إدخال واحد فقط يتغير بين مجموعات. ستبدو قيم عكس اتجاه عقارب الساعة لمدخلات AB في وحدة التحكم الدقيقة كما يلي: 00 ، 01 ، 11 ، 10. هذا ببساطة هو عكس نمط اتجاه عقارب الساعة مع AB = 00 المدرجة أولاً. ألق نظرة على الرسوم البيانية للحصول على شرح بصري أكثر.

الخطوة 4: نظرية البرمجيات للعملية

نظرية البرمجيات للعملية
نظرية البرمجيات للعملية

الروتين الذي يستنتج اتجاه الدوران هو المقاطعة المدفوعة. يجب أن يكون المتحكم الدقيق الذي تحدده قادرًا على المقاطعة في أي وقت يحدث تغيير في أي من (على الأقل) دبابيس عند تمكين المقاطعة. يسمى هذا مقاطعة تغيير PORTB على PIC16F877A. في أي وقت يتم تدوير المفتاح ، سيتم مقاطعة وحدة التحكم الدقيقة وسيتم إرسال تنفيذ البرنامج إلى Interrupt Service Routine (ISR). سوف يكتشف ISR بسرعة الطريقة التي تم بها تدوير المفتاح ، وتعيين علامة بشكل مناسب والعودة بسرعة إلى البرنامج الرئيسي. نحن بحاجة إلى أن يحدث هذا بسرعة في حالة قيام المستخدم بتدوير المفتاح بسرعة كبيرة. نعلم أن نمط AB المشفر باللون الرمادي يتكرر كل أربعة مواضع ، لذا إذا قمنا بعمل روتيني للانتقالات بين تلك المواضع الأربعة ، فسيعمل مع جميع المواقف الأخرى. لاحظ أنه في دورة واحدة من أربعة مواضع ، هناك أربعة حواف. حافة صاعدة وحافة هابطة للمدخل أ وكذلك المدخل ب. سيتم مقاطعة المعالج الدقيق في كل مرة يوجد فيها حافة مما يعني أن وحدة التحكم الدقيقة سيتم قطعها في أي وقت يتم فيه تدوير المقبض. نتيجة لذلك ، يحتاج ISR إلى معرفة الاتجاه الذي تم فيه تدوير المقبض. لمساعدتنا في معرفة كيفية القيام بذلك ، ننتقل إلى شكل الموجة للدوران في اتجاه عقارب الساعة. لاحظ أنه في أي وقت يكون لـ A حافة ، فإن قيمته الجديدة تختلف دائمًا عن قيمة B. عندما ينتقل المقبض من الموضع 1 إلى 2 ، ينتقل A من المنطق 0 إلى المنطق 1. لا يزال B 0 لهذا الانتقال ولا يتطابق مع القيمة الجديدة لـ A. عندما ينتقل المقبض من الموضع 3 إلى 4 ، فإن A له حافة هبوط بينما يظل B عند المنطق -1. لاحظ مرة أخرى أن B وقيمة A الجديدة مختلفة. في الوقت الحالي ، يمكننا أن نرى أنه في أي وقت يتسبب فيه A في حدوث مقاطعة أثناء الدوران في اتجاه عقارب الساعة ، فإن قيمته الجديدة تختلف عن قيمة B. دعنا نتحقق من B لنرى ما سيحدث. B له حافة صاعدة عندما ينتقل المفتاح من الموضع 2 إلى 3. هنا ، القيمة الجديدة لـ B هي نفسها A. بالنظر إلى آخر حافة متبقية للدوران في اتجاه عقارب الساعة ، فإن B لها حافة هبوط تتحرك من الموضع 4 إلى 5. (الموضع 5 هو نفسه الموضع 1.) القيمة الجديدة لـ B هي نفسها A هنا أيضًا! يمكننا الآن إجراء بعض الخصومات! إذا تسببت A في المقاطعة وكانت القيمة الجديدة لـ A مختلفة عن قيمة B ، فإن الدوران يكون في اتجاه عقارب الساعة. بالإضافة إلى ذلك ، إذا تسببت B في المقاطعة وكانت القيمة الجديدة لـ B هي نفسها A ، فإن الدوران يكون في اتجاه عقارب الساعة. تمامًا مثل الدوران في اتجاه عقارب الساعة ، سيتسبب الدوران في عكس اتجاه عقارب الساعة في حدوث أربع مقاطعات في دورة واحدة: اثنتان للإدخال A واثنتان للإدخال B. يكون للإدخال A حافة صاعدة عندما يتحرك المقبض من الموضع 4 إلى 3 وحافة هبوط تتحرك من الموضع 2 إلى 1 عندما يتحرك المقبض من الموضع 4 إلى 3 ، تكون القيمة الجديدة لـ A هي نفسها قيمة B. لاحظ أنه عندما يتحرك A من الموضع 2 إلى 1 ، تكون قيمته الجديدة هي نفسها قيمة B أيضًا. الآن ، يمكننا أن نرى أنه عندما تسبب A في المقاطعة وتتطابق قيمتها الجديدة مع قيمة B ، كان الدوران عكس اتجاه عقارب الساعة. بسرعة ، سننظر في الإدخال B للتحقق من كل شيء. سيتسبب B في مقاطعة عندما يتحرك المقبض من الموضع 5 (وهو نفس الوضع 1) إلى 4 وعندما يتحرك المقبض من الموضع 3 إلى 2. في كلتا الحالتين ، لا تتطابق القيمة الجديدة لـ B مع القيمة الحالية من A وهو عكس الحالات عندما يتسبب B في مقاطعة الدوران في اتجاه عقارب الساعة. هذه أخبار جيدة. كل شيء يتحقق كما ينبغي. للتلخيص ، إذا تسبب A في المقاطعة وقيمتها الجديدة لا تتطابق مع قيمة B أو إذا تسبب B في المقاطعة وقيمة B الجديدة تطابق قيمة A ، فإننا نعلم أنه كان هناك دوران في اتجاه عقارب الساعة. يمكننا التحقق من الحالات الأخرى للدوران في عكس اتجاه عقارب الساعة في البرنامج أو يمكننا افتراض أنه نظرًا لأنه لم يكن دورانًا في اتجاه عقارب الساعة ، فقد كان عكس اتجاه عقارب الساعة. روتيني ببساطة جعل الافتراض.

الخطوة 5: البرمجيات

برمجة
برمجة
برمجة
برمجة

لم أستخدم المقاطعات المضمنة في PIC Basic Pro. لقد استخدمت ملفين قمت بتضمينهما في الكود الخاص بي من Darrel Taylor لقيادة الروتين. هذا هو المكان الذي ينتمي إليه الائتمان الضخم لداريل! الملفات مجانية. ما عليك سوى زيارة موقعه على الويب لمزيد من المعلومات والتطبيقات الأخرى وتنزيل الملفات. يمكنك تخطي هذا الجزء إذا كنت لا تستخدم الموافقة المسبقة عن علم مع مقاطعات داريل تايلور. ما عليك سوى إعداد المقاطعات حسب الضرورة على النظام الأساسي الذي تستخدمه. لإعداد المقاطعات Darrel Taylor (DT) ، هناك شيئان يجب القيام بهما: 1.) قم بتضمين ملفات DT_INTS-14.bas و ReEnterPBP.bas في ملفك code.2.) انسخ هذا والصقه في التعليمات البرمجية الخاصة بك. ASMINT_LIST macro؛ IntSource، Label، Type، ResetFlag؟ INT_Handler RBC_INT، _ISR، PBP، yes endm INT_CREATEENDASM أدخل علامات تبويب ومسافات مثل الرسم في نهاية Instructable حتى تتمكن من رؤية الأشياء بشكل أسهل قليلاً في التعليمات البرمجية الخاصة بك. ستحتاج إلى تعديله قليلاً ليناسب احتياجاتك. ضمن التسمية ، استبدل ISR باسم الروتين الفرعي الذي يمثل ISR الخاص بك. لا تنس الشرطة السفلية! أنت في حاجة إليها! لكي تعمل المقاطعات ، هناك شيئان إضافيان يجب القيام بهما: 1.) اكتب ISR. ستكتب هذا تمامًا كما لو كنت ستكتب روتينًا فرعيًا لـ PBP فيما عدا أنك ستحتاج إلى إدراج INT_RETURN @ في نهاية الروتين الفرعي بدلاً من RETURN. سيؤدي هذا إلى إقرار المقاطعة وإعادة تنفيذ البرنامج إلى حيث توقفت في الحلقة الرئيسية. داخل ISR ، تحتاج إلى مسح علامة المقاطعة حتى لا يعلق برنامجك في مقاطعة متكررة. مجرد قراءة PORTB هو كل ما يجب القيام به لمسح علامة المقاطعة على PIC16F877A. كل متحكم مختلف لديه طريقة مختلفة لمسح أعلام المقاطعة. تحقق من ورقة البيانات الخاصة بالميكروكونترولر الخاص بك. 2.) عندما تصل إلى النقطة في التعليمات البرمجية الخاصة بك التي تريد تمكين المقاطعة ، استخدم هذا السطر من التعليمات البرمجية: @ INT_ENABLE RBC_INT عندما تريد تعطيل المقاطعة ، ما عليك سوى استخدام: @ INT_DISABLE RBC_INT هناك الكثير من الأشياء المعبأة في ما غطيته للتو ، لذا سألخص بسرعة. حتى الآن ، يجب أن يبدو برنامجك كالتالي:؛ أي إعداد أو رمز مطلوب INCLUDE "DT_INTS-14.bas" INCLUDE "ReEnterPBP.bas" ASMINT_LIST ماكرو ؛ IntSource ، Label ، Type ، ResetFlag؟ INT_Handler RBC_INT ، _myISR ، PBP ، نعم endm INT_CREATEENDASM ؛ أي إعداد أو رمز آخر مطلوب @ INT_ENABLE RBC_INT ؛ الكود الذي يحتاج إلى معرفة الطريقة التي يدور بها المقبض @ INT_DISABLE RBC_INT ؛ كود آخر END ؛ نهاية programmyISR: ؛ كود ISR هنا @ INT_RETURN (جدول إعداد معالج المقاطعة) أعتقد أن هذا هو المكان الذي يمكن لأي شخص لا يستخدم المقاطعات PIC أو DT الانضمام إليه مرة أخرى. الآن ، نحتاج بالفعل إلى كتابة ISR حتى يعرف المتحكم الدقيق اتجاه دوران المقبض. تذكر من قسم نظرية البرمجيات أنه يمكننا استنتاج اتجاه الدوران إذا عرفنا المدخلات التي تسببت في المقاطعة وقيمتها الجديدة وقيمة المدخلات الأخرى. إليك الشفرة الزائفة: اقرأ PORTB في متغير خدش لمسح علامة المقاطعة تحقق مما إذا تسبب A في المقاطعة. إذا كان هذا صحيحًا ، قارن A و B. تحقق مما إذا كان مختلفًا ، إذا كان مختلفًا ، كان دورانًا في اتجاه عقارب الساعة آخر ، كان عكس اتجاه عقارب الساعة Endif تحقق مما إذا كان B هو الذي تسبب في المقاطعة. إذا كان هذا صحيحًا ، قارن A و B تحقق مما إذا كان مختلفًا ، إذا كان نفسه ، كان دورانًا في اتجاه عقارب الساعة آخر ، كان عكس اتجاه عقارب الساعة Endif العودة من المقاطعة كيف نعرف ما إذا كان التغيير في A أو B تسبب في المقاطعة؟ يعد اكتشاف القيمة الجديدة للمدخلات التي تم تغييرها والمدخلات الأخرى (غير المتغيرة) أمرًا سهلاً لأنه يمكننا قراءتها داخل ISR. نحتاج إلى معرفة حالة كل واحد قبل إرسال التنفيذ إلى جهاز أمن الدولة. يحدث هذا في الروتين الرئيسي. يجلس الروتين الرئيسي وينتظر متغير البايت الذي أطلقنا عليه CWflag ليتم ضبطه على 1 أو مسحه إلى 0 بواسطة ISR. بعد كل تغيير معترف به للمقبض أو في حالة عدم وجود نشاط للمقبض ، يتم ضبط المتغير على 5 للإشارة إلى حالة الخمول. إذا تم تعيين العلم أو مسحه ، فإن الروتين الرئيسي يزيد أو ينقص على الفور ضغط نقطة الضبط بشكل مناسب بناءً على الدوران ثم يعيد متغير CWflag مرة أخرى إلى 5 لأن المقبض أصبح خاملاً الآن مرة أخرى. نظرًا لأن الروتين الرئيسي هو فحص CWflag ، فإنه يقوم أيضًا بتوثيق حالة قيم التبديل الدوارة A و B. هذا حقًا بسيط ويبدو كالتالي: oldA = AoldB = B لا يوجد شيء رائع هنا حقًا. فقط قم بتضمين هذين السطرين في بداية الحلقة التي تتحقق من CWflag للتدوير. نحن نقوم فقط بتحديث القيم المنطقية للمدخلات من المقبض الدوار داخل حلقة الزيادة / الإنقاص في الروتين الرئيسي حتى نتمكن من رؤية المدخلات التي تسببت في المقاطعة عند تنفيذ ISR. هذا هو رمز ISR: ABchange: scratch = PORTB 'اقرأ PORTB لمسح علامة المقاطعة' إذا تسبب A في المقاطعة ، تحقق من B لمعرفة اتجاه الدوران إذا كان oldA! = A ثم إذا كان A و B مختلفين ، كان دوران عقارب الساعة IF A! = B ثم انتقل إلى CW 'وإلا ، فقد كان الدوران عكس اتجاه عقارب الساعة ELSE GOTO CCW ENDIF ENDIF' إذا تسبب B في المقاطعة ، فتحقق من اتجاه الدوران إذا كان oldB! = B ثم إذا كان A و B متماثلين ، كان الدوران في اتجاه عقارب الساعة إذا كان A == B ثم انتقل إلى CW 'وإلا ، فقد كان الدوران عكس اتجاه عقارب الساعة ELSE GOTO CCW ENDIF ENDIFCW: CWflag = 1 @ INT_RETURNCCW: CWflag = 0 @ INT_RETURNI قمت بتضمين رمز ISR في ملف AB_ISR.bas لأن لا تظهر علامات التبويب في الكود بالطريقة التي ينبغي أن تظهر بها الآن ، نظرًا لأن ISR لديها القيم القديمة للمدخلات A و B ، فيمكنها تحديد المدخلات التي تسببت في المقاطعة ، ومقارنتها بالمدخلات الأخرى (غير المتغيرة) وتحديد الاتجاه من الدوران. كل الروتين الأساسي يجب أن يقوم بفحص CWflag لمعرفة الاتجاه الذي تحول فيه المقبض (إذا كان قد حدث) وزيادة أو إنقاص عداد أو نقطة محددة أو أي شيء تريده أو تحتاجه. مربك. يعتبر هذا النوع من الواجهة مفيدًا بشكل خاص إذا كان نظامك يستخدم المقاطعات بالفعل لأن هذه ليست سوى مقاطعة أخرى لإضافتها. يتمتع!

موصى به: