標(biāo)題:
增量式PID代碼C語言實(shí)現(xiàn)實(shí)現(xiàn)代碼
[打印本頁]
作者:
jackhanhan
時(shí)間:
2019-3-17 11:00
標(biāo)題:
增量式PID代碼C語言實(shí)現(xiàn)實(shí)現(xiàn)代碼
增量式pid語言代碼,初學(xué)者可以參考下
0.png
(4.17 KB, 下載次數(shù): 31)
下載附件
2019-3-18 04:12 上傳
源程序如下:
#define _PID_C
#include "pid.h"
#include <math.h>
#define MAXOUT 1000 //輸出最大值
void IncPIDInit(void)
{
sptr = &sPID;
sptr->SetPoint = 700; //設(shè)定值
sptr->BitMove = 0; //返回結(jié)果比例
sptr->LastError = 0; //前2次誤差值
sptr->PrevError = 0; //前1次誤差值
sptr->Proportion = 3; //比例
sptr->Integral = 0; //積分
sptr->Derivative = 0; //微分
sptr->iError = 0; //當(dāng)前誤差
sptr->iIncpid=0; //增量誤差
sptr->Uk = 0; //輸出返回值
}
int IncPIDCalc(int NextPoint)
{
//當(dāng)前誤差
sptr->iError = sptr->SetPoint - NextPoint;
//增量誤差
sptr->iIncpid= sptr->Proportion * sptr->iError
- sptr->Integral * sptr->LastError
+ sptr->Derivative * sptr->PrevError;
//存儲誤差,用于下次計(jì)算
sptr->PrevError = sptr->LastError;
sptr->LastError = sptr->iError;
sptr->Uk += sptr->iIncpid;
//輸出值限幅
if ((sptr->Uk>>sptr->BitMove) >= MAXOUT)
{
sptr->Uk = MAXOUT;
}
else if((sptr->Uk>>sptr->BitMove) <= 0)
{
sptr->Uk = 0;
}
else sptr->Uk = sptr->Uk>>sptr->BitMove;
return(sptr->Uk);
}
復(fù)制代碼
#ifndef _PID_H
#ifndef _PID_H
#ifdef _PID_C
#define PID_EXT
#else
#define PID_EXT extern
#endif
typedef struct PID
{
int SetPoint;
unsigned char BitMove;
float Proportion;
float Integral;
float Derivative;
int iError;
int iIncpid;
int LastError;
int PrevError;
int Uk;
}PID,*pPID;
PID_EXT PID sPID;
PID_EXT pPID sptr;
void IncPIDInit(void);
int IncPIDCalc(int NextPoint);
#endif
復(fù)制代碼
所有資料51hei提供下載:
增量式PID代碼C語言實(shí)現(xiàn)實(shí)現(xiàn).rar
(1.19 KB, 下載次數(shù): 45)
2019-3-17 11:00 上傳
點(diǎn)擊文件名下載附件
增量式pid
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1