c语言增量pi调节程序,增量式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;

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值