北京化工大学生产实习报告_第1页
北京化工大学生产实习报告_第2页
北京化工大学生产实习报告_第3页
北京化工大学生产实习报告_第4页
北京化工大学生产实习报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、北京化工大学 2021年生产实习报告实习工程 ADC0809采样控制电路的实现实习时间 2021.06.25 2021.07.11 指导教师 聂伟 学 院 信息科学与技术学院 班 级 信工0903 实习组长 小组成员 一 设计要求 1、设计VHDL汇编语言,编写ADC0809采样控制电路程序。 2、对设计好的程序给出正确的仿真波形。 3、对仿真波形进行硬件实现。二 设计原理根本原理:ADC又称A/D是将模拟信号转换成数字信号的电路。描述它的主要技术指标有:分辨率与量化误差、转换速度、温度系数、电源抑制。实现信号的模数转换需经过采样、保持、量化、编码四个过程,采样就是将时间上连续变化的模拟信号定

2、时加以检测,取出某一时刻的值,得到时间上断续的信号。为了得到一个稳定的值,要求将采样后所得到的模拟信号保持一段时间,直到下一个脉冲信号的到来,经保持后获得的不再是一串脉冲,而是一个阶梯脉冲信号。量化就是将采样保持后获得时间上的离散、幅度上连续变化的模拟信号取整变为离散量的过程。量化后的信号数值用二进制代码表示,即为编码。ADC0809是CMOS的8位反应集成逐次比拟型A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电,如图1。 引脚简介:1、IN7IN0模拟量

3、输入通道2、A、B、C地址线。3、ALE地址锁存允许信号4、START启动转换信号5、D7D0数据输出线。 图1 ADC0809引脚图6、OE输出允许信号。 7、CLOCK时钟信号。 8、EOC转换结束状态信号9、REF(+)、REF(-)参考电压。ADC0809的内部结构如下: 其中,ALE为地址锁存允许输入端,该信号的上升沿使多路开关的地址码ADDA、ADDB、ADDC锁存到地址存放器中。 ST为启动信号输入端,此输入信号的上升沿使内部存放器清零,下降沿使A/D转换器开始转换。EOC为A/D转换结束信号,它在A/D转换开始,由高电平变为低电平;转换结束后,由低电平变为高电平。此信

4、号的上升沿表示A/D转换完毕,常用作中断申请信号。OE为输出允许信号,高电平有效,用来翻开三态输出锁存器,将数据送到数据总线。D7- -D0为8位数据输出端,可直接接入数据总线。CLK为时钟信号输入端,时钟的频率决定A/D转换的速度。A/D转换器的转换时间Tc等于64个时钟周期。CLK频率范围为101280KHz。当时钟脉冲频率为640KHz时,Tc为100us。REF+和REF-为基准电压输入端,他们决定了输入模拟电压的最大值和最小值。  ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。如下表所示     

5、0;         ADDA、ADDB、ADDC真值表 三 硬件设计、焊接与调试四 软件设计与仿真1、VHDL代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT IS PORT (D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK,EOC:IN STD_LOGIC; ALE,START,OE,ADDA,LOCK0:OUT STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END

6、ADCINT;ARCHITECTURE behav OF ADCINT ISTYPE states IS (st0,st1,st2,st3,st4);定义各状态子类型 SIGNAL current_state,next_state:states:=st0; SIGNAL REGL :STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK :STD_LOGIC;转换后数据输出锁存时钟信号BEGIN ADDA<='1'当ADDA<=0,模拟信号进入0809通道0;当ADDA<=1;那么进入通道1Q<=REGL;LOCK0<=

7、LOCK;COM1:PROCESS(current_state,EOC) BEGIN 规定各状态转换方式CASE current_state ISWHEN st0=> next_state<=st1; 0809初始化WHEN st1=> next_state<=st2; 启动采样WHEN st2=> IF(EOC='1')THEN next_state<=st3;EOC=1说明转换结束 ELSE next_state<=st2;转换未结束,继续等待END IF;WHEN st3=> next_state<=st4;开启OE,

8、输出转换好的数据WHEN st4=> next_state<=st0;WHEN OTHERS=>next_state<=st0;END CASE;END PROCESS COM1;COM2:PROCESS(current_state) BEGINCASE current_state ISWHEN st0=>ALE<='0'START<='0'LOCK<='0'OE<='0'WHEN st1=>ALE<='1'START<='1'

9、LOCK<='0'OE<='0'WHEN st2=>ALE<='0'START<='0'LOCK<='0'OE<='0'WHEN st3=>ALE<='0'START<='0'LOCK<='0'OE<='1'WHEN st4=>ALE<='0'START<='0'LOCK<='1'OE<=

10、'1'WHEN OTHERS=>ALE<='0'START<='0'LOCK<='0'END CASE;END PROCESS COM2;  REG:PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1')THEN current_state<=next_state; END IF;END PROCESS REG;由信号current_state将当前状态值带出此进程:REGLATCH1:PROCESS(LOCK) 此进程中,

11、在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL<=D; END IF; END PROCESS LATCH1;END behav; 2、仿真波形和RTL图3、控制ADC0809采样状态图如下图:       控制ADC0809采样状态图结合时序图可以看出,START为转换启动控制信号,高电平有效;ALE为模拟信号输入选通端口地址锁存信号,上升沿有效;一旦START有效,状态信号EOC即变为低电平,表示进入转换状态,转换时间约为1

12、00us.转换结束后,EOC将变为高电平。此后外部控制可以使OE由低电平变为高电平(输出有效),此时,0809的输出数据总线D7.0从原来的高阻态变为输出数据有效。由状态图也可看到,在状态st2中需要对0809工作状态信号EOC进行测试,如果为低电平,表示转换没有结束,仍需要停留在st2状态中等待,直到变成高电平后才说明转换结束,在下一时钟脉冲到来时转向状态st3。在状态st3,由状态机向0809发出转换好的8位数据输出允许命令,这一状态周期同时可以作为数据输出稳定周期,以便能在下一状态中向锁存器中锁入可靠的数据。在状态st4,由状态机向FPGA中的锁存器发出锁存信号LOCK的上升沿,将080

13、9输出的数据进行锁存。五 软硬件联调与分析0809是八个单端输入,参考电压:5V, 即Vref=5V。0804是一个差分输入,参考电压:2.5V,即Vref=2.5V。其它参数一样。分辨率:8位,即分辨率为1/2=1/256,转换值介于0255之间。转换时间:100usfCK=640KHz时。转换误差:±1LSB。模拟输入电压范围0+5V。实验代码如下:#include<reg52.h> /52系列单片机头文件#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit

14、dula=P26; /申明U1锁存器的锁存端sbit wela=P27; /申明U2锁存器的锁存端sbit adwr=P36; /定义A/D的WR端口sbit adrd=P37; /定义A/D的RD端口uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延时约xms毫秒 for(j=110;j>0;j-);void display(

15、uchar bai,uchar shi,uchar ge) /显示子函数dula=1;P0=tablebai; /送段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止翻开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱 P0=0x7e; /送位选数据wela=0;delayms(5); /延时dula=1;P0=tableshi;dula=0;P0=0xff;wela=1;P0=0x7d;wela=0;delayms(5);dula=1;P0=tablege;dula=0;P0=0xff;wela=1;P0=0x7b;wela=0;delayms(5);vo

16、id main() /主程序uchar a,A1,A2,A3,adval;wela=1;P0=0x7f; /置CSAD为0,选通ADCS以后不必再管ADCSwela=0;while(1)adwr=1;_nop_();adwr=0; /启动A/D转换_nop_();adwr=1;for(a=10;a>0;a-) /实验板A/D工作频率较低,所以启动转换后 /多留点时间来转换,把显示局部放这里的原因也是为了延长转换时间display(A1,A2,A3); P1=0xff; /读取P1口之前先给其写全1adrd=1; /选通ADCS_nop_();adrd=0; /A/D读使能_nop_();

17、adval=P1; /A/D数据读取赋给P1口adrd=1;A1=adval/100; /分出百,十和个A2=adval%100/10;A3=adval%10;六 总结 实验中,我们小组共3个人,决定好了做ADC之后,我们就开始到图书馆借书查阅资料,看看书上那些已经成功的案列,学习总结之后就下手做我们的ADC了。俗话说,万事开头难,这开头到底先做什么呢?选芯片?写代码?几经讨论之后,发现我们只能先写代码。那选哪种语言呢?VHDL还是verilog又或是C语言呢?考虑到小学期有3周时间,时间足够了,我们就3种都试试吧。首先,我们用了verilog,代码写出来之后,在Quartus中调试成功了,可是怎么都出不来波形,纠结了两三天,把我们弄得灰心丧气。既然verilog不成,我们只好转战VHDL了,只是大家对VHDL都不熟,只能再学习学习,模仿书上的代码来试着写,还好功夫不负有心人,终于拼凑了一段完整的代码出来,调试调试吧,成功了,图和波形都出来了,实在是不能用兴奋来表达我们的喜悦之情了。这下好了,勾起了我们做实验的强烈兴趣,我们决定用C语言再做一次,C语言我们大一就学过,用起来难度也相对小一些,很快我们就把代码写出来了,我们 马上把代码拿到Keil上调试,第一次运行出

温馨提示

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

评论

0/150

提交评论