微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于FPGA的虚拟现实定位系统

基于FPGA的虚拟现实定位系统

时间:02-02 来源:互联网 点击:

块的设计目标在于将三维磁阻传感器芯片HMC5883L良好的驱动并确定时序中数据的传输顺序.目前采用FPGA引脚对相对应的时序进行控制.

  HMC5883L传感器固定的时序中完成对数据的采集,采集到的数据是具有特定格式的数字量,需要经过一定算法分析和数据整理才能送往上位机进行操作. FPGA 与HMC5883L的通信采用了I2 C的通信手段,在代码编写的过程中采用了标准速率模式100kHz,在总线规定中,总线的位格式是一个8位数据/地址传送和1位应答位.如图3所示的格式 的时序情况.(点击可查看大图)

  HMC5883L的工作流程:首先要芯片的初始化进行数据等待,之后使用I2C的传输方式对数据进行控制.一个测试前的过程需要对应有的测量寄存器进行对 应的配置.首先发送配置寄存器A的配置量,为写操作,寄存器指令为默认值;第二步发送配置寄存器B的配置量,同样也为默认值;第三步发送模式寄存器的配置 量,即发送数据0X00(即连续测量模式).此时配置的寄存器的流程已经走完.之后进入读操作模式,此时根据时钟的采样速度,循环对传感器内部寄存器 03-08进行操作,得到X、Y、Z 三个方向上的数据,读入到代码设定的寄存器中.具体操作流程如图4所示.

  3.2 ADXL345数据采集模块设计

  ADXL345在虚拟场景系统中用于测量倾斜角,它的时钟驱动也是一系列的I2 C驱动时钟周期.本模块的设计也是针对于ADXL345的时钟驱动和对应的数据读取所进行的.倾斜角的寄存器内容的获取是整个模块的主要内容.

  在实际的场景系统中主要用到了X、Y、Z 三个方向上的偏移寄存器,用于测量中修正原始位置的测量误差.对于数据采集速率则是由寄存器OX2C即寄存器BW_RATE的CH0-CH3所控制.对于 三维重力加速度传感器而言,主要的初始化也是通过常见的I2 C总线与FPGA 进行通信,在数据获取方面集中在X、Y、Z 三个重力方向上的寄存器数据.其时序图如图5 所示,代码编写过程中与HMC5883L共用总线同时都受FPGA的控制,属于系统控制的从端.同样的,三维重力加速度传感器也需要根据测量需求去输入初 始化寄存器的配置.然后对需要读取的寄存器数据位进行总线读取,并存入到配置好的8bit寄存器保存好打包传往上位机进行数据分析.(点击可查看大图)

  3.3 场景数据分析

  在地磁的测量过程中需要对数据进行必要分析才能得到对应的方位角度.

  由HMC5883L 和ADX345传感器我们可以得到地磁场在空间三个轴上的分量磁场大小分别为Hx、Hy、Hz以及加速度传感器测量俯仰角φ 和横滚角θ.

  式中Ax、Ay、Az是重力加速度传感器三个方向上测量得到的加速度值.在特定的公式计算下可以大致得到目前物体所处的顺时针方位角a为

  以上是初步估计出来得到方位角参数,计算中不可忽略的还有HMC5800L还受到外部磁性干扰,其中较为突出的是硬磁效应和软磁效应[8~9]一般而言 对于硬磁效应,我们采取的方法是将物体至于场景中旋转360°,然后经过多次的采样得到X、Y、Z 坐标的最大值Xmax、Ymax、Zmax和最小值Xmin、Ymin、Zmin然后对于硬磁效应来说就是偏移量为

  硬磁效应只需要使用测试的数据值加上off 的偏移值便可,而对于软磁效应,补偿的方法比较复杂,一般可以使用公式进行适当的估算,项目中初步使用式(12)进行补偿.其中Xr为真实的无干扰的坐标 值,a为其干扰系数,一般软磁干扰就需要大量的数据去得到a 的值.一般情况下可以采取特定的角度进行数据采样,然后根据数据的

  实际值Xr和对应无干扰的值Xc进行运算,求出a的这个系数的值便可.

  3.4 以太网通讯模块设计

  LAN8700是SMSC公司的一款以太网物理层芯片.

  LAN8700由编码器/解码器.扰码器/解扰器.波形整形器.输出驱动器.自适应均衡双绞线接收器.时钟数据恢复功能模块组成.

  FPGA模块编程中定义了UDP_User_int模块来实现数据打包的详细过程,另外MAC的物理层通信由MAC_top模块来实现,包括PHY的初始 化.时钟的控制.发生数据的控制.MII接口的控制.接收数据控制,寄存器的控制等,都定义了UDP_TOP顶层模块来实现FPGA与它们的接口顺利传输 数据.以太网驱动模块实现的RTL门级结构图如图7所示.

  其中ip_local和mac_local是本地IP和MAC地址;每组E_RXD和E_TXD都是4个32位数据,E_RXD是接收MAC层的数 据,E_TXD是发送给MAC层的数据;每组send_zb_value都是64个32位数据,打包成了UDP包,send_zb_value是发送至以 太网的UDP包,同时定义了send_en来作为发送数据的使能信号;E_COL和E_CRS分别是冲突检测和载波侦听信号,他们的作用是用来控制着 UDP包的正确发送.

4

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top