1. 实验 引言

ADC 和 DAC 是模拟量和数字量之间不可或缺的桥梁。而 AD、DA 转换器在数字控制系统中也有着重要地位。D/A 转换器把收到的数字控制信号转换成模拟信号,实现对被控对象的控制。而 A/D 转换器将各种模拟信号转换为抗干扰性更强的数字信号,直接进入数字计算机进行处理,存储并产生数字控制信号。

2. 实验 目的

熟悉串行模/数转换芯片 TLC549 的使用方法,掌握利用有限状态机实现一般时序逻辑分析方法,了解一般状态机的设计与应用。

3 . 实验内容

本实验的内容是利用状态机实现对 TLC549 的采样控制,制作一个简易的电压表。实验时通过调节电位器 RW1 改变 ADC 的模拟输入值,数据采样读取后由数码管显示,最后用万用表测量输入电压,并与读取到的数据(经换算后的数据,单位为 MV)作比较。

4. 实验 原理

TLC549 是一个 8 位的串行模数转换器,A/D 转换时间最大 17us,I/O 时钟频率可达 1.1MHz。如图 1 所示为 TLC549 的访问时序,从图中可以看出当 CS 拉低时,ADC 前一次的转换数据(A)的最高位 A7 立即出现在数据线 DATA OUT 上,之后的数据在时钟 I/O CLOCK 的下降沿改变,可在 I/O CLOCK 的上升沿读取数据。读完 8 位数据后,ADC 开始转换这一次采样的信号(B),以便下一次读取。转换时片选信号 CS 要置为高电平。设计操作时序时要注意 Tsu(CS)、Tconv 及 I/O CLOCK的频率等几个参数。Tsu(CS)为 CS 拉低到 I/O CLOCK 第一个时钟到来时间,至少要 1.4us;Tconv 为 ADC 的转换时钟,不超过 17us;I/O CLOCK 不能超过 1.1MHz。其他参数请参考数据手册。

forum.jpg

1-11

由于 ADC 是 8 位的,所以采样的电压值为

V=(D*Vref)/256

其中 V 为采样的电压值;D 为 ADC 转换后读取的 8 位二进制数;Vref 为参考电压值,这里是 2.5V。

5. 硬件设计

forum.jpg

1-22

6. 系 统 结构框 图

forum.jpg

1-33

forum.jpg

1-44

7. 代码解释

我们的 ADC 驱动模块是使用序列机的方式实现的,由于 ADC 采集时序时严格按照时钟周期来运行的,既然如此,我们是否可以跟踪时钟上升沿个数,然后在不同的时间节点做不同的动作,来控制严格的时序呢?以下 tlc549_driver 模块的程序清单,将给出答案。

forum.jpg

Verilog代码展现

上述代码可知,cnt1 不断的跟踪时钟沿到达的个数,由于 ADC_clk 需要的时钟不能大于 1.1MHz,在这里我们选择每 25 个快时钟驱动 ADC_clk 翻转一次,这样一个完整的 ADC_clk 周期为系统时钟的 1/50=1MHz。然后,我们在对应计数节点的位置,采集 ADC 数据即可。

通过上述时序,我们可以正确的采集到 ADC 传输的数据,可是如果要将数据显示到数码管,首先我们需要将数据换算成为对应的电压值。

我们计算出来的数据为二进制数,如果需要更加直观的显示到数码管,还需要进行进制转换,将二进制数转换成为 BCD 码

8. 程序清单

(1)工程顶层模块(文件名 AD_TLC549.v)

该模块为工程顶层模块,负责将 ADC 驱动模块(tlc549_Driver.v)、显示控制模块(Control.v)和数码管驱动模块(DIG_LED_DRIVER.v)按照逻辑关系级联。

(2) ADC 驱动模块(文件名 tlc549_Driver.v)

该模块为 ADC 驱动模块,负责输出 ADC tlc549 的接口访问时序。

(3) 显示控制模块(文件名 Control.v)

该模块为 ADC 数据显示控制模块,负责将 ADC 采集到的二进制数换算成电压值,并经过二进制到 BCD 转化以后,传送到数码管进行显示。

(4) 数码管驱动模块(文件名 DIG_LED_DRIVER.v)

该模块为数码管驱动模块,负责将 ADC 显示控制模块传递过来的数据输出到数码管显示。

forum.jpg

Verilog代码设计