DW1000的PLL失锁问题

发布时间 2023-09-14 17:50:49作者: 不回本不改名

DW1000的PLL失锁问题

说明

​ 许多DW1000用户在研发测试过程中读取芯片状态寄存器时,会发现芯片上述的两个PLL_LL位出现了置位情况。通过阅读旁边的说明可以了解到,该位置位说明PLL出现了失锁情况,芯片运行可能出现了故障。但对于失锁是什么意思,故障要怎么排查,这个故障会影响什么?很多人就不知道了,这里分享下这个失锁问题的相关资料。

PLL基本原理

​ PLL一般我们叫做锁相环,其基本原理为利用相位同步产生的电压,去调谐压控振荡器以产生目标频率。简单来说PLL就是个能将低频信号倍频到高频信号的电路,例如将输入的1Mhz的时钟信号倍频100倍,输出100Mhz时钟信号。

​ 但要注意这个倍频过程是动态的,PLL不是直接将原始信号瞬间倍频到目标倍数,而是会逐步倍频。例如一开始只是倍频10倍,随后慢慢到20倍,30倍.........直至到我们的目标值100倍。这个过程我们可以将其锁定过程,一旦PLL成功将原始信号倍频到目标频率,即可称为锁定成功。

​ 一般PLL锁定后,输出的目标信号的频率就不会再改变了。但是如果突发电气故障,例如电源电压不稳定,导致PLL电路工作异常,输出的信号频率变成不是我们要求的倍数,这样我们就称之为失锁。例如原本正常倍频输出100倍频信号,突然故障变成了99倍频。这时候使用这种异常的99倍频时钟信号给到其他电路使用,就有可能导致整个系统出现异常。

芯片内部架构

​ 在DW1000芯片中,时钟部分的结构如上图所示,芯片通过外置的晶振产生低频的38.4Mhz时钟信号。随后该低频信号输送给两个PLL电路进行倍频,分别是RF PLL和CLK PLL。

  • RF PLL:该PLL电路用于产生芯片RF模块电路所需的高频时钟,RF模块的调制解调电路都是基于该RF PLL时钟进行工作。一旦该时钟异常,将导致通信收发异常。例如载波出现频偏,无法发送正常的调制信号,或者接收信号后解调失败,导致出现无法通信情况。
  • CLK PLL:该PLL电路用于产生芯片数字模块电路所需的高频时钟,所有数字电路例如SPI接口、收发数字编解码等电路都是基于该CLK PLL时钟进行工作。一旦该时钟异常,将导致数字电路异常。例如SPI通信时序不对导致通信异常,内部定时器异常导致测距用的时间戳数据不正确。

这里芯片内部还有一个13Khz的低频时钟源,该时钟源有个两个用途,一是用于在芯片上电后,但PLL还未正常工作前,用于芯片内部数字电路临时使用。二是当芯片进入休眠状态,PLL电路关闭时,保持AON模块还能正常工作。

芯片外部电路

​ 两个PLL电路的大部分设计都在DW1000内部进行了集成,而少部分需要用户在外部搭建电路进行补全。参考设计电路如下:

这里需要用户补全的电路如下:

  • VDDBAT:晶振电路的电源输入引脚,用户需要提供3.3V稳定干净,低噪声纹波的电源。
  • XTAL1/XTAL2:外置晶振的输入引脚,晶振参数要求如下:

  • CLKTUNE/VDDCLK:CLK PLL中滤波器部分需要芯片外置电路来补全,外置电路通过这两个引脚进行连接,电路的结构和参数固定不可修改
  • VCOTUNE/VDDVCO:RF PLL中滤波器部分需要芯片外置电路来补全,外置电路通过这两个引脚进行连接,电路的结构和参数固定不可修改

​ 用户在设计PCB和原理图时,相关部分电路需要严格遵守手册和参考电路要求进行设计,并且PCB Layout时相关电路的器件要尽量靠近芯片对应引脚,以减少寄生参数干扰。

PLL启动流程

上电复位(POR)

​ 芯片的上电过程如上,对于PLL而言。当外部晶振成功起振并稳定后,芯片进入INIT模式。INIT模式下芯片以晶振提供的38.4Mhz频率运行,SPI速率最高只支持3Mhz。随后在该模式下芯片会自动使能CLK PLL,直到CLK PLL成功锁定,芯片转到IDLE状态,即全速运行状态。

休眠唤醒

​ 对于芯片的Sleep和Deep Sleep模式下,为了保持低功耗运行,会关闭PLL电路,停止晶振电路的供电,使外部38.4Mhz晶振停振。当用户唤醒芯片后,芯片会在WAKEUP阶段重新供电晶振电路,随后PLL启动流程和POR流程一致。

上述内容只提及了CLK PLL电路的启动流程,而对于RF PLL电路来说,芯片只有处于发射和接收状态才会启动。为了保持整体功耗尽可能低,RF PLL其余时间都是关闭的。

相关寄存器

​ 出了一开始给出的失锁指示寄存器位外,DW1000芯片还有其他一些寄存器位用于指示PLL的工作状态。

  • 用于指示CLK PLL已经锁定的CPLOCK位

  • 专门用于做分析调试用的PLL状态寄存器RF_STATUS

  • 用于使能PLL 状态位的PLLLDT

  • 另外还有关于PLL针对不同通信信道的配置寄存器FS_PLLCFG、调谐寄存器FS_PLLTUNE。

失锁原因分析

软件配置

​ 以一般经验来看,大部分PLL失锁问题和软件配置关系不大。对于出现失锁情况怀疑是软件配置有关的,可以用API库例程进行对比。API库中的例程都是经过测试验证的,对于PLL的配置都是没问题。如果用户跑API库中的例程也会出现失锁情况,那就需要考虑硬件故障。如果例程正常,用户自己的程序异常,那就应该检查PLL配置,例如配置寄存器FS_PLLCFG、调谐寄存器FS_PLLTUNE是否有针对对应信道写入正确的参数。

芯片/外围电路

​ 当上一步软件配置排查过没问题后,下一步就需要排查是否硬件故障。硬件故障有可能是芯片故障或者外围电路设计不良。要定位是哪一种情况可以通过更换新的芯片,或者将芯片换到官方开发板或者模块上进行对比验证。观察故障是跟着芯片走还是板子走来做故障原因的定位。

外围电路设计

​ 外围电路设计导致的失锁原因有很多,常见的有如下可能:

  • 电源纹波过大。芯片以VDDBAT引脚作为晶振电路的电源,该电源必须保证是干净稳定的,一般要求纹波小于50mVpp。如果系统其他部分干扰过大,那么应该如参考设计那样,单独为该电源配置一个LDO作为隔离。同时该引脚必须就近并联一个去耦电容来保证滤波效果。

  • CLKTUNE/VDDCLK引脚相关电路设计有问题。这两个引脚是PLL电路的重要组成部分,相关电路设计,器件参数需与参考设计保持一致。当出现失锁问题时,可以检测该部分电路的电压是否正常。

  • 晶振异常。晶振是整个电路的关键,当出现失锁问题时,需要确认晶振是否还在正常运行。可以检测晶振的电压波形是否正常,晶振的规格参数是否满足手册需求。

  • Layout设计不良。PCB Layout设计的不好理论上是会有可能影响这个电路正常运行。但这个分析起来比较复杂,而且可能性一般很小。

其他可能

  • 上电复位/休眠唤醒时序

一般芯片上电或者休眠唤醒时,时序不对会有可能导致失锁问题的发生。例如晶振起振时间过长,或者复位硬件电平释放的不及时。

  • SPI读写时序

一般芯片上电后,只有到IDLE状态PLL才会锁稳定。如果SPI读的太早,芯片还处于INIT状态。那有可能会出现失锁寄存器位置位。