概述
1.造成天线延迟的原因
要说UWB的天线延迟,我们就得知道发送时间戳和接收时间戳,时间戳和 UWB传输数据的协议IEEE 802.15.4有关,我们先看一下帧格式
这个帧格式的具体内容我们后面文章再详细说明,先看一下发送时间戳和接收时间戳。
发送时间戳:DW1000芯片发送PHR部分的第一位时记录下的时间。
接收时间戳:DW1000芯片接收到PHR部分的第一位时记录的时间。
发送到接收的过程是发送端的DW1000把帧发送到天线,然后天线发到接收端的天线,然后再到接收端的DW1000。
从图中我们可以看出,两个设备之间的距离在传输电磁波所需时间是T2,但是时间戳记录的时间却多了T1和T3,且T2是在空气中传播,T1和T3是在固体中传播。
电磁波在空气中的传播速度接近光速(c0=299792458m/s),所以我们在测距的时候是以光速来计算距离。而电磁波在固体中传播的速度却比在空气中小得多,而且会根据芯片温度,发射和接收功率等的影响。
假设T1和T3总计才用了0.1us的时间,但是距离误差已经是 299792458 * (1*10^(-7) ) = 29.979米
这已经不是误差了,已经到了没有办法测距的地步。所以必须进行天线的延迟校准。
2.天线延迟校准
为了精确测量距离,需要精确计算时间戳,所以天线延迟必须是已知的。所以校准就要实际测试去调试。比如实际距离是10米,UWB测的距离是12米,则天线延迟就改大。天线延迟数值改大,则测量距离变小,天线延迟数值改小,则测量距离变大。
#define TX_ANT_DLY 16436
#define RX_ANT_DLY 16436 //分别进行发送和接收的天线延时
#define TX_ANT_DLY 0
#define RX_ANT_DLY 32950 //全部加到接收天线延时或者也可以全部加到发送天线延时
dwt_setrxantennadelay(RX_ANT_DLY);
dwt_settxantennadelay(TX_ANT_DLY);
//延时发送
final_tx_time = (resp_rx_ts + (RESP_RX_TO_FINAL_TX_DLY_UUS * UUS_TO_DWT_TIME)) >> 8;
dwt_setdelayedtrxtime(final_tx_time);
final_tx_ts = (((uint64)(final_tx_time & 0xFFFFFFFE)) << 8) + TX_ANT_DLY;//需要加发送延迟
dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED );
本来天线延迟可以和并到一起,就是把T1 和 T3 和并到一起。这样校准比较方便。如果没有用到延时发送,到无所谓,但是用到延时发送时,延时发送时间里面有 TX_ANT_DLY,这样就会导致时间戳不对,从而影响测距。所以天线延迟校准最好分开校准。以免造成不必要的误差。
为了在校准过程中达到最高精度,建议使用接收机的功率输入来校准天线延迟,参数级别如下
如果发送机设置为-41.3dBm /MHz,(最大值,使用时一般都用此值)并且使用0 dBi 天线,则发射天线和接收天线的距离会根据表格中的参数来进行校准。
通过选择距离(或者接收功率)来校准组合的发射机和接收机的天线延迟,用于校准和修改接收机的天线延迟,直到设备给出误差允许的范围读数为止。
3 接收功率和发射功率
3.1 接收功率
可以使用公式计算接收功率的估计值(dBm)
C: 是 CIR_PWR 中报告的通道脉冲响应功率值,这是一个16位的值,报告来自信道估计的最高功率部分的累加器大小的平方和,这与接收信号功率有关,该值可用于评估接收信号的质量和,或者LDE算法产生的接收时间戳。
A: PRF为 16 MHz 时 A为 113.77 ,PRF为 64 MHz 时 A为 121.74。
N: 是 RXPACC中报告的序文累积计数值,这可以用来估计接收到的TX前导的长度,也可以在诊断期间作为解释累加器数据的辅助。
所以计算接收功率时,需要读出寄存器 ID 为 0x12 中的 CIR_PWR 值 和 寄存器 ID 为 0x10 的 RXPACC 值,根据上面公式进行计算。
由此得到的接收功率的估计值,该值非常接近低功率时候的实际接收功率,但低于高功率时候的实际接收功率。下面的图显示了实际接收功率和该估计值的功率之间的关系
3.2 发射功率
如图所示,增益控制范围为33.5 dB,由32个0.5 dB的细(混频器增益)控制步长(低5位),和7个3dB的粗(DA增益)步长组成(高3位),为了获得最佳的谱形,应首先调整粗增益,再用细增益进行微调。发射功率由 ID 为 0x1E 的寄存器来控制。
为了获得最佳性能,制造商必须校准每个单元的TX功率,以考虑IC到IC的变化以及不同IC到天线的损耗。通常TX功率设置为光谱发射法规允许的最大值(-41.3 dBm/MHz),并且不超过其他带外限制。
发射功率越高,发射距离越远,但是功率太高会对人或者其他造成危害或影响,所以对发射功率进行限制,不过如果是那种很短的帧,1ms 以内可以发射完,并且在同1Ms内 不再进行发送,则发射功率可以超过 -41.3 dBm 的限制。为了利用这一点,DW1000包含了智能发射功率控制功能,当帧短时自动提高传输的TX功率。
为了防止测量范围外其他UWB信号的干扰,可以对不同距离进行设置不同的发射功率。只要把该发射功率设置到可以到达该距离的功率就行,不仅减小其他UWB 设备的干扰,还减少了功耗。
u8 SetUwbTxPowerWithDis(u8 Dis)
{
double TxPower = 30;
if(Dis == 0 || Dis > 200)
return ERROR;
//大功率模块
if(HardWareVer == HG_HIGH_POWER_A)
{
if(Dis <= 5)
TxPower = 10;
else if(Dis <= 10)
TxPower=20;
else if(Dis <= 15)
TxPower=25;
else if(Dis <= 35)
TxPower=30;
else
TxPower=33.5;
}
else
{
if(Dis <= 5)
TxPower=20;
else if(Dis <= 10)
TxPower=25;
else if(Dis <= 15)
TxPower=30;
else
TxPower=33.5;
}
dBToTxPowerRegValue(TxPower,&TXpowerSetRegValue);
dwt_write32bitreg(TX_POWER_ID, TXpowerSetRegValue); //把发射功率恢复到进入数传模式之前的值
//printf("Txpower anto Set to %.1lf %08xn",TxPower,TXpowerSetRegValue);
return SUCCESS;
}
//dB值转换成四字节重复的设置值
u8 dBToTxPowerRegValue(double dB,u32 *TxpowerRegValue)
{
double CoarsedBValue,FinedBValue;
u8 CoarseRegValue,FineRegValue;
u8 RegValue;
if(dB > 33.5)
return ERROR;
CoarsedBValue = (u8)(dB/3)*3;
if(CoarsedBValue > 18)
CoarsedBValue = 18;
//printf("CoarsedBValue = %lfn",CoarsedBValue);
FinedBValue = dB - CoarsedBValue;
if(FinedBValue > 15.5)
FinedBValue = 15.5;
//printf("FinedBValue = %lfn",FinedBValue);
CoarseRegValue = 0x00 + ((18 - (u8)CoarsedBValue)/3)*2;
FineRegValue = (u8)(FinedBValue/0.5);
//printf("CoarseRegValue = %dn",CoarseRegValue);
//printf("FineRegValue = %dn",FineRegValue);
RegValue = (CoarseRegValue<<4) + FineRegValue;
//printf("RegValue = %xn",RegValue);
*TxpowerRegValue = (u32)RegValue;
*TxpowerRegValue += (u32)RegValue<<8;
*TxpowerRegValue += (u32)RegValue<<16;
*TxpowerRegValue += (u32)RegValue<<24;
return SUCCESS;
}
最后
以上就是忧伤翅膀为你收集整理的UWB-DW1000的天线延迟补偿和发射功率调节(二)的全部内容,希望文章能够帮你解决UWB-DW1000的天线延迟补偿和发射功率调节(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复