脉冲阵列绝对定位基站

串讲

Posted by mkk on April 12, 2025

这个脉冲阵列绝对定位基站,我们内部一般都管他叫360基站,是我们上一代基站的迭代产品,原本的基站功能较为单一,测距测角会存在死角,新一代基站在各个方面进行了升级,实现了真正的360度无死角。 该基站主要是用作消防救援器材,在救援环境中,可以不依赖卫星,做到精确定位,消防员佩戴公司的另一款单兵产品,与基站之间就可以完成组网,中继信号,信标部署。并且可以持续检测周围有毒气体的情况,当佩戴单兵的消防员进入警戒范围,会向其发送警告报文,基站可以通过4G向指挥平台传递各种信息报文,也可以中继转发其他基站的信息报文,接收指挥平台的消息,下发单兵设备。 实现测距测角,我们使用的是UWB技术,是一种超宽基带脉冲的通信方式,上一代产品使用的是单颗dw1000芯片,这代产品使用的是六颗国产的uwb3000,通过六个串口与GD32相连,该GD32与另一颗GD32相连,也就是说采用双主控,一颗主控专门用于接收处理uwb3000的数据。每个uwb3000芯片可以测量120度的范围,采用过滤算法,采用信号强度,测量角度最好的芯片测量数据。 程序中,创建了一个路由表,用来管理各个设备节点的数据,每个设备都会广播心跳包,当基站接受到心跳包,便会将他的基本信息插入到路由表中,该路由表由几个定时器维护,定时更新数据,上传数据。当插入路由表后,基站便会通过LORA发送测距包,将要测距设备的ID广播出去,再执行测距逻辑,最后再将测距数据上传到路由表中。 对于信标功能,我们使用了状态机进行管理,设置了十二种信标类型,根据绑定和部署情况,分成了四种状态,通过freeRTOS任务来进行处理,对于移除和创建信标,则是通过定时器,固定间隔发送三次报文。在任务中,则主要根据当前信标类型,来广播对应报文。 接近报警功能也是通过LORA广播来实现的,当气体浓度超标,便根据设定的报警距离制作报文,将设备ID和距离广播出去,发送报文,是基站数据传播的核心,他是我们自定义的一种格式,包括包头,长度,源地址,目的地址,协议类型,转发次数,功能码,数据,以及校验码,为了区分每包数据,还有一个字节的循环码。LORA芯片使用的是SX1276,他通过SPI与主控进行通信,并通过中断来进行数据的接收,不同类型的数据,可以采用不同类型的频段来进行发送,在任务中,通过消息队列来进行同步。 在程序中,我创建了一个专门的任务,用于处理各种数据消息,通过消息队列来进行接收,该任务会以阻塞状态来等待队列数据。比如当4G模块,接收到平台下发的报文,便会将该类型数据抛出,该任务接收到后,便根据相应类型来进行处理,与解析。当时在写完这部分代码后,程序执行的比较顺利,但后来发现,有时,在程序长时间执行后,程序会卡死,经过排查,最终发现,如果组网的设备较多,有时LORA会短时间内接收到大量的报文,并将这些消息抛向队列,导致任务分配的空间不足。提升该任务大小后,该问题便没再复现。 除此之外我也创建了一个任务,专门用于处理事件,比如按键事件,电量事件,充电事件等等,也是通过建立消息队列,在合适的时机抛出事件,再交由该任务处理。在上一代产品中,没有采用FREERTOS,而是将事件注册到数组中,设置标志位来轮询。使用了FREERTOS后逻辑更为清晰,,确保关键消息(如应急指令)能及时响应。 在定位信息的获取上,我们没有像上一代一样使用单纯的GPS,而是使用了RTK实时差分定位,我们使用的是CM260这款芯片,他通过USART与主控进行通信,初始化后自动接收GPS数据,当数据有效后,再通过4G传输给千寻的基站,获取来自CORS服务器的RTCM差分校正数据,在将这数据传输给CM260,来校正定位。实现厘米级的精确定位。 对于我们这个迭代的产品,我们也对屏幕进行了升级,采用了51引脚,450*600分辨率的彩色OLED屏幕,为了刷新速率,我们采用QSPI进行数据传输,QSPI是一种拥有4条数据线的SPI,当对屏幕发送数据时,使用单线进行发送,当发送大量颜色数据时,采用四线来发送数据,并且这款屏幕通过LVGL 实现 GUI,并且移植文件系统。 该项目是基于FreeRTOS,CMSIS-RTOS V2 接口封装来实现的,通过对每个功能创建任务,再根据重要程度来划分优先级,并通过消息队列来进行任务之间的数据同步,替代掉了之前在裸机里靠循环来实现的任务。提高了可靠性和实时性。让各个功能更为独立,便于开发和维护。 以上便是这个项目的主要内容,针对该项目,面试官您还有什么想要了解的吗。