文档库 最新最全的文档下载
当前位置:文档库 › 增量式PI控制函数源代码(C语言)

增量式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;





相关文档
相关文档 最新文档