动态规划java 涂色_手把手教你看懂并理解Arduino PID控制库——开启或关闭PID控制的影响...

引子

本文将分析《手把手教你看懂并理解Arduino PID控制库》中第四个问题:突然开启或者关闭PID控制对系统的影响。

问题定义

先看问题的图示:

63fcc4446e38e3f03747df99120d81fd.png

图中,蓝色的竖虚线表示在时间轴上,PID控制由开启状态转为关闭的状态。如果我们对于关闭PID采取的操作是强制设定输出为“PID由开启转关闭对应的输出值或更小或为0”。由于输出被设为定值,由于输出的“力度”不够,那么被控量会缓慢减少。但对于PID控制器来说,他会不知道PID已经关闭了,由于被控量见笑了,他就会努力增加输出,以求改变这种态势。但现实是残酷的,为何我“放肆”增加输出,被控量却没有按照我设定的方向发展。此时,若突然又将PID打开了,将会有一个极大的输出对系统作用,稳定性降低。

解决方案

上述问题,并不是一个大问题,其实在关闭PID控制的时候,仅需要退出PID计算循环,让各控制参量仍保持原样即可。if(!inAuto) return; 和 setMode函数完成了上述功能。

/*working variables*/

unsigned long lastTime;

double Input, Output, Setpoint;

double ITerm, lastInput;

double kp, ki, kd;

int SampleTime = 1000; //1 sec

double outMin, outMax;

bool inAuto = false;

#define MANUAL 0

#define AUTOMATIC 1

void Compute()

{

if(!inAuto) return;

unsigned long now = millis();

int timeChange = (now - lastTime);

if(timeChange>=SampleTime)

{

/*Compute all the working error variables*/

double error = Setpoint - Input;

ITerm+= (ki * error);

if(ITerm> outMax) ITerm= outMax;

else if(ITerm< outMin) ITerm= outMin;

double dInput = (Input - lastInput);

/*Compute PID Output*/

Output = kp * error + ITerm- kd * dInput;

if(Output > outMax) Output = outMax;

else if(Output < outMin) Output = outMin;

/*Remember some variables for next time*/

lastInput = Input;

lastTime = now;

}

}

void SetTunings(double Kp, double Ki, double Kd)

{

double SampleTimeInSec = ((double)SampleTime)/1000;

kp = Kp;

ki = Ki * SampleTimeInSec;

kd = Kd / SampleTimeInSec;

}

void SetSampleTime(int NewSampleTime)

{

if (NewSampleTime > 0)

{

double ratio = (double)NewSampleTime

/ (double)SampleTime;

ki *= ratio;

kd /= ratio;

SampleTime = (unsigned long)NewSampleTime;

}

}

void SetOutputLimits(double Min, double Max)

{

if(Min > Max) return;

outMin = Min;

outMax = Max;

if(Output > outMax) Output = outMax;

else if(Output < outMin) Output = outMin;

if(ITerm> outMax) ITerm= outMax;

else if(ITerm< outMin) ITerm= outMin;

}

void SetMode(int Mode)

{

inAuto = (Mode == AUTOMATIC);

}

结论

68195200f09afb8563589d02bfbdeaa0.png

NOTE:如有不足之处请告知。^.^

下一章将介绍如果在系统运行过程中,突然改变PID控制参数对系统的影响

PS:转载请注明出处:欧阳天华

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值