پورتال ساخت و ساز - درب و دروازه.  داخلی.  فاضلاب.  مواد.  مبلمان.  اخبار

تنظیم کننده - دستگاهی که بر عملکرد شی کنترل نظارت می کند و سیگنال های کنترلی (تنظیمی) را برای آن تولید می کند.

رگولاتورها را می توان به عنوان یک دستگاه جداگانه یا به عنوان یک بسته کاربردی در برنامه اصلی دستگاه کنترل پیاده سازی کرد.

تنظیم کننده های سخت افزاری را می توان به موارد زیر تقسیم کرد:

1. در مورد استفاده از انرژی خارجی برای کار:

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

تنظیم کننده ها مستقیماً عمل نمی کنند، آنها از انرژی خارجی برای عملکرد خود استفاده می کنند - این نوع اصلی تنظیم کننده ها است.

2. بر اساس نوع انرژی خارجی استفاده شده:

  • برقی
  • پنوماتیک؛
  • هیدرولیک؛
  • ترکیب شده.

3. بر اساس نوع پارامتر کنترل شده: دما، فشار، سطح، کنترل کننده های جریان و غیره.

4. بر اساس قانون مقررات، یعنی. با تغییر در تأثیر تنظیمی در طول زمان هنگامی که پارامتر کنترل شده تغییر می کند (بر اساس نوع پاسخ گذرا تنظیم کننده). این رگولاتورها می توانند از نوع سخت افزاری (آنالوگ) یا دیجیتال و به صورت بسته نرم افزاری باشند.

انواع مقررات زیر متمایز می شوند:

  • پ(P) - به معنی " متناسب»
  • من(I) - "انتگرال"
  • D(د) - " دیفرانسیل»
  • PI(PI) - " متناسب و انتگرال»
  • P.D.(PD) - " متناسب و تفاضلی»
  • PID(PID) - " متناسب، انتگرال و دیفرانسیل»

خواص و انواع رگولاتورها

1. تنظیم کننده P، کنترل کننده تناسبی.

تابع انتقال تنظیم کننده P: Gp(s) = Kp. کنترل کننده یک عمل کنترلی را بر روی شیء متناسب با بزرگی خطا ایجاد می کند (هرچه خطای e بیشتر باشد، عمل کنترلی Y=Kp*e بیشتر است).

2. تنظیم کننده Iرگولاتور یکپارچه

تابع انتقال تنظیم کننده I: Gi(s) = 1/Ti*s. عمل کنترل متناسب با انتگرال خطا e است:

3. D-تنظیم کننده، تنظیم کننده افتراق.
عملکرد انتقال
تنظیم کننده D: Gd( س) = Td * س. D کنترلر تنها زمانی یک عمل کنترلی ایجاد می کند که متغیر کنترل شده تغییر کند:Y= Td * de/ dt.

U پ-تنظیم کننده ، به آن استاتیک نیز می گویند ، تغییر در موقعیت RO متناسب با انحراف پارامتر قابل تنظیم است. ه» از مقدار تنظیم شده آن X 0 .


مزایایتنظیم کننده P - سرعت آن (زمان تنظیم کوتاه tp ) و پایداری بالای فرآیند تنظیم.


نقص- وجود یک خطای استاتیکی δ X، یعنی پس از پایان فرآیند تنظیم (در طول دوره تنظیم tp) پارامتر دقیقاً به مقدار مشخص شده برنمی گردد، اما با مقدار مشخص شده تفاوت دارد δ X که دقت تنظیم را کاهش می دهد. با افزایش Kp، مقدار δ در حال کاهش است، اما ASR ممکن است ثبات خود را از دست بدهد. در Kp = Kp cr، نوسانات میرا شده با دامنه ثابت در سیستم ظاهر نمی شود، اما در Kp حتی بیشتر، با افزایش دامنه. برنج. 93

1 – فرآیند کنترل شده باپتنظیم کننده در K p< K p .кр
2 - فرآیند قابل تنظیم در
K p = K r.cr

تی کر - دوره نوسانات بدون میرا در K p = K r.cr

t r - زمان تنظیم برای یک فرآیند پایدار

X 0 - مقدار اولیه پارامتر کنترل شده

δ X - خطای استاتیک

U من-تنظیم کننده ، همچنین نامیده می شودآ ایستا، تغییر در موقعیت RO متناسب با انتگرال انحراف است. ه» پارامتر کنترل شده از مقدار تنظیم شده آن X 0 . عنصر کنترل حرکت می کند تا زمانی که پارامتر به مقدار دقیقا مشخص شده برسد، یعنی. هیچ خطای استاتیکی ندارد δ X=0. این مزیت آن است، اما نقطه ضعف آن پایداری ضعیف و زمان تنظیم طولانی آن است. می توان آن را بر روی اجسام اینرسی با خود تراز استفاده کرد.

U D - تنظیم کننده، اثر تنظیمی متناسب با میزان انحراف پارامتر از هدف است، یعنی. مشتق انحراف« ه». در شکل 94 با تغییر گامU(t), یک سیگنال خطا رخ می دهد ه، که در طول فرآیند تنظیم کاهش می یابدتی ، تا زمانی که پارامتر به مقدار جدیدی برسد U(t).t 0 - شروع انحراف پارامتر،تی 1 - لحظه عملکرد رگولاتور بدون سیگنال مشتق، "Δ" - منطقه مرده تنظیم کننده.

سرعت انحراف در لحظه اولیه زیاد است و بنابراین سیگنال سرعت بزرگ خواهد بود, رگولاتور بلافاصله در حال حاضر شروع به کار می کند t1 ، حتی قبل از انحراف قابل توجه "Δ" پارامتر و پارامتر به سرعت روی کار تنظیم می شود U(t) .

بنابراین، این تنظیم کننده سرعت خود را افزایش داده است - این است کرامت.نقص- در عملکرد پایدار نیست، بنابراین به طور جداگانه استفاده نمی شود. اما از این اصل برای بهبود کیفیت مقررات استفاده می شودP.D.و PIDتنظیم کننده

ترکیب ساده ترینپ، من، دی ، تنظیم کننده ها، دریافت کنیدPI, P.D., PIDتنظیم کننده. در عمل عمدتاً استفاده می شود آر, PI, PIDتنظیم کننده

PI - تنظیم کننده، ترکیب آرومنتنظیم کننده محاسن هر دو را دارد. از جانب R -ثبات خوب ازمنδ X=0.

P.D.- تنظیم کننده، ترکیبی آرو Dتنظیم کنندهمحاسن هر دو را دارد. از جانب R -مقاومت خوب، ازDعملکرد بهبود یافته، اما خطای استاتیک همچنان ادامه داردδ X، مانند y آرتنظیم کننده

PID- تنظیم کننده، ترکیب پ، من و Dتنظیم کنندهمحاسن داردسه.از R -مقاومت خوب، ازمن– بدون خطای استاتیکیδ X=0، از Dافزایش عملکرد

PID- تنظیم کننده در قابلیت های خود جهانی ترین است.در حال حاضر الکترونیک و دیجیتالPID- تنظیم کننده ها بر اساسچه کسی قوانین نظارتی مختلفی را می توان اجرا کرد.

طرح ساختاری PIDتنظیم کننده

شکل 95 بلوک دیاگرام را نشان می دهدکنترل کننده PID

برنج. 95 بلوک دیاگرام کنترلر PID

Kp- سود تنظیم کننده

T i- ثابت ادغام

Td- ثابت تمایز

اینها تنظیمات رگولاتورها هستند

ویژگی های گذرا رگولاتورها در شکل 96 نشان داده شده است. برایپ، منو Dتنظیم کننده ها، آنها شبیه به ویژگی های واحدهای استاندارد مربوطه هستند. برای سایر تنظیم کننده ها، ویژگی ها با افزودن ویژگی ها به دست می آیندتنظیم کننده های P، I و D.

ویژگی های گذرا نشان می دهد که چگونه تأثیر تنظیم کننده تنظیم کننده تغییر می کند Y در زمانی که پارامتر کنترل شده منحرف می شودایکس از وظیفه یعنی هنگامی که سیگنال خطا "e" ظاهر می شود.

هنگامی که یک انحراف وجود دارد، کاهش دما در جسم(ایکس) ، y آرتنظیم کننده, شیر کنترل کمی باز می شود(Y) متناسب با انحراف دما است و متوقف خواهد شد. عرضه گرما و دما افزایش می یابد, به سرعت بازیابی می شود، اما نه با دقت، یک خطای استاتیک رخ می دهد δ ایکس.

U PIDتنظیم کننده، به دلیل آروDدریچه ابتدا به شدت باز می شود و تامین حرارت سریع را فراهم می کند، اما سپس برای جلوگیری از گرمای بیش از حد، شروع به بسته شدن می کند و اطمینان حاصل می شود که گرمای لازم به جسم تامین می شود. سپس وارد عمل می شودمنجزء، که شیر را کمی باز می کند تا خطای استاتیک برطرف شود δ X. بنابراینDجزء باعث افزایش سرعت رگولاتور می شود ومنجزء خطای استاتیک را حذف می کند δ ایکس.

کنترل سوالات

1.اگر شما آرتنظیم کننده Kr را افزایش دهید، چگونه تغییر خواهد کرد δ ایکس؟

2. چه چیزی می دهد؟ منجزء رگولاتور؟

3.برای چه ملکیو چگونه تاثیر می گذارد Dجزء رگولاتور؟

4. کدام تنظیم کننده کیفیت بدترین و بهترین است؟


مدارهای الکتریکی رگولاتورها

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

کسب کردن آرجزء Cr = Rp/R1. در طرح، PIDتنظیم کننده در DA1 تکرار کننده کامل شد آرجزء به دلیل K = R/R=1 ، و وظایف یک تقویت کننده را انجام می دهد DA 4 که یک دستگاه مقایسه هم هست oe سیگنال کنترلر را مقایسه می کند+U با یک سیگنال از سنسور - Ux. تفاوت آنها e= U- Uxدر ورودی خدمت کرد D.A. امضا کردن هبستگی به جهت تغییر پارامتر دارد. تنظیمات برایمنقطعات تی من= ریبامن، و برای D قطعات Td=RdCd. در DA5 یک جمع کننده ساخته می شود که تمام اجزا را جمع می کند و در خروجی سیگنالی دریافت می کنیم که بر اساس آن تغییر می کند.PIDقانون

تنظیم کننده P

من تنظیم کننده

تنظیم کننده D

کنترل کننده PID

برنج. 97 نمودارهای الکتریکیکنترلرهای P، I، D و PID

قانون مقررات الکترونیکی تیمن،تید

1- بدون رگلاتور

2 – منتنظیم کننده

3 – پتنظیم کننده

4 – PIتنظیم کننده

5 – P.D.تنظیم کننده

6 – PIDتنظیم کننده

X 0 - مقدار اولیه پارامتر کنترل شده

δX - خطای استاتیکی

PID(یا مخفف انگلیسی - PID) کنترل کننده ای است که کنترل متناسب، یکپارچه و دیفرانسیل را ارائه می دهد. کنترلرهای PID به طور گسترده در سیستم های کنترل دقیق مدرن مانند کنترل سیستم های حرارتی و سیستم های موقعیت یابی استفاده می شوند. استفاده از کنترلرهای PID به کاهش تلفات انرژی در راه اندازی سیستم کمک می کند و دسترسی سریعتر به پارامترهای مورد نیاز را فراهم می کند.

به طور کلی، کنترل کننده PID مقدار پارامتر تعیین کننده را از جسم دریافت می کند (شکل 1) و روی کنترلی که وضعیت آن بر پارامتر اولیه تأثیر می گذارد، عمل می کند. یک مثال کلاسیک از استفاده از کنترلر PID، کنترل یک سیستم حرارتی است، خواه یک بخاری یا یک واحد تبرید. این مثال جالب است زیرا فرآیندهای گرمایش یا سرمایش کاملاً بی اثر هستند و اغلب کاهش دما به طور طبیعی به دلیل تلفات رخ می دهد.

کنترل‌کننده‌های PID در سیستم‌هایی استفاده می‌شوند که توصیف ریاضی آنها کار فشرده است یا به دلیل ماهیت تصادفی تأثیر محیط خارجی یا تداخل قابل دستیابی نیست. برای یک سیستم حرارتی، اطلاعات مربوط به وضعیت جسم، مقدار دما از سنسور است و شیء کنترل، گرمکن سیستم است. ابعاد نمودارها به صورت مشروط داده می شود، زیرا مدل دقیق تنظیم کننده به ویژگی های خاص سیستم حرارتی بستگی دارد.

کنترل متناسببه عنوان حاصل ضرب ضریب ثابت K p با خطای انحراف جریان محاسبه می شود. اگر فقط کنترل تناسبی را در بازخورد گرمکن ترموسیستم بگنجانید، به هیچ وجه نمی توان به دمای مورد نیاز دست یافت (شکل 2). این به دلیل اینرسی سیستم است، زیرا بخاری باید با در نظر گرفتن دینامیک افزایش دمای جسم کنترل شود.

تنظیم یکپارچهمجموع خطاهای دما تا نقطه فعلی در زمان در ضریب انتگرال KI ضرب می شود. برای ترموسیستم ها، کنترل یکپارچه می تواند به راحتی دمای تنظیم شده را حفظ کند (شکل 3). چنین کنترلی تاخیر در گرم کردن جسم را جبران می کند و به شما امکان می دهد با دقت بیشتر یا کمتر به مقدار مورد نیاز نزدیک شوید. برای سیستم هایی با اینرسی کمتر، استفاده از کنترل انتگرال فقط قابل اجرا نیست، زیرا تاخیر در روند انباشت خطا منجر به "پرواز" پارامتر کنترل شده و ظهور نوسانات می شود.

استفاده كردن کنترل دیفرانسیلسیستم قادر به جبران خطای احتمالی پارامتر در آینده است. محاسبه مولفه دیفرانسیل از نظر عددی شبیه تفاوت بین مقدار فعلی و قبلی پارامتر است که در ضریب کنترل KD ضرب می شود. از آنجایی که اندازه گیری های انجام شده در یک بازه زمانی کوتاه مورد استفاده قرار می گیرند، خطاها و تأثیرات خارجی تا حد زیادی بر فرآیند کنترل تأثیر می گذارد. به دلیل این عوامل، اجرای کنترل دیفرانسیل خالص برای اکثر سیستم ها دشوار است.

در مجموع سه جزء کنترل کننده PID در مدت زمان کوتاهی نتیجه موثری را ارائه می دهند (شکل 4).

در عمل، بهترین نتایج با انتخاب ثابت برای هر جزء کنترل به دست می آید. از کنترل کننده های PID خودتنظیمی نیز استفاده می شود که برای آنها ضرایب به صورت برنامه ریزی شده در سیستم محاسبه می شود.

این بخش توضیحاتی در مورد الگوریتم های عملیاتی و کنترل کننده های پیوسته P-, PI-, PD-, PID با ساختارهای سیگنال خروجی مختلف - خروجی آنالوگ، خروجی گسسته (پالسی) یا خروجی PWM (سیگنال مدوله شده با عرض پالس) ارائه می دهد.

بلوک دیاگرام تنظیم کننده های پیوسته

این بخش بلوک دیاگرام های تنظیم کننده های پیوسته را با خروجی آنالوگ - شکل 2، با خروجی پالس - شکل 3 و با خروجی PWM (مدولاسیون عرض پالس) - شکل 4 نشان می دهد.

در حین کار، سیستم کنترل خودکار AR (رگولاتور) مقدار فعلی پارامتر اندازه گیری شده X دریافت شده از سنسور D را با مقدار مشخص شده (نقطه تنظیم SP) مقایسه می کند و عدم تطابق مقررات E (B=SP-PV) را حذف می کند. اختلالات خارجی Z نیز توسط تنظیم کننده حذف می شوند. عملکرد بلوک دیاگرام های فوق در روش تولید سیگنال کنترل خروجی رگولاتور متفاوت است.

کنترل کننده پیوسته با خروجی آنالوگ

بلوک دیاگرام یک تنظیم کننده پیوسته با خروجی آنالوگ در شکل 2 نشان داده شده است.

خروجی Y کنترلر AP (به عنوان مثال، یک سیگنال 0-20 میلی آمپر، 4-20 میلی آمپر، 0-5 میلی آمپر یا 0-10 ولت) از طریق یک سیگنال E/P الکتروپنوماتیک (به عنوان مثال، با سیگنال خروجی 20-) عمل می کند. 100 کیلو پاسکال) یا یک کنترل کننده موقعیت الکتروپنوماتیک روی محرک K (بدنه تنظیمی).

شکل 2 - بلوک دیاگرام یک رگولاتور با خروجی آنالوگ

جایی که:
AR - کنترل کننده PID پیوسته با خروجی آنالوگ،



D - سنسور
NP - مبدل نرمال کننده (در رگولاتورهای مدرن یک دستگاه ورودی است)
Y - سیگنال کنترل آنالوگ خروجی E/P - مبدل الکترو پنوماتیک،

تنظیم کننده پیوسته با خروجی پالس

بلوک دیاگرام یک تنظیم کننده پیوسته با خروجی پالس در شکل 3 نشان داده شده است.

سیگنال های کنترل خروجی رگولاتور - سیگنال های بیشتر و کمتر (ترانزیستور، رله، تریاک) از طریق دستگاه های کنترل تماسی یا غیر تماسی (P) بر عنصر اجرایی K (رگولاتور) تأثیر می گذارد.

شکل 3 - بلوک دیاگرام یک رگولاتور با خروجی پالس

جایی که:
AR - کنترل کننده PID پیوسته با خروجی پالس،
SP - گره برای تشکیل یک نقطه داده شده،
PV=X - پارامتر تکنولوژیکی قابل تنظیم،
E - عدم تطابق رگولاتور،
D - سنسور
NP - مبدل نرمال کننده (در تنظیم کننده های مدرن یک دستگاه ورودی است) IMP - مدولاتور پالس PWM که سیگنال خروجی Y را به دنباله ای از پالس ها با چرخه وظیفه متناسب با سیگنال خروجی تبدیل می کند: Q=\Y\/100. سیگنال های بیشتر و کمتر - اقدامات کنترل،

K - شیر کنترل (بدنه تنظیم).

تنظیم کننده پیوسته با خروجی PWM (مدولاسیون عرض پالس).

بلوک دیاگرام یک تنظیم کننده پیوسته با خروجی PWM (مدولاسیون عرض پالس) در شکل 4 نشان داده شده است.

سیگنال کنترل خروجی رگولاتور (ترانزیستور، رله، تریاک) از طریق دستگاه های کنترل تماسی یا غیر تماسی (P) بر محرک K (رگولاتور) تأثیر می گذارد.

کنترل‌کننده‌های پیوسته با خروجی PWM به طور گسترده در سیستم‌های کنترل دما مورد استفاده قرار می‌گیرند، جایی که عنصر تریاک کنترل خروجی (یا رله حالت جامد، استارتر) روی یک بخاری ترموالکتریک، المنت گرمایشی یا فن عمل می‌کند.

شکل 4 - بلوک دیاگرام یک رگولاتور با خروجی PWM

AR - کنترل کننده PID پیوسته با خروجی PWM پالس،
SP - گره برای تشکیل یک نقطه داده شده،
PV=X - پارامتر تکنولوژیکی قابل تنظیم،
E - عدم تطابق رگولاتور،
D - سنسور
NP - مبدل نرمال کننده (در تنظیم کننده های مدرن یک دستگاه ورودی است) PWM - مدولاتور پالس PWM که سیگنال خروجی Y را به دنباله ای از پالس ها با چرخه وظیفه متناسب با سیگنال خروجی تبدیل می کند: Q=\Y\/100.
P - استارت تماسی یا غیر تماسی،
K - شیر کنترل (بدنه تنظیم).

هماهنگی دستگاه های خروجی رگولاتورهای پیوسته

سیگنال خروجی کنترلر باید با محرک و محرک سازگار باشد.

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

جدول 1 - هماهنگی دستگاه های خروجی رگلاتورهای پیوسته

دستگاه خروجی رگولاتور پیوسته نوع دستگاه خروجی محرک یا دستگاه نوع درایو سازمان تنظیم مقررات
خروجی آنالوگ DAC با خروجی 0-5 میلی آمپر، 0-20 میلی آمپر، 4-20 میلی آمپر، 0-10 ولت P-، PI-، PD-، PID-قانون مبدل و تنظیم کننده موقعیت، الکترو پنوماتیک و هیدرولیک محرک‌های پنوماتیکی (با هوای فشرده به عنوان نیروی کمکی) و مبدل‌های سیگنال الکتروپنوماتیک یا پوزیشنرهای الکتروپنوماتیکی، الکتریکی (درایوهای فرکانس)
خروجی پالس ترانزیستور، رله، تریاک P-، PI-، PD-، PID-قانون درایوهای الکتریکی (با گیربکس)، از جمله درایوهای برگشت پذیر
خروجی PWM ترانزیستور، رله، تریاک P-، PI-، PD-، PID-قانون استارت کنتاکت (رله) و بدون تماس (تریاک). بخاری ترموالکتریک (TEH) و غیره

پاسخ تنظیم کننده به یک اقدام تک مرحله ای

اگر تابع گام به گام تغییر نقطه تنظیم به ورودی تنظیم کننده ارائه شود، به شکل 1 مراجعه کنید. 5، سپس در خروجی کنترلر به یک اقدام تک مرحله ای مطابق با ویژگی های کنترل کننده به عنوان تابعی از زمان پاسخ داده می شود.

سیستم های کنترل اتوماتیک (ACS)طراحی شده اند تا به طور خودکار یک یا چند پارامتر یک شی کنترل را تغییر دهند تا حالت مورد نیاز عملکرد آن ایجاد شود. ACS حفظ ثبات مقادیر مشخص شده پارامترهای تنظیم شده یا تغییر آنها را طبق قانون معین تضمین می کند یا معیارهای خاصی را برای کیفیت کنترل بهینه می کند. به عنوان مثال، چنین سیستم هایی عبارتند از:

  • سیستم های تثبیت،
  • سیستم های کنترل برنامه،
  • سیستم های ردیابی

این یک کلاس نسبتاً گسترده از سیستم ها است که می توان آنها را در هر جایی یافت. اما این چه ربطی به Unity3D و احتمالاً بازی ها دارد؟ در اصل، ساده است: در هر بازی که به نوعی از شبیه سازی به عنوان عنصری از گیم پلی استفاده می کند، اسلحه های خودکششی اجرا می شوند، مانند بازی Kerbal Space Programm، Digital Combat Simulator (قفل قبلی)، Strike Suit Zero، و غیره. (کسی که نمونه های بیشتری می داند - در نظرات بنویسد). در اصل، هر بازی که فرآیندهای فیزیکی واقعی را شبیه‌سازی می‌کند، از جمله سینماتیک با دینامیک حرکت، می‌تواند یکی از اسلحه‌های خودکششی را پیاده‌سازی کند - این رویکرد ساده‌تر، طبیعی‌تر است و توسعه‌دهنده در حال حاضر مجموعه‌ای از ابزارهای آماده ارائه شده توسط انواع ویشنگرادسکی ها، لیاپانوف ها، کالمان ها، چبیشف ها و سایر کولوموگروف ها، بنابراین می توانید بدون اختراع مجدد چرخ انجام دهید، زیرا قبلاً اختراع شده است، به طوری که به یک علم جداگانه تبدیل شده است: نظریه کنترل خودکار. نکته اصلی در اینجا این است که زیاده روی نکنید. تنها یک مشکل وجود دارد: آنها در مورد TAU در همه جا صحبت نمی کنند، نه برای همه، اغلب کم و نه خیلی واضح.

کمی تئوری

سیستم کنترل اتوماتیک کلاسیک در شکل زیر نشان داده شده است:



عنصر کلیدی هر تفنگ خودکششی این است تنظیم کنندهکه دستگاهی است که وضعیت جسم کنترلی را نظارت می کند و قانون کنترل مورد نیاز را ارائه می کند. فرآیند کنترل شامل: محاسبه خطای کنترل یا سیگنال خطا است ه(تی) چه تفاوتی بین مورد نظر وجود دارد تنظیمات(نقطه تنظیم یا SP ) و مقدار فعلی فرآیند (Process Vale یا PV ، پس از آن تنظیم کننده سیگنال های کنترلی (مقدار دستکاری شده یا MV ).


یکی از انواع رگولاتور است کنترل کننده متناسب-انتگرال-مشتق (PID)که یک سیگنال کنترلی تولید می کند که حاصل جمع سه عبارت تناسبی، انتگرال و دیفرانسیل است.



کجا، خطای عدم تطابق، و همچنین - متناسب، - انتگرال، - اجزای (شرایط) دیفرانسیل قانون کنترل، که در شکل نهایی آن با فرمول های زیر توضیح داده شده است.




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


جزء انتگرال Iخطای کنترل را جمع می کند (ادغام می کند)، که به کنترل کننده PID اجازه می دهد تا خطای استاتیک را حذف کند (خطای ثابت، خطای باقیمانده). یا به عبارت دیگر: پیوند انتگرال همیشه تعصبی را معرفی می کندو اگر سیستم در معرض برخی از خطاهای دائمی باشد، آنها را جبران می کند (به دلیل سوگیری). اما اگر چنین خطاهایی وجود نداشته باشد یا بسیار ناچیز باشند، اثر برعکس خواهد بود - خود جزء انتگرال یک خطای جابجایی را معرفی می کند. به همین دلیل است که از آن برای مثال در کارهای موقعیت یابی بسیار دقیق استفاده نمی شود. کلید عیبقانون کنترل انتگرال اثر اشباع انتگرالگر (Integrator windup) است.


جزء دیفرانسیل Dمتناسب با نرخ تغییر انحراف متغیر کنترل شده است و برای مقابله با انحراف از مقدار هدف طراحی شده است. در آینده پیش بینی می شوند. قابل توجه است که جزء دیفرانسیل نوسانات میرا را حذف می کند. کنترل دیفرانسیل به ویژه برای فرآیندهایی که تاخیر زیادی دارند موثر است. عیبقانون کنترل دیفرانسیل ناپایداری آن در برابر اثرات نویز است (نویز دیفرانسیل).


بنابراین، بسته به موقعیت، می توان از تنظیم کننده های P-، PD-، PI- و PID استفاده کرد، اما قانون کنترل اصلی عمدتاً متناسب است (اگرچه در برخی وظایف خاص فقط می توان از عناصر متمایز کننده و یکپارچه کننده ها به طور انحصاری استفاده کرد).


به نظر می رسد که موضوع پیاده سازی کنترل کننده های PID مدت هاست که مورد هک قرار گرفته است و در اینجا در Habré چند مقاله خوب در مورد این موضوع وجود دارد، از جمله در Unity3D، همچنین یک مقاله خوب PID Without a PhD (ترجمه) و یک سری مقاله وجود دارد. مقالات در مجله "تکنولوژی های اتوماسیون مدرن" در دو بخش اول و دوم. همچنین مقاله ای در ویکی پدیا در خدمت شماست (کامل ترین آن را در نسخه انگلیسی بخوانید). و در انجمن Unity3D نه، نه، و کنترل کننده PID درست مانند gamedev.stackexchange ظاهر می شود


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

تلاش شماره یک

به عنوان مثال، ما سعی خواهیم کرد با استفاده از مثال کنترل چرخشی در یک بازی فضایی دو بعدی ساده، از همان ابتدا، یک طرح کنترل را پیاده سازی کنیم (فراموش کرده اید که این یک آموزش است؟).


چرا سه بعدی نیست؟ زیرا پیاده سازی تغییر نخواهد کرد، به جز اینکه برای کنترل pitch، yaw and roll باید کنترلر PID را روشن کنید. اگرچه موضوع کاربرد صحیح کنترل PID همراه با کواترنیون ها واقعا جالب است، شاید در آینده در مورد آن صحبت کنم، اما حتی ناسا به جای کواترنیون ها، زوایای اویلر را ترجیح می دهد، بنابراین به یک مدل ساده در یک مدل دو بعدی بسنده می کنیم. سطح.


برای شروع، بیایید خود شی بازی سفینه فضایی را بسازیم، که از خود شی کشتی واقعی در سطح بالای سلسله مراتب تشکیل شده است و یک شیء موتور کودک را به آن وصل می کنیم (صرفاً به خاطر جلوه های ویژه). در اینجا برای من به نظر می رسد:



و روی خود شی سفینه فضایی پرتاب می کنیم بازرسانواع قطعات با نگاه کردن به آینده، من یک اسکرین شات از شکل ظاهری آن در پایان می دهم:



اما این برای بعد است، و در حال حاضر هیچ اسکریپتی در آن وجود ندارد، فقط مجموعه آقایان استاندارد: Sprite Render، RigidBody2D، Polygon Collider، Audio Source (چرا؟).


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


زیرا علاوه بر خود سفینه فضایی، تعداد زیادی اشیاء فضایی کمتر هوشمند دیگر نیز وجود دارد، بنابراین ابتدا کلاس مادر را توضیح خواهیم داد. بدنه پایه، که حاوی پیوندهایی به مؤلفه‌های ما، روش‌های اولیه‌سازی و تخریب، و همچنین تعدادی فیلد و روش اضافی، به عنوان مثال، برای پیاده‌سازی مکانیک آسمانی است:


BaseBody.cs

با استفاده از UnityEngine؛ با استفاده از System.Collections. با استفاده از System.Collections.Generic; فضای نام Assets.Scripts.SpaceShooter.Bodies ( کلاس عمومی BaseBody: MonoBehaviour (فقط خواندنی float _deafultTimeDelay = 0.05f؛ فهرست ایستا عمومی _body = لیست جدید ()؛ #region RigidBody public Rigidbody2D _rb2d; برخورد دهنده عمومی2D_c2d; #endregion #region مراجع عمومی Transform _myTransform; عمومی GameObject _myObject; ///

/// شی ای که هنگام نابودی ظاهر می شود ///عمومی GameObject_explodePrefab; #endregion #region Audio public AudioSource _audioSource; /// /// صداهایی که هنگام دریافت آسیب پخش می شوند ///عمومی AudioClip_hitSounds. /// /// صداهایی که با ظاهر شدن یک شی پخش می شوند ///عمومی AudioClip_awakeSounds. /// /// صداهایی که قبل از مرگ پخش می شوند ///عمومی AudioClip_deadSounds; #endregion #region متغیرهای نیروی خارجی /// /// نیروهای خارجی وارد بر یک جسم /// public Vector2 _ExternalForces = new Vector2(); /// /// بردار سرعت جریان /// public Vector2 _V = new Vector2(); /// /// بردار فعلی گرانش /// public Vector2 _G = new Vector2(); #endregion public void virtual Awake() ( Init(); ) public void start () ( ) public virtual void Init() ( _myTransform = this.transform؛ _myObject = gameObject؛ _rb2d = GetComponent ()؛ _c2d = GetComponentsInChildren ()؛ _audioSource = GetComponent ()؛ PlayRandomSound(_awakeSounds); BaseBody bb = GetComponent ()؛ _body.Add(bb); ) /// /// تخریب شخصیت /// public virtual void Destroy() ( _bodies.Remove(this); for (int i = 0; i< _c2d.Length; i++) { _c2d[i].enabled = false; } float _t = PlayRandomSound(_deadSounds); StartCoroutine(WaitAndDestroy(_t)); } /// /// قبل از نابودی مدتی صبر می کنیم /// /// زمان انتظار /// عمومی IEnumerator WaitAndDestroy(float waitTime) ( بازده بازگشت جدید WaitForSeconds(waitTime); if (_explodePrefab) ( Instantiate(_explodePrefab, transform.position, Quaternion.identity); ) Destroy(gameObject, _deafultTimeDelay)); /// پخش یک صدای تصادفی /// /// آرایه ای از صداها /// مدت زمان پخش صداعمومی float PlayRandomSound(AudioClip audioClip) ( float _t = 0; if (audioClip.Length > 0) ( int _i = UnityEngine.Random.Range(0, audioClip.Length - 1); AudioClip _audioClip = audioClip[_i] _t _audioClip.length; _audioSource.PlayOneShot(_audioClip); ) return _t; ) /// /// آسیب دیدن /// /// سطح آسیبآسیب فضای خالی مجازی عمومی (آسیب شناور) ( PlayRandomSound(_hitSounds)؛ ) )


به نظر می رسد که ما هر آنچه را که نیاز بود، حتی بیشتر از آنچه که لازم بود (در چارچوب این مقاله) شرح دادیم. حالا بیایید کلاس کشتی را از آن به ارث ببریم کشتی، که باید بتواند حرکت کند و بچرخد:


SpaceShip.cs

با استفاده از UnityEngine؛ با استفاده از System.Collections. با استفاده از System.Collections.Generic; فضای نام Assets.Scripts.SpaceShooter.Bodies ( کلاس عمومی Ship: BaseBody ( عمومی Vector2 _movement = new Vector2(؛ public Vector2 _target = new Vector2(); public float _rotation = 0f; public void FixedUpdate() ( float torque ( float torque = ControlRotate _چرخش؛ نیروی بردار2 = ControlForce(_movement)؛ _rb2d.AddTorque(گشتاور؛ _rb2d.AddRelativeForce(نیرو)؛ ) عمومی شناور ControlRotate(Vector2 rotate) (نتیجه شناور = 0f؛ نتیجه بازگشت؛ ) عمومی Vector2 ControlForce(Vector2) (نتیجه Vector2 = New Vector2()؛ نتیجه بازگشت؛ ) )


در حالی که هیچ چیز جالبی در آن وجود ندارد، در حال حاضر فقط یک کلاس خرد است.


همچنین کلاس پایه (انتزاعی) را برای همه کنترلرهای ورودی BaseInputController شرح خواهیم داد:


BaseInputController.cs

با استفاده از UnityEngine؛ با استفاده از Assets.Scripts.SpaceShooter.Bodies. فضای نام Assets.Scripts.SpaceShooter.InputController ( enum public eSpriteRotation (Rigth = 0، Up = -90، Left = -180، Down = -270) کلاس انتزاعی عمومی BaseInputController: MonoBehaviour ( public ShiBobject _agentObgent; public GameObject _agentObgent; به مولفه منطقی کشتی public eSpriteRotation _spriteOrientation = eSpriteRotation.Up؛ //این به دلیل جهت گیری غیر استاندارد Sprite "بالا" به جای "راست" public abstract void ControlRotate(float dt); public abstract void ControlForce است. (float dt)؛ Public Void Start() ( _agentObject = gameObject؛ _agentBody = gameObject.GetComponent ()؛ ) باطل مجازی عمومی FixedUpdate() ( float dt = Time.fixedDeltaTime; ControlRotate(dt)؛ ControlForce(dt)؛ ) Public void Update() ( //TO DO ) ) )


و در نهایت، کلاس کنترلر پخش PlayerFigtherInput:


PlayerInput.cs

با استفاده از UnityEngine؛ با استفاده از Assets.Scripts.SpaceShooter.Bodies. فضای نام Assets.Scripts.SpaceShooter.InputController ( کلاس عمومی PlayerFigtherInput: BaseInputController ( override public void ControlRotate(float dt) (// تعیین موقعیت ماوس نسبت به پخش کننده Vector3 worldPos = Input.mousePosition. (worldPos)؛ / / مختصات اشاره گر ماوس را ذخیره کنید float dx = -this.transform.position.x + worldPos.x؛ float dy = -this.transform.position.y + worldPos.y؛ //انتقال جهت Vector2 target = New Vector2(dx,dy)؛ _agentBody._target = target؛ //محاسبه چرخش با توجه به ضربات کلید float targetAngle = Mathf.Atan2(dy, dx) * Mathf.Rad2Deg؛ _agentBody._targetAngle = targetAngle + (floatrient)_spriteO .


به نظر می رسد که ما تمام کرده ایم، اکنون می توانیم در نهایت به سراغ چیزی برویم که همه اینها برای چه شروع شده است، یعنی. کنترلرهای PID (امیدوارم فراموش نکرده باشید؟). اجرای آن ساده به نظر می رسد:


با استفاده از سیستم؛ با استفاده از System.Collections.Generic; با استفاده از System.Linq؛ با استفاده از System.Text. فضای نام Assets.Scripts.Regulator ( // این ویژگی برای نمایش فیلدهای تنظیم کننده // در کلاس عمومی بازرس و سریال SimplePID ضروری است ( شناور عمومی Kp, Ki, Kd؛ شناور خصوصی lastError؛ شناور خصوصی P, I, D ؛ عمومی SimplePID() (Kp = 1f؛ Ki = 0؛ Kd = 0.2f؛ ) عمومی SimplePID (فلوت pFactor، float iFactor، float dFactor) ( this.Kp = pFactor؛ this.Ki = iFactor؛ this.Kd = dFactor ; ) به روز رسانی عمومی شناور (خطای شناور، dt شناور) (P = خطا؛ I += خطا * dt؛ D = (خطا - آخرین خطا) / dt؛ آخرین خطا = خطا؛ شناور CO = P * Kp + I * Ki + D * Kd؛ CO بازگشت؛ )))

ما مقادیر پیش‌فرض ضرایب را از هوای رقیق می‌گیریم: این یک ضریب ساده از قانون کنترل تناسبی Kp = 1 خواهد بود، مقدار کمی از ضریب برای قانون کنترل دیفرانسیل Kd = 0.2، که باید حذف شود. نوسانات مورد انتظار و یک مقدار صفر برای Ki، که به این دلیل انتخاب شده است که در نرم افزار ما مدل هیچ خطای ثابتی ندارد (اما همیشه می توانید آنها را معرفی کنید و سپس قهرمانانه با کمک یکپارچه ساز مبارزه کنید).


حالا بیایید به کلاس Spaceship خود برگردیم و سعی کنیم از ایجاد خود به عنوان یک کنترل کننده چرخش سفینه فضایی در روش ControlRotate استفاده کنیم:


عمومی float ControlRotate(Vector2 rotate) ( float MV = 0f; float dt = Time.fixedDeltaTime؛ //محاسبه خطای float angleError = Mathf.DeltaAngle(_myTransform.eulerAngles.z, targetAngle)؛ //Get MV corrective به روز رسانی (angleError، dt)؛ بازگشت MV؛ )

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


و بدون این Quaternion.Lerp شما

اگر (!_rb2d.freezeRotation) rb2d.freezeRotation = true; float deltaAngle = Mathf.DeltaAngle(_myTransform.eulerAngles.z، targetAngle); float T = dt * Mathf.Abs(_rotationSpeed ​​/ deltaAngle); // تبدیل زاویه به بردار Quaternion rot = Quaternion.Lerp(_myTransform.rotation, Quaternion.Euler(new Vector3(0, 0, targetAngle)), T); // تغییر چرخش شی _myTransform.rotation = rot;


کد منبع حاصل از Ship.cs در زیر اسپویلر قرار دارد

با استفاده از UnityEngine؛ با استفاده از Assets.Scripts.Regulator. فضای نام Assets.Scripts.SpaceShooter.Bodies ( کلاس عمومی Ship: BaseBody ( عمومی GameObject _flame; public Vector2 _movement = new Vector2(); public Vector2 _target = new Vector2(); public float _targetAngle = 0f; public float _angle = 0f; SimplePID _angleController = جدید SimplePID(); public void FixedUpdate() (گشتاور شناور = ControlRotate(_targetAngle)؛ نیروی Vector2 = ControlForce(_movement); _rb2d.AddTorque(گشتاور)؛ _rb2d.AddRelativeForce(float عمومی(float Control)). چرخش) ( float MV = 0f؛ float dt = Time.fixedDeltaTime؛ _angle = _myTransform.eulerAngles.z؛ //محاسبه خطای float angleError = Mathf.DeltaAngle(_angle, rotate); //دریافت شتاب اصلاحی MV_Control Update( angleError, dt؛ return MV; ) public Vector2 ControlForce(Vector2 move) (Vector2 MV = new Vector2(); //یک قطعه کد برای جلوه ویژه یک موتور در حال کار به خاطر if (حرکت !=) Vector2.zero) ( if (_flame != null) ( _flame.SetActive(true); ) ) else ( if (_flame != null) ( _flame.SetActive(false); ) ) MV = حرکت; بازگشت MV; ))))


همه؟ بریم خونه؟



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


وحشت نکنید! بیایید سعی کنیم بفهمیم چه خبر است.


در لحظه ای که یک مقدار SP جدید دریافت می شود، یک پرش شدید (به صورت گام به گام) در عدم تطابق خطا وجود دارد، که همانطور که به یاد می آوریم، به این صورت محاسبه می شود: بر این اساس، یک جهش شدید در خطای مشتق وجود دارد که ما آن را در محاسبه می کنیم. این خط کد:


D = (خطا - lastError) / dt;

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


فکر می‌کنم زمان ساخت نمودارهای فرآیند انتقال فرا رسیده است: عمل گام‌به‌گام از S(t) = 0 تا SP(t) = 90 درجه برای بدنی با وزن 1 کیلوگرم، طول بازوی نیرویی 1 متر و مرحله شبکه تمایز 0.02 ثانیه - درست مانند مثال ما در Unity3D (در واقع، نه به طور کامل؛ هنگام ساخت این نمودارها، در نظر گرفته نشد که ممان اینرسی به هندسه جسم جامد بستگی دارد، بنابراین فرآیند گذرا کمی خواهد بود. متفاوت است، اما هنوز به اندازه کافی برای نمایش مشابه است). تمام مقادیر موجود در نمودار در مقادیر مطلق آورده شده است:


هوم، اینجا چه خبر است؟ پاسخ کنترل کننده PID کجا رفت؟


تبریک می گویم، ما به تازگی با پدیده ای به عنوان "لگد" مواجه شده ایم. بدیهی است، در زمانی که فرآیند هنوز PV = 0 است، و نقطه تنظیم از قبل SP = 90 است، آنگاه با تمایز عددی یک مقدار مشتق از مرتبه 4500 به دست می‌آوریم که در ضرب می‌شود. Kd=0.2و با یک تروم متناسب جمع کنید، به طوری که در خروجی یک مقدار شتاب زاویه ای 990 به دست می آوریم، و این در حال حاضر یک خشم کامل در مدل فیزیکی Unity3D است (سرعت های زاویه ای به 18000 درجه بر ثانیه می رسد... من فکر می کنم این مقدار محدود کننده سرعت زاویه ای برای RigidBody2D).


  • شاید ارزش آن را داشته باشد که ضرایب را به صورت دستی انتخاب کنید تا پرش چندان قوی نباشد؟
  • نه! بهترین چیزی که در این راه می توانیم به دست آوریم، دامنه کوچک پرش مشتق است، اما خود پرش همان طور که بوده باقی می ماند و در این صورت مولفه دیفرانسیل می تواند کاملاً بی اثر شود.

با این حال، می توانید آزمایش کنید.

تلاش شماره دو اشباع

منطقی است که واحد درایو(در مورد ما، موتورهای مانور مجازی Spaceship)، نمی توانند مقادیر زیادی را که تنظیم کننده دیوانه ما می تواند تولید کند، کنترل کند. بنابراین اولین کاری که انجام خواهیم داد این است که خروجی رگولاتور را اشباع کنیم:


عمومی float ControlRotate(Vector2 rotate، float thrust) ( float CO = 0f; float MV = 0f; float dt = Time.fixedDeltaTime؛ //محاسبه خطای float angleError = Mathf.DeltaAngle(_myTransform., target.eu); / شتاب اصلاحی CO = _angleController. Update(angleError, dt) را دریافت می کنیم؛ //اشباع MV = CO؛ اگر (MV > thrust) MV = رانش؛ اگر (MV)< -thrust) MV = -thrust; return MV; }

و یک بار دیگر کلاس Ship بازنویسی شده به این صورت است:

فضای نام Assets.Scripts.SpaceShooter.Bodies ( کلاس عمومی Ship: BaseBody ( عمومی GameObject _flame; public Vector2 _movement = new Vector2(); public Vector2 _target = new Vector2(); public float _targetAngle = 0f; public float _angle = 0f; float _thrust = 1f؛ public SimplePID _angleController = SimplePID جدید(0.1f,0f,0.05f)؛ public void FixedUpdate() ( _torque = ControlRotate(_targetAngle, _thrust); _force = ControlForce(_movement); _rb2d.Ad. _rb2d.Add. eulerAngles .z، targetAngle؛ //دریافت شتاب اصلاحی CO = _angleController.Update(angleError, dt)؛ //اشباع MV = CO؛ اگر (MV > thrust) MV = رانش؛ اگر (MV)< -thrust) MV = -thrust; return MV; } public Vector2 ControlForce(Vector2 movement) { Vector2 MV = new Vector2(); if (movement != Vector2.zero) { if (_flame != null) { _flame.SetActive(true); } } else { if (_flame != null) { _flame.SetActive(false); } } MV = movement * _thrust; return MV; } public void Update() { } } }


طرح نهایی اسلحه های خودکششی ما به این صورت خواهد بود


در همان زمان، مشخص می شود که خروجی کنترلر CO(t)کمی متفاوت از متغیر کنترل شده فرآیند است MV(t).


در واقع، از این مکان می توانید یک موجودیت بازی جدید اضافه کنید - واحد درایو، که از طریق آن فرآیند کنترل می شود، منطق آن می تواند پیچیده تر از Mathf.Clamp () باشد، به عنوان مثال، می توانید گسسته سازی مقادیر را معرفی کنید (به طوری که فیزیک بازی را با مقادیر وارده بارگذاری نکنید. در ششم بعد از نقطه اعشار)، یک منطقه مرده (دوباره، نه منطقی است که فیزیک را با واکنش های بسیار کوچک اضافه کنیم)، یک تاخیر در کنترل و غیرخطی بودن (مثلاً یک سیگموئید) درایو وارد کنید، و سپس ببینید آنچه از آن می آید


پس از راه اندازی بازی، متوجه خواهیم شد که سفینه فضایی در نهایت قابل کنترل شده است:



اگر نمودار بسازید، می بینید که پاسخ کنترلر به این صورت است:


در اینجا، مقادیر نرمال شده قبلاً استفاده شده است، زاویه ها با مقدار SP تقسیم می شوند و خروجی کنترلر نسبت به حداکثر مقداری که در آن اشباع قبلاً رخ می دهد، نرمال می شود.

در زیر یک جدول شناخته شده از اثر افزایش پارامترهای کنترل کننده PID ( چگونه می توانم فونت را کوچکتر کنم، در غیر این صورت جدول خط خطی مرنگ جا نمی شود؟):



و الگوریتم کلی برای تنظیم دستی کنترلر PID به شرح زیر است:


  1. ضرایب متناسب را با پیوندهای دیفرانسیل و انتگرال خاموش انتخاب می کنیم تا زمانی که نوسانات خود شروع شود.
  2. با افزایش تدریجی مولفه دیفرانسیل از شر نوسانات خود خلاص می شویم
  3. اگر یک خطای کنترل باقی مانده (جابجایی) وجود داشته باشد، با استفاده از جزء انتگرال آن را حذف می کنیم.

هیچ مقدار کلی برای پارامترهای کنترل کننده PID وجود ندارد: مقادیر خاص فقط به پارامترهای فرآیند (ویژگی انتقال آن) بستگی دارد: یک کنترل کننده PID که به خوبی با یک شی کنترلی کار می کند با دیگری کار نمی کند. علاوه بر این، ضرایب برای اجزای متناسب، انتگرال و دیفرانسیل نیز به یکدیگر وابسته هستند.


تلاش شماره سه یک بار دیگر مشتقات

با وصل کردن یک عصا به شکل محدود کردن مقادیر خروجی کنترلر، ما هنوز مهمترین مشکل کنترلر خود را حل نکردیم - وقتی خطا در ورودی کنترلر به تدریج تغییر می کند، جزء دیفرانسیل خوب عمل نمی کند. در واقع، بسیاری از عصاهای زیر بغل دیگر وجود دارند، به عنوان مثال، در لحظه تغییر ناگهانی در SP، قطعه دیفرانسیل را "خاموش" کنید یا فیلترهای پایین گذر را بین آنها نصب کنید. SP(t)و عملیاتی که به دلیل آن خطا به تدریج افزایش می یابد یا می توانید کاملاً بچرخید و از یک فیلتر کالمن واقعی برای صاف کردن داده های ورودی استفاده کنید. به طور کلی، بسیاری از عصا وجود دارد، و اضافه کنید مشاهده کنندهالبته من دوست دارم، اما این بار نه.


بنابراین، اجازه دهید به مشتق خطای عدم تطابق برگردیم و به دقت به آن نگاه کنیم:



متوجه چیزی شدی؟ اگر دقت کنید، متوجه خواهید شد که به طور کلی، SP(t) در طول زمان تغییر نمی کند (به جز لحظات تغییر مرحله زمانی که کنترلر یک فرمان جدید دریافت می کند). مشتق آن صفر است:





به عبارت دیگر، به جای یک خطای مشتق که قابل تمایز است نه همه جامی توانیم از مشتق یک فرآیند استفاده کنیم که در دنیای مکانیک کلاسیک معمولاً در همه جا پیوسته و متمایز است و نمودار سیستم کنترل خودکار ما قبلاً به شکل زیر خواهد بود:




بیایید کد کنترلر را اصلاح کنیم:


با استفاده از سیستم؛ با استفاده از System.Collections.Generic; با استفاده از System.Linq؛ با استفاده از System.Text. فضای نام Assets.Scripts.Regulator ( کلاس عمومی SimplePID ( شناور عمومی Kp, Ki, Kd؛ شناور خصوصی P, I, D؛ شناور خصوصی lastPV = 0f؛ عمومی SimplePID() ( Kp = 1f؛ Ki = 0f؛ Kd = 0.2f . خطا؛ I += خطا * dt؛ D = -(PV - آخرین PV) / dt؛ آخرین PV = PV؛ شناور CO = Kp * P + Ki * I + Kd * D؛ بازگشت CO؛ )))

و اجازه دهید روش ControlRotate را کمی تغییر دهیم:


عمومی float ControlRotate(Vector2 rotate، float thrust) ( float CO = 0f; float MV = 0f; float dt = Time.fixedDeltaTime؛ //محاسبه خطای float angleError = Mathf.DeltaAngle(_myTransform., target.eu); / شتاب اصلاحی CO = _angleController.Update(angleError, _myTransform.eulerAngles.z, dt) را دریافت می کنیم؛ //اشباع MV = CO؛ اگر (CO >< -thrust) MV = -thrust; return MV; }

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


پرش CO(t)هنوز وجود دارد، اما دیگر به بزرگی همان ابتدا نیست و مهمتر از همه، قابل پیش بینی شده است، زیرا منحصراً توسط مؤلفه متناسب ارائه می شود و با حداکثر خطای عدم تطابق ممکن و بهره متناسب کنترل کننده PID محدود می شود (و این قبلاً نشان می دهد که Kpمنطقی است که کمتر از واحد را انتخاب کنید، به عنوان مثال، 1/90f، اما به مرحله شبکه تمایز بستگی ندارد (یعنی. dt). به طور کلی، من قویاً توصیه می کنم از مشتق فرآیند به جای خطا استفاده کنید.


فکر می کنم اکنون هیچ کس را شگفت زده نخواهد کرد، اما به همان ترتیبی که می توانید آن را با آن جایگزین کنید، اما ما در این مورد نمی مانیم، می توانید خودتان آزمایش کنید و در نظرات بگویید که چه چیزی از آن بیرون آمد (جالب ترین)

تلاش شماره چهار پیاده سازی های جایگزین کنترل کننده PID

علاوه بر نمایش ایده آل کنترل کننده PID که در بالا توضیح داده شد، در عمل اغلب از فرم استاندارد بدون ضرایب استفاده می شود. کیو Kd، به جای آن از ثابت های موقت استفاده می شود.


این رویکرد به این دلیل است که تعدادی از تکنیک ها برای تنظیم کنترلر PID بر اساس ویژگی های فرکانس کنترل کننده PID و فرآیند است. در واقع، کل TAU حول ویژگی‌های فرکانس فرآیندها می‌چرخد، بنابراین برای کسانی که می‌خواهند عمیق‌تر بروند و ناگهان با نام‌گذاری جایگزین مواجه شوند، مثالی از به اصطلاح را ارائه می‌دهم. فرم استانداردکنترل کننده PID:




که در آن ثابت تمایز است که بر پیش بینی وضعیت سیستم توسط تنظیم کننده تأثیر می گذارد،
- ثابت ادغام، که بر فاصله میانگین خطا توسط پیوند انتگرال تأثیر می گذارد.


اصول اولیه برای تنظیم یک کنترلر PID به شکل استاندارد شبیه به کنترل کننده PID ایده آل است:

  • افزایش ضریب متناسب باعث افزایش عملکرد و کاهش حاشیه پایداری می شود.
  • با کاهش مولفه انتگرال، خطای کنترل با گذشت زمان سریعتر کاهش می یابد.
  • کاهش ثابت ادغام حاشیه پایداری را کاهش می دهد.
  • افزایش در مولفه دیفرانسیل، حاشیه پایداری و عملکرد را افزایش می دهد

کد منبع فرم استاندارد را می توان در زیر اسپویلر یافت

فضای نام Assets.Scripts.Regulator ( کلاس عمومی StandartPID ( شناور عمومی Kp, Ti, Td؛ خطای شناور عمومی, CO؛ شناور عمومی P, I, D؛ شناور خصوصی lastPV = 0f؛ عمومی StandartPID() (Kp = 0.1f؛ Ti = 10000f؛ Td = 0.5f؛ بایاس = 0f؛ ) عمومی StandardPID(شناور Kp، شناور Ti، شناور Td) (این.Kp = Kp؛ این.Ti = Ti؛ این.Td = Td؛ ) به روز رسانی شناور عمومی (شناور) خطا، float PV، float dt) ( this.error = خطا؛ P = خطا؛ I += (1 / Ti) * خطا * dt؛ D = -Td * (PV - آخرین PV) / dt؛ CO = Kp * ( P + I + D)؛ آخرین PV = PV؛ CO بازگشت؛ )))

مقادیر پیش فرض Kp = 0.01، Ti = 10000، Td = 0.5 هستند - با این مقادیر کشتی بسیار سریع می چرخد ​​و حاشیه پایداری خاصی دارد.


علاوه بر این فرم از کنترلر PID، به اصطلاح فرم مکرر:



ما در مورد آن صحبت نمی کنیم، زیرا ... در درجه اول برای برنامه نویسان سخت افزاری که با FPGA ها و میکروکنترلرها کار می کنند مرتبط است، جایی که چنین پیاده سازی بسیار راحت تر و کارآمدتر است. در مورد ما - بیایید چیزی به انبوه های Unity3D بدهیم - این فقط اجرای دیگری از یک کنترلر PID است که بهتر از سایرین نیست و حتی کمتر قابل درک است، بنابراین بیایید یک بار دیگر از اینکه چقدر خوب است که در سی شارپ دنج برنامه ریزی کنیم خوشحال باشیم. و نه در VHDL وحشتناک و وحشتناک، برای مثال.

به جای نتیجه گیری کجا دیگری یک کنترلر PID اضافه می کنید؟

اکنون بیایید با استفاده از کنترل دو حلقه ای کنترل کشتی را کمی پیچیده کنیم: یک کنترلر PID که قبلاً برای ما آشنا بود _angleController، هنوز مسئول موقعیت یابی زاویه ای است، اما دومی - جدید، _angularVelocityController - سرعت چرخش را کنترل می کند:


عمومی float ControlRotate (float targetAngle، float thrust) ( float CO = 0f; float MV = 0f; float dt = Time.fixedDeltaTime; _angle = _myTransform.eulerAngles.z؛ //کنترل کننده زاویه چرخش. float angleDangle,Anglef targetAngle)؛ float torqueCorrectionForAngle = _angleController.Update(angleError, _angle, dt)؛ //Speed'stabbilization controller float angularVelocityError = -_rb2d.angularVelocity؛ float torqueCorrection.CorrectionForAngularAngulareVelocity. -angularVelocityError، dt)؛ //Total خروجی کنترلر CO = torqueCorrectionForAngle + torqueCorrectionForAngularVelocity؛ //نمونه در مراحل 100 CO = Mathf.Round(100f *CO) / 100f؛ //اشباع MV = CO؛ اگر (CO > رانش) MV = رانش؛ اگر (CO)< -thrust) MV = -thrust; return MV; }

هدف تنظیم کننده دوم کاهش سرعت های زاویه ای اضافی با تغییر گشتاور است - این شبیه وجود اصطکاک زاویه ای است که هنگام ایجاد جسم بازی خاموش کردیم. چنین طرح کنترلی [احتمالا] به دست آوردن رفتار پایدارتر کشتی را ممکن می‌سازد، و حتی با ضرایب کنترل تناسبی کنار می‌آید - تنظیم‌کننده دوم تمام نوسانات را کاهش می‌دهد و عملکردی شبیه به جزء دیفرانسیل تنظیم‌کننده اول را انجام می‌دهد. .


علاوه بر این، ما یک کلاس ورودی بازیکن جدید اضافه می کنیم - PlayerInputCorvette، که در آن چرخش ها با فشار دادن کلیدهای راست-چپ انجام می شود، و ما تعیین هدف را با ماوس برای چیز مفیدتر، به عنوان مثال، برای کنترل برجک ترک می کنیم. . در همان زمان، ما اکنون پارامتری به عنوان _turnRate داریم - که مسئول سرعت/پاسخگویی چرخش است (مشخص نیست که بهتر است آن را در کجای InputCONtroller قرار دهیم یا ثابت ارسال کنیم).


کلاس عمومی PlayerCorvetteInput: BaseInputController ( عمومی float _turnSpeed ​​= 90f؛ رد عمومی void ControlRotate() (// نشانگر ماوس را بیابید Vector3 worldPos = Input.mousePosition؛ worldPos = Camera.main.ScreenToWorldPoints); مختصات نشانگر ماوس float dx = -this.transform.position.x + worldPos.x؛ float dy = -this.transform.position.y + worldPos.y؛ //عبور جهت نشانگر ماوس Vector2 target = new Vector2( dx، dy)؛ _agentBody. _target = target؛ //محاسبه چرخش مطابق با زدن کلید _agentBody._rotation -= Input.GetAxis("Horizontal") * _turnSpeed ​​* Time.deltaTime؛ ) override public void ControlForce() (//Pass move _agentBody._movement = ورودی .GetAxis("عمودی") * Vector2.up; ) )

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

فضای نام Assets.Scripts.SpaceShooter.UI ( کلاس عمومی Debugger: MonoBehaviour ( Ship _ship; BaseInputController _controller; List _pids = لیست جدید ()؛ فهرست کنید _names = لیست جدید ()؛ Vector2 _orientation = new Vector2(); // از این برای مقداردهی اولیه void Start() استفاده کنید ( _ship = GetComponent ()؛ _controller = GetComponent ()؛ _pids.Add(_ship._angleController); _names.Add("کنترل کننده زاویه"); _pids.Add(_ship._angularVelocityController); _names.Add("کنترل کننده سرعت زاویه ای"); ) // به روز رسانی یک بار در هر فریم نامیده می شود void Update() ( DrawDebug(); ) Vector3 GetDiretion(eSpriteRotation spriteRotation) ( سوئیچ (_controller._spriteOrientation) ( case eSpriteRotation.Rigth: return transform.right؛ case eSpriteRotation. .up؛ case eSpriteRotation.Left: return -transform.right؛ case eSpriteRotation.Down: return -transform.up; ) return Vector3.zero; ) void DrawDebug() (//جهت چرخش Vector3 vectorToTarget = transform.position + 5f * new Vector3(-Mathf.Sin(_ship._targetAngle * Mathf.Deg2Rad)، Mathf.Cos(_ship._targetAngle * Mathf.Deg2Rad)، 0f); // جهت فعلی Vector3 heading = transform.position + 4f * GetDiretion(_controller. _spriteOrientation)؛ //شتاب زاویه ای Vector3 torque = heading - transform.right * _ship._Torque؛ Debug.DrawLine(transform.position, vectorToTarget, Color.white)؛ Debug.DrawLine(transform.position, heading, Color.green); Debug.DrawLine (هدینگ، گشتاور، Color.red)؛ ) void OnGUI() ( float x0 = 10; شناور y0 = 100; float dx = 200; float dy = 40; float SliderKpMax = 1; float SliderKpMin = 0; float SliderKiMax = 0.5f; float SliderKiMin = -.5f; float SliderKdMax = 0.5f; float SliderKdMin = 0; int i = 0; foreach (SimplePID pid در _pids) ( y0 += 2 * dy; GUI.Box(new Rect(25 + x0, 5 + y0, dx, dy), ""); pid.Kp = GUI.HorizontalSlider(new Rect( 25 + x0، 5 + y0، 200، 10)، pid.Kp، SliderKpMin، SliderKpMax؛ pid.Ki = GUI.HorizontalSlider(جدید Rect(25 + x0، 20 + y0، 200، 10)، pid.Ki، SliderKiMin، SliderKiMax؛ pid.Kd = GUI.HorizontalSlider(جدید Rect(25 + x0، 35 + y0، 200، 10)، pid.Kd، SliderKdMin، SliderKdMax؛ سبک GUIStyle1 = سبک جدید =1.ign)؛ TextAnchor.MiddleRight؛ style1.fontStyle = FontStyle.Bold؛ style1.normal.textColor = Color.yellow؛ style1.fontSize = 9؛ GUI.Label(new Rect(0 + x0, 5 + y0, 20, 10), "Kp "، style1)؛ GUI.Label(new Rect(0 + x0, 20 + y0, 20, 10), "Ki", ​​style1); GUI.Label(new Rect(0 + x0, 35 + y0, 20 , 10 ), "Kd"، style1)؛ GUIStyle style2 = new GUIStyle(); style2.alignment = TextAnchor.MiddleLeft؛ style2.fontStyle = FontStyle.Bold؛ style2.normal.textColor = Color.yellow؛ style2.fontSize = 9 ؛ GUI .TextField(new Rect(235 + x0, 5 + y0, 60, 10), pid.Kp.ToString(), style2); GUI.TextField(جدید Rect(235 + x0، 20 + y0، 60، 10)، pid. Ki.ToString(), style2); GUI.TextField(new Rect(235 + x0, 35 + y0, 60, 10), pid.Kd.ToString(), style2); GUI.Label(new Rect(0 + x0, -8 + y0, 200, 10), _names, style2); )))))


کلاس Ship نیز دچار جهش های برگشت ناپذیر شده است و اکنون باید به شکل زیر باشد:

فضای نام Assets.Scripts.SpaceShooter.Bodies ( کلاس عمومی Ship: BaseBody ( عمومی GameObject _flame; public Vector2 _movement = new Vector2(); public Vector2 _target = new Vector2(); public float _targetAngle = 0f; public float _angle = 0f; float _thrust = 1f؛ عمومی SimplePID _angleController = SimplePID جدید (0.1f,0f,0.05f)؛ عمومی SimplePID _angularVelocityController = SimplePID جدید(0f,0f,0f)؛ شناور خصوصی _تورک = 0f؛ شناور عمومی بازگشت _گشتاور ) ) خصوصی Vector2 _force = new Vector2(); public Vector2 _Force ( get ( return _force; ) ) public void FixedUpdate() ( _torque = ControlRotate(_targetAngle, _thrust); _force = ControlForce(_movement, _thrust); _rb2d.AdT(AdT) _گشتاور)؛ _rb2d.AddRelativeForce(_force)؛ ) float عمومی ControlRotate(float targetAngle، float thrust) (float CO = 0f؛ float MV = 0f؛ float dt = Time.fixedDeltaTime؛ _angle = _lerA/Control.ler.z. زاویه چرخش float angleError = Mathf.DeltaAngle(_angle, targetAngle); float torqueCorrectionForAngle = _angleController.Update(angleError, _angle, dt); // کنترل کننده تثبیت سرعت شناور angularVelocityError = -_rb2d.angularVelocity; float torqueCorrectionForAngularVelocity = _angularVelocityController.Update(angularVelocityError, -angularVelocityError, dt); //کل خروجی کنترلر CO = torqueCorrectionForAngle + torqueCorrectionForAngularVelocity; //گسسته کردن در مراحل 100 CO = Mathf.Round(100f * CO) / 100f; //اشباع MV = CO; اگر (CO > thrust) MV = thrust; اگر (CO< -thrust) MV = -thrust; return MV; } public Vector2 ControlForce(Vector2 movement, float thrust) { Vector2 MV = new Vector2(); if (movement != Vector2.zero) { if (_flame != null) { _flame.SetActive(true); } } else { if (_flame != null) { _flame.SetActive(false); } } MV = movement * thrust; return MV; } public void Update() { } } }

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

راه اندازی رگولاتورها

روابط بین شاخص های کیفیت

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

; t p = ; ; M =

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

سیگنال ورودی برای کنترلرهای آنالوگ مقدار خطای کنترل است که به عنوان تفاوت بین مقادیر تنظیم شده و فعلی پارامتر کنترل شده (e = x - y) تعریف می شود. سیگنال خروجی مقدار عمل کنترلی است که به شیء کنترلی ارائه می شود. تبدیل سیگنال ورودی به سیگنال خروجی طبق قوانین کنترل استاندارد که در زیر مورد بحث قرار گرفته است انجام می شود.

1) P-قانون(مقررات تناسبی) . طبق قانون کنترل تناسبی، عمل کنترل باید متناسب با بزرگی خطا باشد. به عنوان مثال، اگر پارامتر کنترل شده شروع به انحراف از مقدار تنظیم شده کند، در این صورت تاثیر بر جسم باید در جهت مربوطه افزایش یابد. ضریب تناسب اغلب با K1 نشان داده می شود:

سپس تابع انتقال P-regulator شکل می گیرد

W P (s) = K 1.

اگر مقدار خطا به عنوان مثال یک برابر شود، عمل کنترل برابر با K 1 می شود (شکل 1.52 را ببینید).


شکل 1.52

نمونه ای از سیستم با تنظیم کننده P، سیستمی برای پر کردن خودکار یک ظرف (فلاش تانک) است. شکل 1.53 نشان می دهد:

مجموعه L و L - سطح فعلی در مخزن (مقدار قابل تنظیم) و مقدار تنظیم شده آن،

جریان F و تخلیه F - نرخ جریان مایع در داخل و خارج از ظرف.

عمل کنترل F ex. F تخلیه - اختلال است.

اصل کار از شکل مشخص است: هنگامی که ظرف خالی است، شناور دریچه تامین مایع را از طریق براکت باز می کند. علاوه بر این، هرچه اختلاف سطوح e = L back - L بیشتر باشد، شناور کمتر، دریچه بازتر و بر این اساس، جریان مایع F به داخل بیشتر می شود. با پر شدن ظرف، خطا به صفر کاهش می یابد و بر این اساس، F در کاهش می یابد تا زمانی که عرضه به طور کامل متوقف شود. یعنی F pr = K 1. (L پشت - L).

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

2) قانون من(تنظیم یکپارچه) . عمل کنترل متناسب با انتگرال خطا است. یعنی هر چه انحراف پارامتر کنترل شده از مقدار تنظیم شده بیشتر باشد، عمل کنترل بیشتر است:


.

عملکرد انتقال I-regulator:

هنگامی که یک خطا رخ می دهد، عمل کنترل شروع به افزایش با نرخی متناسب با بزرگی خطا می کند. به عنوان مثال، زمانی که e = 1، سرعت برابر با K 0 خواهد بود (شکل 1.54 را ببینید).


شکل 1.54

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

3) قانون D(تنظیم دیفرانسیل) . تنظیم با توجه به نرخ تغییر متغیر کنترل شده انجام می شود:

یعنی با انحراف سریع متغیر کنترل، عمل کنترل در بزرگی بیشتر خواهد بود. وقتی کند - کمتر. عملکرد انتقال رگولاتور D:

W D (s) = K 2 s.

کنترل کننده تنها زمانی اقدام کنترلی را تولید می کند که متغیر کنترل شده تغییر کند. به عنوان مثال، اگر خطا به شکل یک سیگنال مرحله ای e = 1 باشد، یک پالس (تابع d) در خروجی چنین کنترل کننده ای مشاهده می شود. این نقطه ضعف آن است که منجر به عدم استفاده عملی از چنین تنظیم کننده در شکل خالص آن شده است.

در عمل، قوانین استاندارد P-، I- و D- مقررات به ندرت در شکل خالص خود استفاده می شوند. اغلب آنها در قالب کنترل کننده های PI، کنترل کننده های PD، کنترل کننده های PID و غیره ترکیب و پیاده سازی می شوند.

کنترل کننده PI(کنترل کننده متناسب-انتگرال) از دو کنترل کننده موازی تشکیل شده است: تنظیم کننده های P- و I (به شکل 1.55 مراجعه کنید). این اتصال مزایای هر دو تنظیم کننده را ترکیب می کند: سرعت و عدم وجود خطای استاتیک.

قانون تنظیم PI توسط معادله توصیف می شود

و تابع انتقال

W PI (ها) = K 1 + .

یعنی تنظیم کننده دارای دو پارامتر (تنظیمات) مستقل است: K 0 - ضریب قسمت جدایی ناپذیر و K 1 - ضریب قسمت متناسب.

هنگامی که یک خطا e = 1 رخ می دهد، عمل کنترل همانطور که در شکل 1.56 نشان داده شده است تغییر می کند.

شکل 1.56

تنظیم کننده PD(کنترل کننده مشتق متناسب) شامل کنترل کننده های P و D می باشد (شکل 1.57 را ببینید). این قانون مقررات با معادله توصیف می شود

و تابع انتقال:

W PD (s) = K 1 + K 2 s.

این رگولاتور دارای بالاترین سرعت و همچنین خطای استاتیکی است. پاسخ کنترل کننده به یک تغییر مرحله ای در خطا در شکل 1.58 نشان داده شده است.


شکل 1.58

کنترل کننده PID(کنترل کننده متناسب-انتگرال-مشتق) را می توان به عنوان اتصال سه کنترل کننده موازی در نظر گرفت (شکل 1.59 را ببینید). قانون کنترل PID با معادله توضیح داده می شود:

و تابع انتقال

W PID (ها) = K 1 + + K 2 s.

کنترلر PID بر خلاف سایرین دارای سه تنظیمات K 0، K 1 و K 2 است.

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


اگر متوجه خطایی شدید، یک متن را انتخاب کنید و Ctrl+Enter را فشار دهید
اشتراک گذاری:
پورتال ساخت و ساز - درب و دروازه.  داخلی.  فاضلاب.  مواد.  مبلمان.  اخبار