在使用 Meshtastic 设备时,你可能会遇到一个奇怪的问题:即使设备使用的是电池供电,它仍然显示电源插头(🔌充电)图标,误以为正在使用外部电源/充电头。这一问题通常是由于 ADC 采样的电压超过了 4.2V,导致设备错误地判断其供电状态。
解决这一问题的关键是调整 ADC 系数(ADC Multiplier),确保设备正确计算电池电压。本教程将详细介绍:
- ADC 系数的工作原理
- 如何手动校准 ADC 系数
- 不同 Meshtastic 设备的默认 ADC 系数
- 如何调整 ADC 系数以解决误判外部供电的问题
在深入探讨如何校准 ADC 系数之前,我们需要先了解 ADC(模数转换器)的工作原理,以及为什么 Meshtastic 设备需要进行电压修正。
ADC(Analog-to-Digital Converter,模数转换器)是一种将模拟电压信号转换为数字信号的组件。在 Meshtastic 设备中,电池的电压是一个模拟信号,而设备的 MCU(微控制单元)无法直接读取该电压值。因此,ADC 会将这个电压转换成 MCU 可以理解的数字数据。
然而,嵌入式 MCU (如 nRF52、ESP32)处理的电压范围通常是 0-3.3V 或 0-1.1V,但锂电池的电压范围通常在 3.0V 至 4.2V 之间,远远超出 MCU 自带的 ADC 直接测量范围。如果直接连接电池,可能会导致 ADC 过载,甚至损坏芯片。
因此,设备设计时通常会在 ADC 输入端加入一个电阻分压电路来降低电池电压,使其落入 MCU 可测量的范围。
从数学上来说,这是一个映射关系,把 3.0V-4.2V 的电压范围映射到 0-3.3V 或 0-1.1V 的电压范围。
电阻分压如何影响 ADC 采样
分压电路的核心原理是通过两个电阻 R1 和 R2 将电池电压 $V_{BAT}$ 按比例分压,使得 ADC 读取到的电压 $V_{ADC}$ 处于安全范围。其计算公式如下:
$$
V_{ADC} = V_{BAT} \times \frac{R_2}{R_1 + R_2}
$$
其中:
- $V_{BAT}$ 是电池的实际电压;
- $V_{ADC}$ 是 ADC 读取的电压;
- $R_1$ 和 $R_2$ 是设备上用于分压的电阻。
由于每个 Meshtastic 设备型号的 R1 和 R2 可能不同,导致 ADC 读取到的电压与实际电池电压之间存在一个固定的比例关系。因此,为了让软件能够准确计算出真实的电池电压,我们需要一个 ADC 系数(ADC Multiplier) 来修正这个比例关系。
为了让 Meshtastic 设备能够正确计算电池电压,固件会使用一个系数 $ M $ 来修正 ADC 读取值,使其恢复到真实的电池电压:
$$
V_{计算出的电池电压} = V_{ADC} \times M
$$
其中:
- $V_{计算出的电池电压}$ 是计算出的电池电压;
- $V_{ADC}$ 是 ADC 实际测量到的电压;
- $M$(ADC 系数)是一个校正系数,取决于设备的分压电阻比值。
不同设备的分压电阻不同,因此 ADC 系数的默认值在不同设备上可能会有所不同。如果设备默认的 ADC 系数不准确,就会导致错误的电池电压计算,从而影响供电模式的判断。
在理想情况下,所有设备出厂时都会有一个合理的 ADC 系数。然而,在实际使用中,以下因素可能导致 ADC 系数不准确:
- 硬件设计的公差
- 固件默认值不适配特定设备:Meshtastic 适配了多种不同的硬件,固件的默认 ADC 系数可能并不适用于你的设备。
- DIY 设备(如 fakeTec)需要根据实际使用的分压电阻参数来更改 ADC 系数
因此,为了确保 Meshtastic 设备能准确计算电池电压,我们可以手动调整 ADC 系数,使其符合设备的真实情况。
Meshtastic 设备的 ADC 校准流程
在 Meshtastic 设备上,电池电压是通过 ADC(模数转换器)读取并计算的。然而,由于不同设备的硬件设计存在差异,默认的 ADC 系数可能不适用于所有设备。如果 ADC 系数设置不正确,设备计算出的电池电压就会出现误差,从而导致错误的供电模式判断(例如,设备可能错误地认为正在使用外部电源)。
因此,我们需要手动校准 ADC 系数(multiplier),使其符合设备的实际情况。校准的基本流程包括 测量电池真实电压、查看设备计算的电池电压、,并将新值写入设备。下面我们将详细讲解每个步骤,并提供具体的操作方法。
校准前的准备
在进行 ADC 校准之前,需要做好充分的准备,以确保校准过程准确可靠。以下是校准前需要准备的事项:
第一,确保设备使用的是电池供电,而不是 USB 供电。在校准过程中,设备必须完全依赖电池供电,而不能连接 USB 线或外部电源。连接 USB 供电可能会影响 ADC 采样值,从而导致校准数据不准确。因此,在校准前,务必拔掉 USB 线,并确保设备仅通过电池供电运行。
第二,需要使用一块充满电的电池。理论上,锂电池在完全充满时,电压应该在 4.2V ±1% 之间。使用一块充满电的电池可以提供一个已知的稳定电压参考,避免由于电池电量变化导致的电压波动影响校准结果。因此,建议在校准前先将电池充满,并在测量时保证设备已经断开充电器。
第三,准备一台万用表,这将用来测量电池的电压值。
第四,开始前,请先记录当前设备的 ADC 系数,以便进行比较和调整。不同设备的默认 ADC 系数可能有所不同,因此,我们需要先查询当前的 ADC 系数,并记录它的初始值。
读取当前 ADC 系数
ADC 系数是设备用于计算电池电压的关键参数,不同型号的设备可能使用不同的默认值。以下是一些常见 Meshtastic 设备的默认 ADC 系数:
设备型号 | 默认 ADC 系数 |
---|---|
chatter2 | 5.0 |
diy | 1.85 |
esp32-s3-pico | 3.1 |
heltec_v1 & v2 | 3.2 |
heltec_v3 & wsl_v3 | 4.9 |
heltec_wireless_paper | 2.0 |
nano-g1-explorer | 2.0 |
rak4631 | 1.73 |
tlora_t3s3_v1 | 2.11 |
如果设备的默认 ADC 系数不适合你的设备,可能会导致计算出的电池电压不准确,从而影响供电模式的判断。
方法 1:使用 Meshtastic 应用查询
- 打开 Meshtastic App(适用于 Android 和 iOS)。
- 进入 设备配置(Radio Configuration)。
- 找到 电源(Power) 选项。
- 在 ADC Multiplier Override 选项下,可以看到当前设备使用的 ADC 系数。
方法 2:使用 CLI 查询
如果你使用的是 Meshtastic 命令行工具(CLI),可以输入以下命令查询当前的 ADC 系数:
meshtastic --get power.adc_multiplier_override
终端会返回类似的结果:
power.adc_multiplier_override = 3.2
这表示当前设备的 ADC 系数是 3.2。请记录这个值,以便在后续步骤中进行调整。
读取设备计算出的电池电压
在 Meshtastic 设备中,你可以使用 App 或 CLI 查询当前设备计算出的电池电压,并与万用表测得的实际电池电压进行对比。
方法 1:使用 Meshtastic App 查询
- 打开 Meshtastic App。
- 进入 设备状态(Device Info) 页面。
- 查找 电池电压(Battery Voltage)。
- 例如,如果显示:
这表示设备当前计算出的电池电压是 3.82V。Battery Voltage: 3.82V
方法 2:使用 CLI 查询
如果你使用的是命令行工具(CLI),可以输入以下命令:
meshtastic --get power.battery_voltage
终端可能返回:
power.battery_voltage = 3.82
这表示设备当前认为电池电压是 3.82V。请记录这个值,我们将在下一步使用它来计算新的 ADC 系数。
计算新的 ADC 系数
在 Meshtastic 设备上,ADC 系数(ADC Multiplier)决定了电池电压的计算精度。如果设备计算出的电池电压与实际测量值存在误差,就需要调整 ADC 系数,使其更加准确。我们可以使用两种方法进行计算:
- Meshtastic 官方提供的 ADC 计算器(推荐),适合新手,不需要手动计算。
- 手动计算 ADC 系数,适合高级用户,可在无网络环境下操作。
方法 1:使用 Meshtastic ADC 计算器(推荐)
Meshtastic 提供了一个 ADC 计算器,可以自动计算新的 ADC 系数。这个方法简单易用,适合大多数用户。校准步骤如下:
步骤 1:充满电池
首先,将电池完全充满。根据设备不同,充满电的状态指示方式可能不同,但充满电时电压应为 4.2V ±1%。请确保设备已充满电后再进行校准。
步骤 2:检查设备显示的电池电量百分比
在 Meshtastic App 或设备屏幕上,找到 Battery Charge Percent(电池电量百分比),通常会显示类似:
B 3.82V 60%
其中,60% 就是电池电量百分比,当前计算出的电池电压是 3.82V。
如果电池电量百分比未显示,说明设备当前的 Operative ADC Multiplier 系数过高,需要降低它的数值(推荐每次降低 0.1),直到设备能正确显示电池百分比。
步骤 3:输入数据到 ADC 计算器
- 打开 Meshtastic 官方 ADC 计算器:
Meshtastic Power Configuration - Calibration Process - 在电池电量百分比输入设备显示的电池电量百分比(例如 60%)。
- 在 Current ADC Multiplier 输入设备当前使用的 ADC 系数(例如 5.0)。
- 点击 Calculate 按钮,计算器会自动计算新的 Operative ADC Multiplier,并在 Calculated New Operative ADC Multiplier 处显示新数值(例如 5.42)。
- 记下计算出的新 ADC 系数,后续我们会将其应用到设备,以确保电池电压计算准确。
方法 2:手动计算 ADC 系数
如果无法使用 ADC 计算器,你也可以手动计算新的 ADC 系数。步骤如下:
收集数据
- 使用万用表测量电池的真实电压(例如 4.2V)。
- 查看设备计算出的电池电压(例如 3.82V)。
- 记录当前设备的 ADC 系数(例如 3.2)。
使用公式计算新的 ADC 系数
$$
\text{新系数} = \text{当前 ADC 系数} \times \frac{\text{真实电池电压}}{\text{设备计算的电压}}
$$
将数据代入:
$$
\text{新 ADC 系数} = 3.2 \times \frac{4.2}{3.82}
$$
$$
\text{新 ADC 系数} = 3.52
$$
对于大多数用户,推荐使用 Meshtastic ADC 计算器,因为它简单直观,不需要手动计算。如果你更喜欢理解计算过程,可以使用手动方法。
设置新的 ADC 系数
方法 1:在 Meshtastic App 中修改
- 打开 Meshtastic App。
- 进入 设备配置(Radio Configuration)。
- 选择 电源(Power) 选项。
- 找到 ADC Multiplier Override。
- 输入新的 ADC 系数(例如 3.52)。
- 保存设置并重启设备。
方法 2:使用 CLI 设置
输入以下命令将新的 ADC 系数应用到设备:
meshtastic --set power.adc_multiplier_override 3.52
然后重启设备:
meshtastic --reboot
设备重启后,新的 ADC 系数将生效。
本文作者: Hays Chan | 陈希
本文链接: https://meshcn.net/meshtastic-ADC-Multiplier-Override/