这是一个系列文章《如何从零开始实现TDOA技术的 UWB 精确定位系统》第6部分。
重要提示(劝退说明):
Q:做这个定位系统需要基础么? A:文章不是写给小白看的,需要有电子技术和软件编程的基础 Q:你的这些硬件/软件是开源的吗? A:不是开源的。这一系列文章是授人以“渔”,而不是授人以“鱼”。文章中我会介绍怎么实现UWB定位系统,告诉你如何克服难点,但不会直接把PCB的Gerber文件给你去做板子,不会把软件的源代码给你,不会把编译好的固件给你。我不会给你任何直接的结果,我只是告诉你方法。 Q:我个人对UWB定位很兴趣,可不可以做出一个定位系统? A:如果是有很强的硬件/软件背景,并且有大量的时间,当然可以做得出来。文章就是写给你看的! Q:我是商业公司,我想把UWB定位系统搞成一个商业产品。 A:当然可以。这文章也是写给你看的。如果你想自己从头构建整个系统,看了我的文章后,只需要画电路打板;构思软件结构再编码。就这样,所有的难点我都会在文中提到,并介绍了解决方法。你不需要招人来做算法研究。如果你想省事省时间,可以直接购买我们的电路图(AD工程文件),购买我们的软件源代码,然后快速进入生产环节。(网站: https://uwbhome.top
在之前的文章中,已经介绍了 UWB TDOA定位相关的重要技术,其实这一系列文章可以算是结束了。接下来我陆续介绍一下细节。
频率、时间、长度关系
时间与长度的关系:
  • 光速是 299702547 m/s
  • 1ms光跑的路程299702.547m
  • 1us 光跑的路程299.702547m
  • 1ns光跑的路程0.299702547m=29.97cm
  • 1ps光跑的路程0.000299702547m=0.0299702547cm
  • 15.65ps光跑的路程=0.469034486055cm=0.00469034486055 m
DW1000的时间戳的单位是15.65ps,对应到0.469cm。也就是说如果时间戳的数字相差1,表示相差4.67毫米。这个大概是有些定位系统号称毫米级精度的数据来源吧。其实如果胆子够大,在宣传上还可以进一步提升精度。参见我的另一篇文章
 
1m路程,光跑需要时间3.336641646892644e-9 秒 = 3.336641646892644 ns
DW1000的几个频率关系
  • DW1000使用的外部晶振频率为38.4MHz@+/-10ppm
  • DW1000的参考时钟是38.4MHz。38.4M进行13倍频后是499.2MHz,再4分频得到124.8MHz作为DW1000的内部系统时钟。
  • 38.4MHz的波长为 300Mm/38.4M=7.8125m (300Mm为光速,300M米)
  • 124.8MHz的波长为 300Mm/124.8M=2.4m
  • 38.4MHz的一个时钟周期为26.04ns
  • 124.8MHz的一个时钟周期为8.012ns
  • 63.8976 GHz 的一个时钟周期为15.6484375ps,光跑的路程=0.4690305cm
分析DW1000之外的其他方案
  • RTL-SDR的采样率为2.4 MS/s, 两次采样间的间隔为 300Mm/2.4M=125m,即两次采样的距离是125米
  • Ettus USRP B210的采样率为61.44MS/s,两次采样间的间隔为 300Mm/61.44M=4.88m,即两次采样的距离是4.88米
RTL-SDR是基于带有 RTL2832U 芯片的 DVB-T 电视调谐器,价格非常便宜。被无线电爱好者破解后,可以作为SDR使用。可以简单的认为它是一个数字无线电接收机。有很多人为它开发过一些软件,例如作为GPS接收机。
Ettus USRP B210是一个强大的数字无线电收发设备,拥有非常大的带宽。
 
简单总结一下:
  • DW1000的系统时间寄存器实际更新率为124.8MHz,用于定时发送,光距离分辨为240cm
  • DW1000的系统时间寄存器理论更新率为63.8976 GHz,用于确定接收帧的时间戳及天线延时校准等,光距离分辨为0.469cm
 
DW1000支持UWB的Channel 1/2/3/4/5/7,频率从3494.4MHz到6489.6MHz
  • 3494.4MHz的波长为299.702547Mm /3494.4M=0.085766m (299.702547Mm为光速,299.702547M米)
  • 6489.6MHz的波长为299.702547Mm /6489.6M=0.04618m (299.702547Mm为光速,299.702547M米)
  • 3494.4MHz的一个时钟周期为0.286ns
  • 6489.6MHz的一个时钟周期为0.154ns
DW1000向空中发送UWB信号时,我们定义一个UWB数据包,其中会定义一些数据。那么,UWB数据包中1Bit占用多少时间,对应多大的长度?
  • 110 kbps的一位用时 1/110000=9.09us
  • 850 kbps的一位用时 1/850000=1.176us
  • 6.8 Mbps的一位用时 1/6800000=0.147us=147ns*29.97=4367.64cm
DW1000的时间戳
DW1000有几个寄存器,可以读到帧的接收时间、帧的发送时间,寄存器是40Bits的,时间单位是(1.0/499.2e6/128.0) = 15.65e-12秒,即15.65ps。这些寄存器的高8位可以忽略,因为DW1000之间的通讯距离不会有那么远,以致于需要那么长的时间帧才会到达。
2^40=0xFFFFFFFFFF=1099511627775
1099511627775*15.65ps = 17,207,356,974,678.75ps = 17,207ms
对于40Bits, 大约17秒多就回绕一次
2^32=0xFFFFFFFF=4294967295
4294967295*15.65ps =67,216,238,166.75ps = 67ms
对于32Bits, 大约67毫秒多就回绕一次
Seq32 分析
每一个UWB数据包都有一个序号seq。我们使用uint32 seq32记录这个序号。
最大值是0xFFFFFFFF,十进制值为4294967295
假设1ms发送一个数据包,那么可以表达4294967295ms
4294967295ms = 4294967s
4294967s/3600 = 1193小时
1193/24=49天
实际上我们每200ms发一个包,简化为100ms发一个包,那么可以表达4900天。相当于13年。因为每一次充电都会导致标签重启,seq32重新从0开始计数。
所以,我们基本上不用考虑seq32会重绕的情况。
STM32 MCU 选型
这个选型数据是2016年做的,过了这么多年,ST公司的产品有了很大变化。你需要自己重做一次功课。这个选型只能供参考。
 
TREK1000 的 MUC 是 STM32F105RCT6, 256K Flash, 64K RAM, STM32F10X_CL
Tripoint的MCU是STM32F031G6,32K Falsh, 4KRAM,UFQFPN28 Footer
候选:
  • STM32F103RET6, 64Pin, 512K Flash, 64KRAM
  • STM32F103C6T6, 48Pin, 32K Flash, 10KRAM, STM32F10X_MD for TAG
  • STM32F103C8T6, 48Pin, 64K Flash, 20KRAM, STM32F10X_MD
  • STM32F103CBT6, 48Pin, 128K Flash, 20KRAM, STM32F10X_MD
  • STM32F103T8, 36Pin, 64K Flash, 20KRAM, STM32F10X_MD
  • STM32F103TB, 36Pin, 128K Flash, 20KRAM, STM32F10X_MD
 
  • STM32L151C8T6: 64KFlash, 4KEEPROM, 32KRAM
  • STM32L151CBT6: 128KFlash, 4KEEPROM, 16KRAM
  • STM32L151CCT6: 256KFlash, 8KEEPROM, 32KRAM
  • STM32F030F4P6, TSSOP-20, 16KFlash, 4KRAM
  • STM32F030K6T6, TQFP32, 32KFlash, 4KRAM
  • STM32F030C8T6, TQFP48, 64KFlash, 8KRAM
我们最终的选择是 基站使用 STM32F103RET6, 标签使用 STM32F103CBT6。STM32L系列和STM32F0系列当时虽然列入候选,但是有采购困难/价格高等原因没有选择。
STM32每块芯片都有唯一ID,我们根据这个ID分配一个MAC地址和对应的EUI64 ID。这一步在设备出厂前进行。这样,我们就可以保证每一个出厂的基站和标签都有唯一的MAC地址和EUI64 ID。
 

如何从零开始实现TDOA技术的 UWB 精确定位系统(6)的更多相关文章

  1. 关于精准UWB人员定位系统解决方案

    WB技术, 目前主要应用在室内定位.人员定位系统等定位领域.近年来被应用在无线定位和雷达测距应用中,因此作为民用雷达和民用测距取得了较快的发展.而今天,我们主要要来介绍的产品就是UWB技术的芯片DW1 ...

  2. 浅谈UWB(超宽带)室内定位技术(转载)

    技术背景 随着无线通信技术的发展和数据处理能力的提高,基于位置的服务成为最有前途的互联网业务之一.无论移动在室内还是室外环境下,快速准确地获得移动终端的位置信息和提供位置服务的需求变得日益迫切.通信和 ...

  3. [转帖]新iPhone的黑科技:UWB技术揭秘

    新iPhone的黑科技:UWB技术揭秘 http://blog.nsfocus.net/iphone-black-technology-uwb-technology-revealed/    阅读:  ...

  4. 基于UWB技术的DW1000芯片简单解析

    近些年来随着物联网和机器人技术的大发展,精确定位技术的热度也随之攀升.目前精确定位的技术有很多,如基于wifi.RFID.zigbee.超声波.UWB等技术都可以实现精准定位.由于技术的不同,精度也不 ...

  5. 【硬件模块】UWB介绍

    From: https://liudongdong1.github.io/ UWB超宽带定位技术属于无线定位技术的一种.无线定位技术是指用来判定移动用户位置的测量方法和计算方法,即定位算法.目前最常用 ...

  6. 位置指纹(LF)定位技术简介-室内定位

        信号的多径传播对环境具有依赖性,呈现出非常强的特殊性.对于每个位置而言,该位置上信道的多径结构是惟一的,终端发射的无线电渡经过反射和折射,产生与周围环境密切相关的特定模式的多径信号,这样的多径 ...

  7. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...

  8. Linux基础介绍【第九篇】

    服务器添加3块磁盘的体系结构 [root@oldboylinux test]# free -m              total used free shared buffers cached M ...

  9. OpenCASCADE Conic to BSpline Curves-Circle

    OpenCASCADE Conic to BSpline Curves-Circle eryar@163.com Abstract. The conic sections and circles pl ...

  10. css精灵

    ○ css 精灵(Sprites)技术利用photoshop将图片整合,然后用background-images,background-position,background-repeat技术,对图片 ...

随机推荐

  1. HarmonyOS课程体验官招募(第四期),寻找乐于分享,精益求精的伙伴

      华为开发者联盟HarmonyOS课程体验官(第四期)活动,开始招募啦! 如果你精益求精.乐于分享:如果你愿意为学堂课程优化改进出谋划策,那就快来加入我们吧!学堂期待与你共同成长.一起进步! [活动 ...

  2. 重新整理.net core 计1400篇[四] (.net core 修改sdk )

    前言 可能有些人还不知道什么是sdk,software development kit,中文是软件开发包的意思. 然后什么是软件开发包? 软件开发工具包是一些被软件工程师用于为特定的软件包.软件框架. ...

  3. windows下redis主从配置

    1,复制两个redis文件夹,粘贴在同级目录下 2,分别修改6380和6381文件夹中的redis.window.conf文件 port:分别改为6380.6381 均增加:slaveof 127.0 ...

  4. 对中间件概念的理解,如何封装 node 中间件

    一.是什么 中间件(Middleware)是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享.功能共享的目的 在 ...

  5. 2024-04-21:用go语言,给一棵根为1的树,每次询问子树颜色种类数。 假设节点总数为n,颜色总数为m, 每个节点的颜色,依次给出,整棵树以1节点做头, 有k次查询,询问某个节点为头的子树,一共

    2024-04-21:用go语言,给一棵根为1的树,每次询问子树颜色种类数. 假设节点总数为n,颜色总数为m, 每个节点的颜色,依次给出,整棵树以1节点做头, 有k次查询,询问某个节点为头的子树,一共 ...

  6. JavaScript中字符串小知识

    1. 字符串是不可变的 字符串一旦创建就是不可变的,后续的修改都是新建一个新的字符串而不是在原有的字符串上修改 // 在内存中开辟 可以存放五个字母的空间 str指向该空间 let str = 'fi ...

  7. Java集成系列:高效构建自定义插件

    前言 随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战.传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效.快速的开发方式.今天小编就以构 ...

  8. Oracle SQL 常用的将varchar数据处理成number的正则

    Oracle SQL 常用的数据处理正则 去除所有的空格 replace(t.dxmz,chr(32),'') 匹配非纯数字 not regexp_like(t.zgbs,'^[[:digit:]]* ...

  9. 【笔记】Cross Join&lag与lead函数

    Oracle Cross Join交叉连接 语法 CROSS JOIN 指定第一个表的所有行与第二个表的所有行连接.如果 table1 中有"x"行,table2 中有" ...

  10. 力扣59(java)-螺旋矩阵Ⅱ(中等)

    题目: 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 输入:n = 3 输出:[[1,2,3],[8,9,4],[ ...