ADC_《AD7938》12位高速并行模数转换器_HJ_第1页
ADC_《AD7938》12位高速并行模数转换器_HJ_第2页
ADC_《AD7938》12位高速并行模数转换器_HJ_第3页
ADC_《AD7938》12位高速并行模数转换器_HJ_第4页
ADC_《AD7938》12位高速并行模数转换器_HJ_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AD7938 模数转换 - Soochow university HJ 2010-12-201 引脚图 2 内部结构图 3 引脚功能VIN0VIN7模拟输入8通道(用以采集模拟信号的通道)未使用的通道应接地,减少噪声CLKIN工作时钟,13个输入的CLK周期为一个转换周期,可以连续或间断输入CONVST开始转换命令,下降沿开始保持,并进入转换周期CS片选。与WR、RD配合可以从数据口读数据或写数据进内部寄存器BUSY忙输出,为高则表示正在转换W/B字/字节模式。字模式下可写内部寄存器WR,RD读使能,写使能DB8/HBEN 数据位8/高位数据线使能当W/B引脚为高电平,则此引脚为DB8;W/B

2、引脚为低电平,则此引脚为高位数据线使能HBEN当HBEN为低电平时,低8位数据被读到DB0DB7;当HBEN为高电平时,高四位数据被读到DB0DB3DB0DB7DB9DB11数据位0-数据位7,数据位9-数据位11(字模式下有效)受控于CS, RD, WR三引脚,逻辑高低电平取决于VDRIVEVDRIVE数字电源(不能比VDD高0.3V),数字逻辑基准电平输入VDD模拟电源(范围2.7V-5.25V)VREFIN/OUT输入/输出参考电压(将采集的模拟信号量化为数字量的基准)DGND数字地,为芯片中的所有数字电路提供零电位AGND模拟地4功能简介:AD7938是12位高速逐次比较型ADC,外接

3、频率源决定转换速率,内置2.5V参考电压源(也可外接参考源),8通道接口(软件配置接入方式),内置转换顺序管理器(自动切换多通道轮流转换),高速并行接口(支持字模式(12bs)和字节模式(8bs)。AD7938片内有两个只写寄存器: (控制寄存器的数据写入由CS和WR控制,在字模式下从DB0到DB11输入(初始化全为0),影子寄存器的数据在WR的上升沿由DB0到DB7写入) 12位的控制寄存器(设定芯片不同工作模式和状态)DB11DB10DB9DB8DB7DB6DB5DB4DB3DB2DB1DB0PM1PM0CODDNGREFADD2ADD1ADD0MODE1MODE0SHDWSEQRANGE

4、PM0,PM1:确定电源方案。00则正常工作01则转换一次后自动待机,10则转换一次后自动停机,11则完全停机。ADD2,ADD1,ADD0,MODE1,MODE0:设定模拟输入方式通道地址MODE0=0MODE1=08通道单端输入MODE0=0MODE1=14通道完全差分输入MODE0=1MODE1=04通道准差分输入MODE0=1MODE1=17通道准差分输入ADD2ADD1ADD0VIN+VIN-VIN+VIN-VIN+VIN-VIN+VIN-000VIN0AGNDVIN0VIN1VIN0VIN1VIN0VIN7001VIN1AGNDVIN1VIN0VIN1VIN0VIN1VIN7010

5、VIN2AGNDVIN2VIN3VIN2VIN3VIN2VIN7011VIN3AGNDVIN3VIN2VIN3VIN2VIN3VIN7100VIN4AGNDVIN4VIN5VIN4VIN5VIN4VIN7101VIN5AGNDVIN5VIN4VIN5VIN4VIN5VIN7110VIN6AGNDVIN6VIN7VIN6VIN7VIN6VIN7111VIN7AGNDVIN7VIN6VIN7VIN6无效无效SEQ,SHDW:决定顺序管理器工作方式。00则不启用顺序管理器(此时转换通道由ADD2ADD0决定),01则接下来写操作将数据写入影子寄存器,且立即启动顺序管理器工作10则可改写控制寄存器其他

6、位,不会终止顺序管理器的工作11则自动从0通道至由ADD2ADD0决定的最高转换通道轮流转换,不必写影子寄存器CODDNG:1则输出数据二进制补码,以输入范围的中点为0 0则输出数据位二进制码。REF:1则选用内部参考电压。 0则使用外部参考源。RANGE:1则设定输入范围为02VREF 0则设定输入范围为0VREF 8位影子寄存器(设定转换的模拟通道,仅当顺序管理器工作时有效)DB7DB6DB5DB4DB3DB2DB1DB0VIN7VIN6VIN5VIN4VIN3VIN2VIN1VIN0AD7938影子寄存器每一位对应一个模拟通道(置1则选定),最高位对应VIN7,最低位对应VIN0。转换次

7、序设定好后,每次CONVST引脚有效,则自动按照最低通道到最高通道的次序轮流转换。仅当SEQ,SHDW被设定为其他方式(除10)时停止写12位的控制寄存器当使用顺序管理器时,在CONVST引脚构造下降沿,每次按影子寄存器自动转换结束读出数据即可。当未启用顺序管理器时,在CONVST引脚构造下降沿,开始转换,BUSY引脚由高变低即可读出数据。然后重复之前操作5 应用指南PARALLEL INTERFACEAD7938/AD7939有一个灵活的,高速,并行接口。该接口是12位(AD7938)或10位(AD7939)宽,无论是在字(W/B=1)或字节(W/B=0)模式下均可操作。CONVST的信号用

8、于启动转换,当在自动关机或自动待机模式下运行时,它用来启动上电。   CONVST的下降沿用于启动转换,它将ADC采样-保持功能加入到采样。一旦CONVST信号变为低电平,则BUSY信号会变高用于提供持续的转换时间。在CLKIN信号的第14个下降沿,CONVST必须被设为高电平,且需保持至少T1时间。否则,转换被中止,采样-保持状态返回到采样状态. 如转换结束,则BUSY信号变低,用于激活一个中断服务程序。CS和RD有效,读取12位或10位转换数据。当电源首次给芯片供电时,必须产生一个CONVST上升沿以将采样-保持功能加入到采样。在CONVST信号变低启动转换之前,CON

9、VST信号至少要保持高电平125 ns。在CONVST的下降沿ADC进入保持状态,在CLKIN信号第13个上升沿时回到采样状态(见图36)。在自动关机或自动待机模式下,如ADC在转换结束时断电,一个CONVST的上升沿信号用于启动上电。Reading Data from the AD7938/AD7939   当W/B=1时,AD7938/AD7939接口工作在字模式,在这种情况下,一个读操作即可获取引脚DB0/DB2 到DB11上的字数据,DB8/HBEN引脚作DB8功能。当W/B=0时,AD7938/AD7939接口工作在字节模式,在这种情况下,DB8/HBEN引脚作H

10、BEN功能,必须两个读操作才可获取转换数据,每个读操作得到引脚DB0到DB7上的8位数据,HBEN引脚负责决定读操作获取12位或10位字的高字节或低位字节。对于低字节读,DB0到DB7提供的12位字的八个最低有效位。对于10位操作,低字节的两个最低有效位是0,六转换数据位之后。对于高读字节,DB0到DB3提供了12位or10位字的四个最高有效位。到高字节DB7 DB5提供通道的ID。图36显示了一个12位或10位读周期时序图。在字模式下,HBEN输入不存在的,只需一次读操作即可从芯片访问数据。当在字节模式时,两个读周期,如图37所示,必须要访问device.The CS和RD信号的完整的数据字

11、的门控内部和水平触发低有效。无论字或字节模式,CS和RD可同时有效, 因为T10和T11最小为0 ns,这意味着总线不断受到AD7938/AD7939驱动。   当CS和RD变低后,时间T13用于将转换数据放置到数据总线上。在RD的上升沿将转换数据锁存。经过t14时间,数据线又变为为三态。   另外,如(本次转换数据已读取后)CS和RD一直保持低电平,转换数据仍有效存在,一直被放在数据总线上,直到下次转换周期的BUSY下降沿之前的t9时间。   请注意,如果在转换时间内RD信号有脉冲波动,这会导致约0.25 LSB的线性度性能下降。在

12、读周期时CS和RD同时有效不会造成任何性能下降。Writing Data to the AD7938/AD7939   当W/B=1时,一个写操作即可将DB0到DB11引脚上的字数据配置进AD7938/AD7939的控制寄存器。DB8/HBEN作DB8功能。写入AD7938/AD7939的数据应被放在DB0到DB11的引脚上,DB0是字数据的LSB。当W/B=0时,AD7938/AD7939需要两个写操作传输一个完整的12位字。 DB8/HBEN承担其HBEN功能。写入AD7938/AD7939数据应提供关于DB0到DB7输入。 HBEN决定是否写入的字节高字节或低字节的数

13、据。数据字的低字节应该先写与DB0是完整的数据字的LSB。对于高字节写,HBEN应该是高投入和对DB0数据应该是数据位的12位字8。在字和字节模式里,一个写操作即可配置影子寄存器,因为它只是8位宽,图38显示了在字模式下AD7938/AD7939写周期时序图。在Word模式下,HBEN输入不存在的,只需一个写操作即可将数据写入芯片。数据由DB0到DB11提供。当在字节模式时,两个写在图39所示的周期需要写完整的数据字的AD7938/AD7939。在图39,第一次写入的数据传输从DB0字的低8位DB7,第二写传输上四个数据字位。当写入AD7938/AD7939,高四位字节必须为0。 &

14、#160; 数据在WR上升沿被锁存到芯片。在WR上升沿之前,该数据需要时间t7建立,并在WR上升沿后保持时间t8。 CS和WR信号选通内部。CS和WR可同时有效,t4和t5时间最小可为0 ns(假设CS和RD未同步)。时序约束6 自己应用 AD7938是8通道10/12位的ADC,外接频率决定转换速度,最高可达1.5M采样率。其内部有12位的控制寄存器和8位的影子寄存器。以对0通道和2通道两路循环采样转换为例,CLKIN、W/B、Vref分别给出转换时钟,输出数据模式,参考电压,在CS和WR的作用下将12位配置数据放在并口上,在WR上升沿会自动载入内部控制寄存器,将其中的SEQ,SHDW位设定

15、01,再次在CS和WR的作用下将8位配置数据放至低位并口上,在WR上升沿会自动载入内部影子寄存器。接下来启动读进程,在CS、CONVST的作用下,启动转换,等待AD的BUSY为低(需要14个时钟)时,在RD的上升沿将转换好的数据放至DB0DB11,等待来读。第一个读周期读取低通道转换数据,接下来依次到高通道,循环读取。用状态机设计法(VHDL语言)对AD7938进行采样控制1初始化:硬件:VDRIVE、VDD(工作电源+3.3V)VREFIN/OUT(接外部参考源+3.3V)DGND、AGND(分别接地)W/B=1:字模式下工作(12位转换输出)软件配置:写12位控制寄存器、写8位的影子寄存器

16、2 状态机转换图:3 VHDL源程序:源程序文件夹名:ad7938_004_05- - - - - -功能,对输入口Vin0和Vin2循环采样,并通过两路12位的并口直接输出- - - - - -library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity justtryp is port(AD7938_buffer_in: inout std_logic_vector(11 downto 0); -来自7938转换好的12位数据 clk:

17、 in std_logic; -FPGA工作时钟 (区别于7938工作时钟) busy: in std_logic; -转换状态指示,高电平表示正在转换 cs: out std_logic:='1' -片选信号 convst: out std_logic:='1' -转换开始信号,下降沿保持 rd: out std_logic:='1' -读数据 wr: out std_logic:='1' -写数据使能 wb: out std_logic; -字与字节模式 AD7938_buffer_out0: out std_logic_ve

18、ctor(11 downto 0); -12位数据输出 AD7938_buffer_out2: out std_logic_vector(11 downto 0); -12位数据输出end justtryp;architecture Behavioral of justtryp is signal read_state:integer range 0 to 13:=0; signal write_state:integer range 0 to 9:=0; constant delaytime:std_logic_vector(7 downto 0) := x"04" si

19、gnal delaycount: std_logic_vector(7 downto 0) :=delaytime; signal real_value0: std_logic_vector(11 downto 0); signal real_value2: std_logic_vector(11 downto 0); signal lock0: std_logic:='0' - 0通道转换后数据读出标志 signal lock2: std_logic:='0' - 1通道转换后数据读出标志 constant wb_value: std_logic:='

20、1' - 字模式有效 signal flag: bit:='0'-写数据与读数据标志 signal oe: bit:='0'-双向口输入输出标志 signal AD_value: std_logic_vector(11 downto 0); constant AD_control_value : std_logic_vector(11 downto 0):=x"004" -PM1,PM0,CODDNG,REF:0000,使用外部参考源 -ADD2,ADD1,ADD0,M0DE1:0000,xxx设定输入通道 -MODE0,SHDW,S

21、EQ,RANGE:010x,x设定输入电压范围 constant AD_shdw_value : std_logic_vector(11 downto 0):=x"005" -DB7DB0begin AD7938_buffer_out0 <= real_value0; AD7938_buffer_out2 <= real_value2; wb<=wb_value; AD7938_buffer_in<=AD_value when (oe='0') else (others => 'Z') ;-oe为0时作输出口,否

22、则则置为高阻状态作输入-process (lock0) - 此进程中,在lock0的上升沿将数据读出begin if lock0='1' and lock0'event then real_value0 <= AD7938_buffer_in ; end if;end process; -process (lock2) - 此进程中,在lock2的上升沿将数据读出begin if lock2='1' and lock2'event then real_value2 <= AD7938_buffer_in ; end if;end pr

23、ocess; -process (clk) -延时后再开始工作begin if (clk'event and clk='1') then if (delaycount /= x"00") then delaycount <= delaycount - 1; end if; end if;end process; -process (clk) begin if (clk'event and clk='1' and delaycount= x"00" ) then if(flag='0')

24、then -写状态有效 write_state<=write_state+1; if(write_state=9)then write_state<=0; flag<='1' oe<='1' end if; case write_state is when 0=>cs<='1'convst<='1'wr<='1'rd<='1' when 1=>cs<='0'convst<='1'wr<=&#

25、39;1'rd<='1' AD_value<= AD_control_value; when 2=>cs<='0'convst<='1'wr<='0'rd<='1' when 3=>cs<='0'convst<='1'wr<='1'rd<='1' -在wr上升沿,AD自动将数据读入内部寄存器 when 4=>cs<='1'convst<=&

26、#39;1'wr<='1'rd<='1' when 5=>cs<='1'convst<='1'wr<='1'rd<='1' when 6=>cs<='0'convst<='1'wr<='1'rd<='1' AD_value<= AD_shdw_value; when 7=>cs<='0'convst<='1&#

27、39;wr<='0'rd<='1' when 8=>cs<='0'convst<='1'wr<='1'rd<='1' -在wr上升沿,AD自动将数据读入内部寄存器 when 9=>cs<='1'convst<='1'wr<='1'rd<='1' when others => write_state <=0; end case ; else -读状态有效

28、read_state<=read_state+1; if(read_state=13)then read_state<=0; end if; case read_state is when 0=>cs<='1'convst<='1'wr<='1'rd<='1'lock0<='0'lock2<='0'-7938初始化 when 1=>cs<='1'convst<='0'wr<='1&#

29、39;rd<='1'lock0<='0'lock2<='0'-启动采样 when 2=>cs<='1'convst<='0'wr<='1'rd<='1'lock0<='0'lock2<='0' if (busy='0') then read_state <= 3; -转换结束,进入下一状态 else read_state <=2; -转换未结束,继续等待 end i

30、f ; when 3=>cs<='0'convst<='1'wr<='1'rd<='1'lock0<='0'lock2<='0' when 4=>cs<='0'convst<='1'wr<='1'rd<='0'lock0<='0'lock2<='0'-开启RD,建立转换好的数据 when 5=>cs<='

31、;0'convst<='1'wr<='1'rd<='1'lock0<='1'lock2<='0'-在rd的上升沿读 when 6=>cs<='1'convst<='1'wr<='1'rd<='1'lock0<='0'lock2<='0' when 7=>cs<='1'convst<='1'wr

32、<='1'rd<='1'lock0<='0'lock2<='0'-7938初始化 when 8=>cs<='1'convst<='0'wr<='1'rd<='1'lock0<='0'lock2<='0'-启动采样 when 9=>cs<='1'convst<='0'wr<='1'rd<='

33、;1'lock0<='0'lock2<='0' if (busy='0') then read_state <= 10; -转换结束,进入下一状态 else read_state <=9; -转换未结束,继续等待 end if ; when 10=>cs<='0'convst<='1'wr<='1'rd<='1'lock0<='0'lock2<='0' when 11=>c

34、s<='0'convst<='1'wr<='1'rd<='0'lock0<='0'lock2<='0'-开启RD,建立转换好的数据 when 12=>cs<='0'convst<='1'wr<='1'rd<='1'lock0<='0'lock2<='1'-在rd的上升沿读 when 13=>cs<='1

35、9;convst<='1'wr<='1'rd<='1'lock0<='0'lock2<='0' when others => read_state <=0; end case ; end if; end if;end process; end Behavioral;源程序文件夹名:ad_to_fifo- - - - - -功能,元件例化,通过data产生仿真数据送给ad7938,ad7938不采用影子寄存器,设定控制寄存器最高通道为Vin7,即8路循环采样,并将12位数据加

36、上4位地址数据形成16数据,送给fifo模块- - - - - -library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ad7938_1E6 is port(adc_clk: in std_logic;-25M clk adc_data: inout std_logic_vector(11 downto 0); adc_busy: in std_logic; adc_cs: out std_logic:='1' ad

37、c_convst: out std_logic:='1' adc_rd: out std_logic:='1' adc_wr: out std_logic:='1' adc_wb: out std_logic;fifo_adc_wrclk: out std_logic:='0' fifo_adc_wren: out std_logic:='0' fifo_adc_full: in std_logic; fifo_adc_data: out std_logic_vector(15 downto 0) );end ad

38、7938_1E6;architecture Behavioral of ad7938_1E6 is signal read_adc_state:integer range 0 to 10:=0; signal write_adc_state:integer range 0 to 4:=0; constant delaytime:std_logic_vector(7 downto 0) := x"04" signal delaycount: std_logic_vector(7 downto 0) :=delaytime; signal shdw_state:integer

39、range 0 to 7:=0; signal real_value: std_logic_vector(15 downto 0); signal lock: std_logic:='0' constant wb_value: std_logic:='1' signal adc_process_flag: bit:='0' signal oe: bit:='0' constant AD_control_value : std_logic_vector(11 downto 0):=x"1E6"begin fifo

40、_adc_data <= real_value; adc_wb<=wb_value; adc_data<=AD_control_value when (oe='0') else (others => 'Z') ;-process (adc_clk)begin if (adc_clk'event and adc_clk='1') then if (delaycount /= x"00") then delaycount <= delaycount - 1; end if; end if;en

41、d process; -process (lock) begin if lock='1' and lock'event then shdw_state<=shdw_state+1; if (shdw_state=7) then shdw_state<=0; end if; case shdw_state is when 0=> real_value <= "0000"&adc_data ; when 1=> real_value <= "0001"&adc_data ; when

42、 2=> real_value <= "0010"&adc_data ; when 3=> real_value <= "0011"&adc_data ; when 4=> real_value <= "0100"&adc_data ; when 5=> real_value <= "0101"&adc_data ; when 6=> real_value <= "0110"&adc_data ;

43、 when 7=> real_value <= "0111"&adc_data ; when others =>shdw_state<=0; end case; end if;end process; -process (adc_clk,fifo_adc_full) begin if (adc_clk'event and adc_clk='1' and delaycount= x"00") then- if(adc_process_flag='0')then write_adc_st

44、ate<=write_adc_state+1; if(write_adc_state=4)then write_adc_state<=0; adc_process_flag<='1' oe<='1' end if; case write_adc_state is when 0=>adc_cs<='1'adc_convst<='1'adc_wr<='1'adc_rd<='1' when 1=>adc_cs<='0'adc

45、_convst<='1'adc_wr<='1'adc_rd<='1' when 2=>adc_cs<='0'adc_convst<='1'adc_wr<='0'adc_rd<='1' when 3=>adc_cs<='0'adc_convst<='1'adc_wr<='1'adc_rd<='1' when 4=>adc_cs<=&#

46、39;1'adc_convst<='1'adc_wr<='1'adc_rd<='1' when others => write_adc_state <=0; end case ;- else - if(fifo_adc_full='0' )then read_adc_state<=read_adc_state+1; if(read_adc_state=10)then read_adc_state<=0; end if; case read_adc_state is when 0=&

47、gt;adc_cs<='1'adc_convst<='1'adc_wr<='1'adc_rd<='1'lock<='0' when 1=>adc_cs<='1'adc_convst<='0'adc_wr<='1'adc_rd<='1'lock<='0' when 2=>adc_cs<='1'adc_convst<='0'adc_wr<='1'adc_rd<=&#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论