初学PID

部署运行你感兴趣的模型镜像

 

这是每一个人最初学到的PID等式:

然后每个人都可以写下这样的PID控制器:

/*working variables*/
unsigned long lastTime;
double Input, Output, Setpoint;
double errSum, lastErr;
double kp, ki, kd;
void Compute()
{
   /*How long since we last calculated*/
   unsigned long now = millis();
   double timeChange = (double)(now - lastTime);
  
   /*Compute all the working error variables*/
   double error = Setpoint - Input;
   errSum += (error * timeChange);
   double dErr = (error - lastErr) / timeChange;
  
   /*Compute PID Output*/
   Output = kp * error + ki * errSum + kd * dErr;
  
   /*Remember some variables for next time*/
   lastErr = error;
   lastTime = now;
}
  
void SetTunings(double Kp, double Ki, double Kd)
{
   kp = Kp;
   ki = Ki;
   kd = Kd;
}

 

Compute()被规律或无序的调用,并很好的工作。如果我们将这段代码变成标准工业PID控制器,还需要明确和解决下面这些事情:

  1. Sample Time 样本时间-  PID算法最好是能评定规律的间隔。如果算法在意这个间隔,我们可以简化内部的计算。
  2. Derivative Kick -  不是什么大问题,很容易解决,因此我们准备解决它。
  3. On-The-Fly Tuning Changes 在运调试-  一个好的PID算法是在参数调优时不打乱内部工作。
  4. Reset Windup Mitigation - 我们将跟进什么是重置终结,然后实现一个可以带来好处的方案。
  5. On/Off (Auto/Manual) 开/关(自动/手动) -  有很多程序,有时希望关闭PID控制,然后通过手动输出,没有控制器的干扰。
  6. Initialization 初始化 -  当控制器第一次启动时,我们需要优雅的转换。也就是说不希望一下突然输出一些修正值。
  7. Controller Direction 控制方向-  最后一种,不是鲁棒性名称上的修改。它设计来确保用户使用正确的信号进行参数调优。

当我们解决了这些问题,我们将拥有一个坚实的PID算法。

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

在Simulink中使用PID控制器,对于初学者而言,可按以下步骤入门: ### 1. 了解PID控制基本原理 PID控制器会根据设定点(如目标速度)与实际输出(如实际速度)之间的差值进行调整,其输出由比例(P)、积分(I)和微分(D)三个部分组成。比例项用于快速响应误差,积分项用于消除稳态误差,微分项用于预测误差的变化趋势,提前进行调整。 ### 2. 在Simulink中添加PID控制器 在Simulink中,可以使用“PID Controller”块来实现基础的PID控制策略。打开Simulink模型后,从Simulink库浏览器中找到“Continuous”库,从中拖出“PID Controller”块到模型窗口中。 ### 3. 设置PID控制器参数 PID控制器的参数需要根据实际系统的特性进行调整。例如,在控制电机时,使用如下代码设置参数: ```matlab pid控制器 = pid(20, 100, 10); % 这里是PID控制器的参数,需要根据实际电机参数进行调整 ``` 不同的系统需要不同的参数,初学者可以先参考一些经验值,然后通过仿真和实际测试进行微调。 ### 4. 构建闭环控制系统 将PID控制器与被控对象(如电机模型)相连,形成闭环控制。设定点作为PID控制器的输入之一,被控对象的实际输出反馈到PID控制器的另一个输入,PID控制器的输出作为被控对象的输入,从而实现对系统的控制。 ### 5. 实际案例学习 可以通过还原一些具体的系统来加深对PID控制器的理解。例如还原智能水箱系统:从Simscape > Fluids拖两个Tank模块,中间加个Valve模块(记得设置流量系数0.6),水泵用Controlled Flow Source(最大流量设2L/s),水位传感器连PID控制器(参数P = 2, I = 0.5, D = 0.1),最后接Scope看波形。可以使用以下代码设置PID参数: ```matlab set_param('water_tank/PID Controller','P','2'); set_param('water_tank/PID Controller','I','0.5'); set_param('water_tank/PID Controller','D','0.1'); ``` ### 6. 仿真与调试 搭建好模型并设置好参数后,进行仿真运行。观察系统的响应曲线,如输出是否能够快速、稳定地跟踪设定点,是否存在超调、振荡等问题。根据仿真结果调整PID参数,直到系统达到满意的性能。 ### 7. 深入学习与实践 随着对PID控制器的熟悉,可以进一步学习MATLAB与Simulink的高级应用,如MATLAB的高级编程技巧、脚本与函数编写等,以解决更复杂的工程问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值