UWB定位记录二(DWM1000模组介绍)
? ? 前言:上篇博客是對(duì)UWB理論方面的基本介紹,掌握基本理論之后肯定還需要去做工程實(shí)驗(yàn)來(lái)測(cè)試,所以這篇開(kāi)始從最普及的UWB芯片DWM1000的資料展開(kāi)對(duì)UWB工程實(shí)現(xiàn)的介紹。其實(shí)基本UWB理論知識(shí)在論文中都是很容易找到,但是具體的工程實(shí)現(xiàn)細(xì)節(jié)大多數(shù)論文都未詳細(xì)展開(kāi),故我把網(wǎng)上找到的相關(guān)資料整合介紹下。
??一、DWM1000模組介紹
? ? ?最開(kāi)始有一個(gè)問(wèn)題測(cè)時(shí)間差的問(wèn)題一直困擾著我,就是測(cè)距是基于d=c*t,d為距離,c為光速,t為時(shí)間差,一般我們的測(cè)距應(yīng)用范圍d都在幾十米以內(nèi),而c光速值約為3*10的8次方,那么t的值是納秒級(jí)別的,時(shí)鐘由晶振產(chǎn)生那么則需要Ghz級(jí)別的時(shí)鐘,這對(duì)于我經(jīng)常用到MCU都是在幾十M時(shí)鐘是不可想象的,所以我當(dāng)時(shí)一直找資料想是否需要加額外的倍頻器。后面了解到DW1000這款芯片后,知道這些UWB芯片本身都是可以做到的。
? ? 首先,DWM1000是Deca公司的一款用于UWB通信定位的模組,集成了DW1000芯片的基本外圍電路,兩者關(guān)系如下圖1-1所示。關(guān)于上段提出的問(wèn)題,解決方法是因?yàn)?strong>DW1000內(nèi)部有一個(gè)非常非常高的時(shí)鐘,高達(dá)64GHz左右,所以才可以做到厘米級(jí)的定位。
? ?
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖1-1
? ?之后,DWM1000模組和MCU的配合開(kāi)發(fā)也非常簡(jiǎn)單,兩者之間采用SPI通信,MCU通過(guò)幾個(gè)控制腳和SPI通信的四個(gè)IO腳便完成了基本UWB定位模塊,具體如圖1-2所示。DWM1000的基本資料其實(shí)在官網(wǎng)都可以免費(fèi)下載如圖1-3(包括其官方提高stm32和dwm1000的例程),只是官網(wǎng)https://www.decawave.com/product/dwm1000-module/需要翻墻,我后續(xù)會(huì)免費(fèi)上傳部分資料到CSDN上讓大家參考。
? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1-2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1-3
?二、DWM1000模組測(cè)距方法
? ? ? ? ? 上篇博客已經(jīng)基本介紹了基本定位方法包括TOA,TDOA,下面再介紹下兩種測(cè)距方法,兩者概念不要搞混,定位的前提是得到基站與移動(dòng)站的測(cè)距值或者是差值。
? 2.1.Single-sided Two-way Ranging?(SS)
? ? ? 首先是單次雙程測(cè)距法,具體流程是,設(shè)備A首先向設(shè)備B發(fā)出一個(gè)數(shù)據(jù)包,并記錄下發(fā)包時(shí)刻Ta1,設(shè)備B收到數(shù)據(jù)包后,記下收包時(shí)刻Tb1。之后設(shè)備B等待Treply時(shí)刻,在Tb2(Tb2=Tb1+Treply)時(shí)刻,向設(shè)備A發(fā)送一個(gè)數(shù)據(jù)包,設(shè)備A收到數(shù)據(jù)包后記下時(shí)刻值Ta2。然后可以算出電磁波在空中的飛行時(shí)間Tprop,飛行時(shí)間乘以光速即為兩個(gè)設(shè)備間的距離。具體如圖2-1所示。
Tround= Ta2-Ta1? ? ? ? ? ? ? ?//總時(shí)間差
Treply=Tb2-Tb1? ? ? ? ? ? ? ? ?//基站處理時(shí)間差
Tprop=(Tround-Treply)/2? ? ? //最終得到的標(biāo)簽與基站的UWB通信時(shí)間差,距離值即為T(mén)OF*c光速
因?yàn)樵O(shè)備A和設(shè)備B使用各自獨(dú)立的時(shí)鐘源,時(shí)鐘都會(huì)有一定的偏差,假設(shè)設(shè)備A和設(shè)備B時(shí)鐘的實(shí)際頻率是預(yù)期頻率的eA和eB倍,那么因?yàn)闀r(shí)鐘偏差引入的誤差error,設(shè)備A和B的時(shí)鐘偏差都會(huì)對(duì)Tprop值造成影響,并且直接影響我們的測(cè)量精度,因?yàn)楣馑偈?0cm/ns,所以很小的時(shí)鐘偏差也會(huì)對(duì)測(cè)量結(jié)果造成很大影響,而且這種影響是SS測(cè)距方式無(wú)法避免的。也因此SS測(cè)距很少被采用,大部分情況下我們都使用下一種,DS測(cè)距的方式。
? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2-1
2.2Double-sidedTwo-way Ranging(DS)
? ? ?官網(wǎng)例程代碼用的就是DS,剛開(kāi)始我也很費(fèi)解因?yàn)榭吹恼撐幕居玫亩际荢S也沒(méi)提到過(guò)DS。下面關(guān)于DS的介紹較為復(fù)雜,不了解可以再看過(guò)官網(wǎng)例程代碼后再來(lái)看下面的原理公式推導(dǎo)。
? ? ? DS測(cè)距是在SS測(cè)距的基礎(chǔ)上再增加一次通訊,兩次通訊的時(shí)間可以互相彌補(bǔ)因?yàn)闀r(shí)鐘偏移引入的誤差。假設(shè)設(shè)備A和設(shè)備B的時(shí)鐘精度是20ppm(很差)1ppm為百萬(wàn)分之一,那么Ka和Kb分別是0.99998或者1.00002,ka和kb分別是設(shè)備A、B時(shí)鐘的實(shí)際頻率和預(yù)期頻率的比值。設(shè)備A、B相距100m,電磁波的飛行時(shí)間是333ns。則因?yàn)闀r(shí)鐘引入的誤差為20*333*10-9秒,導(dǎo)致測(cè)距誤差為2.2mm,可以忽略不計(jì)了。因此雙邊測(cè)距是最常采用的測(cè)距方式。下面我將介紹官網(wǎng)的雙邊測(cè)距的代碼實(shí)現(xiàn)。
完成一次DS測(cè)距需要6個(gè)步驟,總流程如2-2所示。
1.設(shè)備A發(fā)送POLL包。并記下發(fā)送時(shí)間T1。并在一段時(shí)間后打開(kāi)RX。
2.設(shè)備B要提前打開(kāi)接收,然后收到POLL包,記錄時(shí)間T2.
3.設(shè)備B在T3(T3=T2+Treply1)時(shí)刻發(fā)送Response包,發(fā)送完之后打開(kāi)RX.
4.設(shè)備A收到Response包,記錄時(shí)刻T4。
5.設(shè)備A在T5(T5=T4+Treply2)發(fā)送Final包。
6.設(shè)備B收到Final包,記錄時(shí)間T6。
?
公式推導(dǎo):
Tround1 = Treply1 + 2Tprop;
Tround2 = Treply2 + 2Tprop;
Tround1*Tround2 - Treply1*Treply2 =4Tprop2 + 2Tprop*Treply1+2Tprop*Treply2;
Tround1?+Tround2 + Treply1?+ Treply2 = 4Tprop + 2Treply1 + 2Treply2;
所以Trop等于上圖的公式。
?
下面是具體的時(shí)間計(jì)算:
Tround1 = T4 - T1
Tround2 = T6 - T3
Treply1 = T3 - T2
Treply2 = T5 - T4
Tprop為電磁波飛行時(shí)間,乘以光速為測(cè)距距離。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2-2?
這個(gè)是SS與DS介紹的原文地址,要配合官網(wǎng)代碼分析https://msd.misuland.com/pd/3545776840385762452
總結(jié)
以上是生活随笔為你收集整理的UWB定位记录二(DWM1000模组介绍)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: TMDB数据导入elasticsearc
- 下一篇: 高级Bash脚本编程入门
