TDOA 的参考资料
datasheet
低功耗,低成本 的 UWB IC芯片. 提供 TWR测距 和 TDOA定位方案, 精度可达 10CM, 也支持6.8Mbps的数据通讯.
支持 6 个 RF bands. (3.5GHz - 6.5GHz)
输出功率可设置
低功耗设计.( SleepMode->1uA, 深度睡眠->50nA)
数据通讯(110Kbps, 850Kbps, 6.8Mbps), 最大报文 1023字节.
提供SPI接口. 48-PIN QFN
定位和数据通讯可并发.
抗多径干扰
天线是分时复用的.
软件主要的开发可用接口包括:
SPI
IRQ
SYNC
RSTn
Wakeup
DW1000上有OTP(One-Time Programmbale)区域. 能否保存校准数据(例如TX功率,晶振初始化频率修正值,距离置信度修正值等.)
DW1000上 AON(Always-On)区域. 用于在低电模式下保持配置数据的可靠性, 这些数据的转换是IC自动完成的.
DW1000的时钟主要包括三部分: 晶振, CLKPLL, RFPLL.
1. 外部晶振需要 38.4Mhz.
2. CLKPLL使用
38.4Mhz作为振源. 作为后端信号处理的时钟.
3.
RFPLL使用38.4Mhz作为振源. 作为前端信号发送/接收的时钟.
4. 13Khz的内部时钟, 用于 SLEEP Mode 的时钟.
DW1000 提供 Slave-Only SPI. 数据交互和配置均有MAC的CRC机制保证数据可靠.
WakeUP: 高电平有效. 从Sleep/DeepSleep模式下唤醒.
IRQ: 一般为高电平有效输出, 在
Sleep/DeepSleep模式下应当拉低配置, 以避免虚假输出.
RSTn: 拉低有效
Pulse Repetition Frequencies 脉冲重复率
通常DW1000 工作在 16Mhz / 64MHz (实际应该为 16.1/15.6 MHz || 62.89/62.4 MHz). BitRates 一般在 110 kbps, 850 kbps and 6.81 Mbps, 即有6中工作模式.
一般来说,较低的数据速率增加了接收方的灵敏度,增加了链路裕度和较长范围.但是由于给定数据字节数的帧长度较长,它们导致每帧占用的容量增加,并减少了单位时间内可以进行的单个传输的数量。
16mhz PRF使发射机功率消耗在64mhz PRF以上有微小的降低。16mhz和64MHz PRF可以在同一物理信道上共存而不受干扰
数据帧格式:
最大标准帧127Bytes. 包括2Bytes的FCS.
非标准的帧格式, 扩展帧可以到 1023字节. 此时 PHY为非标规定.
SHR: 同步头, 包括 开始符号(preamble symbols) + 帧开始界定符号(start frame delimiter)
在传输时, 各个部分在空中的持续时间根据PRF/DataRate有不同.
TX 与 RX 的状态切换需要一定的时间.
MAC层的帧格式.
MAC层的帧格式, 允许接收者自动过滤不符合自己规则的帧. DW1000允许配置规则来过滤接收的数据报文.
*******************************************************************
*******************************************************************
******************************************************************************
DW1000提供了在38.4 MHz参考晶体中消除初始频率误差的工具,
微调范围取决于所选晶体和所使用的负载电容。典型的微调范围为±25ppm是可能的。
在需要更严格的频率容限(最大范围)的应用中,可以使用外部振荡器(如TCXO)直接驱动XTAL1引脚
*******************************************************************
*******************************************************************
******************************************************************************
RF接收器
可以配置一个或者两个带宽. 500MHz/900MHz
自动增益控制.
确保最佳的接收性能
*******************************************************************
*******************************************************************
******************************************************************************
RF发送器
传输输出功率和频谱完全可调.
对于最大距离,发射功率应设置为使天线上的EIRP尽可能接近允许的最大值,在大多数区域为-41.3 dBm/MHz。
*******************************************************************
*******************************************************************
******************************************************************************
复位: RSTn 低电平有效. 当复位后应当被配置成 open-drain 开漏状态. 即Host端的GPIO口应该配置高阻抗.
*******************************************************************
*******************************************************************
******************************************************************************
SPI接口为 Slave-Only. 支持 clock polarities (SPIPOL=0/1) 以及 phases (SPIPHA=0/1)
传输时序为 先MSB, 后 LSB. 开始于SPICS=0, 结束于
SPICS=1.
*******************************************************************
*******************************************************************
******************************************************************************
通过SPI + DW1000的收发数据时, 建议的收发缓冲大小
TX Buffer -> 1024 * 8 --> 8K
RX Buffer -> 1024 * 8 * 2 --> 16K
*******************************************************************
*******************************************************************
******************************************************************************
在MAC层
DW1000能产生发送时间戳(通过天线延迟实现)和接收时间戳. 时间戳为40-bit的值(在64GHz下). 精度为15ps.
自动对数据帧产生 FCS
自动帧过滤
能设置成自动响应<请求帧>
拥有 双接收缓冲区.
*******************************************************************
*******************************************************************
外部同步
同步输入必须与外部频率基准同步,
即 SYNC 在 XTAL1上升沿之前至少有 10ns, 在XTAL1上升沿之后至少10ns.
*******************************************************************
*************** 用户手册部分 *****************************************
SPI通讯部分
1. 通讯模式. (CHPA/CHPL) 可以一次性写在 OTP 上.
2. 读写时序.
3. 读写格式.
3.1: 单字节读写
3.2 两字节头
3.3 三字节头
说明:
0xC9 = 1100 1001 -> 1写, 1子序号有效. 00 1001=0x09 基准寄存器地址.
0xB6 = 1011 0110 -> 1后面有附加地址. 011 0110 低7位偏移地址.
0x02 = 0000 0010 -> 高8位偏移地址,
则偏移地址为 0000 0010 011 0110 整理后为 000 0001 0011 0110 = 0x0136
*******************************************************************
*******************************************************************
中断脚: 配置寄存器.
中断的极性: 配置 (0x0D – System Control Register) 的 HIRQ_POL bit. 默认为 高有效(推荐的极性, 尤其在Sleep/DeepSleep模式下, 最好拉低)
中断事件: 配置 0x0E – System Event Mask Register
中断状态: 读取 0x0F – System Event Status Register
开机默认, 所有的中断事件被屏蔽并且中断被禁用.
*******************************************************************
*******************************************************************
DW1000提供 8个通用 GPIO.
通过 0x26 – GPIO control and status.
*******************************************************************
*******************************************************************
DW1000 的状态机
Wakeup 唤醒方式 (从Sleep/DeepSleep唤醒)
1. 把 Wakeup PIN置高电平, 并保持 500us. (配置 0x2C:06 – AON_CFG0 的 WAKE_PIN, 即唤醒PIN使能)
2. SPICSn引脚置低电平, 保持 500us, 并且保持 MOSI为低. (配置 0x2C:06 –AON_CFG0 的 WAKE_SPI, 即SPI唤醒使能)
Wakeup 唤醒方式 (从Sleep唤醒)
1. 睡眠计数器到达. (0x2C:06 – AON_CFG0 使能了WAKE_CNT以及适当的睡眠计数SLEEP_TIM )
睡眠时 数据会存在 AON (Always-ON memory)区域中. AON内容的保存和恢复需要 7 us.
*******************************************************************
*******************************************************************
开机的默认设置
0x04 – System Configuration
很多寄存器可以读取设置. 详见 UserManual.PDF P19. Sect2.5段落
主要为需要修改的寄存器. Sect 2.5.5 部分
AGC_TUNE1: 应当配置从 0x889B 到 0x8870, 以便于适应PRF 16Mhz
AGC_TUNE2: 按照合适的值配置
DRX_TUNE2:应该配置为 0x311A002D, 以适应 PRF/PAC
NSTDEV: 建议为 0xD
LDE_CFG2: 建议为 0x1607
TX_POWER: 建议 0x0E082848
RF_TXCTRL: 按照合适的值配置
TC_PGDELAY: 在channel 5 时建议为 0xC0
FS_PLLTUNE: 在channel 5 时建议为 0xA6
LDELOAD: 在 RX Enable前设置, 这个参数在读取时间戳时非常重要.
*******************************************************************
*******************************************************************
消息发送.发送事件由PHR Header被发送引发, 第一个PHR被天线送出的时间成为发送原始时间戳. 0x17 –Transmit Time Stamp, 相关的还有 0x18 – Transmitter Antenna Delay. 即 <发送原始时间戳> + Reg 18 = Reg17.
延迟发送. 0x0A – Delayed Send or Receive Time, 设置完时间, 然后在设置 0x0D – System Control Register 的 TXDLYS/TXSTRT. 一般用户双向测距的场合.
影响的因素:
1. MCU 有时可能会延迟调用延迟的TX. IC中使用 0x0F - 系统事件状态寄存器 警告这种“迟到”状态,以便在应用程序开发期间可以选择足够大的延迟以通常避免这种迟到
2. 在正常情况下,IC发射器需要几微秒来为发射器供电 - 这个时间是正确处理的 RMARKER 定位,但不包括在内 HPDWARN 计算。
3. 确保程序设计时, 保证 HPDWARN + TXPUTE事件不会发生.
扩展帧.
使用扩展需要收发双方都要设置 0x04 - System Configuration 的 PHR_MODE 位. 此模式下PHY被定义为携带3个额外帧长度.
高速传输
0x08 - 发送帧控制 的 TXBOFFS 可以允许TX_BUFFER保存多个帧. 即设置TXBOFFS 把索引设置为发送数据的偏移索引处并设置长度, 那么 DW1000在发送完第一帧后, 直接启动TXBOFFS指向的下一帧进行传输, 经典的做法就是PingPang. 即把 1024字节分成两个 512. 一个Buffer在发送过程中, 另外一个被改写.
*******************************************************************
*******************************************************************
消息接收
接收器将连续搜索前导码,直到检测到或获取前导码,此时将尝试进行解调。 可以设置前导码检测超时以允许接收器在期望的时段之后停止搜索前导码
SFD的检测事件记录为接收原始时间戳. 接收原始时间戳 - 接收天线延迟0x2E:1804 LDE_RXANTD 并添加DW1000第一路径(前沿)检测算法确定校准因子. 最终的时间戳记录在 0x15 - 接收时间戳 zhong .
延迟接收
0x0A – Delayed Send or Receive 设置事件点, 并且需要使能 0x0D – System Control 的 RXDLYE+RXENAB Bit.
Double RX Buffer 及其对应的寄存器组都是双重缓冲的.
用于MCU对一个缓冲读取时, DW100还可以接收数据到另外一个缓冲中. 这在TDOA模式下很有用, 可以避免在尽可能的接收Tag Blink信息时避免丢失的情况.
默认情况下是单缓冲的, 使能需要设置 0x04 – System Configuration 的 DIS_DRXB bit (0=启用)
如果 同时 RXAUTR bit(自动使能RX). (因为一般在接收完毕第一帧后需要手动在第二个buffer中接收的任务, 设置为自动后就不用在手动设置了.), 但是可能造成两个缓冲都满而溢出.
如果不设置RXAUTR , 那么会阻止两个缓冲区满(同时)并防止溢出。 这简化了缓冲操作, 但是将减少接收器可能主动侦听空中Blink帧的时间量.
访问两个缓冲区
有两组寄存器. register-set-0 + register-set-1, 但对于 MCU 仅能同时访问一组. 要切换访问需要设置 0x0D – System Control 的 HRBPT (Host Side Receive Buffer Pointer Toggle). 正在访问的是哪一组有 0x0F – System Event Status Register 的HSRBP bit 指示出来. 或者通过 0x0F – System Event Status Register. 的ICRBP status bit 确定当前正在使用那组寄存器.
这样, 在开启接收之前, 首先应当通过 0x0F – System Event Status Register. 的ICRBP 和 HSRBP 保证相同. 即同步 IC 和 MCU.
双缓冲的操作流程.
IC 端
1. DW1000 接收数据到 RX Buffer. (ICRBP指定)
2. 接收完毕后, 设置RXFCG 中断通知 MCU.
3. DW1000转移到下个RX Buffer, 继续接收
主机端
1. MCU得到中断, 读取数据 和 读取寄存器状态.
2. 通过HRBPT, 读取下个Buffer. (HRBPT相当于告诉DW1000, 已经读完当前RX BUFFER了, 你可以在重复利用这个BUFFER了)
异常处理
溢出: 当启用了 RXAUTR, 可能会造成溢出, 相关的描述
RXOVRR 状态位 寄存器文件:0x0F - 系统事件状态寄存器
0x2F:0E - RX溢出错误计数器
低功耗监听模式
只有在一帧到达时才会产生中断. 这样MCU可以进入SLEEP, 等待中断.
低功耗接收模式 SNIFF mode
对 preamble 的检测. 分为 Sniff mode / low duty-cycle sniff mode.
Sniff mode 在 IDLE/RX之间切换.
low duty-cycle sniff mode. 在 /init/idle/RX之间切换.
*******************************************************************
*******************************************************************
诊断方法
1. 通过IO+ LED方式. 0x26:00 – GPIO_MODE
2. 0x25 – Accumulator CIR Memory 访问
3. 接收帧的质量以及时间戳. 0x12 – Rx Frame Quality Information.
*******************************************************************
*******************************************************************
接收帧的质量以及时间戳的意义: 在于
1. 适时改变节点相关的网络路由或者配置, 以便于提供通讯的可靠性.
2. TDOA 系统中, 评定多个anchor的质量决定采用哪些 时间戳进行位置计算.
主要涉及的 0x12 – Rx Frame Quality Information. STD_NOISE 以及 FP_AMPL2
*******************************************************************
*******************************************************************
P4.7 目前中断, 先做其他的事情.
阅读(19787) | 评论(0) | 转发(0) |