版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一部分项目名称、内容与要求项目名称:数字电压表设计1.1设计内容利用FPGA与模数转换器ADC0809设计一个数字电压表,能够测量0~5V之间的直流电压,用四个数码管显示被测电压,要求精确到小数点后三位数字。了解数字电压表的工作原理,掌握可编程逻辑器件与模数转换器之间的接口电路设计及调试方法。下载并测试电路功能,分析芯片资源的占用情况。1.2具体要求1)、能正确测量0-5∨模拟电压,误差<1%,数字电压值分别由四个数码管显示。(2)、FPGA芯片产生ADC0809控制信号和七段显示器断码和位码等。(3)、ADC0809芯片实现8位模数转换,输入0-5∨,输出00H-FFH。(4)、ADC0809输出00H-FFH送FPGA芯片处理为十进制数百十个等位,并产生动态显示位码和断码。(5)、FPGA芯片产生ADC0809芯片需要写、读和片选信号等,注意时序。(6)、了解掌握A/D(模数)转换器芯片ADC0809的转换原理、管脚定义以及实际用法。第二部分:系统整体架构(ArchitectureDescription)2.1设计思路数字电压表(DigitalVoltmeter)简称DVM,是一种用数字显示的电压测量仪表。由于数字电压表具有读数准确方便、精度高、误差小、灵明度高和分辨率高、测量速度快等特点而备受青睐。其基本理是采用数字化测量技术,对直流电压进行模数转换,转换成不连续、离散的数字形式并加以显示。由此可知数字电压表的设计应包括三个主要部分:作为电压采样端口的模数转换单元、数据处理单元及电压值显示单元。设计要求利用ADC0809模数转换器,FPGA作为数据处理的核心器件,用LED和数码管进行电压值的显示。系统结构框图如下图所示。2.2系统原理(包含:框图等阐述)与设计说明等内容1、模数转换器工作原理A/D转换器芯片ADC0809简介8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。输入电压范围0~5V,该芯片内部有输出数据锁存器。ADC0809芯片外引脚如下所示。其中VIN(+)、VIN(-)为ADC0809的模拟信号输入端,用以接受单极性、双极性或差模输入信号;D0~D7为A/D转换器数字信号输出端,CLKIN为外电路提供的时钟脉冲输入端,频率限制在100KHz~1460KHz;CLKR为内部时钟发生器外接电阻端,与CLKIN端配合可有芯片自身产生时钟脉冲,频率为1/1.1RC。ADC0809的工作时序,当片选信号CS与写输入信号WR同时为低电平时,A/D转换器启动,在WR上升沿后100us完成模数转换,转换结果存入芯片内部的输出数据锁存器,如图7-3(a)所示。转换结束输出信号INTR自动变为低电平,表示本次转换已结束。如CS、读输入信号RD同时为低电平,则数据锁存器三态门打开,数字信号送出至输出端D0~D7,RD高电平到来后数据锁存器三态门回到高阻状态。2.数据处理及显示单元FPGA芯片负责ADC0809A/D转换过程的启动以及转换数据的读取。同时,把读取的8位二进制数据转换成便于输出的3位LED段码送给LED数码管显示。因此FPGA部分的程序设计应包括ADC0809转换接口控制模块、数据转换模块、译码模块,FPGA电路设计原理。本设计采用5V,由于模数转换器件ADC0809的数字输出为8位,则电压的最小分辨率为0.02V,也就是说若转换后的数据为00H,则对应的电压值为0V,转换后的数据为01H,则对应电压值为0.02V,以此类推,若将转换数据以一定的规则从小到大存放,则可得到转换数据与实际电压值,以及数据存放地址间的对应关系见表7-1.若将电压数值的每一位用4位BCD码表示(不包括小数点),则可得如表7-1所示的高四位BCD码和低四位BCD码。ADC0809转换数据与实际电压值对应关系表7-1地址高四位字节高四位电压值高四位BCD码地址高四位字节高四位电压值高四位BCD码00H00000.000000H20H00000.000000H02H00010.320032H22H00010.020002H04H00100.640064H24H00100.040004H06H00110.960096H26H00110.060006H08H01001.280128H28H01000.080008H0AH01011.600160H2AH01010.100010H0CH01101.920192H2CH01100.120012H0EH01112.240224H2EH01110.140014H10H10002.560256H30H10000.160016H12H10012.880288H32H10010.180018H14H10103.200320H34H10100.200020H16H10113.520352H36H10110.220022H18H11003.840384H38H11000.240024H1AH11014.160416H3AH11010.260026H1CH11104.480448H3CH11100.280028H1EH11114.800480H3EH11110.300030H分析表7-1的数据,可知数据转换模块的设计可以有两种方法:查表法和计算法,下面对计算法进行介绍。计算法的设计思路如下:由表7-1可知,如果将转换后的高、低四位字节数据看做是一个8位二进制数的话,电压值与转换后的数据之间有一个2倍的关系(不考虑小数点),假设转换后的数据为“11011110”,“11011110”对应的十进制数为222,222*2=444,与“11011110”对应的4.44V电压值相等,而十进制数的显示可以通过对10取模和取余的方法依次获得个位、十位、百位,分别显示即可,显示时需要在最高位后加一个小数点显示。如果采用计算法实现数据处理,FPGA设计中需要采用乘法、除法电路才能实现数据处理。数据处理电路流程图如图3.4所示。开始开始启动ADC0804等待ADC0804结束信号END?Y启动数据处理电路N扫描显示结束2.3创新点与原创性内容总体来说本次实训的代码还是从图书馆和网上查找的,可并没那么顺利的将实训做得达到要求,本次实训本组在查阅的资料里大胆组合创新(采用AD控制元件,BCD8位转12位,三选一数据选择器,位选信号产生器,三进制计数器,七段译码器,小数点产生器)模块,除了AD控制元件模块外后面的模块本组就利用了一个代码将其终合,这样减少了连线,更为简洁。最后在实践的面前结果就在面前。第三部分系统设计(含HDL或原理图输入设计)3.1HDL代码BCD8位转12位,三选一数据选择器,位选信号产生器,三进制计数器,七段译码器,小数点产生器)终合模块代码libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;ll;entityADCCLisport(clk:instd_logic;a:instd_logic_vector(7downto0);rd,wr,cs:outstd_logic;da:outstd_logic_vector(7downto0);w:outstd_logic_vector(2downto0));endADCCL;architecturebehaveofADCCLissignaldaa:std_logic_vector(7downto0);signalp:std_logic;signalwei:std_logic_vector(2downto0);signalq:integerrange0to9;signalwqian:integerrange0to5;signalwbai:integerrange0to9;signalwshi:integerrange0to9;signalwge:integerrange0to9;beginprocess(clk,a)variableqq:integerrange0to6000000;variableqian:integerrange0to5;variablebai:integerrange0to9;variableshi:integerrange0to9;variablege:integerrange0to9;variablebaii:integerrange0to1000000;variableshll:integerrange0to100000;variablegee:integerrange0to10000;beginqq:=conv_integer(a)*19610;ifqq>=0andqq<=999999thenqian:=0;elsifqq>=1000000andqq<=1999999thenqian:=1;elsifqq>=2000000andqq<=2999999thenqian:=2;elsifqq>=3000000andqq<=3999999thenqian:=3;elsifqq>=4000000andqq<=4999999thenqian:=4;elsifqq>=5000000andqq<=5999999thenqian:=5;elseqian:=0;endif;baii:=(qq-qian*1000000);ifbaii>=0andbaii<=99999thenbai:=0;elsifbaii>=100000andbaii<=199999thenbai:=1;elsifbaii>=200000andbaii<=299999thenbai:=2;elsifbaii>=300000andbaii<=399999thenbai:=3;elsifbaii>=400000andbaii<=499999thenbai:=4;elsifbaii>=500000andbaii<=599999thenbai:=5;elsifbaii>=600000andbaii<=699999thenbai:=6;elsifbaii>=700000andbaii<=799999thenbai:=7;elsifbaii>=800000andbaii<=899999thenbai:=8;elsifbaii>=900000andbaii<=999999thenbai:=9;elsebai:=0;endif;shll:=((qq-qian*1000000)-bai*100000);ifshll>=0andshll<=9999thenshi:=0;elsifshll>=10000andshll<=19999thenshi:=1;elsifshll>=20000andshll<=29999thenshi:=2;elsifshll>=30000andshll<=39999thenshi:=3;elsifshll>=40000andshll<=49999thenshi:=4;elsifshll>=50000andshll<=59999thenshi:=5;elsifshll>=60000andshll<=69999thenshi:=6;elsifshll>=70000andshll<=79999thenshi:=7;elsifshll>=80000andshll<=89999thenshi:=8;elsifshll>=90000andshll<=99999thenshi:=9;elseshi:=0;endif;gee:=(((qq-qian*1000000)-bai*100000)-(shi*10000));ifgee>=0andgee<=999thenge:=0;elsifgee>=1000andgee<=1999thenge:=1;elsifgee>=2000andgee<=2999thenge:=2;elsifgee>=3000andgee<=3999thenge:=3;elsifgee>=4000andgee<=4999thenge:=4;elsifgee>=5000andgee<=5999thenge:=5;elsifgee>=6000andgee<=6999thenge:=6;elsifgee>=7000andgee<=7999thenge:=7;elsifgee>=8000andgee<=8999thenge:=8;elsifgee>=9000andgee<=9999thenge:=9;elsege:=0;endif;wqian<=qian;wbai<=bai;wshi<=shi;wge<=ge;endprocess;process(clk)variablecnt:std_logic_vector(2downto0);beginifclk'eventandclk='1'thenifcnt<3thencnt:=cnt+1;elsecnt:="000";p<=notp;endif;wei<=cnt;casecntiswhen"000"=>q<=wqian;when"001"=>q<=wbai;when"010"=>q<=wshi;when"011"=>q<=wge;whenothers=>null;endcase;endif;wr<=p;rd<='1';cs<='0';endprocess;process(q)begincaseqiswhen0=>daa<="11111100";when1=>daa<="01100000";when2=>daa<="11011010";when3=>daa<="11110010";when4=>daa<="01100110";when5=>daa<="10110110";when6=>daa<="10111110";when7=>daa<="11100000";when8=>daa<="11111110";when9=>daa<="11110110";whenothers=>null;endcase;endprocess;process(wei,daa)beginifwei="000"thenw<=wei;da<=daaor"00000001";elsew<=wei;da<=daa;endif;endprocess;endbehave;AD控制元件代码IBRARYieee;--A/D0809
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;entityadis
port(ST,eoc:instd_logic;--控制端口
d:instd_logic_vector(7downto0);
oe,sta,ale,adda:outstd_logic;
q:outstd_logic_vector(7downto0));
endad;architectureaofadis
typestatesis(st0,st1,st2,st3,st4,st5,st6);--7个状态
signalc_state,n_state:states:=st0;
signalregl:std_logic_vector(7downto0);
signallock:std_logic;
begin
adda<='1';
com:process(c_state,eoc)
begin
casec_stateis
whenst0=>ale<='0';sta<='0';oe<='0';lock<='0';
n_state<=st1;
whenst1=>ale<='1';sta<='0';oe<='0';lock<='0';
n_state<=st2;
whenst2=>ale<='0';sta<='1';oe<='0';lock<='0';
n_state<=st3;
whenst3=>ale<='0';sta<='0';oe<='0';lock<='0';
if(eoc='1')thenn_state<=st4;
elsen_state<=st3;――eoc为‘1’转换结束进入下一状态
endif;――否则继续转换
whenst4=>ale<='0';sta<='0';oe<='1';lock<='0';
n_state<=st5;
whenst5=>ale<='0';sta<='0';oe<='0';lock<='1';
n_state<=st6;
whenst6=>ale<='0';sta<='0';oe<='0';lock<='1';
n_state<=st0;
whenothers=>n_state<=st0;
endcase;
endprocesscom;
reg:process(st)
begin
if(st'eventandst='1')then
c_state<=n_state;
endif;
endprocessreg;
lo:process(lock)--锁存
begin
if(lock'eventandlock='1')then
regl<=d;
endif;
endprocesslo;
q<=regl;
enda;3.2系统整体电路图(或RTL级电路图)第四部分:系统仿真(SimulationWaveform)系统仿真图如图:仿真前输入设置图:功能仿真图:时序仿真图:第五部分:FPGA实现(FPGAImplementation)1、硬件验证在前两次代码无误但下载到芯片硬件验证,始终不能满足要求时,经过查阅资料和老师指导。和本组成员的不放弃的努力下。改正过RTL原理图后,怀着试一试的态度和必胜的心态又一次下载到硬件验证。2、操作过程下载成功后,我们可以通过AD装换芯片ADC0809(详见附录)的功能,通过:A/B/C三段的不同84321BCD码状态来得到此芯片八个频道具体是哪一频道。(注:000选CH0;001选CH1…)然后将相应的频道接到直流电压(0——5V)。当然输出显示为数码管显示和3个LED灯(3个LED灯主要是显示的是CS,RD,WD)。3、结果等说明在实验箱上的左上角的直流电压旋钮旋到最小处时数码管显示为:0:.000,当旋到最大处时数码管显示为:5:.000,中间的值位0V——5V之间。第六部分:总结(Closing)这次数字电压表系统的设计达到了预期的效果,这次设计的内容主要体现在程序算法上。电压值。此程序下载后占用芯片内存小易实现。,DVM的高速发展,使它已成为实现量的采集资料的过程。在这个过程里我们走过需对弯路和冤枉路。这些都是我们宝贵的字系统设参考书目(Reference):EDA技术与实验———陈立万陈强赵威威李洪兵姜玉泉电子设计自动化(EDA)课程设计与项目实例——李莉路而红附录(Appendix):A/D转换器芯片ADC0809简介8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。1.ADC0809的内部结构ADC0809的内部逻辑结构图如图9-7所示。图9.7《ADC0809内部逻辑结构》图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 区统计局日工作制度
- 医务室留观工作制度
- 医疗值班室工作制度
- 医疗碎石科工作制度
- 医院制剂室工作制度
- 医院请销假工作制度
- 华为监事会工作制度
- 单剂量分包工作制度
- 卫生院上班工作制度
- 卫生院结核工作制度
- 《0-3岁婴幼儿保育与教育》课程标准
- 中考历史小论文常用观点及示例
- 知识产权模拟法庭案例
- 河南08定额及综合解释
- DB2201T49-2023站用储气瓶组定期检验规范
- 第2章 Spring Boot核心配置与注解
- 船舶能耗填写范本
- 乐理的基础知识
- 网络传播法规(自考14339)复习必备题库(含答案)
- 2023年考研考博-考博英语-中国海洋大学考试历年真题摘选含答案解析
- 中考语文名著阅读-艾青诗选及水浒传
评论
0/150
提交评论