PID算法,计算的是差值,是差值

本文深入探讨了PID控制器的工作原理,通过具体实例说明了如何使用PID控制器自动调节目标值与实际值之间的差值,实现系统稳定。以5V电压调节为例,展示了PID控制器如何根据误差输出PWM值,自动调整至设定值。

typedef struct
{
 float Kp;            //比例系数Proportional
 float Ki;            //积分系数Integral
 float Kd;            //微分系数Derivative
 
 float Ek;            //当前误差
 float Ek1;           //前一次误差 e(k-1)
 float Ek2;           //再前一次误差 e(k-2)
 float Sum;          //累计积分位置
}PID;
 
PID pid;

static float PID_Calc(float TargetPLoad, float PowerPresent, PID *PID)
{
	float PID_Calc;                 //位置

	PID->Ek = TargetPLoad - PowerPresent;
	
	PID->Sum += PID->Ek;             //累计误差

	PID_Calc = PID->Kp * PID->Ek + (PID->Ki * PID->Sum) + PID->Kd * (PID->Ek1 - PID->Ek);

	PID->Ek1 = PID->Ek; 

	return PID_Calc;
}
//uint32_t ActualValue,SetValue;

 

1.你想要 5v 电压,但是现在实际电压是2v.
2.这样就知道 差值 =设置5v-实际电压2v=3v

3,把3放入PID,这样PID就自动输出PWM值,自动自加到5V

 

 

这只是PID其中一个优势

 

PID控制算法是一种常用的反馈控制算法,用于控制系统的稳定性和精度,通过组合比例(Proportional)、积分(Integral)和微分(Derivative)三个部分来调节控制输出,以使系统的实际输出值尽可能接近预期的参考值[^1]。PID算法的作用具体体现在以下几个方面: ### 比例(P)环节的作用 比例环节是基于当前误差进行控制。比例系数Kp越大,系统对误差的响应越迅速,能更快地减小误差。例如在给水壶加热的例子中,刚开始温度差值’err‘很大,比例作用使得PID输出也会很大,能量转换模块给的能量输出也会很大。但如果Kp过大,系统可能会产生超调,甚至导致系统不稳定,出现振荡现象。 ### 积分(I)环节的作用 积分环节用于消除系统的稳态误差。只要存在误差,积分项就会不断累积,随着时间的增加,积分项的作用会逐渐增大,推动系统输出接近参考值。例如在一些存在摩擦力等恒定干扰的系统中,比例控制可能无法完全消除误差,而积分作用可以不断累积,最终消除这些稳态误差。不过积分作用过强可能会使系统响应变慢,甚至引起积分饱和,导致系统出现较大的超调。 ### 微分(D)环节的作用 微分环节是根据误差的变化率进行控制。当系统输出接近参考值时,误差的变化率可能会增大,微分环节会产生一个与误差变化率相反的控制作用,以抑制系统的振荡,使系统更加稳定。例如当控制量发生小范围的摆动时,D的作用就是让物理量的速度趋于0,只要物理量具有了速度,D就向相反的方向用力,尽力抑制住振荡的变化[^2]。 ### 综合作用 通过合理调整比例、积分和微分三个参数,可以使系统在响应速度、稳定性和控制精度之间取得良好的平衡。PID控制器有一个系统输出c(t)的反馈,是一个反馈控制器,通过参考值与反馈值的差“err”,输入到PID控制器,会得到一个输出,将输出作用于系统,从而实现对系统的精确控制[^3]。 ```python # 简单的PID控制器实现示例 class PID: def __init__(self, Kp, Ki, Kd): self.Kp = Kp self.Ki = Ki self.Kd = Kd self.prev_error = 0 self.integral = 0 def update(self, setpoint, current_value): error = setpoint - current_value self.integral += error derivative = error - self.prev_error output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative self.prev_error = error return output # 使用示例 pid = PID(0.5, 0.1, 0.2) setpoint = 50 current_value = 20 output = pid.update(setpoint, current_value) print(f"PID输出: {output}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值