代码下载
NAV Pmod控制器(顶层文件): pmod_nav.vhd (30.9 KB)
SPI主控制器(需同时包含在项目中): spi_master.vhd (8.9 KB)
特性
- 针对Digilent Pmod NAV模块(VHDL源码),提供精简接口实现。该模块集成ST Microelectronics LSM9DS1 iNEMO惯性传感器与LPS25HB气压传感器
- 持续输出最新三轴加速度数据至三条并行总线
- 持续输出最新三轴陀螺仪数据至三条并行总线
- 持续输出最新三轴磁力计数据至三条并行总线
- 持续输出最新气压数据至并行总线
- 通过SPI通信配置NAV Pmod并获取数据
- 可配置加速度计输出数据速率及满量程范围
- 可配置陀螺仪输出数据速率及满量程范围
- 可配置磁力计输出数据速率及满量程范围
- 可配置气压传感器数据速率
- 可配置系统时钟频率
简介
本VHDL组件详细说明与Digilent 10自由度NAV Pmod的接口实现,如图1所示图2展示该NAV Pmod控制器集成至系统的典型应用实例如图所示,NAV Pmod控制器连接Pmod接口端口,执行配置加速度计、陀螺仪、磁力计及气压传感器的通信事务随后持续采集数据数据通过简易并行总线(每个自由度对应一条)实时更新输出,可连接至用户逻辑或FPGA输出端口
图 1. Digilent NAV Pmod模块
图 2. 应用示例
工作原理
NAV Pmod控制器主要由一个状态机和一个SPI主控组件构成。
状态机
设计采用图3所示状态机实现其操作。组件启动后立即进入初始**(start) 状态。它会在此状态保持200毫秒,以确保Pmod有充足的时间完成上电。
随后进入一系列配置状态,向iNEMO惯性模块和MEMS压力传感器的各个控制寄存器写入数据,以配置相应传感器并启动其运行。configure_accelerometer 状态用于设置加速度计的全量程范围。configure_magnetometer 状态将磁力计设为全轴高性能模式,进入连续转换模式,并设置其输出数据速率和全量程范围。configure_gyro 状态同时配置加速度计和陀螺仪的输出数据速率(二者必须相同),并设置陀螺仪的全量程范围。configure_pressure 状态使压力传感器进入激活模式,并配置其输出数据速率。
配置完成后,pause 状态会在数据读取之间插入1毫秒间隔,因为所有传感器的最大数据速率均低于1kHz。状态机依次经过read_data_accelerometer 、read_data_magnetometer 、read_data_gyro 和read_data_pressure 状态,从各传感器采集数据。最后在output_result 状态将处理后的数据输出到并行总线,随后再次暂停直至下次数据采集。
虽未图示,但任何时候重置组件都会使其返回初始 (start) 状态。
图 3. 状态图
SPI 主控器
在各个 configure 和read_data 状态期间,状态机通过控制SPI主控组件与Pmod上的传感器通信。SPI主控器文档详见此处。
本设计采用CPOL='1’且CPHA='1’模式实现SPI主控。根据系统时钟频率(通过clk_freq 通用参数指定,见下文)设置clk_div 参数,以实现与传感器5MHz或接近5MHz的通信速率。
本设计还利用SPI主控的连续模式特性来执行不同长度的传输事务。
配置 NAV Pmod 控制器
通过设置实体中的通用参数来配置NAV Pmod控制器。
系统时钟频率
通用参数clk_freq 必须设置为提供给NAV Pmod控制器clk 端口的系统时钟频率(单位MHz)。
加速度计与陀螺仪数据速率
通用参数 accelerometer_gyro_data_rate 定义了加速度计和陀螺仪进行测量的频率。由于二者必须保持相同数据速率,因此仅有一个参数。该参数为对应目标数据速率的编码值。下表1列出了可选配置。默认值为"110",如:952Hz。
表 1. 加速度计与陀螺仪数据速率选项
加速度计满量程
通用参数 accelerometer_full_scale定义了加速度计的数据量程。该参数为对应目标量程的编码值。下表2列出了可选配置。默认值为"00",如±2g。
表 2. 加速度计满量程选项
陀螺仪满量程
通用参数gyro_full_scale 定义了陀螺仪的数据量程。该参数为对应目标量程的编码值。下表3列出了可选配置。默认值为"00",即245dps。
表 3. 陀螺仪满量程选项
磁力计数据速率
通用参数magnetometer_data_rate 定义了磁力计进行测量的频率。该参数为对应目标数据速率的编码值。下表4列出了可用的选项。默认值为“111”,如:80Hz。
表 4. 磁力计数据速率选项
磁力计满量程
通用参数magnetometer_full_scale 定义了磁力计的数据范围。该参数为对应目标量程的编码值。下表5列出了可用的选项。默认值为“00”,如:±4高斯。
表 5. 磁力计满量程选项
绝对压力数据速率
通用参数pressure_data_rate 定义了压力传感器的测量频率。该参数为对应目标数据速率的编码值。下表6列出了可用的选项。默认值为“100”,如:25Hz。
表 6. 压力传感器数据速率选项
端口描述
表7描述了NAV Pmod控制器的端口。
表 7. 端口描述
连接方式
该Pmod带有一个12针直角连接器J1。表8提供了该连接器的引脚定义。NAV Pmod控制器的端口需按所列分配至连接器对应的FPGA引脚。
表 8. NAV Pmod J1引脚定义及与NAV Pmod控制器的连接
复位
reset_n 输入端口必须保持逻辑高电平,NAV Pmod控制器组件才能正常工作。该端口低电平将异步复位组件。复位期间,该组件会中止与Pmod的当前事务,并清除加 速度 _x ( acceleration_x ) 、加速度 _y ( acceleration_y ) 、加速度 _z ( acceleration_z ) 、角速率 _x ( angular_rate_x ) 、角速率 _y ( angular_rate_y ) 、角速率 _z ( angular_rate_z ) 、磁场 _x ( magnetic_field_x ) 、磁场 _y ( magnetic_field_y ) 、磁场 _z ( magnetic_field_z ) 以及气压( pressure ) 数据输出。复位释放后,NAV Pmod控制器将重新开始运行。它会重新配置传感器,随后继续采集并输出数据。
结论
此NAV Pmod控制器是可编程逻辑组件,用于连接Digilent的Pmod NAV(10自由度导航模块)。它负责处理与该Pmod的所有通信,配置Pmod的所有传感器,激活测量,并通过10个并行输出总线(每个自由度对应一个)持续提供更新的数据流。










