闭环控制系统
输入量(目标转速)就是我们的目标值,减去检测装置传回来的实际值(编码器测得的转速),就是实际偏差。将偏差输入到控制器(STM32),运算之后控制执行机构(驱动板和电机),输出被控量。
普通的位式控制算法
特点: 1.输出信号比较单一,要么是高电压要么是低电压。 2.输出信号的依据是,如果当前值小于设定值,输出值就设定高;如果当前值不小于设定值,输出值就设定低;此算法只是当前值与实际值的简单比较。 3.只考虑控制对象当前的状态值。 **缺点:**由于控制对象纯在惯性,(执行部件控制作用到控制对象上,不会导致控制对象立马变化,而是慢慢变化的现象叫惯性),所以,当当前值大于等于设定值时,输出值设定为低,但是由于惯性,当前值还会继续增大。然后由于此时输出值为低,所以当前值又逐渐减小,当发现当前值小于设定值时,输出值设定为高,但是由于惯性,当前值还会继续减小。这样就会导致,当前值永远在设定值上下波动,而不是刚好达到设定值。
PID控制算法
PID控制算法
思想 P、I、D实际上是同时考虑了当前偏差、历史偏差、最近(当前偏差的前两三次)偏差。然后把三种偏差进行线性叠加,形成输出值。 前面的系数K,实际起到一个放大器或者衰减器。
算法分析 假设传感器每1s读取一次当前值,第i秒记为Xi,并将所有采样的数据存储起来。 那么第k秒的当前偏差为 Ek可能大于、等于、小于0。
比例控制
积分控制 我们把所有采集到的当前偏差都相加。 当Sk>0,说明过去这段时间,大多数输出是未达标的;Sk=0的几率很小,说明历史大多数输出是达标的;Sk<0,说明过去这段时间,大多数输出是超标的; 不能单纯的用I控制,它必须配合P一起来控制,主要就是为了消除P控制的稳态误差。
在输出值第一次到达目标值之前,积分控制对系统是不利的。因为,他会把历史偏差累加为一个很大的值,那么若此时当前值恰好达标,却加上了这个积分项,那么明显就把输出量给超调了,然后再通过积分控制慢慢地衰减当前值,造成当前值在设定值上下震荡一会。
微分控制
只把最近两次的偏差进行处理,预测出将来偏差的变化趋势。 不能单纯的用D控制,它必须配合P一起来控制,主要就是为了在偏差接近0时(偏差的变化趋势等于0),抑制偏差的作用就变为0。
位置式和增量式PID算法
位置式PID算法
1.T为计算周期(采样周期),也是PID算法修正输出的速率,他不能小于控制周期(PWM信号的周期)。也不能太大,太大了会造成微分控制失效。此值不是固定的,要根据不同实际情况调整。 2.Ti为积分时间,是PI共同作用的时间;此值不是固定的,要根据不同实际情况调整。输出量第一次到达目标值之前,把Ti设置的大一点,让积分控制尽量不要影响到系统;当输出量第一次到达目标值之后,积分控制的作用才体现出来。 3.Td为微分时间,是PD共同作用的时间;此值不是固定的,要根据不同实际情况调整。
增量式PID算法
Ek为当前偏差值,E(k-1)为上次偏差值…
增量式PID速度闭环代码分析
在将PID用于电机控制时,我这个PID的输入参数是编码器的数值、目标位置,我的输出PWM是个什么东西呢?这个PWM可以是-1—+1的占空比,也可以是比较寄存器的数值,例如ARR是3000,PWM这个可以是1500,代表PWM占空比50%,那有的会问,例如我的encoder是1000,target是2000,那么pid.ek = 1000,按照pid.kp = 10计算,那么pid.kp*pid.ek = 10000,也就是说这个输出pwm如果代表占空比-1–+1的话,远远大于它的范围,那是不是这个计算或者公式有问题呢?或者是不是pwm代表的意义不对呢?其实是没有关系的,因为按照计算10000大于1,PWM=1,那么完全按照占空比1运行,等到encoder=target时,pwm=0,电机就不再运动了,到达了目标位置;但是这里要提醒大家,encoder与target代表编码器数值,二者的差值肯定是整数,乘以pid.kp=10之后,肯定大于1,所以PWM始终是100%占空比,这样有可能时钟无法找到目标位置,所以pid.kp=10这个参数设置就不合理,比如设置pid.kp=0.001,则encoder与target差值如果在1000以内,PWM就可能在-1–+1之间,这样才能真正的起到调节作用,所以kp的值并不是大家随意乱设,要根据控制量的实际情况、输出值的实际意义,设定参数,脱离实际意义的盲目瞎设参数反而适得其反。 ———————————————— 版权声明:本段来自CSDN博主「苏守坤」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u014453443/article/details/100573722
增量式和位置式PID的区别
增量式与位置式区别: 1增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。
2增量式算法得出的是控制量的增量,例如在阀门控制中,只输出阀门开度的变化部分,误动作 影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。 而位置式的输出直接对应对象的输出,因此对系统影响较大。
3增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。
4在进行PID控制时,位置式PID需要有积分限幅和输出限幅,而增量式PID只需输出限幅
位置式PID优缺点: 优点: ①位置式PID是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k)的值和执行机构的实际位置(如小车当前角度)是一一对应的,因此在执行机构不带积分部件的对象中可以很好应用
缺点: ①每次输出均与过去的状态有关,计算时要对e(k)进行累加,运算工作量大。
增量式PID优缺点: 优点: ①误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。 ②手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。 ③算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关。
缺点: ①积分截断效应大,有稳态误差;
②溢出的影响大。有的被控对象用增量式则不太好; ———————————————— 版权声明:本段来自CSDN博主「Z小旋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/as480133937/article/details/89508034
PID参数整定经验
一般步骤
a.确定比例增益P 确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti->无穷大Td=0(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的最大值的60%70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值的60%70%。比例增益P调试完成。 b.确定积分时间常数Ti 比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。 c.确定微分时间常数Td 积分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。 d.系统空载、带载联调,再对PID参数进行微调,直至满足要求。
|