工具/软件:
您好、
我在 DCL_runPI_L1 中无法确定限值参数。 它是否在.asm 中具有积分器限制 (Imax、Imin) 和控制限制 (Umax、Umin)? 我不能明确地说。
最重要的是、我的应用需要积分器标志;TI PID 示例代码中对应的 lk 标志等效。
提前感谢您。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
您好、
我在 DCL_runPI_L1 中无法确定限值参数。 它是否在.asm 中具有积分器限制 (Imax、Imin) 和控制限制 (Umax、Umin)? 我不能明确地说。
最重要的是、我的应用需要积分器标志;TI PID 示例代码中对应的 lk 标志等效。
提前感谢您。
您好:
DCL_runPI_L1 是 DCL_runPI_C1/C2(串行 PI)的 CLA 版本、它没有积分器限制、只有饱和钳位。
唯一使用积分器限制的 PI 控制器是 DCL_runPI_C5。 即具有增强型抗饱和功能的并行 PI 的 C 源极。 不幸的是、我们没有 C28 会员 或 CLA 版本的代码。
但是、由于 CLA 采用 C 语法代码。 我们可以轻松将 C5 改编为 CLA。 唯一的区别是需要删除有关 CSS 和 SPS 结构的任何内容。 I.E:
// CLA source code of DCL_runPI_C5 -> parallel pi with enhanced anti-windup
static inline float32_t DCL_runPI_L6(DCL_PI_CLA *p, float32_t rk, float32_t yk)
{
float32_t v1, v5, v7, v8;
uint16_t l11, l12, l14, l17, l18, l19;
asm(" MSETFLG RNDF32=1");
v1 = rk - yk;
v5 = (v1 * p->Ki * p->i6) + p->i10;
p->i10 = v5;
v7 = (v1 * p->Kp) + v5;
v8 = (v7 > p->Umax) ? p->Umax : v7;
v8 = (v8 < p->Umin) ? p->Umin : v8;
l17 = ((v7 - v8) == 0) ? 1U : 0U;
l11 = (v5 >= p->Imax) ? 1U : 0U;
l12 = (v5 <= p->Imin) ? 1U : 0U;
l19 = (v5 > 0) ? 1U : 0U;
l14 = (v1 > 0) ? 1U : 0U;
l18 = l17 & (!(l11 | l12) | (l19 ^ l14));
p->i6 = (l18 == 0U) ? 0.0f : 1.0f;
return(v8);
}
或者、您也可以直接使用已经为 CLA (DCL_runPID_L1 和 L2) 以汇编语言编写的串行/并行 PID 控制器。
如果您有任何其他问题、请告诉我。
此致、
Sen Wang
您好、Andrew、
我可以根据 DCL 用户指南中的现有基准提供粗略估算:

根据 DCL_runPI_C6 和 DCL_runPI_L5 的大致相似情况判断 (C28 C 源代码中具有 Tustin 积分器的 PI 与 CLA C 源代码中具有 tustin 积分器的 PI)。 C5 基准测试的 CLA C 源代码变体与 DCL_runPI_C5 类似(~190 个周期)。
相比之下、CLA 实现的汇编变体更快、DCL_runPID_L1/L2 有 53 和 45 个周期。 常规 L1/L2 PIS 为 34 和 33 个周期。
因此、如果性能是一个问题、我建议在 CLA 中直接使用 PID 控制器。 (串行/并行:DCL_runPID_L1/L2)。
此致、
Sen Wang