UWB 凭什么敢标厘米级?拆开时间戳、DSTWR 和三个躲不开的误差源

0 阅读7分钟

第一次在板子上把 UWB 测距跑通,我盯着规格书那句「±10cm」想了很久:这数字是测出来的,还是算出来的?

后来被天线时延坑过、跟时钟 ppm 纠缠过几轮,才真正明白——厘米级从来不是白给的,是三个条件同时满足的结果。

这篇从 1ns 时间戳开始,一路拆到 DSTWR,再点名三个把精度拉回米级的真凶。


先给结论

  1. UWB 的「厘米级」翻译成时间口径,是要你的时间戳分辨率压到皮秒级——飞行时间每偏 1ns,距离就偏约 30cm。
  2. 协议默认选 DSTWR,不是为了测得更准,是为了让两端各自的系统延迟自己减掉自己。
  3. 精度从 cm 掉回 m 级,几乎都卡在三件事:时间戳分辨率、Reply Delay 没差分消掉、天线时延没标定。而掉在哪个环节,决定你去调哪个参数。

一、测距的本质,是测「时间」

UWB 不用信号强度(RSSI)去反推距离——那条路误差太大、还随环境乱跳。UWB 直接测电磁波飞过这段距离的飞行时间 ToF,再乘光速:

距离 = ToF × c   (c ≈ 3×10⁸ m/s)

这里有个反直觉的数字:飞行时间每偏差 1ns,距离就偏差约 30cm。

也就是说,所谓的「厘米级精度」,翻译成时间口径,是要求你的时间戳分辨率必须压到皮秒级。这才是 UWB 物理层真正的门槛,不是发射功率,也不是天线增益。

fig1_fig1_ns_to_cm.png

图1:时间误差 × 光速 = 距离误差。cm 级承诺的背后是 ps 级时间戳。

二、单向测距为什么不行:Reply Delay 这个坑

最朴素的想法:A 发、B 收,B 记下收到的时刻,乘光速。

问题在于 B 从「收到电磁波」到「处理完、能打出时间戳」之间,隔着一段接收处理 + 回程调度延迟,也就是 Reply Delay。这段延迟是毫秒级的(典型 ≈1ms),对应到距离就是几百米。

所以单向(SSTWR)测距的误差,几乎全卡在这个毫秒级的 Reply Delay 上——它根本不是噪声,是系统性偏差。

三、双边双向测距(DSTWR):把 Reply Delay 消掉

解法是把「发→收」做成一次往返对话,记录两端的四个时间戳,用对称差分把毫秒级的系统延迟消掉:

ToF = (RTT1·RTT2 − RPT1·RPT2) / (RTT1 + RPT2 + RPT1 + RTT2)

时序长这样——注意两端各自记的是「自己看到的往返」和「对方的处理延迟」:

关键性质在于:当两端对称时,RTT1 + RPT2 = RPT1 + RTT2,公式会退化成只和「双方往返时间之差」有关。那个毫秒级的 Reply Delay,在分子里被差分抵消了。 这正是 DSTWR 比 SSTWR 强、也是协议默认选它的原因。

fig2_fig2_dstwr_sequence.png

图2:DSTWR 时序。绿=两端各自看到的往返时间(rtt),红=对方的处理延迟(rpt);Resp 端拿到 Init 端算好的 rtt1/rpt2 后自行解算距离(Sp0 dist)。

一句话记住:DSTWR 的精髓不是「测得更准」,是「让两边各自的系统延迟自己减掉自己」。

四、但有几个误差源,DSTWR 抵消不掉

误差源典型量级能否被 DSTWR 差分抵消工程对策
天线时延(Antenna Delay)不标定 → 系统性偏近 1 米否(每板固定偏置)逐板标定 TX/RX 时延
时钟偏差(ppm)20ppm@100m → 约 0.02cm部分(优于 SSTWR)常规距离可忽略,但须标定
头长 / 低功耗切换微小但不对称的偏移只能抵消对称项,单边残差 D−a调度保证收发对称、PLL lock 不丢拍
时钟偏差过大(射频维度)链路直接断不涉及 ToF两端时钟须标定,否则 PLL 锁不住

fig3_fig3_error_scale.png

图3:对数轴下,三个误差源相差四个数量级。谁在决定精度下限,一目了然。

4.1 天线时延(Antenna Delay)

芯片吐出的时间戳,是「基带处理完」的时刻,不是「电磁波真正离开天线口」的时刻。中间差一个固定的天线 + 板级延迟。

不标定它,距离会系统性地偏掉近 1 米量级——而且不是噪声,是每一发都偏同一个方向。

量化一下:时间戳每偏差 1 个最小单位(约 15.65ps),距离就平移约 0.234cm。所以工程上第一步必须做的,就是逐板标定 TX / RX 的天线时延。这一步没做,后面所有精度讨论都是空中楼阁。

4.2 时钟偏差(ppm)

两端晶振都不是理想时钟,存在 ppm 误差。它会等比缩放 ToF。

但算一笔账就知道它有多小:20ppm、100m 距离、飞行时间差异间约 333ns,由此产生的误差约 6.7ps,换算成距离约 0.02cm。即使两端都跑得很差(极端到 40ppm),100m 处也就 0.2cm 量级。

结论很明确:常规距离下,时钟 ppm 误差基本可忽略;而且 DSTWR 对时钟误差的容忍度还优于 SSTWR。这也是为什么实际产品很少因为晶振把 UWB 测距搞崩。

4.3 头长与低功耗切换

包头部(Preamble + SFD)的时长、低功耗模式切换时钟时的 PLL 重新锁定,这些都会引入微小但不对称的时间偏移。

DSTWR 对「对称出现在两边」的项能大部分抵消;但对「只偏在一边」的项,会留下 D − a 类的残差。工程上的应对,是靠协议调度保证收发对称、靠 PLL lock 的时序保证不丢拍——这恰恰是板级调试最磨人的地方。

4.4 边界:时钟偏差还有另一张脸(射频维度)

前面算的,都是「时钟不准导致的 ToF 精度损失」,量级小到可以忽略。但时钟偏差还有一个完全不同、和 ToF 无关、却更致命的维度:

当 TX / RX 两端的时钟偏差没有标定、且差异较大时,射频链路的 PLL(锁相环)可能锁不住。锁不住的结果不是「测不准」,而是「直接收不到包」——接收性能劣化,链路直接断。

这件事和 ToF 没关系,它属于射频 / 链路预算层面的失效,不是精度问题。但它很容易被混为一谈,因为表面上它也是「时钟」引起的。一句话把两面说全:

  • 时钟偏差 小:只影响 ToF 精度,且量级极小(见 4.2);
  • 时钟偏差 大且未标定:射频侧 PLL 锁相失败,收包性能掉,ranging 直接失败——这时候讨论 cm 还是 m 已经没有意义了。

工程上的含义是:两端时钟该标还得标,不是为了那 0.02cm,是为了链路能正常起来。

五、收敛成一句话

UWB 的厘米级精度,不是「天生就有」的,是三个条件同时被满足的结果:

  1. 时间戳皮秒级分辨率(物理层)
  2. DSTWR 把 Reply Delay 差分消掉(协议层)
  3. 天线时延逐板标定(工程层)

任何一个环节偷工,精度都会从 cm 掉回 m 级——而掉在哪个环节,决定了你去调哪个参数。这才是工程师真正该关心的东西。


收尾

所以看 UWB 测距,别只盯着厂家宣传页上的「±10cm」标称。真正该问的是:

  • 天线时延标定了吗?
  • 两端时钟 ppm 多少?
  • DSTWR 的 slot 调度对称吗?

这些,只有真正在板子上跑过、被时间戳折磨过的人,才答得上来。

不谈参数,只看跑出来的数。