1 天线延迟的温度补偿
上篇文章说过,天线延迟会和温度有关,在不同温度下,天线延迟是不一样的,所以得根据温度变化情况进行补偿。
首先选定一个温度范围,一般来说,DW1000模块的工作温度是50~80℃。所以在50到80摄氏度之间选出多个温度进行测试延迟。
然后用MATLAB或者其他软件进行曲线拟合,得出延迟随温度变化的规律来进行补偿。
DW1000时钟频率为63.897GHz,(499.2MHz x 128),所以计数时间为15.65 皮秒(ps)假设在50℃是的延迟是0.0001ms,根据公式15.65 x n =0.0001ms,其中 n 是此时的天线延迟。多测几个不同的温度下的延迟,模拟出规律得到温度补偿系数。延迟随着温度升高在增加
float TempComp(float tem)
{
u16 Ant_Delay_Sum_Buff,Tx_Ant_Delay_buff,Rx_Ant_Delay_buff;
float CompValue;
if(ifUwbTemValid(tem) == YES ) //判断是否在温度范围(-40 ~ 125摄氏度)
{
CompValue = (tem - UsingAntDelayAdjustBaseTem)*TEMP_COMP_FACTOR; //(当前温度-校准时的温度)* 温度补偿系数
Ant_Delay_Sum_Buff = Ant_Delay_Sum + CompValue; //当前总延迟 = 本来延迟 + 温度延迟
Tx_Ant_Delay_buff = Ant_Delay_Sum_Buff*TX_DELAY_SCALE_IN_TOTAL;//发送延迟
Rx_Ant_Delay_buff = Ant_Delay_Sum_Buff - Tx_Ant_Delay_buff; //接收延迟
dwt_setrxantennadelay(Tx_Ant_Delay_buff);
dwt_settxantennadelay(Rx_Ant_Delay_buff);
return CompValue;
}
else
return 0;
}
2 标签天线延迟校准
如图所示,把两个基站放到相距4m的地方(理论上距离越长越好),然后把要校准的标签放于距离基站2m的地方(一定要放正中间,距离两个基站距离一样)。然后A0发送数据,分两条路(广播出去都能收到),第一条:A0 → A1(基站 A0 直接发给基站 A1) 第二条:A0 → T0 → A1(基站 A0 发给 标签 T0 ,标签 T0 收到后再转发给 基站 A1)。如果忽略 T0 的代码运行时间,那么基站 A1 收到这两条路时间应该是一样的。如果不一样则就是 T0 的天线延迟时间。
开始校准,A0 发送数据记下发送时间戳 Ta0, T0 收到 数据时间记下接收时间戳 Tt0,转发出去时记下发送时间戳 Tt1 ,A1 收到 A0直接发过来的数据记下接收时间戳 Ta1,收到 T0 转发的数据记下接收时间戳 Ta2。
如果没有天线延迟 则 Ta1 - Ta0 = Ta2 - Ta0 - (Tt1 - Tt0) 其中Tt1 - Tt0 就是 T0 从接收到转发数据这段时间的代码运行时间。
假设 T0 的天线延迟为 n,则 n = Ta2 - Ta0 - (Tt1 - Tt0) - Ta1 - Ta0 ,这样就得到了 T0 的天线延迟。初始化时设置一下天线延迟,T0 标签就校准好了。
这里的单位与用于系统时间和时间戳的单位相同,即499.2 MHz × 128,因此最低有效位约为15.65皮秒(即 n =1)。
3 基站天线延迟校准
基站校准需要用到一个已经校准好的标签
如图所示,A0 和 T0(已校准)放在相距4m的地方,然后进行测距,因为T0 已经 校准好,所以如果测量距离不是4m,那就是因为基站 A0 的天线延迟不对,所以根据天线延迟数值调大测距变小,调小测距变大去微调,当测量距离为4m时,基站A0 的天线延迟就校准好了。