فهرست مطالب:

کنترل کننده PID VHDL: 10 مرحله
کنترل کننده PID VHDL: 10 مرحله

تصویری: کنترل کننده PID VHDL: 10 مرحله

تصویری: کنترل کننده PID VHDL: 10 مرحله
تصویری: Fuzzy type 1 PID control of two area system 2024, جولای
Anonim
کنترل کننده PID VHDL
کنترل کننده PID VHDL
کنترل کننده PID VHDL
کنترل کننده PID VHDL

این پروژه آخرین پروژه من برای تکمیل مدرک کارشناسی افتخارات من از موسسه فناوری Cork بود. این آموزش به دو بخش تقسیم می شود ، قسمت اول شامل قسمت اصلی کد PID است که هدف اصلی پروژه است و بخش دوم رابط کدی را که روی یک تخته توسعه Basys 3 اجرا شده و سپس به یک توپ پینگ پنگ پیوند داده شده است را پوشش می دهد. دکل شناور دکل نظری و ساخته شده در تصاویر پیوست نشان داده شده است.

تدارکات

شبیه سازی

مجموعه طراحی ویوادو

پیاده سازی (در براکت مواردی که برای پروژه من استفاده شده است)

  • FPGA Board که می تواند سیگنال های دیجیتال/آنالوگ را وارد و خروجی کند (Basys 3)
  • سیستمی که با یک منبع بازخورد واحد قابل کنترل است (دستگاه تفریحی توپ پینگ پنگ)

دکل

  • لوله پلی کربنات
  • فن 5 ولت
  • سنسور IR
  • پایگاه سه بعدی
  • مقاومتهای 1k
  • تخته نان با ریل 5 ولت و GND

مرحله 1: نظریه کنترل اساسی

نظریه کنترل اساسی
نظریه کنترل اساسی

من فکر کردم که افزودن برخی از نظریه های کنترل اساسی به هر کسی که مایل است این کد را امتحان کند و پیاده سازی کند ، پایه خوبی برای شروع خواهد بود.

نمودار پیوست ، طرح یک کنترل کننده حلقه ای واحد است.

r- آیا مرجع است. این تعیین می کند که کنترل کننده کجا باید برود.

خطای الکترونیکی است این تفاوت بین مقدار سنسور و مرجع شما است. به عنوان مثال، e = r- (d+خروجی سنسور).

K- این کنترل کننده است. کنترل کننده می تواند شامل سه عبارت باشد. این اصطلاحات عبارتند از P ، I و D. هر سه عبارت دارای ضریب هایی به نام Kp ، Ki و Kd هستند. این مقادیر پاسخ کنترل کننده را تعیین می کنند.

  • P- متناسب. یک کنترلر کاملا P خروجی متناسب با خطای فعلی خواهد داشت. پیاده سازی یک کنترلر P ساده است و سریع کار می کند اما هرگز به مقداری که تعیین کرده اید نمی رسد (مرجع).
  • من انتگرال یک کنترل کننده کاملاً انتگرال خطای قبلی را جمع بندی می کند که در نهایت به مرجع مورد نظر می رسد. به طور کلی اجرای این کنترلر بسیار کند است. افزودن یک عبارت P ، زمان لازم برای رسیدن به مرجع را کاهش می دهد. زمان نمونه گیری ورودی باید در نظر گرفته شود که عبارت انتگرالی با توجه به زمان یکپارچه شده است.
  • D مشتق. عبارت مشتق دارای خروجی است که بستگی به میزان تغییر خطا دارد. این اصطلاح عموماً با یک اصطلاح P یا یک اصطلاح PI استفاده می شود. از آنجا که این نسبت متناسب با میزان تغییر خطا است ، نویزهای پر سر و صدا تقویت می شوند که می تواند باعث ناپایداری سیستم شود. زمان نیز باید در نظر گرفته شود زیرا اصطلاح مشتق نیز در رابطه با زمان است.

U- این سیگنال کنترل است. این سیگنال ورودی دکل است. در مورد این پروژه ، u یک سیگنال PWM به فن است تا سرعت را تغییر دهد.

G- این سیستمی است که تحت کنترل است. این سیستم را می توان به صورت ریاضی در دامنه S یا Z مدل سازی کرد. سیستم ها می توانند مرتبه نهم داشته باشند ، اما برای افرادی که با کنترل شروع به کار می کنند ، احتمالاً یک سیستم مرتبه اول باید فرض شود ، زیرا محاسبه این بسیار ساده تر است. اطلاعات زیادی در مورد سیستم مدل سازی به صورت آنلاین یافت می شود. بسته به زمان نمونه گیری سنسور ، مدل سیستم گسسته یا پیوسته است. این امر تأثیر شدیدی بر کنترل کننده دارد ، بنابراین تحقیق در مورد هر دو توصیه می شود.

د- این اختلالی است که به سیستم اضافه می شود. آشفتگی نیروهای بیرونی است که مدل سیستم آنها را در نظر نمی گیرد. یک مثال آسان برای این می تواند یک هواپیمای بدون سرنشین باشد که می خواهید در 5 متری آن را بچرخانید وزش باد می آید و پهپاد را 1 متر می اندازد و کنترل کننده پس از وقوع مزاحمت ، پهپاد را جابجا می کند. این به عنوان اختلال شناخته می شود زیرا باد غیرقابل تکرار است بنابراین نمی توان آن را مدل کرد.

برای تنظیم کنترل کننده قوانین زیادی وجود دارد که نام ببرم ، اما برخی از قوانین خوبی که من با آنها شروع کردم کوهن کوون و زیگر نیکولز هستند.

مدلسازی یک سیستم به طور کلی مهمترین بخش بدون یک مدل دقیق است که کنترل کننده طراحی شده به دلخواه پاسخ نمی دهد.

در اینجا باید اطلاعات کافی برای درک نحوه عملکرد کنترل کننده همراه با برخی تحقیقات فردی وجود داشته باشد و کد زیر یک کنترل کننده با ترکیبی از این سه عبارت قابل اجرا است.

مرحله 2: نوشتن کد PID

نوشتن کد PID
نوشتن کد PID

اصل اساسی کد موجود در پیوند زیر گرفته شد و اصلاح شد زیرا این کد کار نمی کرد اما بسیاری از اصول آن درست بود که نقطه شروع خوبی را ارائه می داد. PID اصلی کد چندین خطا داشت مانند

  • عملکرد مداوم - کنترل کننده به طور ارثی گسسته است ، بنابراین کنترلر باید طوری تنظیم می شد که هر سه عبارت را در صورت موجود بودن ورودی جدید محاسبه کند. کار در این شبیه سازی این بود که بررسی کنیم آیا ورودی از آخرین بار تغییر کرده است یا خیر. این فقط برای شبیه سازی درست کارکردن کد کار می کند.
  • زمان نمونه بر اصطلاح انتگرال و مشتق تأثیری نداشت - کنترل کننده زمان برداشت نمونه را در نظر نگرفت ، بنابراین مقداری به نام تقسیم کننده زمان اضافه شد تا اطمینان حاصل شود که اصطلاحات انتگرالی و مشتق به درستی کار می کنند. فاصله
  • خطا فقط می تواند مثبت باشد - هنگام محاسبه خطا نیز مشکلی وجود داشت زیرا خطا هرگز نمی تواند منفی باشد وقتی سیگنال بازخورد از مقدار مرجع فراتر رفته باشد که کنترل کننده در صورت کاهش باید خروجی را افزایش دهد.
  • مقادیر بدست آمده برای 3 عبارت عدد صحیح بودند - در تجربه من همیشه متوجه می شدم که مقادیر 3 عبارت در کنترلر همیشه شماره های شناور هستند زیرا Basys 3 دارای شماره نقطه شناور نیست ، مقادیر باید یک عدد محاسبه کننده و ارزش مخرجی که می تواند به عنوان اثری فراتر از این مشکل عمل کند.

کد زیر ضمیمه شده است که قسمت اصلی کد و یک میز آزمایش برای شبیه سازی کد وجود دارد. پوشه zip شامل کد و میز آزمایش است که قبلاً در Vivado قرار دارد تا بتوانید در وقت خود باز کنید. همچنین یک تست شبیه سازی شده از کد وجود دارد که خروجی ردیابی مرجع را نشان می دهد و این ثابت می کند که کد طبق برنامه عمل می کند.

مرحله 3: نحوه اصلاح سیستم خود

اولاً همه سیستم ها یکسان نیستند ، باید ورودی ها و خروجی های سیستم را تجزیه و تحلیل کرد. در مورد من خروجی دکل من که مقدار موقعیت را به من داد یک سیگنال آنالوگ و ورودی از سیستم یک سیگنال PWM بود. به این معنی که تبدیل ADC مورد نیاز بود. خوشبختانه Basys 3 دارای ADC داخلی است ، بنابراین مشکلی وجود نداشت که خروجی سنسور IR باید تا 0V-1V کاهش یابد ، زیرا این حداکثر دامنه ADC داخلی است. این کار با استفاده از یک مدار تقسیم ولتاژ که از مقاومتهای 1k ساخته شده بود ، به عنوان یک مقاومت 3k به صورت سری با مقاومت 1k ساخته شده است. سیگنال آنالوگ اکنون در محدوده ADC قرار داشت. ورودی PWM به فن می تواند مستقیماً توسط خروجی یک درگاه PMOD در Basys 3 هدایت شود.

مرحله 4: استفاده از I/O در Basys 3

تعدادی ورودی/خروجی در Basys 3 وجود دارد که امکان اشکال زدایی آسان تر در هنگام اجرای کد را می دهد. I/O به صورت زیر تنظیم شد.

  • Seven Segment Display - این برای نشان دادن مقدار مرجع و مقدار ADC بر حسب ولت استفاده شد. دو رقم اول نمایش هفت بخش ، دو رقم را پس از اعشار اعشاری از مقدار ADC نشان می دهد زیرا مقدار بین 0-1V است. ارقام سه و چهار در صفحه نمایش هفت بخش مقدار مرجع را بر حسب ولت نشان می دهد ، این نیز دو رقم اول را پس از اعشار اعشاری نشان می دهد زیرا دامنه نیز بین 0-1 ولت است.
  • 16 LED - از LED ها برای نشان دادن مقدار خروجی استفاده می شود تا اطمینان حاصل شود که خروجی اشباع شده و خروجی به درستی تغییر می کند.

مرحله 5: نویز در خروجی سنسور IR

سر و صدا روی خروجی سنسور وجود داشت تا این مشکل برطرف شود ، یک میانگین بلوک در محل قرار داده شد زیرا این کافی بود و برای تکمیل نیاز به کار بسیار کمی داشت.

مرحله 6: طرح کلی کد

طرح کلی کد
طرح کلی کد

یک قطعه کد وجود دارد که هنوز در مورد آن صحبت نشده است. این کد یک تقسیم کننده ساعت به نام ماشه است. این بیت کد باعث می شود کد ADC نمونه گیری شود. تکمیل کد ADC حداکثر 2US طول می کشد ، بنابراین ورودی فعلی و ورودی قبلی به طور متوسط محاسبه می شوند. بعد از این میانگین گیری ، کنترل کننده شرایط P ، I و D را محاسبه می کند. طرح کلی کد و رابط در نمودار اتصال موقت نشان داده شده است.

مرحله 7: آزمایش

آزمایش کردن
آزمایش کردن

کد روی Basys 3 مستقر شد و پاسخ زیر ثبت شد. مرجع بین 2 مقدار تغییر کرد که در کد پروژه تکمیل شده ضمیمه شده است. ویدئوی پیوست این پاسخ را در زمان واقعی نشان می دهد. نوسانات سریعتر در قسمت بالای لوله پوسیده می شوند زیرا کنترل کننده برای این منطقه طراحی شده است ، اما کنترل کننده به همان اندازه پایین تر از لوله کار نمی کند زیرا سیستم غیر خطی است.

مرحله 8: تغییرات در بهبود پروژه

پروژه طبق برنامه مورد نظر کار می کرد اما در صورت تمدید پروژه چند تغییر وجود داشت.

  • از فیلتر دیجیتال برای کاهش کامل نویز استفاده کنید
  • کد ADC ، میانگین کد و کد ادغام را تنظیم کنید تا به طور متوالی فعال شود.
  • از یک سنسور متفاوت برای بازخورد استفاده کنید زیرا پاسخ غیر خطی این سنسور مشکلات زیادی را در این پروژه ایجاد کرد ، اما بیشتر در بخش کنترل است نه در قسمت کدگذاری.

مرحله 9: کار اضافی

در طول تابستان برای کنترل کننده آبشار کد نوشتم و تغییرات مورد نظر برای کنترل کننده PID حلقه ای را اجرا کردم.

تغییرات ایجاد شده در کنترلر PID معمولی

· الگوی فیلتر FIR پیاده سازی شده است تا ضریب ها برای دستیابی به فرکانس قطع مورد نظر تغییر کنند. اجرای فعلی یک فیلتر صنوبر 5 ضربه ای است.

· زمان بندی کد به گونه ای تنظیم شده است که فیلتر نمونه جدید را منتشر می کند و هنگامی که خروجی آماده است ، عبارت انتگرال شروع می شود که به این معنی است که کد را می توان در فواصل زمانی مختلف با تلاش کمتر برای تغییر تغییر داد. کد

· حلقه اصلی که برنامه را هدایت می کند نیز کاهش یافته است زیرا این حلقه 7 سیکل را قبلا انجام داده است ، این حداکثر سرعت عملکرد کنترلر را کند کرده است ، اما با کاهش حالت حلقه t 4 این بدان معناست که بلوک اصلی کد می تواند کار کند در 4 چرخه ساعت

آزمایش کردن

این کنترل کننده طبق برنامه مورد آزمایش و اجرا قرار گرفت. من از این اثبات عکس نگرفتم زیرا این قسمت از پروژه فقط برای فعال نگه داشتن ذهن بود. کد آزمایش به عنوان میز آزمایش در اینجا در دسترس است ، بنابراین می توانید برنامه را قبل از اجرا آزمایش کنید.

چرا از کنترل آبشار استفاده می کنید

کنترل آبشار دو قسمت از سیستم را کنترل می کند. در این حالت یک کنترل کننده آبشار دارای یک حلقه خارجی است که یک کنترلر است که بازخوردی از سنسور IR دارد. حلقه داخلی دارای بازخوردی به شکل زمان بین پالس های سرعت سنج است که سرعت چرخش فن را تعیین می کند. با اجرای کنترل می توان پاسخ بهتری را در خارج از سیستم به دست آورد.

کنترل آبشار چگونه کار می کند؟

حلقه بیرونی کنترلر مقدار را برای زمان بین پالل ها به کنترلر حلقه داخلی تغذیه می کند. این کنترل کننده چرخه کار را افزایش یا کاهش می دهد تا به زمان مورد نظر بین پالس ها برسد.

پیاده سازی تغییرات در دکل

متأسفانه ، من نتوانستم این تغییرات را روی دکل پیاده کنم زیرا به آن دسترسی نداشتم. من کنترل کننده حلقه تک بازبینی شده را که مطابق هدف کار می کند ، آزمایش کردم. من هنوز کنترل کننده آبشار را آزمایش نکرده ام. من مطمئن هستم که کنترل کننده کار می کند ، اما ممکن است به تغییرات جزئی نیاز داشته باشد تا مطابق برنامه کار کند.

آزمایش کردن

من نتوانستم کنترلر را آزمایش کنم زیرا شبیه سازی دو منبع ورودی مشکل بود. تنها مشکلی که در کنترل آبشار مشاهده می کنم این است که وقتی حلقه خارجی سعی می کند نقطه تنظیم ارائه شده به حلقه داخلی را افزایش دهد که یک نقطه تنظیم بزرگتر در واقع RPS کمتری برای فن است ، اما این را می توان به راحتی ثابت کرد. نقطه تنظیم را از حداکثر مقدار سیگنال نقطه تنظیم (4095 - setpoint - tacho_result) بگیرید.

مرحله 10: نتیجه گیری

به طور کلی پروژه همانطور که من در هنگام شروع پروژه در نظر داشتم عمل می کند بنابراین از نتیجه راضی هستم. از اینکه وقت گذاشتید و تلاش من را برای توسعه کنترلر PID در VHDL مطالعه کردید متشکرم. اگر کسی سعی می کند انواع مختلفی از این سیستم را پیاده کند و برای درک کد نیاز به کمک دارد ، با من تماس بگیرید ، من در اسرع وقت پاسخ خواهم داد. هر کسی که کارهای اضافی را که انجام شده است اجرا نکرده است ، امتحان می کند ، لطفاً برای هر دستی با من تماس بگیرید. اگر کسی که آن را اجرا می کند به من اطلاع دهد که چگونه کار می کند بسیار قدردانی می کنم.

توصیه شده: