代码下载
罗盘Pmod控制器(顶层文件): pmod_compass.vhd (13.7 KB)
I2C主控制器(必须包含在项目中): i2c_master.vhd (14.1 KB)
特点
- 用于Digilent Pmod CMPS2(搭载Memsic MMC34160PJ磁力计的Pmod模块)的流线型接口VHDL源代码
- 持续通过3个并行接口(每个轴对应一个)输出最新磁场数据
- 处理I2C通信及罗盘Pmod的所有数据采集
- 处理磁力传感器的分辨率与测量频率配置
- 用户可自定义分辨率与测量频率
- 可配置系统时钟频率
介绍
本文详述了用于FPGA与Digilent三轴数字罗盘Pmod(如图1所示)接口对接的VHDL组件。图2展示了该罗盘Pmod控制器集成至系统的典型实例。如图所示,罗盘Pmod控制器连接Pmod端口并执行配置Pmod及采集数据的事务。数据持续更新,并通过3个简易并行接口呈现,分别对应x轴、y轴和z轴的磁场数据值。
图 1 。 Digilent三轴数字罗盘Pmod
图 2 。 实现示例
操作原理
罗盘Pmod控制器主要由状态机和I2C主控组件构成。
状态机
该设计采用图 3 所示的状态机来实现其操作。启动时,该组件立即进入初始( start ) 状态。在此状态保持10ms以确保Pmod有充足的上电时间。随后进入配置状态,设置磁力计输出分辨率,启用连续测量模式(Continuous Measurement Mode),并设定连续测量的频率。暂停状态实现与测量频率周期相等的停顿。在接下来的read_data ( 读取数据 ) 状态中,控制器从Pmod采集最新磁场数据。最终在output_result( 输出结果)状态输出数据。随后在pause (暂停) 、read_data (读取数据) 和output_result (输出结果) 状态间持续循环,以保持磁场数据更新。虽然状态图中未显示,但任何时候重置组件都会使其返回初始( start ) 状态。
图 3 。 状态图
I2C 主控制器
在配置( configure ) 和读取数据( read_data ) 状态期间,状态机控制一个I2C主组件与Pmod上的MMC34160PJ磁力计进行通信。I2C主控的文档可在此处查阅。
配置指南针 Pmod 控制器
通过设置实体中的通用参数来配置指南针Pmod控制器。
系统时钟频率
通用参数sys_clk_freq 必须设置为提供给指南针Pmod控制器(Compass Pmod Controller)clk 端口的系统时钟频率。
分辨率
通用参数resolution 用于设置磁场测量的分辨率。该参数还决定了x 、y 和z 数据输出的宽度。有效选项为12位、14位和16位。默认为16位。若将resolution 设为任何无效值,分辨率也将默认为16位。
更新频率
通用参数update_freq 用于设置测量频率及x 、y 和z 数据输出的更新频率。参数值对应于磁力计控制寄存器中设置测量频率所需的位。表1列出了有效的参数设置及其对应的更新频率。默认设置为"11"(50 Hz)。
表 1. 更新频率设置
端口描述
表2描述了指南针Pmod控制器的端口。
表 2. 端口描述
连接方式
该Pmod采用6针连接器。表3提供了该连接器的引脚定义。需要将指南针Pmod控制器(Compass Pmod Controller)的端口分配给已路由至此连接器的FPGA引脚,具体分配如列表所示。
表 3. 指南针Pmod引脚定义及与指南针Pmod控制器的连接
该Pmod还配备了两个跳线。必须启用(即连接)这些跳线,以接入SCL和SDA所需的I2C上拉电阻。
复位
reset_n 输入端口必须保持逻辑高电平,指南针Pmod控制器组件才能正常工作。该端口的低电平将异步复位组件。复位期间,该组件会中止与Pmod的当前事务,并清除x 、y 、z 数据输出及i2c_ack_err 输出。一旦解除复位状态,指南针Pmod控制器将重新开始运行。它会重新配置Pmod,并继续采集和输出磁场数据。
结论
此指南针Pmod控制器是可编程逻辑组件,可与Digilent的Pmod CMPS2(三轴数字指南针Pmod)对接。它负责处理与该Pmod的所有通信,配置Pmod的磁力计,并通过并行输出持续提供更新的磁场数据流。





