PID初学习

提前说说

开学到一个周之前基本也没什么,一直到这个星期好多了。看了好几天的知识,感觉有点无聊。刚好前几天学姐给我们发了平衡小车的资料,所以我就想在这几天好好玩一下,加上国庆假期,最坏情况应该也是把硬件搭建好。看了学长和网上的博客,发现平衡小车的难点在于调节P,I,D参数,这个估计我也要话一段时间吧。这个项目先看,回头问问小伙伴看看他们谁闲着,不忙的就找他们一起做了,^ —^

那么,开始吧!

PID初学习

PID 由 3 个单元组成,分别是比例(P)单元积分(I)单元微分(D)单位。在工程实践中,一般 P 是必须的,所以衍生出许多组合的PID 控制器,如 PD、PI、PID 等。

在我们的微处理器里面,因为控制器是通过软件实现其控制算法的,所以必须对模拟调节器进行离散化处理,这样它只需根据采样时刻的偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。
假定采样时间很短时(比如 10ms),可做如下处理:
1) 用一介差分代替一介微分;
2) 用累加代替积分。

在这里插入图片描述
高中的数学和高数都有讲过,当自变量分为无穷小块的时候,弧形的面积可以近似为这些无穷个长方体面积之和。

1.位置闭环控制

位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值
进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。

根据位置式离散 PID 公式

Pwm =Kp* e(k)+Ki *∑e(k)+Kd[e(k)-e(k-1)]

e(k):本次偏差
e(k-1):上一次的偏差
∑e(k):e(k)以及之前的偏差的累积和;其中 k 为 1,2,k;
Pwm 代表输出

在这里插入图片描述
C代码

int Position_PID (int Encoder,int Target)
{
	static float Bias,Pwm,Integral_bias,Last_Bias;
	Bias=Encoder-Target; //计算偏差
	Integral_bias+=Bias; //求出偏差的积分
	Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);
	Last_Bias=Bias; //保存上一次偏差
	return Pwm; //输出
}

此时我们就知道这个编码器的作用是什么了,如上图所示,编码器会不断返回数据,每次获得的测量值和偏差值进行比对。通过公式Pwm =Kp* e(k)+Ki *∑e(k)+Kd[e(k)-e(k-1)]计算,返回合适的PWM给电机,从而进行速度的控制。

参数整定

首先我们需要明确我们的控制目标,也就是满足控制系统的 3 个要求:
1 稳定性
2 快速性
3 准确性
具体的评估指标有最大超调量上升时间静差等。

例图:
在这里插入图片描述
1.最大超调量是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个
重要指标;
2.上升时间是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;
3.静差是被控量的稳定值与给定值之差,一般用于衡量系统的准确性,具体可以参考上图的解析。

P 用于提高响应速度、I 用于减小静差、D 用于抑制震荡。

一些细节:静差是在P小时出现的,当P量很大时,静差基本为0。而P值很小且I为0时,可能就会出现静差。
震荡:当P值过大时,往往会出现震荡,此时就需要调整D值来减小震荡。当P值很小时,震荡的幅度也不是很大。当然微分控制D也是有弊端的,此时响应速度会变慢。

位置控制的调节经验可以总结为:先只使用 P 控制,增大 P 系数至系统震荡
之后加入微分控制以增大阻尼,消除震荡之后再根据系统对响应和静差等的具体
要求,调节 P 和 I 参数。

1.速度闭环控制

速度闭环控制就是根据单位时间获取的脉冲数(这里使用了 M 法测速)测量
电机的速度信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。

根据增量式离散 PID 公式

Pwm +=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]

e(k):本次偏差
e(k-1):上一次的偏差
e(k-2):上上次的偏差
Pwm 代表增量输出
在我们的速度控制闭环系统里面只使用 PI 控制,因此对 PID 控制器可简化
为以下公式:

Pwm +=Kp[e(k)-e(k-1)]+Ki*e(k)

在这里插入图片描述
C代码

int Incremental_PI (int Encoder,int Target)
{
	static float Bias,Pwm,Last_bias;
	Bias=Encoder-Target; //计算偏差
	Pwm+=Velocity_KP*(Bias-Last_bias)+Velocity_KI*Bias; //增量式 PI 控制器
	Last_bias=Bias; //保存上一次偏差
	return Pwm; //增量输出
}

速度控制就是控制电机的速度,根据设定的加速度斜率,在最短时间内达到你设定的速度。位置控制就是控制电机转过多大距离(用脉冲量控制),达到位置自动停止,根据设定参数,电机自动改变速度。两种控制方式均是闭环控制,即电机尾部有编码器和伺服驱动器连接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值