Proportion Integration Differentiation

本文介绍了PID控制器的基本概念,包括比例、积分、微分的作用及其参数整定方法,并提供了增量式与位置式的PID控制算法实现。

PID的概念

  • Proportion(比例)——对输入偏差乘以一个常数
    P的作用是以最快的速度达到目标值
  • Integral (积分)——对输入偏差进行积分运算
    I是使误差为0而起调和作用
  • Derivative(微分)——对输入偏差进行微分运算
    D是加快调节过程的作用

PID的分类

  • 增量式
    增量式的位置输出并不是绝对数值,而是一个△,代表增多少,减多少。
  • 位置式
    位置式PID的输出与过去的所有状态有关,计算时要对e(每一次的控制误差)进行累加。

PID参数的整定

  • 经验试凑口诀:
    参数整定找最佳, 从小到大顺序查。
    先是比例后积分, 最后再把微分加。
    曲线振荡很频繁, 比例度盘要放大。
    曲线漂浮绕大弯, 比例度盘往小扳。
    曲线偏离回复慢, 积分时间往下降。
    曲线波动周期长, 积分时间再加长。
    曲线振荡频率快, 先把微分降下来。
    动差大来波动慢, 微分时间应加长。
    理想曲线两个波, 前高后低四比一。
    一看二调多分析, 调节质量不会低。

Note:PID控制并不一定要三者都出现,也可以只是PI、PD控制,关键决定于控制的对象。

代码中理解PID

  • 定义PID结构体并进行初始化
extern PID_Type PID_steer;	//全局
typedef struct
{
	float Kp;
	float Ki;
	float Kd;
	float dst;		//目标控制位置
	float cur;		//当前控制位置
	float error_k;	//当前误差
	float error_k1;	//前一次控制误差
	float error_i;	//误差积分
	float error_k2;	//前前次控制误差(只适用于增量式PID)
}PID_Type;
PID_Type PID_steer;	//声明
void PID_INIT(PID_Type* p,float Kp,float Ki,float Kd)
{
	p->Kp = Kp;
	p->Ki = Ki;
	p->Kd = Kd;
	
	p->cur = 0;
	p->dst = 0;
	p->error_k = 0;
	p->error_k1 = 0;
	p->error_k2 = 0;
}
  • 增量式
float PID_Increment_CALC(PID_Type* p)
{
	float pid_real;
	p->error_k = p->dst - p->cur;			//当前误差																			
	pid_real = p->Kp*(p->error_k-p->error_k1) + p->Ki*p->error_k + p->Kd*(p->error_k-2*p->error_k1+p->error_k2); 
	p->error_k2 = p->error_k1;			  //前前次无控制误差																					
	p->error_k1 = p->error_k;
	return pid_real;
}
  • 位置式
float PID_Position_CALC(PID_Type* p)
{
	float pid_real;
	p->error_k = p->dst - p->cur;											//calculate the error of dest and current
	p->error_i += p->error_k;
	pid_real = p->Kp*p->error_k + p->Ki*p->error_i + p->Kd*(p->error_k-p->error_k1);
	p->error_k1 = p->error_k;
	return pid_real;
}
### 原理 PIDproportion integration differentiation)指比例、积分、微分控制。在工业机器人控制里,当得到系统的输出后,将输出经过比例、积分、微分3种运算方式,重新叠加到输入中,以此控制系统的行为,使其能精确到达指定的状态[^2]。 ### 应用 在工业机器人运动控制方面,为更好地控制机器人行走,电机控制通常使用PID算法。在伺服驱动电机控制中,PID参数自适应控制是核心技术,其能通过实时感知负载变化,自动调节PID参数,使伺服系统在不同负载下始终保持最优控制性能,包括最小超调、最短调节时间、零稳态误差等[^1][^2]。 ### 参数调整 在伺服驱动电机PID参数自适应控制中,通过实时感知负载变化来自动调节PID参数。不过一般的参数调整还可以采用试凑法等,先大致确定一组参数,然后根据系统的响应情况(如超调大小、调节时间等)逐步对比例、积分、微分参数进行微调,使系统性能达到满意的状态。 ```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 control_output = pid.update(setpoint, current_value) print(control_output) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值