如何使用 TPFanCtrl2:ThinkPad 双风扇控制的三步完整指南
【免费下载链接】TPFanCtrl2ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2
深夜敲代码,风扇毫无征兆地全速轰鸣;白天负载上来,机身发烫转速却不涨。这类"散热不听话"在 ThinkPad 上并不少见。TPFanCtrl2 是一款面向 Windows 10/11 的 ThinkPad 双风扇控制工具:它绕过系统 API,直接和 EC 对话、逐个写入两把风扇的档位,全部散热行为由程序目录里一份TPFanControl.ini决定。
定位:TPFanCtrl2 解决了什么问题
原版 TPFanControl 只带单风扇参数,双风扇机型上第二把风扇够不着。TPFanCtrl2 在原版基础上并入双风扇改造,支持两个风扇设备,默认曲线偏安静,60°C 之前风扇保持停转。它没有复杂的图形配置器,行为全由 ini 文件控制。
| 方面 | BIOS 内置策略 | TPFanCtrl2 |
|---|---|---|
| 曲线 | 写死 | Level行自由增删 |
| 双风扇 | BIOS 统一调度 | 逐把选择后分别写档位 |
| 模式 | 单一 | BIOS / Smart / Manual,外加两套曲线 |
| 可观测性 | 黑盒 | 每个传感器都标出寄存器地址,日志可回放 |
上手:TPFanCtrl2 安装步骤与首次运行
- 拿程序:执行
git clone https://gitcode.com/gh_mirrors/tp/TPFanCtrl2,用 Visual Studio 2022 打开 fancontrol/ 里的fancontrol.sln,选 Debug + Win32 编译;直接使用已编译的发行版可跳过此步。 ⚠️ 编译依赖仓库里的TPFCIcon与TPFCIcon_noballons两个子项目,缺了它们主程序跑不起来。 - 装 TVicPort 驱动:它是程序读写 EC 寄存器的通道,缺失时启动会报
tvicport.sys missing,届时只能看温度、动不了风扇。驱动位数要和系统一致。 - 管理员运行:右键
fancontrol.exe,在弹出菜单里选"以管理员身份运行",并确认TPFanControl.ini与 exe 同目录。没有管理员权限,程序拿不到 EC 写权限。 - 确认首次成功:默认配置
Active=2启动即进 Smart 模式,Cycle=5每 5 秒读一轮温度。窗口左栏出现类似cpu 87°C (0x78)的条目、托盘图标带上温度数字,就算接上了。✅
Windows XP 到 8 均未测试,官方口径只保证 Win10/11。
能力:核心功能逐个看
三种模式:BIOS、Smart、Manual
- 解决什么:不同时段想要"系统管""曲线管""我说了算"。
- 怎么开:窗口里点单选按钮,或热键
Ctrl+Shift+B/Ctrl+Shift+S/Ctrl+Shift+M。 - 改完你会看到:底部 Status 行滚动出
Fan: 0x07 / Switch: 87°C这类条目,托盘图标按IconLevels=65 75 80三级阈值变黄、橙、红。
双风扇逐个调速
- 解决什么:双风扇机型第二把风扇没人管。
- 怎么实现:程序先往寄存器 0x31 写 0x00(风扇 1)或 0x01(风扇 2)选定目标,再把档位写进 0x2F。
- 改完你会看到:Speed 栏显示成对转速,例如
4373/4373 RPM。
手动模式的温度兜底
- 解决什么:想锁死低档位图安静,又怕高负载下过热。
- 怎么开:
Active=3配合ManFanSpeed=0和ManModeExit=78。 - 改完你会看到:冷启动风扇不转,温度一过 78°C 自动回到 Smart 模式。
托盘温度图标
- 解决什么:窗口最小化后不想开窗口也知道热不热。
- 怎么开:
ShowTempIcon=1,图标每IconCycle秒刷新一次。 - 改完你会看到:托盘里多出一个带温度数字的小图标,气泡提示可用
NoBallons关掉。
配置:TPFanControl.ini 配置示例
Level行格式为Level=温度 档位 hystUp hystDown,后两列是升温、降温迟滞。以Level=60 0 0 5为例:温度升到 60°C 立即进入该档,降回去则要再掉 5°C,避免风扇在临界点来回扑动。
曲线一:深夜码字(默认值,风扇晚启动、低档停得久)
Level=50 0 0 0 Level=60 1 0 0 Level=70 2 0 0 Level=80 4 0 0 Level=90 7 0 0预期效果:50°C 以下全静,90°C 才见 7 档。
曲线二:长负载渲染(每 10°C 爬一档,顶端留应急档)
Level=45 1 0 0 Level=55 3 0 0 Level=65 5 0 0 Level=75 7 0 0 Level=85 64 0 0预期效果:55°C 以下风扇已在 3 档。⚠️ 64 属于极端档,可能是厂商未定义的工况;Lev64Norm=1时它按普通档带迟滞运行,否则表现为脉冲式应急。128 不是档位,含义是"把控制权交还给 BIOS"。
曲线三:会议超静音(第二套曲线,一键切换)
MenuLabelSM2=会议超静音/ Level2=55 0 0 0 Level2=65 1 0 0 Level2=75 3 0 0 Level2=85 7 0 0预期效果:托盘菜单或Ctrl+Shift+2切到这套曲线,白天跑满速、开会切低噪。
💡 0–7 是厂商预留的档位集合;写十六进制 0–128 可以更细地控制风扇,128 的写法是 80。
原理:背后的 EC 对话链路
ThinkPad 的 EC(嵌入式控制器)是独立小板,管电源、电池和风扇。TPFanCtrl2 所有寄存器读写都经 TVicPort 驱动转发,一整圈控制回路分六步:
- 每
Cycle(默认 5)秒,批量读回 0x78 起 12 个传感器寄存器; - 按
IgnoreSensors剔除干扰项、用SensorOffset修正,取最高温; - 最高温对照
Level曲线逐级比对,叠加迟滞,得出目标档位; - 向 0x31 写 0x00/0x01,选中风扇 1 或风扇 2;
- 向 0x2F 写目标档位,并回读 0x2F 校验写成功;
- 读 0x84 处的 16 位转速值,把 RPM 更新到界面和日志。
一句话串起来:温度寄存器 → 最高温 → 曲线匹配 → 选风扇 → 写档位 → 读转速 → RPM 反馈。
💡 动 EC 之前,程序要拿到名为
Access_Thinkpad_EC的系统互斥锁,避免和 BIOS、其他监控软件互相踩;连续 10 次读失败(MaxReadErrors)则自动退回 BIOS 并退出。
懂这条链路,就能解释两个参数为什么这么设:Cycle调太小,每轮都要走一遍 EC 读写,假读会更多;Level不写迟滞,温度停在阈值附近时档位会反复横跳。
排障:四道常见坑
| 症状 | 原因 | 解法 |
|---|---|---|
启动提示tvicport.sys missing | TVicPort 没装或驱动位数不符 | 重装驱动并核对系统位数 |
| 风扇完全不动 | 权限不足,或与其他监控软件争抢 EC | 提权到管理员重跑,关掉其余硬件监控工具 |
| 一把风扇提速、另一把没跟上 | EC 通信偶发延迟 | 切到 BIOS 模式再切回原模式,通常能恢复 |
| 单风扇机型 RPM 显示 0 | 已知问题,修复中 | 等新版,或临时换用 archive/ 里的 2.1.5B |
⚠️ 机型方面两条:P50 的控制参数不同,走archive/里的 2.1.5B,该版温度显示有已知缺陷,建议手动模式;部分 ThinkBook 使用另一套 EC 地址,先短时间试用再决定长期跑。
生态:版本、分支与参与方式
主线当前为 2.3.3 Dual Fan;老版本和机型衍生版收在archive/,例如 2.1.5b(P50 用)与 2.2.0a。
FanDjango 的 V2.3.9 分支正在做一次大重构:日志措辞和界面细节重新梳理,新增型号支持,以早期测试形式发布,反馈足够后可能并入主线。已确认支持的机型包括 P53、Z13、Z16 Gen1/Gen2、P16 Gen1 AMD、T16 Gen1 AMD、X1 Carbon Gen12、X230T、P1 Gen7。
代码与二进制均为公共领域(Unlicense),随意使用、再分发。最低参与门槛是反馈:在自己机型上验证兼容性、或分享一份跑通过的曲线,对项目的价值不亚于修一个 bug。要写代码的话,提 PR 并至少通过 1 次 review 即可合入。
收尾:落地清单
- 先把原始
TPFanControl.ini备份一份,改坏了能随时还原 - 确认 TVicPort 装好、启动方式固定为"以管理员身份运行"
- 默认曲线原样跑一周,顺手把
Log2csv=1打开导出温度历史 - 按使用场景换一套曲线,核对风扇动作是否对得上阈值
- 启用第二套曲线与热键,验证
Ctrl+Shift+2切换即时生效 - 机型遇到兼容问题,把型号报给项目 Issues
下次深夜风扇突然吼起来,你手上有的是能改的曲线,而不是只能忍着——每次改动,5 秒内就能看到结果。
【免费下载链接】TPFanCtrl2ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考