实训七模数和数模接口电路及程序设计
实训七 A/D和D/A接口电路及程序设计 一、实训目的 1.驾驭FPGA对一种A/D芯片的限制方法和设计 2.驾驭FPGA对一种D/A芯片的限制方法和设计 二、实训器材 1.EDA试验箱 1台 2.微型计算机 1台 3.MAX+PLUSII10.2软件 1套 4.下载电缆 1条 三、实训原理 (一).DAC0832 接口电路设计 DAC0832是采纳CMOS/Si-Cr工艺实现的8位D/A转换器。该芯片包含8位输入寄存器、8位DAC寄存器、8位D/A转换器。DAC0832中有两级锁存器,第一级即输入寄存器,其次级即DAC寄存器,可以工作在双缓冲方式下。 FPGA及DAC0832接口电路原理图 1.FPGA及DAC0832接口电路设计 FPGA_IO1~8向DAC0832的数据输入口(DI0~DI7)输送数据。 FPGA_IO9供应DAC0832数据锁存允许限制信号ILE,高电平有效。 FPGA_IO10供应DAC0832限制信号(CS:片选信号;Xfer:数据传输限制信号;WR1、WR2:DAC寄存器写选通信号),低电平有效。 Iout1、Iout2、Rfb及运算放大器LM324完成电流/电压的转换(DAC0832属电流输出型)。 2. DAC0832 输出限制时序图 依据DAC0832 输出限制时序,利用接口电路图,通过变更输出数据设计一个锯齿波发生器。DAC0832是8位的D/A转换器,转换周期为1μs。锯齿波形数据可以由256个点构成,每个点的数据长度为8位。又因为FPGA的系统时钟为50MHz,必需对其进行分频处理,这里进行64分频,得到的锯齿波的频率为762.9Hz。 DAC0832 输出限制时序图 (二)ADC0809接口电路设计 ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可限制8个模拟量中的一个进入转换器中。ADC0809的精度是8位,转换时间约为100µs,含锁存限制的8路开关,输出有三态缓冲限制,单5V电源供电。 FPGA及ADC0809接口电路设计 FPGA_IO1~8接收ADC0809 8位数数据; FPGA_IO9接收ADC0809 转换结束信号EOC; FPGA_IO10~12 为ADC0809供应8路模拟信号开关的3位地址选通信号(ADD-A~C); FPGA_IO13 为ADC0809供应地址锁存限制信号ALE:高电平常把三个地址信号送入地址锁存器,并经译码器得到地址输出,以选择相应的模拟输入通道; FPGA_IO14为ADC0809供应输出允许限制信号ENABLE:电平由低变高时,打开输出锁存器,将转换结果的数字量送到数据总线上; FPGA_IO15为ADC0809供应启动限制信号START:一个正脉冲过后A/D起先转换; FPGA_IO16为ADC0809供应时钟信号信号CLOCK; IN0~IN7:8路模拟信号输入端口; Vref+和Vref-:参考电压输入端口; 1. ADC0809的工作时序图 ADC0809的工作时序图 START是转换启动信号,一个正脉冲过后A/D起先转换;ALE是3位通道选择地址(ADDC、ADDB、ADDA)信号锁存信号。当模拟量送至某一输入端(如IN-0或IN-1)等,由3位地址信号选择,而地址信号由ALE锁存。 EOC是转换状况状态信号,当启动转换约100μs后,EOC产生一个负脉冲,以示转换结束。在EOC的上升沿后,且输出访能信号ENABLE为高电平,则限制打开三态缓冲器,把转换好的8位数据送至数据总线。至此ADC0809的一次转换结束 2.ADC0809采样限制状态图 四、设计程序(参考程序) --文件名:DAC0832.VHD --功能:产生频率为762.9Hz的锯齿波。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity DAC0832 is port(clk:in std_logic; --系统时钟 rst:in std_logic; --复位信号 ile:out std_logic; --数据锁存允许信号 cont:out std_logic; --限制信号(WR1、WR2、CS、Xfer) data_out:out std_logic_vector(7 downto 0)); --波形数据输出 end DAC0832; architecture behav of DAC0832 is signal q:integer range 0 to 63; --计数器 signal data:std_logic_vector(7 downto 0); --波形数据 begin process(clk) begin if rst= 1 then q<=0; --复位,对计数器q清零 elsif clk event and clk= 1 then if q=63 then q<=0; --此IF语句对系统时钟进行64分频 if data=“11111111“ then data<=“00000000“; --此IF语句产生锯齿波波形数据 else data<=data+1; end if; else q<=q+1; end if; end if; end process; ile<= 1 ;cont<= 0 ;data_out<=data; --ile、cont赋值;波形数据输出; end behav; --文件名:ADC0809.vhd --功能:基于VHDL语言,实现对ADC0809简洁限制 --说明:ADC0809没有内部时钟,需外接10KHz~1290Hz的时钟信号,这里由FPGA的系 --统时钟(50MHz)经256分频得到clk1(195KHz)作为ADC0809转换工作时钟。 library ieee; use ieee.std_logic_1164.all; use ieee.std_log