久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: pid程序的應(yīng)用 [打印本頁(yè)]

作者: 2068093564    時(shí)間: 2018-7-5 14:57
標(biāo)題: pid程序的應(yīng)用

typedef struct PID
{
        int  SetPoint;                         //  設(shè)定目標(biāo) Desired Value
        long SumError;                        //        誤差累計(jì)
               
        double  Proportion;     //  比例常數(shù) Proportional Const
        double  Integral;       //  積分常數(shù) Integral Const
        double  Derivative;     //  微分常數(shù) Derivative Const

        int LastError;                 //  Error[-1]
        int PrevError;          //  Error[-2]

} PID;

static PID         sPID;
static PID         *sptr = &sPID;
//=============================================================
// Function: IncPIDInit()
// Syntax: void IncPIDInit(void);
// Description: Initialization PID parameter.
// Notes:
// parameters: none
// returns: none
//=============================================================
void PID_Init(void)
{
    sptr->LastError  = 0;                        //Error[-1]
    sptr->PrevError  = 0;                        //Error[-2]
        sptr->Proportion = 0.3;                        //比例常數(shù) Proportional Const
    sptr->Integral   = 0.2;                        //3.5積分常數(shù) Integral Const
    sptr->Derivative = 0.1;                        //1.25微分常數(shù) Derivative Const
    sptr->SetPoint   = 0;
        sptr->SumError   = 0;
}

//=============================================================
// ----Function: IncPIDSetPoint()
// ------Syntax: void IncPIDSetPoint(unsigned int setpoint);
// -Description: Set PID Desired Value
// -------Notes:
// --parameters: Desired Value
// -----returns: none
//=============================================================
void PIDSetPoint(int setpoint)
{        sptr->SetPoint = setpoint;        }

int PIDGetSetpoint(void)
{        return(sptr->SetPoint);        }
//=============================================================
// ----Function: IncPIDKp()
// ------Syntax: void IncPIDKp(double dKp);
// -Description: Set PID Proportion coefficient
// -------Notes:
// --parameters: Proportion Const
// -----returns: none
//=============================================================
void PIDSetKp(double dKpp)
{        sptr->Proportion = dKpp;        }
//===================================//
// Get Proportion
//===================================//
double PIDGetKp(void)
{        return(sptr->Proportion);        }
//=============================================================
// ----Function: IncPIDKi()
// ------Syntax: void IncPIDKi(double dKi);
// -Description: Set PID Integral coefficient
// -------Notes:
// --parameters: Integral Const
// -----returns: none
//=============================================================
void PIDSetKi(double dKii)
{        sptr->Integral = dKii;        }
//===================================//
// Get Integral
//===================================//
double PIDGetKi(void)
{        return(sptr->Integral);        }
//=============================================================
// ----Function: IncPIDKd()
// ------Syntax: void IncPIDKd(double dKd);
// -Description: Set PID Derivative coefficient
// -------Notes:
// --parameters: Derivative Const
// -----returns: none
//=============================================================
void PIDSetKd(double dKdd)
{        sptr->Derivative = dKdd;        }
//===================================//
// Get Derivative
//===================================//
double PIDGetKd(void)
{        return(sptr->Derivative);        }

void Self_ConfigPID(double uiKp)
{
        double dKp;
        dKp = uiKp;
        PIDSetKp(2.45*dKp);
        PIDSetKi(3.50*dKp);
        PIDSetKd(1.25*dKp);
}

//=============================================================
// ----Function: IncPIDCalc()
// ------Syntax: int IncPIDCalc(unsigned int NextPoint);
// -Description: Increment Digital PID calculate
// -------Notes: Basic Increment Digital PID
// --parameters: Next Point
// -----returns: increase controls parameter
//=============================================================
int IncPIDCalc(int NextPoint)
{
        register int iError, iIncpid;

        iError = sptr->SetPoint - NextPoint;

        iIncpid = sptr->Proportion * iError                                //E[0]
            + sptr->Integral   * sptr->LastError        //E[-1]
            + sptr->Derivative * sptr->PrevError;        //E[-2]

        sptr->PrevError = sptr->LastError;
        sptr->LastError = iError;

        return(iIncpid);
}

//=============================================================
// ----Function: LocPIDCalc()
// ------Syntax: unsigned int locPIDCalc(unsigned int NextPoint);
// -Description: Location Digital PID calculate
// -------Notes: Basic Location Digital PID
// --parameters: Next Point
// -----returns: Location controls parameter
//=============================================================
unsigned int LocPIDCalc(int NextPoint)
{
    register int  iError,dError;
       
        iError = sptr->SetPoint - NextPoint;              // 偏差
        sptr->SumError += iError;                                        // 積分
        dError = iError - sptr->LastError;                         // 當(dāng)前微分
        sptr->LastError = iError;

        return(sptr->Proportion * iError                   // 比例項(xiàng)
           + sptr->Integral * sptr->SumError         // 積分項(xiàng)
           + sptr->Derivative * dError);
}
       
//=============================================//
//        *END*
//=============================================//









歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产视频久久 | 天天综合国产 | 99热精品在线 | 国产精品视频二区三区 | 久久国产精品一区二区 | 欧洲av一区 | 成人av片在线观看 | 免费h在线| 超碰国产在线 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 狠狠操狠狠干 | 欧美亚洲视频在线观看 | 在线日韩精品视频 | 久久精品国产99国产 | 日韩一区二区三区视频在线播放 | 国产视频不卡一区 | 美女三区| 欧美一级欧美一级在线播放 | 亚洲精久| 国产剧情一区 | 在线观看av免费 | 久草在线中文888 | 久久精品国产一区二区三区 | 羞羞的视频在线看 | 亚洲精品中文在线观看 | 精品一二三区在线观看 | 亚洲国产二区 | 国产一级在线 | 精品在线一区 | 日本午夜免费福利视频 | 69性欧美高清影院 | 国产亚洲一区在线 | 人人九九精 | 欧美伊人| 中文字幕在线剧情 | 亚洲视频www| 四色永久 | 精品国产欧美一区二区三区成人 | 亚洲狠狠爱 | 成年视频在线观看 | 中文字幕高清免费日韩视频在线 |