增量式PI控制函数源代码(C语言

增量式PI控制函数源代码(C语言)

最近在做一个项目时,把一直用的PI控制的汇编算法解译成了C语言代码,发到这里,与大家共享。这个代码是在XC164CS和XC167CI上测试的。

1、PI控制器C语言程序实现:

void PI_Controller(TPI * PI, int NewInput, int * Result)

{

NewError = PI->SetValue - NewInput; //当前误差

PI->Integral = ( PI->A0 ) * NewError + ( PI->A1 ) * (PI->Error); //控制量增量

PI->Error = NewError; // Error数据更新,给下一次PI运算使用

if ( PI->Integral > PI->Limit )

{

PI->Integral = PI->Limit;

}

else if ( PI->Integral < -( PI->Limit ) )

{

PI->Integral = -( PI->Limit );

}

* Result = (PI->Integral);

}

算法的导出可以追溯到增量式PID控制的离散计算公式。

2、初始化程序

void InitPIController(TPI * Data, int Kp, int Ki, int Limit)

{

Data->SetValue = 0;

Data->A0 = Kp+Ki;

Data->A1 = -Kp;

Data->Limit = Limit;

Data->Error = 0;

}

其中,Kp是比例系数,Ki = Kp * T/Ti 是积分系数

Kp越大,比例环节的作用越明显;Ki越大,积分环节的作用越明显。

原因是:积分环节的原始模型是 1 / ( Ti * s)

从式中看出,积分作用与Ti成反比,Ti越大,积分作用越小。

但是,Ki 又和Ti成反比,所以,Ki越大,积分作用越大。

3、其中结构体类型定义

typedef struct

{

int SetValue;

int A0; /* gain proportionnal /

int A1; /*

gain integral /

int Limit; /* limit of the output -> saturation */

long int Integral;

int Error;

} TPI;

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐