跳到主要内容

PWM-FAN

1. 功能描述

PWM 风扇通过调节 PWM 占空比控制转速。占空比越高,转速越快。以最高转速 10000 rpm 的风扇为例,50% 占空比对应约 5000 rpm。

PWM 风扇通常为 4 线制,需要将风扇的 PWM 控制信号连接到板卡 PWM 输出端。MTT E300 平台通过 pwm-fan 驱动提供风扇控制能力,并可作为 Linux thermal 框架中的 cooling device 参与温度控制。

2. DTS 参数配置

修改 /linux-mthreads/arch/arm64/boot/dts/m1000/m1000-aimodule.dtsi 中对应的风扇节点参数:

DTS 风扇参数示意图

2.1 关键参数说明

参数说明
compatible风扇驱动匹配字段,使用 pwm-fan。如果客户板上没有对应风扇,可删除该字段或对应节点,使系统不加载 pwm-fan 驱动。
pwms指定风扇使用的 PWM 控制器、通道、周期和极性等信息。
cooling-levels风扇 cooling state 与 PWM 占空比等级的对应关系,取值范围为 0-255。
#cooling-cellsthermal cooling device 使用的参数个数,通常配置为 <2>
pulses-per-revolution可选参数,用于转速计数,表示风扇每转一圈产生的脉冲数;未配置时默认按 2 处理。
fan-supply可选参数,用于配置风扇供电 regulator。

2.2 转速与 PWM 等级

cooling-levels 中的值是 PWM 等级,最大值为 255。thermal 框架会根据当前 cooling state 选择对应的 PWM 等级。

如果板级配置中同时维护转速表和 PWM 表,可按如下关系理解:

speed-rpm-table = (1 - speed-pwm-table / 256) * 最大转速

以最大转速 10000 rpm 为例,PWM 占空比约 50% 时,对应转速约 5000 rpm。

3. Entry Table 配置

打开 m1000-entry-table-tool/product/table 中对应板子的 xlsx 文件:

entry table 风扇参数示意图

其中:

字段说明
fan_pwm_duty风扇 PWM 占空比配置。
fan_pwm_freq风扇 PWM 频率配置。

对于 M2014 等板卡,风扇控制信号为 5 V,PWM 频率建议配置在 25 kHz-30 kHz 范围内,以避免噪音问题。

4. 温度控制

通过 thermal zone 中的 cooling-map 配置,可以将不同温度阈值映射到不同的风扇级别,从而实现随温度动态调速。

DTS 温度控制示意图

例如,pvt-critical 中配置:

cooling-device = <&fan 6 6>;

表示进入该温度控制区间时,将风扇 cooling state 设置为 6。如果 state 6 对应的转速为 10000 rpm,则风扇会以 10000 rpm 运行。

5. 系统接口

5.1 查询风扇设备

pwm-fan 驱动注册到 hwmon 后,设备名称为 pwmfan。可通过以下命令查找对应的 hwmon 编号:

cat /sys/class/hwmon/hwmon*/name

如果某个节点输出为 pwmfan,例如 /sys/class/hwmon/hwmon1/name,则后续 hwmon 接口使用 /sys/class/hwmon/hwmon1/

5.2 PWM 控制接口

# 查询当前 PWM 等级,范围 0-255
cat /sys/class/hwmon/hwmon1/pwm1

# 设置 PWM 等级,范围 0-255
# 0 表示关闭风扇,255 表示最大 PWM 输出
echo 128 > /sys/class/hwmon/hwmon1/pwm1

5.3 PWM 使能模式

# 查询 PWM 使能模式
cat /sys/class/hwmon/hwmon1/pwm1_enable

# 设置 PWM 使能模式
echo 1 > /sys/class/hwmon/hwmon1/pwm1_enable

pwm1_enable 支持的取值如下:

取值说明
0关闭 PWM 风扇。
1禁用 PWM 输出,但保持风扇供电 regulator 使能。
2保持 PWM 输出和风扇供电 regulator 使能。
3禁用 PWM 输出,并关闭风扇供电 regulator。

5.4 转速查询接口

如果 DTS 中配置了风扇转速中断输入,驱动会提供 fan1_input 接口:

# 查询风扇转速,单位 rpm
cat /sys/class/hwmon/hwmon1/fan1_input

如果系统中没有 fan1_input,说明当前板级配置没有启用风扇测速输入。

5.5 Thermal cooling device 接口

风扇也会注册为 thermal cooling device,可通过 cooling device 接口查询或设置风扇状态:

# 查询 cooling device 名称
cat /sys/class/thermal/cooling_device*/type

# 查询最大风扇级别
cat /sys/class/thermal/cooling_device0/max_state

# 查询当前风扇级别
cat /sys/class/thermal/cooling_device0/cur_state

# 设置当前风扇级别
echo 6 > /sys/class/thermal/cooling_device0/cur_state

cur_state 的取值范围为 0max_state,每个 state 对应 cooling-levels 中的一个 PWM 等级。

5.6 mthreads-smi 查询

安装 mthreads-smi 工具后,也可以通过如下命令查询风扇状态:

mthreads-smi