用状态机设计的TLC1196采样控制电路
更新时间:2023-10-07 13:27:01 阅读量: 综合文库 文档下载
- 状态机设计模式推荐度:
- 相关推荐
基于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.1 LTC1196-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个时钟周期。
图1 LTC1196引脚图
图1所示,是LTC1196引脚图,下面是LTC1196-2B引脚说明表: 引脚名称: 功能描述: 片选,低有效 模拟输入端 模拟/数字地 时钟 数字转换输出 CS 1 ?IN,?IN 2、3 GND 4 CLK 7 Dout 6 Vref 5
参考电压 表1 LTC1196-2B引脚说明
图2 LTC1196-2B时序图
从时序图可以知道:采样时间tSMPL至少为2.5个fCLK,单次转换时间不少于12个fCLK;片选下降沿离上一CLK上升沿至少13ns,离下一CLK上升沿,CS建立时间tsucs至少26ns;时钟频率fCLK不高于12MHz。转换关系为
DATA?255?Vin/5?
2.2系统总体设计思路
根据实验的要求进行系统的设计。系统要求100KPS采样率,由LTC1196-2B的时序图可以知道每十二个fCLK完成一次AD转换,所以系统时钟应该设置为1.2MHz。由于实验箱上没有1.2MHz的时钟,所以要用分频。串行结果转换成并行,可以通过编写VHDL语言,生成模块完成。单次和持续的转换可以通过按键切换,在控制器模块中完成。最后,AD转换的结果是0~255,转换结果在数码管上显示是16进制的,不方便阅读,可以考虑在完成实验要求之后再加上一个rom模块,通过查表转换,在数码管上显示成实际的电压值。
三、单元电路设计
根据系统总统设计思路,满足实验要求只需要设计一个状态机实现的控制器模块和一个LPM_ROM模块。
3.1 控制器模块
控制器完成的功能有:第一,控制AD单次或持续采样,输出串行数据;第二,进行串并转换,将LTC1196-2B输出的串行数据转换为并行数据输出。
系统时钟采用的是50MHz的时钟。为了满足ADC采样率100Kbps的要求,要将系统时钟进行分频,分出1.2MHz供给ADC,作为采样时钟。
控制器模块的代码及说明如下所示:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity adc is port( clkz :in std_logic; datain :in std_logic; reset :in std_logic; en :in std_logic; en2 :in std_logic; clk_rom :out std_logic; clk_o :out std_logic; cs :out std_logic; dataout :out std_Logic_vector(7 downto 0) ); end adc;
architecture behave of adc is type states is (s0,s1,s2); signal current_state,next_state:states; signal temp :std_logic_vector(7 downto 0); signal clk_tp:std_logic; signal clk :std_logic; signal clklk :std_logic;
signal cnt_en:std_logic; signal cnt_f :std_logic_vector(4 downto 0); signal cnt_f1:integer;
signal cnt :std_logic_vector(3 downto 0); signal datatemp:std_logic_vector(7 downto 0); begin
clk_o<=clk_tp; clk_rom<=clkz; clk_1k<=clklk;
process(clkz,cnt_f,cnt_f1) begin --系统时钟 --AD串行数据输入 --系统复位键 --单次采样按键 --持续采样按键 --LPM_ROM模块时钟 --AD时钟 --AD转换使能 --并行结果输出 --状态机三个状态,分别为初始 状态、计数状态和显示状态。 --串并转换临时存储单元 --移位寄存数量控制使能 --分频计数 --此进程为分频,输入的是 50MHz的系统时钟,计数0
if(clkz'event and clkz='1') then cnt_f<=cnt_f+1; if cnt_f=\ clk<=not clk; cnt_f<=\ end if; end if; end process;
process(clk,reset,datain) begin if reset='1' then current_state<=s0; elsif clk'event and clk='0' then current_state<=next_state; elsif clk'event and clk='1' then if cnt>=\
temp<=temp(6 downto 0)&datain; else null; end if; else null; end if; end process;
process(current_state,datain,en,en2) begin
case current_state is when s0=>
clk_tp<='1'; cs<='1';
datatemp<=\ cnt_en<='0';
if (en or en2)='1' then next_state<=s1; else next_state<=s0; end if; when s1=>
clk_tp<=clk; cs<='0';
datatemp<=\ cnt_en<='1'; if cnt=\ then next_state<=s2; else next_state<=s1; end if; when s2=>
到20,分频后约为1.19MHz
--此进程为状态机,控制AD转 换
clk_tp<='1'; cs<='1';
datatemp<=temp(7 downto 0); dataout<=datatemp;
if en='1' then
next_state<=s2; elsif en2='1' then next_state<=s1; else next_state<=s0; end if; when others=>
clk_tp<='1'; cs<='1';
datatemp<=\ cnt_en<='0'; next_state<=s0; end case; end process; process(clk_tp) begin
if clk_tp'event and clk_tp='1' then if cnt_en='1' then cnt<=cnt+1;
if cnt=\ cnt<=\ end if;
else cnt<=\ end if; else null; end if;
end process; end behave;
--检测单次采样按键是否为‘1’,是 则停留在状态2,显示结果。 --判断持续采样按键是否为‘1’,是 则跳转到状态1,接着进行AD采 样,否则跳回状态零,等待单次或 持续采样按键开启。
3.2 LPM_ROM模块
LPM_ROM模块是用来将数码管上显示的十六进制数转化为十进制数,方面阅读。其计算公式如下:
y?round??x/255?*5*10?
y 是数码管上显示的数字,x为输入的0-255的八位并行数据。因为LTC1196-2B的基准电压是5V,所以乘以5。结果乘以10之后取整,是取出在数码管显示的整数位和第一位小数位。
LPM_ROM的ROM表数据如下:
图3 LPM_ROM表
LPM_ROM的模块的时钟要比ADC的采样率要高,保证ADC输出数据时能LPM_ROM模块能尽快同步查询出十进制数,并输出。这里就采用的是系统时钟,为ADC采样率的12倍,满足要求。
3.3总体系统示意图与引脚配置
按照功能分析已经控制器模块,LPM_ROM模块的说明,在quartus中生成模块,组成系统。总体系统的示意图和引脚的配置如下。
图4 总体系统与引脚示意图
保存后进行编译程序,进行程序的调试。完成后测试实验系统,分析实验数据。
四、系统测试与分析
按照实验要求,先对直流以约100KSPS的采样率,连续对直流电压进行AD转换,将串行结果转换成并行,显示在数码管上,测量三个以上电压点,分析ADC精度。测量结果如下表所示。 测试点1 测试点2 测试点3 电压表读数V 八位并行数据 1.1 2.5 4.9 39 81 FA 数码管数据 1.1 2.5 4.9
理论结果 38 7F FA 精度 100% 99.3% 99.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采样控制电路10-07
2016-2021年中国动漫产业园发展预测与投资战略规划分析报告(目05-17
重庆市交通建设工程危险性较大分部分项工程安全管理实施细则04-14
康复科人员2022年度个人工作总结范文03-24
房产测绘合同02-29
三角函数专题 高三数学二轮复习资料06-01
《国务院关于严格规范城乡建设用地增减挂钩试点切实做好农村土地整治工作的通知》(国发〔2010〕47号)解读10-24
董事会战略01-29
统计基础习题(含答案)11-24
- 清真菜谱
- 我国国民经济和社会发展十二五规划纲要(全文)
- 高三物理机械振动和机械波复习2
- 浙江省公路山岭隧道机械化装备应用指导手册 doc - 图文
- 2018届高三数学文科二轮复习:专题检测(九) 导数的简单应用
- 2015年上海市公务员录用考试《行政职业能力测验》试卷(B类)
- 七年级道德与法制下册
- 大班户外游戏教案
- 病虫害预警 - 图文
- 某养鱼场为了提高经营管理水平
- 汉中市勉县尧柏余热汽机规程 10
- 烹饪试卷
- 事业单位考试公共基础知识专项分类题库训练
- 语文:第2课 走一步,再走一步 课堂导学案(人教版 七上)
- 天汉使用手册
- 人教版小学三年级数学下册教学计划
- 房地产销售管理完全操作手册122页
- 2009年评审通过具有中学高级教师专业技术资格人员名单...
- 《15秋公共关系学》作业1
- 2017最新版监理公司三标一体管理手册
- 采样
- 电路
- 状态
- TLC1196
- 控制
- 设计