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.

[参考译文] TMS320F28P650DK:PID 控制器调优

Guru**** 2611385 points
Other Parts Discussed in Thread: POWERSUITE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1578592/tms320f28p650dk-pid-controller-tuning

器件型号:TMS320F28P650DK
主题中讨论的其他器件:powerSUITE

您好、

 

在调优转换器时、我一直在直接从“Expressions"窗口“窗口更新控制变量。 我可以这样做吗? 这可能会有任何问题吗?



我看到 DCL 用户指南第 2.4 节中有一个“动态“操作选项、但我很难理解如何进行更新。 我是否可以向 Expressions 窗口添加 SPS 变量(例如 pid1.SPS.kp)并在该窗口中更新它? 那么、如何启用更新标志并更新 PID 呢?

如果我不使用“On-the-fly"选项“选项、更新 PID 变量的正确 wat 是什么? 我每次都必须重新编译代码吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

     此处的“动态“是指在任何情况下都无法通过 CCS 窗口更改参数、这实际上是在不停止控制循环的情况下完成的。  

    是的、 使用所需的参数重新编译代码。  

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    在更新“Expressions"窗口“窗口中的 Kp、Ki 和 Kd 变量时、我按这种方式遇到了哪些问题?

    当您说“w/o stop the control loop(不停止控制循环)“时。 这是否意味着我不必终止调试会话并且可以在代码运行时更新 PID 变量? 如果是、 更新 PID 变量的过程是什么? 代码运行时在哪里更新 PID 变量的值?




  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    使用表达式窗口时、我们实际上是在不禁用中断的情况下更改值。 此处的动态 管理时序、这样环路的核心计算就不会中断或损坏、从而干扰控制环路的稳定性。

    通过 DCL_REQUEST_UPDATE、然后通过 DCL_UPDATEPID () 更新参数 的机制处理此问题 、以确保控制器不会使用部分设置的变量运行。  更新控制器参数是一项时间关键型任务、因为在从影子寄存器复制到加载调优参数时必须禁用中断。

     这就是为什么重新编译是建议、而不是使用表达式窗口来完成此操作的原因。  

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何  在代码运行期间运行 DCL_REQUEST_UPDATE 和 DCL_UPDATEPID () 函数?

    当我准备好测试 PID 变量的新值时、我在哪里更新该变量、然后如何启用 DCL_REQUEST_UPDATE 和 DCL_UPDATEPID ()。 这在实践中是如何实现的? 您实现此目标的过程是什么?

    例如、如果我要对转换器的输出应用负载阶跃、并且想要调整 Kp、观察响应、然后调整 Ki、 观察响应、那么、您实际上如何使用 SPS 和 CSS 来实现这一点?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我们不能   在编译时在代码外运行 DCL_REQUEST_UPDATE 和 DCL_updatePID ()。  必须在代码中更新变量。  代码中的所有内容。 因此,我们选择参数更改代码中的值,例如 kp,然后重新编译,加载,然后检查。 接下来为 KI 重做。

    代码就是这些行中的内容。

        // In main, link the controller to the SPS and CSS structures
        pid1.sps = &spid;
        pid1.css = &cpid;
        
        // Initial parameter setup (or use defaults)
        pid1.sps->Kp = 0.5f;
        pid1.sps->Ki = 0.1f;
        pid1.sps->Umax = 1.0f;
        pid1.sps->Umin = -1.0f;
    
        // Acknowledge the initial request to update
        DCL_REQUEST_UPDATE(&pid1);
        DCL_updatePID(&pid1);

    请注意、powerSUITE 是一个工具包、可用于进行 PID 调优并检查控制系统等  

    https://www.ti.com/tool/POWERSUITE

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    因此,我们的想法是定期更新  代码中的 DCL_REQUEST_UPDATE 和 DCL_UPDATEPID (),以查看 PID 变量的变化?

    例如、如果我想 将 KP 从 0.5 更改为 1、我会在代码中更新 KP、然后保存代码 、然后当 DCL_REQUEST_UPDATE 和 DCL_updatePID () 再次运行时、它会更新而无需重新编译工程?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    总的来说,是的想法是   在将所需的变量加载到影子变量(即)后,定期更新代码中的 DCL_REQUEST_UPDATE 和 DCL_UPDATEPID ()  pid1.sps. 

    我不清楚保存代码、但无法进行编译。 仅在代码中保存 KP 不会将数据提供给变量/ pid1.SPS 、除非重新编译并重新运行代码。

    您可以尝试的一件事是:

    • 在 CCS 中重置并重新启动代码
    • 在  DCL_REQUEST_UPDATE 处放置一个断点
    • 开始运行代码、它将在运行 DCL_request_update 之前停止
    •  在 CCS 监视表达式中更新 pid1.SPS、然后运行代码直至完成

    它可能能够为您的尝试提供服务。 这样可以避免多次重新编译 、但并不理想、因为每次停止时、您都会阻止任何可能的中断被实时处理/丢失、但如果目标更多地是检查 PID、而不是示例中的其他中断或控制 func、那么这可能有效。