LostInNovo/rf-power-meter-v5-companion

GitHub: LostInNovo/rf-power-meter-v5-companion

一款开源的 USB RF Power Meter V5 射频功率计 Windows 伴侣软件,替代原厂应用并提供首个公开的串口协议文档。

Stars: 1 | Forks: 0

# RF Power Meter V5 伴侣 **一款开源的 Windows 应用,适用于国产“USB RF Power Meter V5”(STM32F401CCU6 + AD8317/AD8318 对数检波器),旨在替代原厂软件——同时也是首个公开记录其串口协议的文档。** [![下载](https://img.shields.io/github/v/release/LostInNovo/rf-power-meter-v5-companion?label=download&style=for-the-badge)](https://github.com/LostInNovo/rf-power-meter-v5-companion/releases/latest) ![.NET 7](https://img.shields.io/badge/.NET-7.0-blueviolet) ![Windows](https://img.shields.io/badge/platform-Windows-blue) ![License: MIT](https://img.shields.io/badge/license-MIT-green) ![Hardware: tested](https://img.shields.io/badge/hardware-tested%20on%20real%20unit-orange) 你是否厌倦了为了与一块直接通过串口流式传输 dBm 数据的 STM32 + AD8317 板卡通信,而不得不从闻所未闻的文件托管站下载那些可疑的软件?我也一样。所以就有了这个项目。 它直接使用**原厂固件协议**进行通信——无需任何刷机,你的出厂校准数据会原封不动地保留——并且它能完成原厂应用的所有功能,去除了那仿佛 Windows XP 熬夜后的粗糙 UI,还增加了许多原厂应用根本做不到的功能。 ![screenshot](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ae9c2259c8013956.png) ## 功能介绍 - **实时读数**:超大的 dBm 数值,自动单位换算的瓦特数 (pW → W),信号强度条 - **峰值保持**:带重置功能,在图表上显示为虚线 - **滚动图表** (10 秒 / 30 秒 / 60 秒 / 5 分钟):包含平均值 + 最大包络线轨迹——挥动天线,观察峰值出现的位置 - **最小 / 最大 / 平均值** 滚动统计数据 - **底噪清零**:单击 = 取 1 秒平均值,*按住按钮* = 随你按多久就取多久的平均值。随后它会显示高出底噪的 Δ 值以及经过底噪修正的净功率(按瓦特进行减法计算,理应如此——读数比底噪高 2 dB 时基本全都是底噪,这个功能直接帮你算好了) - **阈值触发**:每当电平超过你的阈值时,都会生成一条带时间戳的记录(带防抖,自动重新武装)——在你没盯着的空档捕获发射机的开机动作 - **频率 + 衰减控制**:两者均存储在功率计设备本地;频率值决定了设备板载的频段校准(5880 对应 5.8 GHz FPV,2400 对应 WiFi 等) - **采样率控制**:包含设备的全部 18 种突发速率(从 500 kSa/s 到 61 Sa/s),并附带了它们实际作用的说明 - **CSV 记录**:按 50 ms 分箱带时间戳记录(平均/最小/最大/样本数),直接存入“文档”文件夹 还有耗费了实际心血的部分:**完整的串口协议已在 [PROTOCOL.md](PROTOCOL.md) 中详细记录,该协议经过了逆向工程,并对照真实硬件进行了验证。** 结合了实时抓取的字节数据 + 厂商 exe 的反编译结果,进行了交叉核对。想在 Linux 上用 Python 写自己的客户端?你需要的一切都在里面。 ## 下载与运行(如果你只想用软件) **[⬇ 获取最新版本](https://github.com/LostInNovo/rf-power-meter-v5-companion/releases/latest)**,解压,运行 `RfMeterGui.exe`。就这么简单: - **无需安装 .NET** —— 这是一个自包含的 Windows x64 构建,所有依赖都在 exe 中。 - Windows SmartScreen 会拦截它(“Windows 已保护你的电脑”),因为这是一个未签名的独立构建。点击 **更多信息 → 仍要运行**。不信任随机的 exe?好直觉——完整的源码就在这里,不如[自己构建它](#or-build-it-yourself)。 你需要准备:该功率计(作为 "USB RF Power Meter V5"、"RF Power Meter V5.0" 等名称销售——采用 STM32F401CCU6 + AD8317/AD8318,USB-C 接口,在电脑上显示为串口),以及任何 64 位的 Windows 系统。 选择你的 COM 端口(如果找到的话会自动选择),默认预填 460800 波特率,点击 Connect(连接)。数据会立刻涌入——设备处于自由运行状态,无需复杂的握手过程。 可选的命令行参数:`--autoconnect`,`--log`(启动时立即开始 CSV 记录),`--size=1000x650`(以指定尺寸打开窗口)。 ## 或者自己构建 需要 [.NET 7 SDK](https://dotnet.microsoft.com/download/dotnet/7.0)。 ``` git clone https://github.com/LostInNovo/rf-power-meter-v5-companion cd rf-power-meter-v5-companion dotnet build src/RfMeterGui/RfMeterGui.csproj -c Release src/RfMeterGui/bin/Release/net7.0-windows/RfMeterGui.exe ``` 要复现自包含单文件发布版构建: ``` dotnet publish src/RfMeterGui/RfMeterGui.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true ``` ## 手册永远不会告诉你的三件事 1. **设备断电时会忘记所有设置。** 频率、衰减、采样率——全部仅存于 RAM 中。重新插拔后,它将以 1 MHz(没错,就是 1)启动。应用会在连接时向你展示设备*实际*报告的值,因此一眼就能看出频段是否错误。每次重新插拔后都需要重新发送你的频率。 2. **数据流是突发式的,而不是均匀滴入的。** 每 500 个样本的块都会以 K 速率真实的采样周期进行捕获(低至 2 µs/sample = 500 kSa/s),然后通过串口在约 158 ms 内发送完毕。这就是原厂应用如何在 46 kB/s 的串口链路上实现微秒级包络标记的。详见 [PROTOCOL.md](PROTOCOL.md)。 3. **有一条命令会破坏设备的状态**(设置命令的截断形式)。在架构设计上,本应用在协议层直接拒绝发送该命令。如果你正在编写自己的客户端:在对解析器随意发送字节之前,*务必先*阅读协议文档。文档中也记录了恢复方法——在开发本软件的过程中,没有任何一台设备因此阵亡。 ## 如何避免烧毁它(务必认真读一遍) AD8317/AD8318 的输入端口在 **+12 dBm** 左右就会阵亡。瞬间发生。不是“变热”——是直接烧毁。 - **绝对不要直接连接发射机。** 一台 25 mW 的“起飞模式 (pit mode)” VTX 已经是 +14 dBm 了。你的 2 W VTX 高达 +33 dBm——这已经是极限值的 100 倍了。 - 测量大功率 = **使用衰减器**:先接一个 30 dB / 功率 ≥10 W 的衰减砖(并且要符合你的频率范围——一个 DC–3 GHz 的垫子在 5.8 GHz 下就是个废品),然后再接一个小型的 10–20 dB 衰减垫。将信号控制在 −50 到 −5 dBm 之间,在衰减字段中输入总衰减值,设备会自动在本地将其加回读数中。 - **使用裸 SMA 接口进行空间探测 (Sniffing) 在合理距离内是安全的**——在 5.8 GHz 下,一个裸接头实际上相当于一根 −50 dBi 的“天线”。如果在设备上接了真正的天线并靠近 2 W 发射机:请保持在 0.5 米以上,如果看到读数达到 −10 dBm 请立刻拉开距离。 - 读数高于 ~−5 dBm 时会进入压缩区,导致读数偏低。如果数值停止上升,说明你不再是在测量了,而是在作死。 ## 常见问题解答 **这会把我的设备变砖吗?** 不会。除了那三条已记录的命令外,它完全是只读的,而且在本代码中,结构上根本无法发送那种危险且格式错误的指令变体。 **支持 Linux/macOS 吗?** 本应用基于 WPF 开发,所以不行——但 [PROTOCOL.md](PROTOCOL.md) 里有你需要的一切:460800 8N1,通过 `u`/`m`/`w` 拆分数据流,从每条记录中解析出 dBm。写一个 Python 客户端只需一个下午的时间。 **我在 5.8 GHz 下的读数偏差了几 dB。** 设置频率字段——设备会根据它来选择频段校准。无论哪种情况,这些板卡的绝对精度都在 ±2–3 dB 左右;相对测量(A/B 天线对比测试、功率阶梯测试)则要精准得多。 **探测 (Sniffing) 时,读数几乎停留在底噪位置不动。** 这是物理规律,不是 bug。使用底噪清零功能来读取实际的差值,并记住,比底噪高 2 dB 的信号,其功率中大约有 60% 就是底噪本身的功率。 ## 致谢与来源 协议逆向工程于 2026-06-12 通过真实硬件上的实时串口抓取完成,并与厂商提供的 `USB-RF-Power-Meter.exe` 的 IL 反编译结果进行了交叉验证。所使用的抓包工具已包含在 [`tools/capture.ps1`](tools/capture.ps1) 中——将其指向你的 COM 端口,在轻信任何东西之前,先验证你的设备行为是否一致。 基于 MIT 许可证。随你怎么用,只要别因为你的检波器烧了来怪我就行。 *搜索引擎面包屑导航(因为你很可能是通过这些关键词搜到这里来的):USB RF Power Meter V5 software, RF Power Meter V5.0 Windows app, USB-RF-Power-Meter alternative, AD8317 USB power meter GUI, AD8318 power meter software, STM32 RF power meter serial protocol, RF Power Meter V5 driver download (you don't need a driver, it's CDC serial), 8 GHz USB power meter open source.*
标签:.NET 7, RF功率计, STM32, 串口通信, 射频测试, 硬件配套软件