Share

外观
风格

蓝牙鼠标进水后,为什么常常只有滚轮失灵

2026年4月21日 · 专栏

封面图

有时候,一个蓝牙鼠标洗过或者进过水,最奇怪的现象不是“整个鼠标都坏了”,而是只有滚轮不工作:鼠标还能移动,左右键还能点,蓝牙也还能连,但页面就是滚不动。

这件事其实很符合鼠标内部的结构。滚轮并不是一个“附属按钮”,它背后是一套独立的检测机构,最关键的元件叫做编码器。受潮以后,最容易先出问题的,恰恰就是这套东西。

鼠标里面,滚轮不是一个单独零件

先看滚轮这部分的整体关系。

          你的手
            ↓
      ┌───────────┐
      │   滚轮外圈  │
      └─────┬─────┘
            │ 转动
            ▼
         ┌─────┐
         │ 转轴 │
         └──┬──┘
            │
   ┌────────┴────────┐
   │                 │
   ▼                 ▼
┌─────────┐     ┌─────────┐
│ 中键开关 │     │ 编码器   │
│ 按下触发 │     │ 检测转动 │
└────┬────┘     └────┬────┘
     │               │
     └──────┬────────┘
            ▼
       ┌─────────┐
       │ 主控 MCU │
       └────┬────┘
            ▼
        蓝牙发给电脑
            ▼
       macOS 收到滚动事件

这里有一个很关键的点:

  • 按下滚轮,通常对应的是一个独立的中键开关
  • 滚动滚轮,对应的是另一套检测机构,也就是编码器

所以完全可能出现下面这种情况:

  • 鼠标移动正常
  • 左右键正常
  • 滚轮按下也正常
  • 但滚动完全失灵

这不是矛盾,而是因为坏掉的只是“检测转动”的那部分。

编码器是怎么知道“你在滚”的

滚轮要变成电脑里的滚动事件,中间必须经过一次“机械运动 → 电信号”的转换。这个工作由编码器完成。

可以先把它想成这样:

你拨动滚轮
   ↓
滚轮带动转轴
   ↓
编码器内部产生两路信号:A、B
   ↓
主控读取 A/B 变化顺序
   ↓
判断:
- 有没有转
- 转了几格
- 是向上还是向下

很多鼠标滚轮用的是两相信号编码器,也就是常说的 A/B 相编码

机械编码器的直觉图

最常见、也最好理解的一类,是机械式编码器。它内部通常有一个跟着滚轮一起转的小盘,盘上有一格一格的接触结构,旁边放着两个错开位置的触点,分别叫 A 和 B。

俯视简化图

           转动方向 →
     ┌─────────────────┐
     │  编码器栅格盘/接触盘 │
     │  _-_-_-_-_-_-_   │
     └─────────────────┘
          ▲       ▲
          │       │
         触点A    触点B
       (前一点) (后一点)

因为 A 和 B 不是放在同一个位置,而是故意错开一点点,所以滚轮转过去的时候,A 和 B 不会同时变化,而是总有一个先、一个后。

这个“谁先谁后”,就是方向信息。

为什么它能判断向上滚还是向下滚

编码器输出的不是一个连续模拟量,而是两路离散变化的信号。可以粗略画成这样:

情况一:A 先变化

时间 →
A: __----____----____
B: ____----____----__

结论:A 领先 B

情况二:B 先变化

时间 →
A: ____----____----__
B: __----____----____

结论:B 领先 A

主控芯片并不需要知道滚轮“长什么样”,它只需要看这两个问题:

  1. A/B 有没有发生跳变
  2. 跳变时是谁先谁后

于是就能得出:

  • A 先变,再 B 变:一个方向
  • B 先变,再 A 变:另一个方向

从状态机的角度看,会更清楚

如果把 A/B 两路信号只看成 0 和 1,那么任何时刻都只有四种状态:

A B
0 0
0 1
1 1
1 0

滚轮正常转动时,这四个状态会按顺序循环。

一个方向

00 → 01 → 11 → 10 → 00

反方向

00 → 10 → 11 → 01 → 00

也可以画成一个环:

         一个完整步进的状态环

             00
           /    \
        10        01
           \    /
             11

如果状态沿着一个方向绕圈,主控就判定为“向上滚”;反过来绕圈,就判定为“向下滚”。

这就是为什么一个小小的滚轮,电脑不但知道你滚了,还知道你是往哪个方向滚。

为什么受潮后最容易坏在这里

问题就出在:这套判断非常依赖信号干净、边沿清楚、先后顺序稳定

机械式编码器受潮时会发生什么

如果编码器是机械触点式,内部通常有很小的金属接触结构。受潮以后,常见会出现几件事:

  • 触点表面形成一层水膜
  • 接触电阻变得不稳定
  • 金属表面开始轻微氧化
  • 原本清晰的通断,变成模糊的抖动

正常情况下,主控看到的是:

00 → 01 → 11 → 10 → 00

受潮以后,主控可能看到的是:

00 → 01 → 00 → 01 → 11

或者:

00 → 11

又或者:

00 → 01 → 11 → 01 → 11

这些都不是正常顺序。对主控来说,这些更像噪声、抖动、无效边沿,而不是可靠的滚动输入。

于是你在系统层面看到的结果就是:

  • 完全不滚
  • 偶尔滚一下
  • 滚动方向乱跳
  • 一下跳很多格,或者一格都没有

如果是光电式或磁式,也一样会受影响

有些鼠标不是机械触点,而是光电式或磁式编码器。原理不同,但核心逻辑类似:仍然要生成两路相位错开的信号给主控看。

比如光电式可以理解成:

发光器 → 栅格轮 → 接收器A
发光器 → 栅格轮 → 接收器B

当栅格轮转动时,A 和 B 接收到的光会交替变化,主控照样根据 A/B 相位差判断方向。

这种结构虽然少了机械磨损,但受潮后也会出问题,比如:

  • 水膜挡住了光路
  • 灰尘和潮气混在一起,导致信号变弱
  • 编码器周边线路受潮,输出电平不稳

结果还是一样:丢脉冲、乱跳、方向判断异常。

为什么常见现象是“别的都好,只有滚轮坏”

因为鼠标内部不是一个“总成同时好坏”的结构,而是几个相对独立的模块:

移动模块      正常
左右键模块    正常
蓝牙连接模块  正常
滚轮编码器    受潮/异常

这就解释了一个看起来很反直觉、但其实很常见的现象:

  • 蓝牙还能连上
  • 光标还能移动
  • 左右键还能点
  • 只有滚轮失灵

从电路和结构上看,这非常合理。受潮并不需要把整只鼠标都弄坏,只要伤到滚轮编码器这一小块,用户感觉到的就会是“只有滚轮坏了”。

系统为什么会表现成“完全没有滚动事件”

在电脑这一侧,滚轮事件是输入子系统根据鼠标上传的信号生成的。如果编码器没有产生稳定的 A/B 跳变,主控就不会把它判定成有效滚动;既然主控没判定成功,蓝牙就不会上报正确的 scroll 数据;没有上报,系统当然也收不到滚动事件。

把这个链路缩成一张图就是:

滚轮转了
  ↓
编码器受潮,信号没出来/不稳定
  ↓
主控没判定成有效滚动
  ↓
蓝牙没发 scroll
  ↓
macOS 收到 0 个 scrollWheel 事件

这也是为什么排查这类问题时,最后常常会得出一个结论:不是系统设置把滚轮关掉了,而是鼠标根本没产生可用的滚轮信号。

最后的判断标准

如果鼠标只是短时受潮,完全晾干后,有可能恢复正常;但如果潮气已经带来氧化、腐蚀,或者编码器内部触点已经受损,那么症状就可能从“偶尔不灵”变成“长期只有滚轮坏”。

判断时,可以记住一个很实用的经验:

  • 晾干后完全恢复:更像短时受潮
  • 晾干后偶发乱跳:更像触点污染或轻微腐蚀
  • 晾干后仍然完全不滚:更像编码器已经损伤

所以,“进过水以后,为什么常常只有滚轮失灵”这件事,不是巧合,而是鼠标内部结构决定的。真正脆弱的,不一定是蓝牙,不一定是主控,往往就是滚轮那套把机械动作翻译成电信号的编码器。