一種快速UWB 測距方法(單周期法) -- 代碼實現


在之前的分析過一種快速測距方法原理:https://www.cnblogs.com/tuzhuke/p/12359038.html

這里做代碼實現。 測距分為設備A 和 設備B,與原理部分NodeA NodeB對應。

代碼中,設備B,也就是NodeB,啟動發送。

NodeB:將之前的兩個時間戳加載到數據包中,開始上電的時候,這個時間戳信息可能是無效的。

NodeA 接收到NodeB,根據原理部分,需要處理自己的時間戳,同時通過數據包的信息,獲取NodeB 時間戳信息,然后變可以計算距離信息

NodeA,收到NodeB后,同時要回復一條信息

case 'D'://distance
   msg_f_send.messageData[0]='d';
   msg_f_send.messageData[1]=msg_f->messageData[1];

   dwt_writetxdata(psduLength, (uint8 *)&msg_f_send, 0) ; // write the frame data
   dwt_writetxfctrl(psduLength, 0);
   /* Start transmission. */
   dwt_starttx(DWT_START_TX_IMMEDIATE);
   //MUST WAIT!!!!!
   while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_TXFRS)))
   { };
   dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_TXFRS|SYS_STATUS_RXFCG);
   Handle_TimeStamp();
以上就是NodeA處理的所有主要事件。NodeA發送給NodeB,Node B更新事件戳,並准備下次發送給NodeA,依次往復不停測距。

NodeB發送時定時發送的,可以改成收到NodeA信息后,立馬發送,測距頻率會大幅提高!

                case 'd'://distance
                    BroadCastComplete =1;
                    tx_node[msg_f_recv->messageData[1]].tx_ts[0] = get_tx_timestamp_u64();
                    tx_node[msg_f_recv->messageData[1]].rx_ts[0] = get_rx_timestamp_u64();
                    break;  

代碼下載:51uwb.cn

更多信息請關注51uwb.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM