PID算法这里有两个疑问。
一个是我们社区目前使用的是哪个PID算法?客户要求的与 增量PID算法比较接近,是这个吗?
另一个是PID的参数值能否支持调整,是否只能在闭源代码进行修改。类似下图
| 曲线名称 | NVMe_X_Temp_Pid | OCP0_Temp_Pid |
|---|---|---|
| P参数(确认默认参数) | 3 | 2 |
| I参数 | 0.1 | 0.4 |
| D参数 | 0.3 | 0.3 |
PID算法这里有两个疑问。
一个是我们社区目前使用的是哪个PID算法?客户要求的与 增量PID算法比较接近,是这个吗?
另一个是PID的参数值能否支持调整,是否只能在闭源代码进行修改。类似下图
| 曲线名称 | NVMe_X_Temp_Pid | OCP0_Temp_Pid |
|---|---|---|
| P参数(确认默认参数) | 3 | 2 |
| I参数 | 0.1 | 0.4 |
| D参数 | 0.3 | 0.3 |
答案内容由AI生成,仅供参考:
| 问题 | 结论 |
|---|---|
| 当前使用哪个PID算法? | 主要使用标准PID算法。增量PID因其抗饱和、无冲击等优势被熟知,但尚未成为默认实现。 |
| PID参数(P/I/D)能否调整? | 不能通过公共接口直接调整P/I/D数值。调整需在闭源代码中完成。 |
| 有无替代方案? | 有!可通过开发自定义插件,实现一个可配置P/I/D参数的PID(如增量PID)算法,并替换现有算法。 |
根据您提供的文档和知识库内容,现就您提出的两个关于PID算法的疑问进行详细解答。
根据社区资料分析,当前thermal_mgmt组件使用的是标准PID控制算法,该算法应用于风扇转速的调节,以实现设备的温度控制。
ThresholdSensor_GPUPREDEVTemp, Cpu_Z_Temperature_Sensor等)与目标温度的偏差,动态调整风扇速度。虽然核心控制逻辑是标准PID,但社区存在对增量PID(Incremental PID) 的讨论和明确优势的阐述。
社区目前主要使用标准PID算法进行风扇调速。虽然增量PID算法在理论上具备显著优势,但现有文档和日志并未明确指出已将其替换为主流控制策略。因此,社区当前的做法与客户要求“更接近增量PID”的需求不完全一致,但具备进行此类优化的技术讨论基础。
答案是:目前不支持用户通过公共接口直接修改PID的比例(P)、积分(I)、微分(D)参数。
这一结论基于以下官方回复:
“当前不支持对PID的微分,积分、比例等参数的修改。”
—— 来自帖子 #863 的维护者
Wwhh回复
尽管不支持直接修改,但可以从以下两个层面理解其“可调整性”:
通过系统级配置,可以间接影响PID的控制行为,达到类似的优化效果:
fast-rise, slow-drop)配置不同的参数策略,这已在CSR(配置字典)中有所体现。CoolingConfig对象中通过PIDControlMode等属性来选择不同的温控策略。虽然不能修改现有PID的P/I/D值,但社区提供了替换整个调速算法的可能性。
thermal_mgmt组件中的风扇调速算法。src/lualib/basic_cooling/plugin_method_init.lua文件中实现自定义的接口,用自己的PID实现(例如,一个可调参的增量PID)来替代原有的闭源PID算法。直接修改P、I、D参数的公开接口目前不存在,且官方明确表示不支持。这些参数的调整只能在组件的内部实现层面进行,通常涉及对thermal_mgmt等闭源组件的修改。
但是,社区提供了一个开放的插件机制。如果您需要一个可配置参数的PID控制器,最可行的方案是:开发一个自定义的PID控制插件,并通过社区提供的插件接口进行替换部署。
| 问题 | 结论 |
|---|---|
| 当前使用哪个PID算法? | 主要使用标准PID算法。增量PID因其抗饱和、无冲击等优势被熟知,但尚未成为默认实现。 |
| PID参数(P/I/D)能否调整? | 不能通过公共接口直接调整P/I/D数值。调整需在闭源代码中完成。 |
| 有无替代方案? | 有!可通过开发自定义插件,实现一个可配置P/I/D参数的PID(如增量PID)算法,并替换现有算法。 |