风扇调速策略中不能单个风扇调速问题分析
更新时间: 2026/05/28
在Gitcode上查看源码问题背景
- 单板类型:NA
- 软件版本:NA
- 涉及功能:风扇调速;
- 触发条件:风扇调速只能全部风扇一个速率,不能一个风扇一个速度。
- 业务表现:预期每个风扇可以单独控制;实际风扇调速只能全部风扇一个速率,不能一个风扇一个速度。
问题复现步骤
- 使用以下命令尝试设置多个风扇不同占空比,结果四个风扇全部变为 10% 占空比:
bash
busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans bmc.kepler.Systems.Fans SetPWM a{ss}ad 0 4 10 15 20 25- 使用以下命令尝试单独设置风扇 4 为 50% 占空比,结果风扇 4 转速没有变化:
bash
busctl --user call bmc.kepler.thermal_mgmt /bmc/kepler/Systems/1/Thermal/Fans/Fan_4_010103 bmc.kepler.Systems.Fan SetFanPWM a{ss}d 0 50- 相关 SR 配置文件中风扇 PWM 配置如下:
json
"Fans_0": {
"PWMChip": "#/Chip_Fan_PWM",
"SetPWMCmd": 402657792
}关键日志信息
执行手动调速命令后,风扇转速未按预期变化,通过 mdbctl lsprop Fan_xxx 可查看对应风扇对象的实际属性以确认转速状态。
定位过程
- 确认用户使用的命令语法和参数是否正确。
- 排查是否已先将风扇切换为手动模式,因为在自动调速模式下,手动设置的转速会被自动调速策略立即覆盖,导致命令看似不生效。
- 在手动模式下,进一步区分"期望速率比"和"速率比"两个概念:期望速率比为期望 PWM 值除以支持的最大 PWM,速率比为当前转子转速值除以风扇最大转子转速值。两者并非同一概念。
- 确认转速是否达到目标值时,应通过
mdbctl lsprop Fan_xxx命令查看风扇对象的实际属性,而非依赖其他间接指标。
问题原因
风扇处于自动调速模式时,手动执行 SetFanPWM 设置的转速会立即被自动调速策略覆盖,导致单风扇调速命令不生效。
解决方案
- 执行单风扇调速前,必须先将风扇切换为手动模式,避免自动调速策略覆盖手动设置的转速。
- 确认转速是否生效时,使用
mdbctl lsprop Fan_xxx查看对应风扇对象的实际属性。 - 注意区分期望 PWM 速率比和实际转子转速比,两个指标含义不同。