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

وحدة تحكم PID VHDL: 10 خطوات
وحدة تحكم PID VHDL: 10 خطوات

فيديو: وحدة تحكم PID VHDL: 10 خطوات

فيديو: وحدة تحكم PID VHDL: 10 خطوات
فيديو: How to Create VGA Controller in Verilog on FPGA? | Xilinx FPGA Programming Tutorials 2024, يوليو
Anonim
تحكم PID VHDL
تحكم PID VHDL
وحدة تحكم PID VHDL
وحدة تحكم PID VHDL

كان هذا المشروع هو مشروعي الأخير لإكمال درجة البكالوريوس بمرتبة الشرف من معهد كورك للتكنولوجيا. تم تقسيم هذا البرنامج التعليمي إلى قسمين ، سيغطي الأول الجزء الرئيسي من كود PID وهو الغرض الرئيسي للمشروع ويغطي القسم الثاني واجهة الكود الذي تم تنفيذه على لوحة تطوير Basys 3 ثم تم توصيله بكرة بينج بونج جهاز تحليق. يتم عرض جهاز الحفر النظري والمبني في الصور المرفقة.

اللوازم

محاكاة

جناح تصميم فيفادو

التنفيذ (بين قوسين هو ما تم استخدامه لمشروعي)

  • لوحة FPGA يمكنها إدخال وإخراج الإشارات الرقمية / التناظرية (Basys 3)
  • نظام يمكن التحكم فيه من خلال مصدر تغذية مرتد واحد (Ping Pong Ball Levitation Rig)

اجهزة

  • أنبوب البولي
  • 5V مروحة
  • مستشعر الأشعة تحت الحمراء
  • قاعدة مطبوعة ثلاثية الأبعاد (يوثق هذا البرنامج التعليمي إنشاء الحفارة التي تمت إضافة المستشعر إليها لتوفير التغذية الراجعة ولكن الجهاز كان هو نفسه بشكل عام)
  • مقاومات 1 كيلو
  • اللوح مع سكة 5V و GND

الخطوة 1: نظرية التحكم الأساسية

نظرية التحكم الأساسية
نظرية التحكم الأساسية

اعتقدت أن إضافة بعض نظرية التحكم الأساسية ستمنح أي شخص يرغب في تجربة وتنفيذ هذا الكود قاعدة جيدة للبدء منها.

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

ص- هو المرجع. هذا يحدد المكان الذي تريد أن تذهب إليه وحدة التحكم.

البريد هل الخطأ. هذا هو الفرق بين القيمة الموجودة على المستشعر والمرجع الخاص بك. على سبيل المثال ه = ص- (د + خرج المستشعر).

K- هذا هو جهاز التحكم. يمكن أن تتكون وحدة التحكم من ثلاثة شروط. هذه المصطلحات هي P و I و D. جميع المصطلحات الثلاثة لها مضاعفات تسمى Kp و Ki و Kd. تحدد هذه القيم استجابة وحدة التحكم.

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

ش- هذه هي إشارة التحكم. هذه الإشارة هي مدخل إلى منصة الحفر. في حالة هذا المشروع ، فإن u عبارة عن إدخال إشارة PWM إلى المروحة لتغيير السرعة.

ز- هذا هو النظام الذي يتم التحكم فيه. يمكن نمذجة هذا النظام رياضيًا في المجال S أو Z. يمكن أن تكون الأنظمة بالترتيب nth ، ولكن بالنسبة لشخص ما يبدأ في التحكم ، فمن المحتمل أن يُفترض أن نظام الترتيب الأول هو أمر أسهل بكثير في الحساب. يوجد عدد كبير من المعلومات حول نظام النمذجة التي يمكن العثور عليها عبر الإنترنت. اعتمادًا على وقت أخذ العينات للمستشعر ، يكون نموذج النظام إما منفصلًا أو مستمرًا. هذا له تأثير كبير على وحدة التحكم لذلك ينصح بالبحث في كليهما.

د- هذا اضطراب يضاف إلى النظام. الاضطراب هو القوى الخارجية التي لا يفسرها نموذج النظام. من الأمثلة السهلة على ذلك طائرة بدون طيار قد ترغب في تحليقها على ارتفاع 5 أمتار عندما تأتي عاصفة من الرياح وتسقط الطائرة لمسافة متر واحد ، وستقوم وحدة التحكم بإعادة وضع الطائرة بدون طيار بعد حدوث الاضطراب. يُعرف هذا باسم الاضطراب لأن الرياح غير قابلة للتكرار لذا لا يمكن نمذجة ذلك.

لضبط وحدة التحكم ، هناك العديد من القواعد التي يجب تسميتها ولكن بعض القواعد الجيدة التي بدأت بها هي Cohen Coon و Zieger Nichols.

تعد نمذجة النظام بشكل عام أهم جزء بدون نموذج دقيق ، فلن تستجيب وحدة التحكم التي تم تصميمها بالشكل المطلوب.

يجب أن تكون هناك معلومات كافية هنا لفهم كيفية عمل وحدة التحكم جنبًا إلى جنب مع بعض الأبحاث الفردية ويمكن تنفيذ الكود الموجود أسفل وحدة التحكم مع أي مجموعة من المصطلحات الثلاثة.

الخطوة 2: كتابة كود PID

كتابة كود PID
كتابة كود PID

تم أخذ المبدأ الأساسي للكود الموجود على الرابط التالي وتعديله لأن هذا الرمز لم يعمل ولكن كان هناك العديد من المبادئ الصحيحة التي أعطت نقطة انطلاق جيدة. الأصل PID يحتوي الكود على عدة أخطاء مثل

  • التشغيل المستمر - تكون وحدة التحكم منفصلة بشكل وراثي ، لذا يجب إعداد وحدة التحكم لحساب جميع المصطلحات الثلاثة فقط عند توفر مدخلات جديدة. كان العمل حول هذه المحاكاة هو التحقق مما إذا كان الإدخال قد تغير منذ آخر مرة. هذا يعمل فقط لمحاكاة عمل الكود بشكل صحيح.
  • لم يكن لوقت العينة أي تأثير على المصطلح المتكامل والمشتق - لم تأخذ وحدة التحكم أيضًا في الاعتبار الوقت الذي تم فيه أخذ العينة ، لذلك تمت إضافة قيمة تسمى مقسم للوقت لضمان عمل المصطلحات المتكاملة والمشتقة على المدى الصحيح فترة.
  • يمكن أن يكون الخطأ صالحًا فقط - عند حساب الخطأ كانت هناك مشكلة أيضًا لأن الخطأ لا يمكن أبدًا أن يكون ذا معنى سلبي عندما تجاوزت إشارة التغذية المرتدة القيمة المرجعية التي ستواصل وحدة التحكم زيادة المخرجات عندما يجب أن تنخفض.
  • كانت قيم الكسب للمصطلحات الثلاثة أعدادًا صحيحة - في تجربتي ، وجدت دائمًا أن قيم المصطلحات الثلاثة في وحدة التحكم هي دائمًا أرقام فاصلة عائمة نظرًا لعدم احتواء Basys 3 على رقم النقطة العائمة ، يجب إعطاء القيم قيمة البسط و a قيمة المقام التي من شأنها أن تكون بمثابة عمل حول تجاوز هذه المشكلة.

يتم إرفاق الكود أدناه حيث يوجد الجسم الرئيسي للشفرة و testbench لمحاكاة الكود. يحتوي المجلد المضغوط على الكود و testbench بالفعل في Vivado بحيث يمكن فتحه لتوفير الوقت. يوجد أيضًا اختبار محاكاة للرمز الذي يُظهر تتبع الإخراج للمرجع الذي يثبت أن الكود يعمل على النحو المنشود.

الخطوة 3: كيفية التعديل لنظامك

أولاً ، ليست كل الأنظمة هي نفسها ، يجب على المرء تحليل مدخلات ومخرجات النظام. في حالتي ، كان خرج جهاز الحفر الخاص بي الذي أعطاني قيمة للموضع إشارة تناظرية وكان الإدخال من النظام إشارة PWM. مما يعني أن هناك حاجة إلى تحويل ADC. لحسن الحظ ، يحتوي Basys 3 على ADC مدمج ، لذا لم تكن هذه مشكلة ، حيث كان لابد من تقليص خرج مستشعر الأشعة تحت الحمراء إلى 0V-1V لأن هذا هو أقصى مدى لوحدة ADC المدمجة. تم ذلك باستخدام دائرة مقسم الجهد التي تم تصنيعها من مقاومات 1k تم إعدادها كمقاوم 3k في سلسلة بمقاوم 1k. كانت الإشارة التناظرية الآن ضمن نطاق ADC. يمكن توجيه مدخلات PWM إلى المروحة مباشرة عن طريق إخراج منفذ PMOD على Basys 3.

الخطوة 4: الاستفادة من I / O على أساس 3

يوجد عدد من الإدخال / الإخراج على Basys 3 مما سمح بتصحيح أسهل للأخطاء عند تشغيل الكود. تم إعداد I / O على النحو التالي.

  • عرض سبعة قطاعات - تم استخدام هذا لإظهار قيمة المرجع والقيمة على ADC بالفولت. يُظهر أول رقمين من شاشة العرض السبعة رقمين بعد المكان العشري لقيمة ADC حيث تتراوح القيمة بين 0-1V. يُظهر الرقمان ثلاثة وأربعة على الشاشة ذات الأجزاء السبعة القيمة المرجعية بالفولت ، وهذا يُظهر أيضًا أول رقمين بعد المكان العشري لأن النطاق أيضًا بين 0-1 فولت.
  • 16 LEDs - تم استخدام مصابيح LED لإظهار قيمة الإخراج للتأكد من أن الناتج كان مشبعًا وأن الإخراج يتغير بشكل صحيح.

الخطوة 5: ضوضاء على خرج مستشعر الأشعة تحت الحمراء

كان هناك ضوضاء على خرج المستشعر لإصلاح هذه المشكلة ، تم وضع كتلة متوسطة في مكانها لأن هذا كان كافياً وتطلب القليل من العمل لإكماله.

الخطوة 6: تخطيط الكود العام

تخطيط الكود العام
تخطيط الكود العام

هناك جزء واحد من الكود لم يتم الحديث عنه بعد. هذا الرمز هو مقسم ساعة يسمى المشغل. هذا الجزء من التعليمات البرمجية يؤدي إلى تشغيل رمز ADC لأخذ عينات. يستغرق رمز ADC حدًا أقصى 2us لإكماله ، ثم يتم حساب متوسط الإدخال الحالي والإدخال السابق. 1us بعد حساب المتوسط ، تحسب وحدة التحكم شروط P و I و D. يظهر التخطيط العام للكود والتفاعل في مخطط الاتصال المؤقت.

الخطوة 7: الاختبار

اختبارات
اختبارات

تم نشر الكود على Basys 3 وتم تسجيل الاستجابة التالية. تم تغيير المرجع بين قيمتين. وهذا هو الحال في كود المشروع المكتمل المرفق. يُظهر الفيديو المرفق هذه الاستجابة في الوقت الفعلي. تتحلل التذبذبات بشكل أسرع في الجزء العلوي من الأنبوب حيث تم تصميم وحدة التحكم لهذه المنطقة ولكن وحدة التحكم لا تعمل بشكل جيد أسفل الأنبوب لأن النظام غير خطي.

الخطوة 8: تعديلات لتحسين المشروع

عمل المشروع على النحو المنشود ولكن هناك بعض التعديلات التي كنت سأقوم بها إذا كان من الممكن تمديد المشروع.

  • استخدم المرشح الرقمي لتقليل الضوضاء تمامًا
  • قم بإعداد كود ADC ، متوسط الكود ورمز التكامل للتشغيل بالتسلسل.
  • استخدم مستشعرًا مختلفًا للتغذية المرتدة نظرًا لأن الاستجابة غير الخطية لهذا المستشعر تسببت في مجموعة متنوعة من المشكلات في هذا المشروع ولكن هذا أكثر في جانب التحكم وليس جانب الترميز.

الخطوة 9: عمل إضافي

على مدار الصيف ، كتبت رمزًا لوحدة تحكم تتالي وقمت بتنفيذ التعديلات التي أوصيت بها لوحدة التحكم PID ذات الحلقة المفردة.

تم إجراء تعديلات على وحدة تحكم PID العادية

· تطبيق قالب مرشح FIR يجب تغيير المعاملات لتحقيق تردد القطع المطلوب. التنفيذ الحالي هو مرشح التنوب 5 نقرات.

· تم إعداد توقيت الكود بحيث يقوم المرشح بنشر العينة الجديدة من خلاله وعندما يكون الإخراج جاهزًا ، سيتم تشغيل المصطلح المتكامل مما يعني أنه يمكن تعديل الكود للعمل في فترات زمنية مختلفة مع جهد أقل للتغيير الشفرة.

· تم أيضًا تقليل حلقة for الرئيسية التي تدفع البرنامج لأن هذا for loop استغرق 7 دورات سابقًا ، مما أدى إلى إبطاء أقصى سرعة تشغيل لوحدة التحكم ولكن عن طريق تقليل حالات for loop t 4 ، فهذا يعني أن الكتلة الرئيسية للشفرة يمكن أن تعمل خلال 4 دورات على مدار الساعة.

اختبارات

تم اختبار وحدة التحكم هذه وتنفيذها على النحو المنشود لم ألتقط صورًا لهذا الدليل لأن هذا الجزء من المشروع كان فقط لإبقاء العقل نشطًا. سيكون رمز الاختبار وكذلك testbench متاحًا هنا حتى تتمكن من اختبار البرنامج قبل التنفيذ.

لماذا تستخدم وحدة تحكم تتالي

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

كيف تعمل وحدة التحكم المتتالية؟

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

تنفيذ التعديلات على منصة الحفر

لسوء الحظ ، لم أتمكن من تنفيذ هذه التعديلات على المنصة حيث لم يكن بإمكاني الوصول إليها. لقد اختبرت وحدة التحكم ذات الحلقة المفردة المنقحة والتي تعمل على النحو المنشود. لم أختبر وحدة التحكم المتتالية حتى الآن. أنا واثق من أن وحدة التحكم ستعمل ولكن قد تتطلب بعض التعديلات الطفيفة لتعمل على النحو المنشود.

اختبارات

لم أتمكن من اختبار وحدة التحكم حيث كان من الصعب محاكاة مصدري إدخال. المشكلة الوحيدة التي يمكنني رؤيتها مع وحدة التحكم المتتالية هي أنه بينما تحاول الحلقة الخارجية زيادة نقطة الضبط المقدمة للحلقة الداخلية ، فإن نقطة الضبط الأكبر هي في الواقع RPS أقل للمروحة ولكن يمكن إصلاح ذلك بسهولة. تأخذ نقطة الضبط من القيمة القصوى لإشارة نقطة الضبط (4095 - نقطة الضبط - tacho_result).

الخطوة 10: الخاتمة

بشكل عام ، يعمل المشروع كما كنت أنوي عندما بدأ المشروع لذلك أنا سعيد بالنتيجة. شكرًا لك على الوقت الذي قضيته في قراءة محاولتي تطوير وحدة تحكم PID في VHDL. إذا كان أي شخص يحاول تنفيذ بعض الاختلاف في هذا على نظام ويتطلب بعض المساعدة لفهم الرمز ، فاتصل بي فسأرد في أسرع وقت ممكن. أي شخص يحاول العمل الإضافي الذي تم تنفيذه ولكن لم يتم تنفيذه ، يرجى الاتصال بي لأي جهة. سأكون ممتنًا للغاية إذا أخبرني أي شخص يقوم بتنفيذه كيف ستسير الأمور.

موصى به: