標題: (分享設計)一個PID算法,有需要的可以套用 [打印本頁]

作者: 小非    時間: 2018-12-6 13:25
標題: (分享設計)一個PID算法,有需要的可以套用
#include "System_init.h"
extern int U_Set;
extern u16 CCR1_Val;

/*==========================================================================================*/
typedef struct PID {
    float SetPoint; // 設定目標Desired value
    float Proportion; // 比例常數Proportional Const
    float Integral; // 積分常數Integral Const
    float Derivative; // 微分常數Derivative Const
    float LastError; // Error[-1]   
    float PrevError; // Error[-2]
    float SumError; // Sums of Errors
} PID;
/*====================================================================================================/
PID計算部分
=====================================================================================================*/
PID   vPID={0,0.1,0.001,0.001,0,0,0};

float PIDCalc( PID *pp, float NextPoint )
{
    float dError,
    Error;
    Error = pp->SetPoint - NextPoint; // 偏差
    pp->SumError += Error; // 積分
    dError = pp->LastError - pp->PrevError; // 當前微分
    pp->PrevError = pp->LastError;
    pp->LastError = Error;

    if(pp->SumError>900)  pp->SumError=900;
    else if(pp->SumError<-900)      pp->SumError=-900;

    return (pp->Proportion * Error // 比例項
    + pp->Integral * pp->SumError // 積分項
    + pp->Derivative * dError // 微分項
    );
}

float Vol(int vSet,int v3){

    float vOut; // PID Response (Output)
    float vIn; // PID Feedback (Input)

    vPID.SetPoint = vSet; // Set PID Setpoint
    vIn = (float)v3; // Read Input
    vOut = PIDCalc ( &vPID,vIn ); // Perform PID Interation     
    return vOut;
}








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1