比例积分微分 (PID) 控制器是一种通用的反馈环控制机制, 广泛应用在工业控制系统中。 PID控制器是最常见的反馈控制器类型.
为Q15,Q31,浮点类型实现了不同的PID控制器的函数。 函数每次只操作一个样本数据,并返回一个处理结果 S
指向一个PID控制数据结构的实例. in
是输入的样本数据,函数返回输出结果。
- 算法:
y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
A0 = Kp + Ki + Kd
A1 = (-Kp ) - (2 * Kd )
A2 = Kd
- 其中
Kp
是比例常数, Ki
是积分常数, Kd
是微分常数
比例积分微分控制器
- PID控制器计算测量输出和参考输入之间的差值作为“误差”值。 控制器会通过调节控制输入,来最小化“误差”值。 比例值决定对当前误差反应的程度, 积分值根据最近累积的“误差”和做反应, 微分值对“误差”变化的速率做反应。
- 结构体实例
- PID控制器的增益A0, A1, A2 和状态变量都保存在数据结构实例中。 每个PID控制都必须定义一个单独结构体实例。 为支持的Q15,Q31和浮点这三种不同数据类型,分别提供了结构体实例的定义。
- 重置函数
- 也为不同的数据类型提供了不同的重置函数,用来清除状态.
- 初始化函数
- 为不同的数据类型提供了相关的初始化函数。 初始化函数处理以下操作:
- 根据Kp,Ki,Kd增益,初始化A0, A1, A2 增益.
- 清零状态buffer中的值.
- 结构体实例不能放进只读数据段,推荐用初始化函数处理。
- 定点行为
- 使用定点数版本的PID控制器函数时必须注意、 特别是,在每个函数中使用的累加器的溢出和饱和行为,必须考虑到。 参考特定函数的特定使用文档。
- 参数
-
[in,out] | S | 浮点PID控制结构的实例 |
[in] | in | 输入处理的样本 |
- 返回
- 输出的样本处理结果.
浮点PID控制初始化函数.
- 参数
-
[in,out] | *S | 指向一个PID结构体实例 |
[in] | resetStateFlag | 重置状态的标志位. 0 = 不改变状态; 1 = 重置状态. |
- 返回
- none.
- Description:
resetStateFlag
指定是否重置状态为0.
函数使用比例增益( Kp
), 积分增益( Ki
) 和微分增益( Kd
)计算结构体字段: A0
, A1
A2
, 并且将状态变量全部置为0.
Q15 PID控制的初始化函数
- 参数
-
[in,out] | *S | 指向一个Q15 PID结构体实例 |
[in] | resetStateFlag | 重置状态的标志位. 0 = 不改变状态;1 = 重置状态. |
- 返回
- none.
- Description:
resetStateFlag
指定是否重置状态为0.
函数使用比例增益( Kp
), 积分增益( Ki
) 和微分增益( Kd
)计算结构体字段: A0
, A1
A2
, 并且将状态变量全部置为0.
Q31 PID控制初始化函数
- 参数
-
[in,out] | *S | 指向一个Q15 PID结构体实例 |
[in] | resetStateFlag | 重置状态的标志位. 0 = 不改变状态;1 = 重置状态 |
- 返回
- none.
- Description:
resetStateFlag
指定是否重置状态为0.
函数使用比例增益( Kp
), 积分增益( Ki
) 和微分增益( Kd
)计算结构体字段: A0
, A1
A2
, 并且将状态变量全部置为0.
- 参数
-
[in,out] | S | Q15 PID控制结构的实例 |
[in] | in | 输入处理的样本 |
- 返回
- 输出的样本处理结果.
缩放和溢出时的行为:
- 函数实现中使用了一个内部的64位累加器。 增益和状态变量都是1.15格式表示,相乘的结果是2.30格式。 2.30格式的中间结果在64位累加器上累加为34.30格式。 这种方式没有内部溢出的风险,并且能保存所有的中间结果的精度。 在累加完后,累加器将低15位截断为34.15格式。 最后,累加器做饱和处理,得到1.15格式的结果。
- 参数
-
[in,out] | S | Q31 PID控制结构的实例 |
[in] | in | 输入处理的样本 |
- 返回
- 输出的样本处理结果.
缩放和溢出时的行为:
- 函数实现中使用了一个内部的64位累加器。 累加器使用2.62 格式,维护了中间乘法结果的完整精度,但是只提供了一个守护位。 因此,累加器的结果如果溢出会折回(覆盖掉符号位)。 由于总共有四个数相加,为了防止完全异常(连续溢出两个位),输入信号必须向下缩放两个位。 在所有的乘法结果相加后,2.62格式的累加器截断为1.32的格式,然后再饱和成1.31的格式。
- 参数
-
- 返回
- none.
- Description:
- 函数重置状态buffer为0
- 参数
-
- 返回
- none.
- Description:
- 函数重置状态buffer为0.
- 参数
-
- 返回
- none.
- Description:
- 函数重置状态buffer为0.