في برنامج بسيط، يضيف interrupt إلى متغير مع كل حافة ويبدو كأنه حل كافٍ لقراءة encoder. لكن عندما تتسارع الإشارة، قد يقضي المعالج وقتاً في المقاطعات، أو يغيّر البرنامج قيمة القراءة أثناء أخذها، أو يزيل مرشح الضوضاء نبضات قصيرة ظنها glitch. مشروع الاختبار هنا لا يكتفي بعرض عدد على شاشة OLED؛ يرسل مجموعة نبضات معروفة إلى مدخل ESP32 ويقارن ما سجله العداد مع المرجع على سرعات متدرجة.

ما الذي نعدّه؟

المشفّر التربيعي يعطي قناتين A وB تتغيران بترتيب يحدد اتجاه الدوران. إذا عُدّت حافة واحدة من A فسيكون الناتج مختلفاً عن عدّ كل الحواف في القناتين، كما أن عدد النبضات لكل دورة يتبع مواصفات القطعة. لذلك يبدأ المشروع بكتابة تعريف وحدة الاختبار: نوع المشفّر أو مولد الإشارة، عدد الفتحات أو النبضات للدورة، نمط العد المختار، واتجاه مرجعي. أي مقارنة تتجاهل طريقة العد قد تصف فرقاً صحيحاً على أنه فقد نبضات.

المكونات وتوصيل الإشارات

استخدم لوحة ESP32 ذات وحدة PCNT مدعومة، ومشفراً تربيعياً منخفض الجهد أو مولد نبضات بخرج منطقي، ومصدر إشارة مرجع مستقل يمكنه توليد العدد المطلوب، وراسم إشارة أو محلل منطقي لمراقبة A وB. لا توصل خرجاً بجهد أعلى من حدود GPIO؛ افحص ورقة بيانات اللوحة والمشفّر أولاً، وأضف level shifting إذا لزم. اربط الأرضي بين الدارات عند استخدام إشارات غير معزولة، واختبر على طاولة قصيرة الأسلاك قبل تمديد الكابل.

تعرض وثائق Espressif واجهة PCNT كوحدة عد نبضات مع قنوات ونقاط مراقبة ومرشح glitch. وتذكر أن المرشح يعتمد على ساعة APB، وأن إعداد عرض النبضة يستبعد النبضات الأقصر من العتبة. هذا مفيد ضد التداخل لكنه قد يحذف نبضة حقيقية إذا كانت العتبة أعلى من عرضها. كما يذكر FAQ أن PCNT يعدّ الحواف، بينما قياس الزمن بين نبضتين يحتاج آلية أخرى؛ لذلك لا تفسر قراءة PCNT مباشرة على أنها سرعة دقيقة.

مولد مرجعي وسيناريوهات القياس

ولّد burst بعدد ثابت، مثلاً 10,000 دورة من A/B مع اتجاه معروف، ثم أوقف الإشارة واقرأ عداد PCNT. كرر ذلك عند ترددات صاعدة، واحتفظ بعرض نبضة واضح، ثم أضف ضوضاء قصيرة مضبوطة قرب الحد الذي يختبره المرشح. المصدر المرجعي يجب أن يكون مستقلاً عن الخوارزمية الجاري اختبارها؛ إذا كان البرنامج نفسه يولد النبضات ويعدها فقد تخفي أخطاء التوقيت المشتركة. سجل تردد الإشارة الفعلي على محلل منطقي بدلاً من الاعتماد على إعداد PWM فقط.

تحديد الاتجاه وقراءة العداد

في quadrature، تحدد علاقة B بحافة A هل يزيد العداد أم ينقص. نفذ الاتجاهين، ثم اعكس القناتين عمداً، وتحقق من أن الإشارة تعطي الاتجاه المعاكس. جرّب تجاوز حد العداد وإعادة الضبط إذا كان التنفيذ يستخدم high/low limits؛ اكتب بوضوح متى يجمع التطبيق نتيجة watch point مع قيمة العداد ومتى يمكن أن يحدث سباق بين الحدث والقراءة. سجل البيانات مع sequence حتى تستطيع كشف قفزة غير منطقية بدلاً من تعديلها بصمت.

اختبار مرشح الضوضاء

ابدأ بمرشح مغلق وخط نظيف، ثم ضع مرشحاً يعادل نبضات أقصر من ضوضاء الاصطناع. زد عرضه خطوة خطوة، وقارن ثلاث نتائج: العدد المرجعي، count PCNT، وعدد الحواف التي ظهرت فعلاً على المحلل. إذا اختفت نبضات الإشارة المطلوبة عندما يقارب عرضها إعداد المرشح، فهذه ليست ميزة. لا تعمم الإعداد من لوحة واحدة إلى عائلة ESP32 كاملة؛ تختلف الوحدات وساعاتها وقدرات الشرائح، لذا يجب ربط التجربة برقم chip ونسخة ESP-IDF.

تأثير حمل التطبيق

كرر الاختبار مع شبكة Wi-Fi خاملة ثم مع نقل بيانات غير حساس، ومع شاشة التحديث موقوفة ومفعّلة. المتوقع أن يعدّ العتاد الحواف دون تنفيذ interrupt لكل واحدة، لكن قراءة البرنامج وتسجيلها ما زالا يتأثران بتوقيت التطبيق. قارن PCNT مع عدّ software من interrupt عند معدلات منخفضة ومتوسطة لتوضيح الفرق، ولا تعرض النتيجة كترتيب مطلق للأداء. أضف اختبار توقف الإشارة، reversal سريع، نبضة ناقصة عمداً، وتغير duty cycle، لأن وصف «التردد» وحده لا يصف كل أشكال الإدخال.

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

ضع جدولاً يحوي التردد وعرض النبضة واتجاه الحركة وإعداد المرشح وحالة Wi-Fi والخطأ العددي. معيار القبول ليس رقماً عاماً؛ حدده وفق القطعة ومعدلها، مثلاً أن تطابق العينة 10,000 حافة عند تردد التشغيل المحدد ضمن الخطأ الذي يستطيع المرجع كشفه. أظهر النبضات المرفوضة منفصلة عن النبضات المفقودة، واحفظ configuration مع كل سجل. هذا يجعل مشروع تخرج في الأنظمة المضمنة تجربة قابلة لإعادة التشغيل، لا مجرد شاشة عداد.

حدود الاستخدام

هذه المنصة تعليمية ولا تثبت دقة encoder في روبوت يعمل بالحمل أو الاهتزاز. تحتاج العينة الميكانيكية ومصدر الطاقة والكابلات اختبارات منفصلة، كما أن فك quadrature البرمجي يختلف عن احتساب PCNT المعتمد على إعدادات القنوات. استفد من توثيق PCNT وFAQ الرسمي قبل نقل المثال إلى شريحة أخرى. ويعرض مثال Espressif الرسمي للـrotary encoder إعداد قناتين لإشارتَي EC11 باستخدام إجراءات الحافة والمستوى ومرشح النبضات؛ إنه مرجع لطريقة استعمال الدرايفر، لا ضمان لقياس كل encoder أو سرعة. يمكن ربط المشروع بخدمة مشاريع التخرج وArduino والأجهزة المتصلة، وبمنضدة قياس فراغ التروس التي تختبر ميكانيكا الانعكاس لا دقة العد الإلكتروني.

تشرح وثائق PCNT إعداد القنوات والمرشح، ويذكر دليل أسئلة Espressif أن PCNT يعد النبضات ولا يقيس الزمن بين نبضتين.

وفي مشاريع تخرج الأنظمة المضمنة، يعطي هذا الاختبار للفريق طريقة واضحة لعرض دقة العد وحدودها أمام المشرف.

المصادر

مراجعة المصادر: .

اختبار المثال وحدوده

عند مرجع 10,000 دورة، يحتفظ التقرير بالتردد المقاس وإعداد glitch filter وفرق العد في كلا الاتجاهين؛ لا يُقبل ملخص لا يذكر تعريف الحافة المستخدمة.

مقالات ذات صلة

الخدمة المرتبطة: برمجة Arduino والأجهزة المتصلة والروبوتات.

أرسل متطلبات مشروعك