13.11 تنفيذ المعوض الرقمي
بعد الرياضيات، عليك نشر المتحكم على العتاد الحقيقي. تفاصيل التنفيذ—ترميز معادلة الفرق، إدارة التوقيت، والحماية من المشاكل العددية—هي التي تحدد نجاحك في المختبر.
- لماذا: يمكن لتأخيرات التنفيذ، التكمية، وتجاوز السعة أن تهدم الأداء الذي صممته في مجال $z$.
- كيف: حوّل $C(z)$ إلى معادلة فرق تعمل في الزمن الحقيقي، جدولة الحوسبة داخل فترة أخذ العينات، وتحقق من القيود العددية سواء كانت ثابتة النقطة (Fixed-Point) أو عائمة النقطة (Floating-Point).
خذ معوضك $$ C(z) = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}} $$ واكتب العلاقة الزمنية:
$$ u[k] = -a_1 u[k-1] - a_2 u[k-2] + b_0 e[k] + b_1 e[k-1] + b_2 e[k-2]. $$
اتبع قائمة المهام:
- هيكلية الكود: صِغ شفرةً شكلية تقرأ الحساسات، تحدّث قانون التحكم، وتكتب للمشغلات ضمن كل فترة $T$.
- تدقيق التوقيت: قِس زمن التنفيذ $t_{\text{exec}}$. تأكد أن $t_{\text{exec}} + t_{\text{IO}} < T$ مع هامش (مثلاً 30%).
- التحقق العددي: حدد طول الكلمة المطلوب. احسب أسوأ قيمة لـ $u[k]$ وتأكد أنها ضمن نطاق المشغل.
ارسم مجدول الحلقة (Scheduler) بشكل آلة حالات. عدّل المخطط التالي عبر استبدال التسميات بأسماء مهامك الفعلية:
stateDiagram-v2
["*"] --> Sample
Sample --> Compute
Compute --> SafetyChecks
SafetyChecks --> Output
Output --> ["*"]
اجعل الأمر واقعيًا عبر تنفيذ هذه التجارب:
- كمّن معاملات المتحكم للدقة المتوفرة في متحكمك الدقيق (Microcontroller). حاك الاستجابة المغلقة ودوّن أي تدهور.
- أدخل تجاوز تنفيذ لمرة واحدة (نفّذ تأخير $z^{-1}$) وقيّم هوامش الاستقرارية. قرر إن كنت تحتاج إلى مراقبة (Watchdog) أو عتادًا أسرع.
- سجّل بيانات الحساس وجهد التحكم لـ 100 عينة متتالية. ارسمهما للتحقق من عدم وجود تشبع عددي.
اختم بكتابة قائمة مراجعة للنشر تناسب مشروعك. ضمّن عناصر مثل "تعيين أولوية المقاطعات"، "تفعيل مضاد التشبع (Anti-Windup)"، و"التحقق من منطق التشبع". المرور على تلك القائمة قبل تشغيل المشغلات يقلل المفاجآت المتأخرة بشكل كبير.