位置式pid和增量式pid 您所在的位置:网站首页 增量式pid计算公式 位置式pid和增量式pid

位置式pid和增量式pid

2023-06-14 18:07| 来源: 网络整理| 查看: 265

位置式PID控制器和增量式PID控制器的数学模型如下所示:

位置式PID控制器的数学模型: u ( t ) = K p e ( t ) + K i ∫ 0 t e ( τ ) d τ + K d d e ( t ) d t u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt} u(t)=Kp​e(t)+Ki​∫0t​e(τ)dτ+Kd​dtde(t)​

其中, u ( t ) u(t) u(t)表示控制器的输出, e ( t ) e(t) e(t)表示期望值与实际值之间的误差, K p K_p Kp​、 K i K_i Ki​和 K d K_d Kd​分别为比例、积分和微分系数。

增量式PID控制器的数学模型: Δ u ( t ) = K p Δ e ( t ) + K i e ( t ) + K d Δ e ( t ) \Delta u(t) = K_p \Delta e(t) + K_i e(t) + K_d \Delta e(t) Δu(t)=Kp​Δe(t)+Ki​e(t)+Kd​Δe(t)

其中, Δ u ( t ) \Delta u(t) Δu(t)表示控制器输出的增量, Δ e ( t ) \Delta e(t) Δe(t)表示当前时刻和上一时刻误差的差值, K p K_p Kp​、 K i K_i Ki​和 K d K_d Kd​分别为比例、积分和微分系数。

可以看出,两种PID控制器的数学模型在形式上有所不同。位置式PID控制器是基于连续时间控制系统的数学模型,而增量式PID控制器是基于离散时间控制系统的数学模型。因此,在实际控制系统中,需要根据系统的具体要求和实现条件,选择适合的PID控制器类型。

位置式PID(Proportional-Integral-Derivative)控制器和增量式PID控制器是两种常见的PID控制器实现方式,它们的主要区别在于计算控制器输出的方法不同。

位置式PID控制器的控制器输出是由比例项、积分项和微分项的加权和计算得出。在位置式PID中,控制器输出与误差(设定值与实际值之间的差)成正比,且与误差的积分和微分也有关。位置式PID控制器的优点在于稳定性好、控制精度高,但在实际应用中,如果系统存在积分饱和、测量噪声等问题,可能会导致控制器输出的不稳定性。

增量式PID控制器的控制器输出则是由比例项、积分项和微分项的差值计算得出。在增量式PID中,控制器输出与上次的控制器输出、当前的误差和上次的误差的差值有关。相对于位置式PID,增量式PID的优点在于对系统的变化更加敏感,控制器输出的稳定性更好,同时对测量噪声等问题的容忍度也更高。

需要注意的是,由于增量式PID控制器的控制器输出是差值,因此需要在计算过程中维护上一次的控制器输出和误差,否则可能会导致计算错误。此外,在实际应用中,两种控制器的选择需要结合具体的系统特性和控制要求进行综合考虑。

位置式PID和增量式PID控制器各自适用于不同的控制场景。下面是两个例子,分别说明它们的使用场景。

位置式PID控制器的使用场景

位置式PID控制器适用于需要快速响应和精确控制的场景。比如,在电机控制中,需要控制电机的转速或位置,使其能够快速响应并准确控制,这时可以使用位置式PID控制器。又如,在温度控制中,需要控制温度的精度和稳定性,这时也可以使用位置式PID控制器。

增量式PID控制器的使用场景

增量式PID控制器适用于需要较强鲁棒性和对测量噪声较高的场景。比如,在机器人控制中,需要控制机器人的运动轨迹,这时可以使用增量式PID控制器,因为机器人在运动过程中,往往受到各种干扰,如摩擦力、惯性力等,增量式PID控制器对这些干扰有较强的鲁棒性。又如,在液位控制中,需要控制液位的高度和稳定性,这时也可以使用增量式PID控制器,因为在液位测量中,测量信号通常存在一定的噪声和波动,增量式PID控制器可以较好地抵抗这些干扰。

下面是使用C语言实现位置式PID和增量式PID控制器的示例代码。

位置式PID控制器的C语言实现示例代码: #include // 定义PID控制器参数 #define Kp 1.0 #define Ki 0.5 #define Kd 0.2 // 定义误差、误差积分和误差微分变量 double error, integral = 0.0, derivative = 0.0; // 定义设定值和实际值变量 double setpoint = 50.0, actual = 0.0; // 定义控制器输出变量 double output = 0.0; // 计算PID控制器输出 void pid_compute() { // 计算误差 error = setpoint - actual; // 计算误差积分 integral += error; // 计算误差微分 derivative = error - output; // 计算控制器输出 output = Kp * error + Ki * integral + Kd * derivative; } int main() { // 模拟实际值的变化过程 for (int i = 0; i // 计算误差 error = setpoint - actual; // 计算误差积分 integral += error; // 计算控制器输出增量 double output_increment = Kp * (error - last_error) + Ki * error + Kd * (error - 2 * last_error + output); // 计算控制器输出 output += output_increment; // 更新上一次控制器输出和误差 last_output = output; last_error = error; } int main() { // 模拟实际值的变化过程 for (int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有