尝试 CH582M 作为 UWB 定位Tag

最近在考虑 UWB 定位标签的方案。

最早之前使用的是 STM32F103CBT6 作为 Tag 的主控,对于空间比较小的形态,则使用 STM32F103TB。 当时是作为上行 TDoA 的 Tag,其资源只能说刚好够用。 STM32F103CBT6 的规格是: 48Pin, 128K Flash, 20KRAM。 STM32F103TB 的规格是: 36Pin, 128K Flash, 20KRAM。

首先它的 128K Flash 看似很大,其实如果我们要支持 OTA,要分走一半的空间,再加上我们需要一些空间来保存配置参数,再分走一部分。如果要支持 OTA,还得搞一个 Bootloader。实际上 Flash 空间被分为 4 块:Bootloader、Data、App1、App2。最后用来存放 App 的 Flash 只有 54K。

20K RAM 也只是刚好够用。

如果多加几个外设,例如 IMU、心率等,Flash 和 RAM 都不够了。

再加上之前遇到 ST 的芯片涨价,无论涨价的背后是什么原因,厂家肯定有不可推卸的责任。从那时开始,我再做项目的 MCU 选型时,都会尽量避开 ST 的芯片。

前段时间一直在做下行 TDoA 的研究,Anchor 和 Tag 都使用 ESP32S3,最后的定位效果基本达到预期,与下行 TDoA 的精度差不多。但是下行 TDoA 的 Tag 需要持续跟踪附近的 Anchor 的时间,要导致 Tag 几乎没有休眠的时间,耗电挺大的。这对下行 TDoA 的应用场景有了比较大的限制。 当然,系统如果进一步优化,应该可以让 Tag 有比较多的时间休眠。在优化时,需要对减少对 Anchor 的跟踪,这对精度不利,需要进行很多测试之后得到一个平衡点。

下行 TDoA 需要一个比较“重”的 Tag。这里说的“重”主要是对资源的消耗,因为坐标的计算放在 Tag 来做,节省了一个用于运行定位引擎的服务器,某种意义上说,相当于是把定位引擎的坐标计算工作分散给各个 Tag 来做。

所以下行 TDoA 的 Tag 使用 ESP32S3 是比较合适的。

最近计划把上行 TDoA 方案重新做一遍。早年为前公司开发的上行 TDoA 系统,毕竟知识产权属于前公司。经过这几年的积累,有了一些新的想法,如果重新做一个上行 TDoA 的方案,肯定会比以前产品更成熟。Anchor 肯定使用 ESP32S3 作为主控,最简化的版本只需要一个 ESP32S3 DevKit + DWM3000 就可以了,成本可以很低。再加上使用 WiFi 联网,不像以前使用以太网和 PoE 供电,节省了网线的成本和布线的费用。所以新的方案将大降低系统的总成本。

对于上行 TDoA 的 Tag 的 MCU 选型,纠结了好几天。

如果使用 ESP32S3,当然有很多好处,例如有很多代码可以复用,还可以 WiFi 联网,甚至可以把 ESP32S3 的语音功能用起来,做成可以对讲的 Tag。但是 ESP32S3 有个问题,就是体积太大了。芯片本身不大,但是如果加上外围电路,如 Flash 等,体积就太大了。通常为了减化设计,我都是直接使用 ESP32S3 的模组,这样比较省事。

上行 TDoA 的 Tag 通常会做成胸牌或手环,对 ESP32S3 来说,几乎是不可能完成的任务。

我看中了 WCH 的 CH582M。这是一个 RISC-V 内核的芯片,内置 512K Flash + 32K RAM,价格不到 3 元。我买了块开发板,做了些测试。 我把 Qorvo 的 DW3000 的 SDK 移植到 CH582M上,目前已经可以在 CH582M 上控制 DW3000 收发数据包,看上去效果不错。

很有可能,将来的 DSTWR(ToF) 定位方案、还有 PDoA 的定位方案的 Tag,都可以使用 CH582M 作为主控 MCU。

CH582M 开发板和 DWM3000 模块

下面是新画的板子的 3D 图:

其实这个 3D 图是第二版了。第一版 PCB 做好后,自己焊了一片,发现 0402 的元件焊起来真是痛苦。我发现最近 JLC 做的有铅喷锡板焊盘好像不太吃锡,要用热烙铁用力点一下焊盘才上到锡。不知道是他们的工艺有变化,还是我的方法不对。我用的锡丝是 Alpha, 焊膏也是那种对氧化还原较好、流动性也较好的。曾经给电线上锡,比较过两种焊膏,一种几乎上不了,这种焊膏抹了一点,很轻松就上锡了。

焊这块板子时,大概用力过猛,有个焊盘的铜皮掉了!

正好这 PCB 放标签盒子时,发现如果加两个凸起可以固定 PCB,就重新画了一块板。新板子顺便用 JLC SMT 帮我把阻容焊好。