DW1000芯片的RF测试与校准(二):频偏与发射功率的设置
说明
发射功率和频偏是RF参数中比较重要的两个指标,对RF性能有极大影响。在校准前需要知道如何设置,这里进行介绍
频偏
DW1000的载波信号由外部晶振谐振得到的38.4Mhz时钟信号进行混频倍频而来,由于实际晶振谐振电路中存在各种寄生参数,电路得到的时钟信号不可能是标准的38.4Mhz。需要通过调整整个电路的谐振参数才能提高信号的精度。如果是老式的RF芯片,会教你通过调整晶振的两个匹配电容大小来进行调谐,需要人工频繁去焊接更换电容调试。幸运的是DW1000芯片内部另外集成了额外的匹配电容,通过软件设置来芯片内部寄存器来调整这个电容的大小就可以实现调谐了。
寄存器可调范围只有低五位,也就是范围是0x00-0x1F。31个挡位可以调整。在API库中提供了相关接口可以进行设置
而对于晶振的频偏是无法直接测量的,因为任何测量手段本身都会给谐振本身的参数带来影响(比如直接拿频谱仪探头怼到晶振引脚上),所以为了准确测量出频偏,我们可以通过测量RF的载波信号输出来变相得知晶振的频偏。
相关载波测量方法在上一节以及说过了,这里就不作复述,以下代码示范性如何调用API
/* Configure DW1000. */
dwt_configure(&config);
dwt_configuretxrf(&txconfig);
/* Configure xtal */
dwt_setxtaltrim(0x0f);
/* Activate continuous wave mode. */
dwt_configcwmode(config.chan);
事实上在user manual文档里section 8.1,有关于相关校准的详细说明,但操作比较复杂(他教你一个个寄存器怎么配置),而上述代码只需要调用几个API,实现的效果是一样的
校准方法比较简单这里先简单介绍下,校准的步骤就是通过边调整寄存器数值边观察频谱仪上的载波信号,通过一个个数值尝试把频偏调整到尽可能小即可。当然如果有认证要求,那就按认证要求的规范来进行调整即可。调整好的参数可以写到芯片的OTP区域,以后每次上电时就可以直接调用,不用每次都去做校准了。具体的步骤下一篇再具体说明。
发射功率
对于DW1000或者UWB技术来说,这里讲的发射功率指的更多是调制波的功率谱密度(PSD),所以后面讲发射功率一律指的是PSD。由于相关法规要求UWB的发射功率不能超过大约-41.3 dBm/Mhz。因此知道如何设置DW1000的发射功率来保证符合法规要求时很有用的。
对于DW1000,相关的发射功率设置是针对与整个帧来设置的。 也就是说他的设置不是针对载波而是针对调制波的各个部分
什么意思呢,就是说他可以单独给前导码、PHR设置不同的发射功率,让芯片能在发送一帧数据时让各个段的发射功率都不一样,设置寄存器如下,上面是关掉smart tx功能时(DIS_STXP=1)的寄存器各个位的意义,下面是打开smart rx时(DIS_STXP=0:default)寄存器各个位的意义:
smart tx是什么我们先不管,先看关闭smart tx时寄存器的意义
很简单就是对PHR和SHR两端进行设置发射功率。
为什么是对帧的部分进行设置呢,原因是根据相关法规,如果发一帧数据时,这一帧只在1ms内发一次,而且帧长不超过1ms持续发射时间。就可以把发射功率提高又不会违反之前的-41,3dBm/Mhz的法规限制。(这里我看的也很别扭,更详细的得自行研究文档和规范),所以DW1000就弄了个这样的东西出来。并且配套出了个smart tx功能能够自动调整发射功率。
例如上图,只对帧头和数据段进行增益
相关smart tx功能说明如下:
而当设置为smart tx时,发射功率设计寄存器的各个位作用如下:
这里可以看到,就是对常态帧、短帧时的某一段帧部分设置发射功率。
上述说明了32bit的寄存器分成了四段8bit的配置域,实际配置值和发射功率值的关系如下:
8bit区又分成了两部分,低5bit为细调,步进0.5dB,高3bit为粗调,步进为2.5dB。两者组合便是最终的增益值。
事实上述发射功率设置更多像是增益值。即原来的发射功率是固定的,芯片只是给了一个选择能对帧的部分进行增益。
代码设置反而很简单,只有两个API:
发射功率通过一个结构体传入API中,值就是直接写入寄存器的值。示例代码如下:
static dwt_txconfig_t txconfig = {
0xC0, /* PG delay. */
0x25456585, /* TX power. */
};
//dwt_setsmarttxpower(1); //default is enable
dwt_configuretxrf(&txconfig);
关于发射功率,官方有推荐默认数值
对于测试时,想要手动调整发射功率则需要切换为手动模式,然后配置寄存器值,例如想配置为最大功率发射,代码可以设置为如下:
static dwt_txconfig_t txconfig = {
0xC0, /* PG delay. */
0x1F1F1F1F, /* TX power. */ //MAX POWER
};
dwt_setsmarttxpower(0); //disable smart TX
dwt_configuretxrf(&txconfig);
关于校准方法比较复杂,这个下一篇再介绍。