基于TLC5620的数模转换器设计.doc
基于TLC5620的数模转换器设计设计背景: 数模转换器(Digital to Analog Converter)即DAC,是数字世界和模拟世界之间的桥梁。人类生活在模拟世界中,虽然数字器件及设备的比重日益增强,但是DAC的发展仍是必不可少的。从航空航天、国防军事到民用通信、多媒体、数字信号处理等都涉及到DAC应用。DAC基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。它是一种将二进制数字量形式的离散信号转换成以参考电压为基准的模拟量的转换器。设计原理: 本设计采用串行数/模转换芯片TLC5620,TLC5620是一个拥有四路输出的数/模转换器,时钟频率最大可达到1MHz。TLC5620芯片接口如下:该芯片主要有以下特点:四通道8位电压输出DA转换器、5V单电源供电、串行接口、高阻抗基准输入、可编程1或2输出范围、同时更新设备、内部上电复位、低功耗、半缓冲输出。该芯片主要应用于:可编程电源、数字控制放大器/误差器、移动通信、自动测试设备、研发过程检测和控制和信号合成等。转换公式:V = REF*(CODE/256)* (1+RNG)V:实际电压;REF:基准电压;CODE:输入8位数据;RNG:范围。TLC5620的接口时序如下列图所示:图1 LOAD控制更新(LDAC为低电平)图2 LDAC控制更新(LDAC为低电平)图3 LOAD控制更新(使用8位串行数据,LOAD为低电平)图4 LDAC控制更新(使用8位串行数据)如图1所示:当LOAD为高电平时,数据在CLK的下降沿被锁存至DATA,只要所有数据被锁存,则将LOAD拉低,将数据从串行输入寄存器传送到所选择的DAC。如图2所示:串行编程期间LDAC为高电平,数据在LOAD为低电平时进行锁存,当LDAC变为低电平时传送至DAC输出。如图3、4所示:输入数据最高位(MSB)在前,数据传输使用两个8个时钟周期。在本设计中运用的是图1的工作时序:数据通道选择:RNG:控制DAC输出范围。当RNG为低时,输出范围在基准电压和GND之间;当RNG为高时,输出范围为两倍的基准电压和GND。设计架构图: 本设计驱动TLC5620将输入的数字量转换为实际的模拟量(电压),通过四个按键控制四路输出的电压变化,每按一次,电压值也随之上升,同时在数码管上也依次显示相应的值(依次为A1,A0,RNG,输入DATA)。本设计采用的开发板的基准电压为2.5V。设计架构图如下所示:key_test模块通过四个按键输入的值,组合输出两个数据,11位的wr_data是TLC_DA模块解码所需的数据。20位的out_data是seg_num模块数码管显示所需的数据。设计代码: key_test模块代码如下:0 module key_test( /按键控制模块1 /端口信号:模块的输入输出接口2 input clk, /50MHZ3 input rst_n, /低电平复位4 input 3:0 key, /四个按键组合信号5 6 output 10:0 wr_data, /输出一帧数据,为DA模块的输入数字量7 output 19:0 out_data /输出数码管显示数据8 );9 10 /计数器时钟分频11 reg 30:0 cnt;12 reg clk_r; /分频时钟:在消除抖动的时钟频率下进行按键的检测13 always(posedge clk or negedge rst_n) /按键消抖,时间为0.2s进行一次检测14 if(!rst_n)15 begin16 cnt 测试代码:0 timescale 1 ns/ 1 ns /设置仿真时间单位与精度分别为1ns/1ns1 /若设为timescale 1ns/1ps (#200 就是延时200 ns; 1ps就是仿真的精度)2 module test; /测试模块:主要是将激励信号赋相应的值,仿真之后观察波形,验证与实际功能是否一样3 4 /端口信号定义,激励信号为reg型5 reg clk;6 reg rst_n;7 reg 3:0 key; 8 wire 7:0 seg;9 wire 2:0 sel;1011 /模块例化 12 top top( 13 .clk(clk),14 .rst_n(rst_n),15 .key(key),16 .seg(seg),17 .sel(sel)18 );1920 /初始化激励,以及给相应激励赋值 21 initial 22 begin 23 clk = 0;rst_n = 0; key = 4b1111; /在复位阶段,将激励赋初值24 25 #200 rst_n = 1; /在延时200ns后将复位信号置为12627 /实现按键1开,关28 #500000 key = 4b1110;29 #500000 key = 4b1111;30 31 end 32 33 always #10 clk = clk; /时钟的表示,即每隔10ns翻转一次,一个周期的时间即为20ns,时钟为1/20ns = 50MHZ 3435 endmodule 仿真图: 由于仿真时间原因,这里只测试按键1按下时的数码管显示,显示为00100,表示通道A,RNG为1,输入数字量为00。之后实际下板验证,用万用表也可测出输入数字量对应的电压值。