[疑难问答] PID代码

[复制链接]
3569|52
 楼主| burgessmaggie 发表于 2023-11-26 20:47 | 显示全部楼层 |阅读模式
float PID_DATA1(float speed,float snum)//speed 期望速度,snum 实测速度
        {
        float incrementSpeed; //当前值
        pid.SetSpeed = speed;//设定的期望速度
        pid.err = pid.SetSpeed - snum; //偏差值= 设定的速度-实测的速度
        pid.s_error+=pid.err;//偏差积累
incrementSpeed = (pid.Kp + pid.Ki + pid.Kd)*pid.err - ( pid.Kp + 2* pid.Kd)*pid.err_next+pid.Kd*pid.err_last;//计算
pid.ActualSpeed += incrementSpeed;//实际输出值
        pid.err_last = pid.err_next;
        pid.err_next = pid.err;
                if( pid.ActualSpeed>pid.SetSpeedMAX){ pid.ActualSpeed=pid.SetSpeedMAX;}
                if( pid.ActualSpeed<-pid.SetSpeedMAX){ pid.ActualSpeed=-pid.SetSpeedMAX;}
        return pid.



float PID_DATA2(float speed,float snum)//speed 期望位置,snum 实测位置
{
float incrementSpeed; //当前值
pid.SetSpeed = speed;//设定的期望位置
pid.err = pid.SetSpeed - snum; //偏差值= 设定的位置-实测的位置
pid.s_error+=pid.err;//偏差积累
incrementSpeed = (pid.Kp + pid.Ki + pid.Kd)*pid.err - ( pid.Kp + 2* pid.Kd)*pid.err_next+pid.Kd*pid.err_last;//计算
pid.ActualSpeed = incrementSpeed;//实际输出值
pid.err_last = pid.err_next;
pid.err_next = pid.err;
if( pid.ActualSpeed>pid.SetSpeedMAX){ pid.ActualSpeed=pid.SetSpeedMAX;}
if( pid.ActualSpeed<-pid.SetSpeedMAX){ pid.ActualSpeed=-pid.SetSpeedMAX;}
return pid.ActualSpeed;ActualSpeed;
elsaflower 发表于 2023-12-5 11:29 | 显示全部楼层
在大多数情况下,一个PID回路可以控制一个单独的执行元件。
sdCAD 发表于 2023-12-5 14:33 | 显示全部楼层
常用的控制算法,广泛应用于工业过程控制和机器人等领域
janewood 发表于 2023-12-5 16:43 | 显示全部楼层
PID算法有多种实现方式,如标准PID算法、增量式PID算法、微分先行PID算法等。
modesty3jonah 发表于 2023-12-5 18:54 | 显示全部楼层
为了提高PID算法的实时性和准确性,可以采用一些优化方法,如数字滤波、增益自适应调整等。
maudlu 发表于 2023-12-5 19:11 | 显示全部楼层
PID控制器涉及到大量的数**算,因此需要保证计算精度。可以使用浮点数进行计算,并注意避免溢出等问题。
jkl21 发表于 2023-12-5 19:34 | 显示全部楼层
具有纯滞后或者纯振荡的系统中,PID控制器可能无法达到最佳的控制效果
updownq 发表于 2023-12-5 20:19 | 显示全部楼层
可以通过绘制根轨迹图或者使用劳斯判据等方法来判断系统的稳定性。
ingramward 发表于 2023-12-6 15:57 | 显示全部楼层
PID参数包括比例系数、积分时间常数和微分时间常数。这些参数需要根据实际情况进行调整,以获得最佳的控制效果。
yorkbarney 发表于 2023-12-6 16:11 | 显示全部楼层
PID控制器的稳定性是一个重要的问题
robincotton 发表于 2023-12-6 18:12 | 显示全部楼层
在实际应用中,PID控制器的计算通常是离散化的。需要注意离散化处理对控制效果的影响,并根据实际情况进行相应的调整。
loutin 发表于 2023-12-8 16:26 | 显示全部楼层
PID控制器可以通过硬件或者软件的方式来实现。
albertaabbot 发表于 2023-12-8 16:38 | 显示全部楼层
PID参数的选择需要根据控制系统的特性和要求进行调整,通常需要经过试验和调试来确定最佳参数值。
wengh2016 发表于 2023-12-8 21:14 | 显示全部楼层
ID调节的目的是减小误差,但如果系统稳定性不好,可能会导致误差越来越大。
kkzz 发表于 2023-12-9 20:21 | 显示全部楼层
需要采用合适的PID算法实现方式和硬件平台,以保证PID算法的实时性。
hearstnorman323 发表于 2023-12-9 21:19 | 显示全部楼层
PID的计算顺序应该是先计算比例项,然后计算积分项,最后计算微分项。
macpherson 发表于 2023-12-9 22:09 | 显示全部楼层
PID控制器的参数选择对控制系统的性能有很大的影响。
juliestephen 发表于 2023-12-10 17:11 | 显示全部楼层
在满足控制效果的前提下,应尽可能地优化代码的性能,以减少计算时间和降低功耗。
jackcat 发表于 2023-12-10 17:51 | 显示全部楼层
微分器部分的选择对控制系统的性能有很大的影响,需要根据控制系统的特性和要求进行选择。
yeates333 发表于 2023-12-10 18:39 | 显示全部楼层
PID控制器对参数变化和扰动具有一定的鲁棒性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

1551

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部