medety 发表于 2025-7-12 09:39

PID问题请教。。。。。

本帖最后由 medety 于 2025-7-12 09:40 编辑

Δu(t)=K p (e(t)−e(t−1))   +    K ie(t)    +    K d ( e(t) − 2e(t−1) + e(t−2) )

其中:

Δu(t)\Delta u(t)Δu(t) 是控制量的增量(即当前控制量与前一次控制量的差值)。
e(t)e(t)e(t)、e(t−1)e(t-1)e(t−1)、e(t−2)e(t-2)e(t−2) 分别是当前、前一次和前两次的误差。
————————————————

其中微分项目,为什么是D*(当前误差- 上一次误差 *2 + 上上一次误差 )??

为什么又是当前误差减 2倍的上一次误差,又加一倍的上上一次误差?

LcwSwust 发表于 2025-7-12 10:39

增量式中的微分,其实是微分的微分,
当前微分=当前误差-上次误差;
上次微分=上次误差-上上次误差;
微分项目=D*(当前微分-上次微分)=你的式子

medety 发表于 2025-7-12 13:48

本帖最后由 medety 于 2025-7-12 15:45 编辑

LcwSwust 发表于 2025-7-12 10:39
增量式中的微分,其实是微分的微分,
当前微分=当前误差-上次误差;
上次微分=上次误差-上上次误差;


Kd (    (e(t) − e(t−1))    -   (    e(t−1))-   e(t−2))    )
---->>>
K d ( e(t) − 2e(t−1) + e(t−2) )

这样,是吧?

非常感谢~

keer_zu 发表于 2025-7-13 09:18

markdown支持数学公式很有必要
@21ic小管家

zjsx8192 发表于 2025-7-13 09:20

好像是这样的

zjk103 发表于 2025-7-13 14:49

这个你先去学懂微积分就明白了,不想学就直接用别问

LightCatcher 发表于 2025-7-13 21:21

直接用ai生成代码然后去调试最快

qinlu123 发表于 2025-7-14 09:15

这是增量式PID公式,绝对式PID好理解一些,我一般用绝对式PID几乎没用过增量式PID

medety 发表于 2025-7-14 09:25

qinlu123 发表于 2025-7-14 09:15
这是增量式PID公式,绝对式PID好理解一些,我一般用绝对式PID几乎没用过增量式PID ...

啥样子的,麻烦指导指导呢

qinlu123 发表于 2025-7-14 09:35

medety 发表于 2025-7-14 09:25
啥样子的,麻烦指导指导呢

```
struct PID_Value
{
        float Target;
        float FeedBack;
        float ErrNow,ErrLast;
        float K_P,K_I,K_D;
        float OUT_P,OUT_I,OUT_D;
        float OUT_I_MAX,OUT_I_MIN;
};
float Function_PID(struct PID_Value *PID)
{
        float Out;

        PID->ErrNow = PID->Target - PID->FeedBack;

        PID->OUT_P = PID->K_P * PID->ErrNow;
        PID->OUT_I += PID->K_I * PID->ErrNow;
        if(PID->OUT_I > PID->OUT_I_MAX)
        {
                PID->OUT_I = PID->OUT_I_MAX;
        }
        else if(PID->OUT_I < PID->OUT_I_MIN)
        {
                PID->OUT_I = PID->OUT_I_MIN;
        }
        PID->OUT_D = PID->K_D * (PID->ErrNow-PID->ErrLast);

        PID->ErrLast = PID->ErrNow;

        Out = PID->OUT_P + PID->OUT_I + PID->OUT_D;
        if(Out > PID->OUT_I_MAX)
        {
                return PID->OUT_I_MAX;
        }
        else if(Out < PID->OUT_I_MIN)
        {
                return PID->OUT_I_MIN;
        }
        else
        {
                return Out;
        }
}
```

medety 发表于 2025-7-14 10:29

qinlu123 发表于 2025-7-14 09:35


```


这个 也叫做位置式 ?

qinlu123 发表于 2025-7-14 10:41

medety 发表于 2025-7-14 10:29
这个 也叫做位置式 ?

medety 发表于 2025-7-14 15:50

qinlu123 发表于 2025-7-14 10:41


用起来啥区别

场合怎么区分用哪个?什么时候用起来一样,什么不一样‘?

qinlu123 发表于 2025-7-14 16:58

没啥区别

ColeYao 发表于 2025-7-15 10:28

本帖最后由 ColeYao 于 2025-7-16 07:47 编辑

medety 发表于 2025-7-14 15:50
用起来啥区别

场合怎么区分用哪个?什么时候用起来一样,什么不一样‘? ...
两种方式参数整定思路不一样,用增量式整定好的参数,运行位置式可能超调很大!https://bbs.21ic.com/icview-3041654-1-1.html 这个帖子里面有个PID仿真软件,可以测试各种参数时加热系统输出的温控波形,供PID参数调节参考!

GlenX 发表于 2025-7-25 18:38

我两种都经常用,没有发现有太大的区别,包括参数。
从大的DCS、到小的PLC、单片机甚至上位机脚本,都常用。
一定是对某些参数或运算的意义发生了理解偏差。

hp860629 发表于 2025-7-30 09:02

qinlu123 发表于 2025-7-14 09:15
这是增量式PID公式,绝对式PID好理解一些,我一般用绝对式PID几乎没用过增量式PID ...

两种有什么区别啊?

qinlu123 发表于 2025-7-31 07:53

hp860629 发表于 2025-7-30 09:02
两种有什么区别啊?

没区别
页: [1]
查看完整版本: PID问题请教。。。。。