ADC AD7991 Pmod控制器(VHDL)

逻辑主页

代码下载

ADC AD7991 Pmod控制器(顶层文件):pmod_adc_ad7991.vhd (12.5 KB)

I2C主控制器(必须同时包含在项目中):i2c_master.vhd (14.1 KB)

特点

  • 用于Digilent PmodAD2模块(基于ADI公司AD7991模数转换器的Pmod)的简化接口VHDL源代码
  • 持续输出4个转换通道的最新数据至对应并行接口
  • 处理I2C通信及ADC Pmod的所有数据采集
  • 可配置系统时钟频率

介绍

本文详述了与Digilent ADC AD7991 Pmod接口的VHDL组件,如图1所示。图 2 展示了集成到系统中的这款 ADC Pmod 控制器的典型示例。如图所示,ADC Pmod控制器连接Pmod的I2C端口,通过执行事务从ADC的4个转换通道采集数据。数据持续更新并通过简单并行接口输出,可连接至用户逻辑或FPGA输出端口。

1 Digilent ADC AD7991 Pmod模块

2 实现示例

操作原理

ADC Pmod控制器主要由状态机和I2C主控组件构成。

状态机

该设计采用图 3 所示的状态机来实现其操作。启动时,该组件立即进入启动状态。该状态持续100ms以确保Pmod完成上电。在随后的read_data 状态 中,控制器从Pmod的ADC获取最新数据。通过单次I2C事务完成数据传输,并将每个ADC通道的4位头信息和12位数据分别存储于独立缓冲区。在output_result 状态 中,利用头信息将12位数据结果路由至正确的并行输出端口。随后在read_dataoutput_result 状态间循环切换,保持ADC数据持续更新。任何时候复位组件都将使其返回初始状态

3 状态图

I2C 主控制器

read_data 状态期间,状态机控制I2C主控组件与Pmod上的ADC进行通信。I2C主控的文档可在此处查阅。

系统时钟频率

在实体中,通用参数sys_clk_freq 必须设置为提供给ADC Pmod控制器clk 端口的系统时钟频率(以Hz为单位)。

I2C 上拉电阻

与大多数Digilent的Pmod板不同,上文图2所示的I2C上拉电阻并未包含在PmodAD2上。若缺少这些电阻,I2C总线将无法正常工作。

用户可按图示在电路中接入2.2kΩ电阻解决此问题。

Digilent其他多款采用I2C的Pmod模块已包含这些电阻,并配有连接器可将额外Pmod接入同一I2C总线。若该ADC Pmod与上述Pmod配合使用,用户可直接利用这些板上已有的上拉电阻,无需额外操作。

I2C 地址

Digilent的PmodAD2参考手册指出,与AD7991通信时应使用"0101000"作为I2C地址。但Analog Devices生产的AD7991存在多个版本,其I2C地址各不相同(参见数据手册第12页表8)。型号AD7991-0使用地址"0101000",而AD7991-1使用地址"0101001"。

遗憾的是,Digilent生产的该Pmod混用了两个版本(可能无意为之),导致部分Pmod无法按描述工作。具体Pmod的版本可通过查看AD7991上的部件标记确定,如图4所示。

4 AD7991部件标记

"C55"代表AD7991-0型号,无需修改。

"C56"代表AD7991-1型号,需修改pmod_adc_ad7991.vhd文件第119行以适配此差异:

i2c_addr <= "0101001";

端口描述

表 1 描述了 ADC Pmod 控制器的端口。

1. 端口描述

连接方式

该Pmod配备8针连接器。表2提供了该连接器的引脚定义。需将ADC Pmod控制器的端口分配至FPGA引脚,这些引脚已按清单路由至该连接器。Pmod板上J1连接器的两排引脚已内部连通,因此只需将单侧连接至FPGA。

2. ADC 7991 Pmod引脚定义及与ADC Pmod控制器的连接

该Pmod模块还配备了一个跳线。JP1跳线必须将中间引脚连接至标有V4的引脚。这样可将ADC的第4通道连接至J2接口的输入引脚,从而启用该通道。

复位

为使 ADC Pmod 控制器组件运行,reset_n 输入端口必须为逻辑高电平。该端口的低电平将异步复位组件。复位期间,该组件会中止与Pmod的当前事务。同时清除并行数据输出和i2c_ack_err 输出信号。复位释放后,ADC Pmod控制器将重新启动,继续采集并输出ADC数据。

结论

本ADC AD7991 Pmod控制器是可编程逻辑组件,用于连接Digilent的PmodAD2模块(ADC AD7991 Pmod)。它负责处理与该Pmod的所有通信,采集Pmod ADC四个通道的数据,并通过四个并行输出端口持续提供更新数据流。

相关主题

I2C主控制器(VHDL)