您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 用状态机设计的TLC1196采样控制电路
基于FPGA的TLC1196采样控制器设计徐威宁波大学、信息科学与工程学院、通信112班、116040040摘要:本次实验是基于FPGA的数字系统设计。设计出一个由状态机控制的LTC1196采样控制电路,进行ADC的采样。采样率为100KSPS,有两种采样方式,一种是每按一次键,自动产生和一组时钟完成一次转换,将转换结果显示在数码管上;另一种是一直自动进行采样和转换,并将转换结果显示在数码管上。实验的主要是状态机的设计、串并行数据的转换和signalTapⅡ的使用。关键字:FPGA、ADC、采样、串并转换、signalTapⅡ。一、设计任务与要求实验设备:quartus软件一套;CG_DSE_03数字电路与系统实验平台;USB-BLASTER下载器;设计要求:1.以约100KSPS的采样率,连续对直流电压进行AD转换,将串行结果转换成并行,显示在数码管上,测量三个以上电压点,分析ADC精度。2.输入信号为100Hz、幅度约4.5V的正极性正弦信号,用SignalTapII逻辑分析仪分析转换结果。3.实现单次AD转换:每按一次键,自动产生和一组时钟完成一次转换,将转换结果显示在数码管上。二、方案设计与论证2.1LTC1196-2B介绍该实验所用的ADC是采样率最高为1MHz的8位串行LTC1196,可编程器件的PIO26提供控制该ADC片选CS的信号;PIO25为转换时钟信号CLK,串行转换结果由PIO24输出。ADC2的输入模拟信号在实验箱的左侧,允许输入0~5V的信号。LTC1196-2B是8位、1MSPS、3线高速串行低功耗AD转换器。供电电压3~6V,模拟信号输入范围0~5V。内含采样和保持电路,具有高阻抗方式的串行接口,完成一次转换需要12个时钟周期。图1LTC1196引脚图图1所示,是LTC1196引脚图,下面是LTC1196-2B引脚说明表:引脚名称:功能描述:CS1片选,低有效ININ,2、3模拟输入端GND4模拟/数字地CLK7时钟outD6数字转换输出refV5参考电压表1LTC1196-2B引脚说明图2LTC1196-2B时序图从时序图可以知道:采样时间SMPLt至少为2.5个CLKf,单次转换时间不少于12个CLKf;片选下降沿离上一CLK上升沿至少13ns,离下一CLK上升沿,CS建立时间cssut至少26ns;时钟频率CLKf不高于12MHz。转换关系为5/255inVDATA2.2系统总体设计思路根据实验的要求进行系统的设计。系统要求KPS100采样率,由LTC1196-2B的时序图可以知道每十二个CLKf完成一次AD转换,所以系统时钟应该设置为MHz2.1。由于实验箱上没有MHz2.1的时钟,所以要用分频。串行结果转换成并行,可以通过编写VHDL语言,生成模块完成。单次和持续的转换可以通过按键切换,在控制器模块中完成。最后,AD转换的结果是255~0,转换结果在数码管上显示是16进制的,不方便阅读,可以考虑在完成实验要求之后再加上一个rom模块,通过查表转换,在数码管上显示成实际的电压值。三、单元电路设计根据系统总统设计思路,满足实验要求只需要设计一个状态机实现的控制器模块和一个LPM_ROM模块。3.1控制器模块控制器完成的功能有:第一,控制AD单次或持续采样,输出串行数据;第二,进行串并转换,将LTC1196-2B输出的串行数据转换为并行数据输出。系统时钟采用的是50MHz的时钟。为了满足ADC采样率100Kbps的要求,要将系统时钟进行分频,分出1.2MHz供给ADC,作为采样时钟。控制器模块的代码及说明如下所示:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityadcisport(clkz:instd_logic;--系统时钟datain:instd_logic;--AD串行数据输入reset:instd_logic;--系统复位键en:instd_logic;--单次采样按键en2:instd_logic;--持续采样按键clk_rom:outstd_logic;--LPM_ROM模块时钟clk_o:outstd_logic;--AD时钟cs:outstd_logic;--AD转换使能dataout:outstd_Logic_vector(7downto0)--并行结果输出);endadc;architecturebehaveofadcistypestatesis(s0,s1,s2);--状态机三个状态,分别为初始signalcurrent_state,next_state:states;状态、计数状态和显示状态。signaltemp:std_logic_vector(7downto0);--串并转换临时存储单元signalclk_tp:std_logic;signalclk:std_logic;signalclklk:std_logic;signalcnt_en:std_logic;--移位寄存数量控制使能signalcnt_f:std_logic_vector(4downto0);--分频计数signalcnt_f1:integer;signalcnt:std_logic_vector(3downto0);signaldatatemp:std_logic_vector(7downto0);beginclk_o=clk_tp;clk_rom=clkz;clk_1k=clklk;process(clkz,cnt_f,cnt_f1)--此进程为分频,输入的是begin50MHz的系统时钟,计数0if(clkz'eventandclkz='1')then到20,分频后约为1.19MHzcnt_f=cnt_f+1;ifcnt_f=10101thenclk=notclk;cnt_f=00000;endif;endif;endprocess;process(clk,reset,datain)--此进程为状态机,控制AD转begin换ifreset='1'thencurrent_state=s0;elsifclk'eventandclk='0'thencurrent_state=next_state;elsifclk'eventandclk='1'thenifcnt=0010thentemp=temp(6downto0)&datain;elsenull;endif;elsenull;endif;endprocess;process(current_state,datain,en,en2)begincasecurrent_stateiswhens0=clk_tp='1';cs='1';datatemp=00000000;cnt_en='0';if(enoren2)='1'thennext_state=s1;elsenext_state=s0;endif;whens1=clk_tp=clk;cs='0';datatemp=00000000;cnt_en='1';ifcnt=1011thennext_state=s2;elsenext_state=s1;endif;whens2=clk_tp='1';cs='1';datatemp=temp(7downto0);dataout=datatemp;ifen='1'then--检测单次采样按键是否为‘1’,是next_state=s2;则停留在状态2,显示结果。elsifen2='1'then--判断持续采样按键是否为‘1’,是next_state=s1;则跳转到状态1,接着进行AD采else样,否则跳回状态零,等待单次或next_state=s0;持续采样按键开启。endif;whenothers=clk_tp='1';cs='1';datatemp=00000000;cnt_en='0';next_state=s0;endcase;endprocess;process(clk_tp)beginifclk_tp'eventandclk_tp='1'thenifcnt_en='1'thencnt=cnt+1;ifcnt=1011thencnt=0000;endif;elsecnt=0000;endif;elsenull;endif;endprocess;endbehave;3.2LPM_ROM模块LPM_ROM模块是用来将数码管上显示的十六进制数转化为十进制数,方面阅读。其计算公式如下:10*5*255/xroundyy是数码管上显示的数字,x为输入的0-255的八位并行数据。因为LTC1196-2B的基准电压是5V,所以乘以5。结果乘以10之后取整,是取出在数码管显示的整数位和第一位小数位。LPM_ROM的ROM表数据如下:图3LPM_ROM表LPM_ROM的模块的时钟要比ADC的采样率要高,保证ADC输出数据时能LPM_ROM模块能尽快同步查询出十进制数,并输出。这里就采用的是系统时钟,为ADC采样率的12倍,满足要求。3.3总体系统示意图与引脚配置按照功能分析已经控制器模块,LPM_ROM模块的说明,在quartus中生成模块,组成系统。总体系统的示意图和引脚的配置如下。图4总体系统与引脚示意图保存后进行编译程序,进行程序的调试。完成后测试实验系统,分析实验数据。四、系统测试与分析按照实验要求,先对直流以约100KSPS的采样率,连续对直流电压进行AD转换,将串行结果转换成并行,显示在数码管上,测量三个以上电压点,分析ADC精度。测量结果如下表所示。电压表读数V八位并行数据数码管数据理论结果精度测试点11.1391.138100%测试点22.5812.57F99.3%测试点34.9FA4.9FA99.6%表2直流电源AD采样精度测量数据输入信号为100Hz、幅度约4.5V的正极性正弦信号,用SignalTapII逻辑分析仪分析转换结果。下图是用signalTapII逻辑分析仪观察到的实验结果。图5使用signalTap观察到的100KHz正弦波观察波形数据,在正弦波的峰峰值最大数据为D8h,按照ADC原理还原为实际电压值为4.24伏。在图中可以明显看到,在一个正弦波的周期中,有十个数据点,数据点正好在正弦波峰峰值处,即数据为E5的概率很小。所有实验得到的结果是合理有效的。实现单次AD转换:每按一次键,自动产生和一组时钟完成一次转换,将转换结果显示在数码管上。这个功能在已经达到要求,实现的原理是,通过按键,产生一个脉冲信号,开始第一次转换,在状态机中进行状态转换。当到达状态2,在数码管显示出电压数据之后,对该按键判断,如果按键仍然为1则停在显示状态,否则跳回状态零,等待按键开启转换。五、实验结论从本次实验中,对VHDL编写状态机有了更深的了解。学会了用时钟的上升沿和下降沿作为触发条件。对系统时钟的分频有了实践,对分频时钟的选取有所了解。掌握了使用LTC1196-2B的方法,完成ADC数据的串并转换。对LPM_ROM模块有了更深的了解,在实践中了解用于ROM查表的时钟要比数据输入时钟要快,保证数据及时转化为十进制。学会了signalTap的基本使用,对实验程序的调试很有帮助。还能观察内部数据的变换,直接对实验结果进行验证。
本文标题:用状态机设计的TLC1196采样控制电路
链接地址:https://www.777doc.com/doc-2342865 .html