نحوه تحقق کنترل pid توسط میکروکنترلر

Jun 25, 2025 پیام بگذارید

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


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


ایده تحقق الگوریتم pid با میکروکنترلر چیست؟


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


1. **تعیین پارامترهای PID**:


- با توجه به ویژگی‌ها و نیازهای شی کنترل واقعی، ضریب تناسب مناسب (Kp)، زمان ادغام (Ti) و زمان تمایز (Td) را انتخاب کنید.


2. **کسب داده های حسگر**:


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


3. **مقایسه ارزش و ارزش بازخورد را تنظیم کنید**:


- مقدار تنظیم شده (مقدار دلخواه) را با مقدار بازخورد مقایسه کنید و مقدار خطا (Error) را محاسبه کنید.


4. **محاسبه PID**:


- مقدار کنترل (خروجی) طبق فرمول الگوریتم PID محاسبه می‌شود: PID=Kp * Error + Ki * ∫ Error dt + Kd * d(Error)/dt.


- Kp، Ki و Kd پارامترهای PID هستند، خطا مقدار خطا است، ∫ خطای dt بیانگر جمله انتگرال و d(Error)/dt بیانگر عبارت دیفرانسیل است.


5. **دستورالعمل محدود** (اختیاری):


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


6. **سیگنال کنترل خروجی**:


- مقدار کنترل محاسبه شده به عنوان یک سیگنال کنترلی به محرک (مثلاً موتور، شیر و غیره) خروجی می‌شود تا تنظیم و کنترل شیء کنترل را درک کند.


7. **تنظیم فرکانس کنترل**:


- با توجه به نیاز برنامه های خاص، فرکانس کنترل مناسب را برای کنترل چرخه اجرای الگوریتم تنظیم کنید.


8. **اجرای چرخه الگوریتم PID**:


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


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


اصل و گردش کار کنترل کننده PID


کنترل کننده PID از سه بخش متناسب (P)، انتگرال (I) و دیفرانسیل (D) تشکیل شده است و با پردازش خطا، انحراف و نرخ تغییر سیستم، خروجی کنترل را تولید می کند. گردش کار آن شامل مراحل زیر است:


- بدست آوردن مقادیر هدف و بازخورد

- خطا را محاسبه کنید

- خروجی کنترل را بر اساس ضریب تناسب، جمله انتگرال و جمله دیفرانسیل محاسبه کنید.

- به روز رسانی پارامترهای کنترلر

- خروجی سیگنال های کنترل

 


اجرای کد STM32


کد زیر نمونه ای برای طراحی و پیاده سازی یک کنترلر PID با استفاده از میکروکنترلر STM32 است:


```c

#include "stm32f4xx.h"

// پارامترهای کنترل کننده PID را تعریف کنید

شناور Kp=0.5; // ضریب مقیاس

شناور کی=0.2; // ضریب انتگرال

float Kd=0.1; // ضریب دیفرانسیل

// متغیرهای ذخیره سازی را تعریف کنید

نقطه تنظیم شناور=50.0; // مقدار هدف

بازخورد شناور=0.0؛ // مقدار بازخورد

خطای شناور=0.0؛ // خطا

float last_error=0.0; // آخرین خطا

انتگرال شناور=0.0; // اصطلاح انتگرال

// تابع محاسبه خروجی کنترلر PID

float pidController (float dt)

float pidController(float dt) {

// خطا را محاسبه کنید

خطا=نقطه تنظیم - بازخورد. // جمله انتگرال را محاسبه کنید.

// جمله انتگرال را محاسبه کنید

خطای انتگرال += * dt; // عبارت دیفرانسیل را محاسبه کنید

// دیفرانسیل را محاسبه کنید

مشتق شناور=(خطا - last_error) / dt; // خروجی کنترل را محاسبه کنید.

// خروجی کنترل را محاسبه کنید

خروجی شناور=Kp * خطا + Ki * انتگرال + Kd * مشتق. // خروجی کنترل را محاسبه کنید.

// آخرین خطا را به روز کنید

last_error=خطا; // آخرین خطای به روز رسانی.

last_error=خطا; خروجی برگشتی؛ // خروجی کنترل را محاسبه کنید.

}

int main (void)

{

در حالی که (1)

{

// مقدار بازخورد را دریافت کنید

// فاصله زمانی را دریافت کنید

// خروجی PID را محاسبه کنید

float dt=0.01; // 0.01 ثانیه به عنوان بازه زمانی در مثال

float control_output=pidController(dt); // خروجی سیگنال کنترل.

// خروجی سیگنال کنترل

// سیگنال کنترل را برای مدت معینی به تاخیر بیندازید

برای (int i=0; i 《 10000;i++).

}

بازگشت 0; }

}

ارسال درخواست

whatsapp

تلفن

ایمیل

پرس و جو