UWB发送接收调测记录

最近调测UWB的收发,比较困扰的是DW1000是半双工通信方式,也就是要么在RX,要么在TX,那么标签和基站如何协同工作呢,比方B标签发包的时候,基站一定要在RX才能收到包,否则发包就会失败,这个协同如何来做呢?


其实官方给的例子有一个demo,是能说明这个协同的想法的,但是其中的延时,配置多少合适,这也是困扰我好久的问题!



呱牛笔记



1、延时发送

//final_tx_time = (resp_rx_ts + (RESP_RX_TO_FINAL_TX_DLY_UUS * UUS_TO_DWT_TIME)) >> 8;

final_tx_time =   dwt_readsystimestamphi32() + ((RESP_RX_TO_FINAL_TX_DLY_UUS * UUS_TO_DWT_TIME) >> 8);//0x17cdc00 / 70; //10ms/7

//logD("[5] final_tx_time = %u", final_tx_time);

dwt_setdelayedtrxtime(final_tx_time);

 

2、延时接收

标签:

dwt_setrxaftertxdelay(POLL_TX_TO_RESP_RX_DLY_UUS);//#define POLL_TX_TO_RESP_RX_DLY_UUS 300

基站:

dwt_setrxaftertxdelay(RESP_TX_TO_FINAL_RX_DLY_UUS);//#define RESP_TX_TO_FINAL_RX_DLY_UUS 500


根据延时发送和延时接收的time推测,对时间窗口的对齐的理解还是有帮助的,但是具体值应该配置为多少,这里以官方的代码验证这个值应该如何配置!

POLL_TX_TO_RESP_RX_DLY_UUS0x68001f2
    失败的包/总共发送的包
丢包率计算
0149/750
159/8060.19
300126/752
218/11750.18
260032/2700.11
61/4900.12
68/529
71/572
230028/3280.08
32/356
33/361
210037/228
220028/1950.14
240011/93
44/3000.14
235016/109
2310101/8700.11

始终没有找到一个最优值,还需要继续研究!


3、RX超时

dwt_setrxtimeout(0);//配置为0表示不超时


/*

假设数据实际接收的时间为12ms左右,所以要设置为12000(UWB ms),一个UWB ms几乎可以按1us来算,为了保险起见,设置为15000

*/

dwt_setrxtimeout(15000);


如果设置rx timeout 为40ms超时

dwt_setrxtimeout(20000); //20ms超时


4、SFD超时次数控制;

config 中会配置SFD检测失败的最大次数:

static dwt_config_t config =
{
    2,               /* Channel number. */
    DWT_PRF_64M,     /* Pulse repetition frequency. */
    DWT_PLEN_1024,   /* Preamble length. Used in TX only. */
    DWT_PAC32,       /* Preamble acquisition chunk size. Used in RX only. */
    9,               /* TX preamble code. Used in TX only. */
    9,               /* RX preamble code. Used in RX only. */
    1,               /* 0 to use standard SFD, 1 to use non-standard SFD. */
    DWT_BR_110K,     /* Data rate. */
    DWT_PHRMODE_STD, /* PHY header mode. */
    (1025 + 64 - 32) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */
};


#define DWT_SFDTOC_DEF              0x1041
void dwt_configure(dwt_config_t *config)
{
    if(config->sfdTO == 0)
    {
        config->sfdTO = DWT_SFDTOC_DEF;
    }
}

5、前导码超时控制;

这个超时是失败重试的次数,简单说,就是前导码检测多少次失败后,会上报一个超时中断!

/* Preamble timeout, in multiple of PAC size. See NOTE 6 below. */

#define PRE_TIMEOUT 2048//64

dwt_setpreambledetecttimeout(PRE_TIMEOUT);


6、MAC层协议:IEEE 802.15.4 UWB physical layer

呱牛笔记


0x68001F2


参考:https://blog.csdn.net/Mculover666/article/details/115034596






-----2022.05.18更新---------------------------

之前有一个问题,一直被困扰着,就是收发不稳定,这个不稳定表现为标签发送完包后,始终等不到基站回应的包,要么等待SFD超时,要么PHY超时,错误码也是很多种,比方:0x20800FF3、0x20200F3、0x20017F3、0x28001F3、0x68001F3、0x48001F3

怎么解决的呢?每次标签定位之前,先重置下Radio,发现就稳定好多:

dwt_write8bitoffsetreg(SYS_CTRL_ID, SYS_CTRL_OFFSET, (uint8)SYS_CTRL_TRXOFF) ; // Disable the radio


请先登录后发表评论
  • 最新评论
  • 总共0条评论