通俗理解 模糊自適應PID


模糊自適應PID算法就是在經典的PID的基礎上添加模糊控制規則庫,建立這個庫的目的就是算法能夠自己來進行改變PI、D的值。

就拿溫度的上升過程控制來說,剛開始的時候,希望溫度能夠快速的升到終點溫度,並且以盡量小的波動將溫度穩定在目標溫度處(最好不讓其超過)。此時如果利用經典的PID控制方式,那么此時的P值就是恆定不變,但是我們希望他剛開始的時候盡量大。加入規則庫,就可以實現,可以用語句

if冷 then 加大熱

當然也有:

if熱 then 加大冷

從而快速的改變溫度。

就好比我們在冬天里用冷水洗腳, 冷水 + 冷腳 = 感覺非常的冷,迫不及待想讓水快點熱,所以我們加入很熱的水,而不是加入溫水。

 

這應該是最通俗的理解了。

 

擴充PID_C程序參考如下:(還沒有驗證

 

#include <stdio.h>

/*定義PID變量結構體*/
struct _pid 
{
    float SetSpeed;//定義設定值
    float ActualSpeed;//定義實際值
    float err;//定義偏差值
    float err_last;//定義上一個偏差
    float Kp, Ki, Kd;//
    float voltage;//定義電壓值(控制執行器的變量)
    float integral;//定義積分值
};


/*初始化變量*/

void PID_init(){
    
    printf("PID_init begin \n");
    pid.SetSpeed = 0.0;
    pid.ActualSpeed = 0.0;
    pid.err = 0.0;
    pid.err_last = 0.0;
    pid.voltage = 0.0;
    pid.integral = 0.0;
    pid.Kp = 0.2;
    pid.Ki = 0.015;
    pid.Kd = 0.2;
    printf("PID_init end \n");
    
}

/*編寫編寫控制算法*/
float PID_realize(float speed){
    pid.SetSpeed = speed;
    pid.err = pid.SetSpeed - pid.ActualSpeed;
    pid.integral+=pid.err;
    pid.voltage = pid.Kp*pid.err + pid.Ki*pid.integral + pid.Kd*(pid.err-pid.err_last);
    pid.err_last = pid.err;
    pid.ActualSpeed = pid.voltage*1.0;
    return pid.ActualSpeed;
}

int main (){
    printf("System begin \n");
    PID_init();
    int count;
    while (1){
        float speed = PID_realize(200.00);
        printf("%f\n",speed);
        count++;
        
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM