北京化工大学生产实习报告.docx
- 文档编号:9848167
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:12
- 大小:143.72KB
北京化工大学生产实习报告.docx
《北京化工大学生产实习报告.docx》由会员分享,可在线阅读,更多相关《北京化工大学生产实习报告.docx(12页珍藏版)》请在冰点文库上搜索。
北京化工大学生产实习报告
北京化工大学生产实习报告
北京化工大学
2012年生产实习报告
实习项目ADC0809采样控制电路的实现
实习时间2012.06.25—2012.07.11
指导教师聂伟
学院信息科学与技术学院
班级信工0903
实习组长
小组成员
\
一设计要求
1、设计VHDL汇编语言,编写ADC0809采样控制电路程序。
2、对设计好的程序给出正确的仿真波形。
3、对仿真波形进行硬件实现。
二设计原理
基本原理:
ADC(又称A/D)是将模拟信号转换成数字信号的电路。
描述它的主要技术指标有:
分辨率与量化误差、转换速度、温度系数、电源抑制。
实现信号的模数转换需经过采样、保持、量化、编码四个过程,采样就是将时间上连续变化的模拟信号定时加以检测,取出某一时刻的值,得到时间上断续的信号。
为了得到一个稳定的值,要求将采样后所得到的模拟信号保持一段时间,直到下一个脉冲信号的到来,经保持后获得的不再是一串脉冲,而是一个阶梯脉冲信号。
量化就是将采样保持后获得时间上的离散、幅度上连续变化的模拟信号取整变为离散量的过程。
量化后的信号数值用二进制代码表示,即为编码。
ADC0809是CMOS的8位(反馈)集成逐次比较型A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。
ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出有三态缓冲器控制,单5V电源供电,如图1。
引脚简介:
1、IN7~IN0——模拟量输入通道
2、A、B、C——地址线。
3、ALE——地址锁存允许信号
4、START——启动转换信号
5、D7~D0——数据输出线。
图1ADC0809引脚图
6、OE——输出允许信号。
7、CLOCK——时钟信号。
8、EOC——转换结束状态信号
9、REF(+)、REF(-)——参考电压。
ADC0809的内部结构如下:
PORT(D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CLK,EOC:
INSTD_LOGIC;
ALE,START,OE,ADDA,LOCK0:
OUTSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDADCINT;
ARCHITECTUREbehavOFADCINTIS
TYPEstatesIS(st0,st1,st2,st3,st4);——定义各状态子类型
SIGNALcurrent_state,next_state:
states:
=st0;
SIGNALREGL:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLOCK:
STD_LOGIC;——转换后数据输出锁存时钟信号
BEGIN
ADDA<='1';——当ADDA<=’0’,模拟信号进入0809通道0;当ADDA<=’1’;则进入通道1
Q<=REGL;LOCK0<=LOCK;
COM1:
PROCESS(current_state,EOC)BEGIN——规定各状态转换方式
CASEcurrent_stateIS
WHENst0=>next_state<=st1;——0809初始化
WHENst1=>next_state<=st2;——启动采样
WHENst2=>IF(EOC='1')THENnext_state<=st3;——EOC=1表明转换结束
ELSEnext_state<=st2;——转换未结束,继续等待
ENDIF;
WHENst3=>next_state<=st4;——开启OE,输出转换好的数据
WHENst4=>next_state<=st0;
WHENOTHERS=>next_state<=st0;
ENDCASE;
ENDPROCESSCOM1;
COM2:
PROCESS(current_state)BEGIN
CASEcurrent_stateIS
WHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';
WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';
WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';
WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';
WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';
WHENOTHERS=>ALE<='0';START<='0';LOCK<='0';
ENDCASE;
ENDPROCESSCOM2;
REG:
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;
ENDIF;
ENDPROCESSREG;——由信号current_state将当前状态值带出此进程:
REG
LATCH1:
PROCESS(LOCK)——此进程中,在LOCK的上升沿,将转换好的数据锁入
BEGIN
IFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;
ENDIF;
ENDPROCESSLATCH1;
ENDbehav;
2、仿真波形和RTL图
3、控制ADC0809采样状态图如图所示:
控制ADC0809采样状态图
结合时序图可以看出,START为转换启动控制信号,高电平有效;ALE为模拟信号输入选通端口地址锁存信号,上升沿有效;一旦START有效,状态信号EOC即变为低电平,表示进入转换状态,转换时间约为100us.转换结束后,EOC将变为高电平。
此后外部控制可以使OE由低电平变为高电平(输出有效),此时,0809的输出数据总线D[7..0]从原来的高阻态变为输出数据有效。
由状态图也可看到,在状态st2中需要对0809工作状态信号EOC进行测试,如果为低电平,表示转换没有结束,仍需要停留在st2状态中等待,直到变成高电平后才说明转换结束,在下一时钟脉冲到来时转向状态st3。
在状态st3,由状态机向0809发出转换好的8位数据输出允许命令,这一状态周期同时可以作为数据输出稳定周期,以便能在下一状态中向锁存器中锁入可靠的数据。
在状态st4,由状态机向FPGA中的锁存器发出锁存信号(LOCK的上升沿),将0809输出的数据进行锁存。
五软硬件联调与分析
0809是八个单端输入,参考电压:
5V,即Vref=5V。
0804是一个差分输入,参考电压:
2.5V,即Vref=2.5V。
其它参数一样。
分辨率:
8位,即分辨率为1/2=1/256,转换值介于0~255之间。
转换时间:
100us(fCK=640KHz时)。
转换误差:
±1LSB。
模拟输入电压范围0~+5V。
实验代码如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;//申明U1锁存器的锁存端
sbitwela=P2^7;//申明U2锁存器的锁存端
sbitadwr=P3^6;//定义A/D的WR端口
sbitadrd=P3^7;//定义A/D的RD端口
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)//i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
voiddisplay(ucharbai,ucharshi,ucharge)//显示子函数
{
dula=1;
P0=table[bai];//送段选数据
dula=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时
wela=1;//原来段选数据通过位选锁存器造成混乱
P0=0x7e;//送位选数据
wela=0;
delayms(5);//延时
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delayms(5);
}
voidmain()//主程序
{
uchara,A1,A2,A3,adval;
wela=1;
P0=0x7f;//置CSAD为0,选通ADCS以后不必再管ADCS
wela=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口之前先给其写全1
adrd=1;//选通ADCS
_nop_();
adrd=0;//A/D读使能
_nop_();
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上调试,第一次运行出了点小错,函数名拼错,改过来,第二次运行,成功了,这次没有太兴奋,毕竟C语言都学过嘛,没那么大难度。
我们还是觉得不过瘾。
这时候,我们组长毛一淼想起了我们可以把这个用单片机实现。
她把她那个已经很久没用使用的单片机拿出来,折腾了好半天,灯亮了,哈哈,软硬结合,实现了,看到单片机上数码管上跳动的数字,这下我们才真的小有成就感了。
实验中,可以说我们深深的体会到了不能被一点点的小挫折就打败了。
幸好,我们这个小组很团结,才能一路坚持下来,最后总算是三个臭皮匠赛过诸葛亮了。
同时,我们也体会到了,要想学到知识,我们就该不断的尝试,多学,多动,多总结,最后收获的一定更多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京 化工大学 生产 实习 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)