实验报告.docx

上传人:b****5 文档编号:4503484 上传时间:2022-12-01 格式:DOCX 页数:30 大小:733.88KB
下载 相关 举报
实验报告.docx_第1页
第1页 / 共30页
实验报告.docx_第2页
第2页 / 共30页
实验报告.docx_第3页
第3页 / 共30页
实验报告.docx_第4页
第4页 / 共30页
实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

实验报告.docx

《实验报告.docx》由会员分享,可在线阅读,更多相关《实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

实验报告.docx

实验报告

重庆邮电大学综合实验报告

工程实训实验

 

姓名:

学号:

班级:

学院:

专业:

指导老师:

 

自动化学院检测与控制实验中心

2014

实验一、数据采集_A/D转换

一、实验目的

  ⑴掌握A/D转换与单片机接口的方法;

  ⑵了解A/D芯片0809转换性能及编程方法;

  ⑶通过实验了解单片机如何进行数据采集。

二、实验原理

  A/D转换器大致分有三类:

一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近式A/D转换器,精度、速度、价格适中;三是并联比较型A/D转换器,速度快,价格也昂贵。

  实验用ADC0809属第二类,是8位A/D转换器。

每采集一次一般需100μs。

由于ADC0809A/D转换器转换结束后会自动产生EOC信号(高电平有效),取反后将其与8031的INT0相连,可以用中断方式读取A/D转换结果。

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。

它是逐次逼近式A/D转换器,可以和单片机直接接口。

(1)ADC0809的内部逻辑结构

由图1.1可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

图1.1ADC0809内部结构框图

(2)ADC0809引脚结构

ADC0809各脚功能如下:

D7~D0:

8位数字量输出引脚。

IN0~IN7:

8位模拟量输入引脚。

VCC:

+5V工作电压。

GND:

地。

REF(+):

参考电压正端。

REF(-):

参考电压负端。

START:

A/D转换启动信号输入端。

ALE:

地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换).

EOC:

转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:

输出允许控制端,用以打开三态数据输出锁存器。

CLK:

时钟信号输入端(一般为500KHz)。

A、B、C:

地址输入线。

(3)ADC0809对输入模拟量要求:

信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:

4条

ALE为地址锁存允许输入线,高电平有效。

当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。

A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。

通道选择表如下表所示。

C

B

A

选择模拟通道

0

0

0

IN0

0

0

1

IN1

0

1

0

IN2

0

1

1

IN3

1

0

0

IN4

1

0

1

IN5

1

1

0

IN6

1

1

1

IN7

数字量输出及控制线:

11条

ST为转换启动信号。

当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。

EOC为转换结束信号。

当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。

OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。

OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。

D7-D0为数字量输出线。

CLK为时钟输入信号线。

因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,

VREF(+),VREF(-)为参考电压输入。

(4)ADC0809应用说明

(1).ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。

(2).初始化时,使ST和OE信号全为低电平。

(3).送要转换的哪一通道的地址到A,B,C端口上。

(4).在ST端给出一个至少有100ns宽的正脉冲信号。

(5).是否转换完毕,我们根据EOC信号来判断。

(6).当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了

三、实验内容

1.硬件电路设计:

设计基于单片机控制的AD转换应用电路。

AD转换芯片采用ADC0809。

ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。

ADC0809的VREF接+5V电压。

2.软件设计:

程序设计内容

(1)进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,经过数据处理之后在数码管上显示。

(2)进行A/D转换之前,要启动转换的方法:

ABC=110选择第三通道。

ST=0,ST=1,ST=0产生启动转换的正脉冲信号

图1.2ADC0809时序图

四、实验步骤及结果

用keil软件编写相应的程序,并把程序导入到仿真电路图中,结果如下图所示

最大:

中间的任意数:

五、实验总结

本次实验课了解了模拟量转换为数字量的原理,也了解了ADC0809芯片的内部结构、工作原理、以及其使用方法。

用protus画出了仿真电路原理图,通过仿真可以发现代码的逻辑性错误,也加强了对软件运用程度。

但是在做实验的时候也遇到了一些问题,由于第一次接触单片机实验,刚开始有点不熟悉单片机,学着有点吃力,尤其在编写程序的时候,查阅相关资料最终解决了问题。

所以,我对AD转换也理解的更加深刻了。

六、源程序

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharnum;

uintgetdata;

ucharqian,bai,shi,ge;

sbitOE=P1^0;sbitEOC=P1^1;sbitST=P1^2;sbitCLK=P1^3;sbita=P1^4;

sbitb=P1^5;sbitc=P1^6;

voidinit()

{

TMOD=0X01;

TH0=(65535-5)/256;

TL0=(65535-5)%256;

EA=1;

ET0=1;

TR0=1;

}

voiddelayms(uintm)

{

uinti,j;

for(i=m;i>0;i--)

for(j=110;j>0;j--);

}

voiddisplay()

{

P0=duan[qian];

P2=0xfe;

delayms(3);

P0=0x00;

P0=duan[bai];

P2=0xfd;

delayms(3);

P0=0x00;

P0=duan[shi];

P2=0xfb;

delayms(3);

P0=0x00;

P0=duan[ge];

P2=0xf7;

delayms(3);

P0=0x00;

}

voidmain()

{

init();

while

(1)

{

ST=0;

ST=1;

ST=0;

OE=0;

a=1;

b=1;

c=0;

while(EOC==0);

OE=1;

num=P3;

OE=0;

getdata=num;

qian=getdata/1000;

bai=getdata/100%10;

shi=getdata/10%10;

ge=getdata%10;

display();

}

}

voidtime0()interrupt1

{

TH0=(65535-5)/256;

TL0=(65535-5)%256;

CLK=~CLK;

}

实验二、D/A转换及数字式波形发生器

一、实验目的

1、熟悉DAC0832内部结构及引脚。

2、掌握D/A转换与接口电路的方法。

3、通过实验了解单片机如何进行波形输出。

二、实验原理

1.引脚和逻辑结构20个引脚、双列直插式

Vcc芯片电源电压,+5V~+15V

VREF参考电压,-10V~+10V

RFB反馈电阻引出端,此端可接运算放大器输出端

AGND模拟信号地

DGND数字信号地

DI7~DI0数字量输入信号。

其中:

DI0为最低位,DI7为最高位

ILE输入锁存允许信号,高电平有效

CS片选信号,低电平有效

WR1写信号1,低电平有效

当ILE、CS、WR1同时有效时,LE=1,输入寄存器的输出随输入而变化

WR1,LE=0,将输入数据锁存到输入寄存器

XFER转移控制信号,低电平有效

WR2写信号2,低电平有效

当XFER、WR2同时有效时,LE2=1,DAC寄存器输出随输入而变化;WR1,LE=0,将输入数据锁存到DAC寄存器,数据进入D/A转换器,开始D/A转换

IOUT1模拟电流输出端1

当输入数字为全”1”时,输出电流最大,约为:

全”0”时,输出电流为0

IOUT2模拟电流输出端2,IOUT1+IOUT2=常数

2.DAC0832与单片机系统的连接

1)直通方式:

两个寄存器的工作于直通状态,不受控制器的控制。

2)单缓冲工作方式:

一个寄存器工作于直通状态,另一个工作于受控锁存器状态

在不要求多相D/A同时输出时,可以采用单缓冲方式,此时只需一次写操作,就开始转换,

可以提高D/A的数据吞吐量。

3)双缓冲工作方式:

两个寄存器均工作于受控锁存器状态,

三、实验内容

1.AT89C51控制DAC0832实现数/模转换(D/A)转换。

从单片机输出数据到DAC0832,经其转换成模拟量输出。

2.设计一个由单片机控制的信号发生器。

运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。

信号发生器所产生的波形的频率、幅度均可调节。

并可通过软件任意改变信号的波形。

 基本要求:

 

① 产生三种以上波形。

如正弦波、三角波、矩形波等。

  

②最大频率不低于 500Hz。

并且频率可按一定规律调节。

③幅度可调,峰峰值在0~5V之间变化。

  扩展要求:

产生更多的频率和波形。

四、实验步骤及结果

(1)在proteusISIS界面D/A转换电路原理图,把该电路保存。

(2)在keil中建立c程序文件并生成hex文件。

(3)添加仿真文件。

双击单片机AT89C51,打开其属性编辑框,在“programfile”栏中,单击打开按钮,选取后缀名为*.HEX的目标代码文件。

在“clockfrequency”栏中设置时钟频率为11.0592MHZ。

(4)在proteus仿真界面中单击运行按钮,全速启动仿真。

正弦波

三角波

锯齿波

方波

五、实验总结

此次实验,主要熟悉了基本的编程过程,了解了对单片机端口的控制。

用protus画出了DA转换的电路仿真图,在整个过程中也碰见了一些小障碍,通过看书、网上查阅、请教同学,最终还是完成了,其间也学到了很多知识和思考问题的方法,最终对DA转换的原理也理解的更加深刻。

六、源程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

floatPi=3.1415926;

voiddelay(uintms)//延时100us;

{

uinti,j;

for(i=ms;i>0;i--)

for(j=11;j>0;j--);

}

voidfb(uintf1)//方波

{

P2=0xff;delay(5000/f1);

P2=0x00;delay(5000/f1);

}

voidsjb(uintf2)//三角波

{

uinti;

for(i=0;i<10000/f2;i++)

{

P2=256*i/(10000/f2);

delay

(1);

}

}

voidzxb(uintf3)//正弦波

{

uinti;

for(i=0;i<10000/f3;i++)

{

P2=128+127*(sin(2*Pi*i*f3/10000));

delay

(1);

}

}

voidmain()

{

while

(1)

{

if(P1!

=0xff)

{

delay(100);

if(P1!

=0xff)

{

while(P1!

=0xff)

{

switch(P1){

case0xfd:

fb(25);break;

case0xf7:

sjb(50);break;

case0xbf:

zxb(200);}

}

}

}

}

}

实验三、基于旋转编码器的转速测量

一、实验目的

1.了解编码器工作原理

2.掌握编码器速度检测的方法;

二、实验内容

1.根据旋转编码器的工作原理,设计基于旋转编码器的速度检测原理图;

2.利于实验室提供的单片机最小系统,设计位置检测、速度检测系统的应用电路;画出系统框图;

3.编写相关程序,实现对位置及转速的测量,并显示;

三、实验原理

1.编码器

编码式数字传感器是测量转轴角位移的最常用的检测元件,它具有很高的分辨率、测量精度和可靠性。

在一个圆形玻璃盘的边缘开有相等角距的缝隙,成为透明和不透明的码盘,在此码盘开缝的两边,分别安装光源及光电元件。

当码盘随被测物体的工作轴转动时,每转过一个缝隙,光电元件所获得的光强就发生一次明暗的转换,光电转换电路就产生一定幅值和功率的电脉冲输出信号。

将这一脉冲信号送加法计数器进行记数,则所计数码就等于码盘转过的缝隙数目,在缝隙之间的角度已知时,码盘(被测物体)所转过的角度也就确定了。

旋转编码器E6C2-CWZ6C参数表

编码器

参数

电源电压

DC5V~24V

消耗电流

70mA以下

分辨率(脉冲/旋转)

100、200、300、360、400、500、600、720、800、1000、1024、1200、1500、1800、2000

输出相

A、B、Z相

输出方式

NPN集电极开路输出

输出容量

外加电压:

DC30V以下;同步电流35mA以下;残留电压:

0.4V以下(同步电流35mA)

最高响应频率

100kHz

2.测量方法:

2.1编码器鉴相电路设计:

2.3测量原理:

检测光电式旋转编码器与转速成正比的脉冲,然后计算转速,有三种数字测速方法:

即M法、T法和M/T法。

光电式旋转编码器是转速或转角的检测元件,旋转编码器与电机相连,当电机转动时,带动码盘旋转,便发出转速或转角信号。

如图所示。

M法测速

测取Tc时间内旋转编码器输出的脉冲个数,用以计算这段时间内的平均转速,称作M法测速,如图所示。

M法测速的分辨率:

电机的转速为:

M法测速的分辨率:

M法测速误差率:

M法测速适用于高速段

T法测速

记录编码器两个相邻输出脉冲的间的高频脉冲个数M2,f0为高频脉冲频率,如图所示。

电机转速

T法测速的分辨率:

T法测速误差率:

T法测速适用于低速段。

M/T法测速

把M法和T法结合起来,既检测TC时间内旋转编码器输出的脉冲个数M1,又检测同一时间间隔的高频时钟脉冲个数M2,用来计算转速,称作M/T法测速。

采用M/T法测速时,应保证高频时钟脉冲计数器与旋转编码器输出脉冲计数器同时开启与关闭以减小误差。

电机转速

四、实验步骤及结果

(1)在proteusISIS界面绘制并保存电路原理图。

(2)在keil中编写程序文件并生成hex文件。

(3)添加仿真文件并仿真。

五、实验总结

本次实验同时用到了外部中断和定时器中断,总体来说有一点难度,过程中也遇到了好几次错误,比如开始就无法正常显示,中断程序无法运行等情况,通过单独对显示程序,中断程序的调试,最终终于解决了问题。

六、源程序

##include

#defineucharunsignedchar

sbitled=P1^0;

charnum;

charn;

charxx,ss;

sbitdula=P2^6;

sbitxxx=P3^4;

sbitwela=P2^7;

longmiao,miao1;

charqian,bai,shii,ge;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodetable_point[]={

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef

};

voiddelay(intz);

voiddisplay_time();

voidexe();

voidmain()

{

TCON=0x01;

IE=0x81;

TMOD=0x01;

TH0=(65536-45872)/256;//50ms

TL0=(65536-45872)%256;//50ms

EA=1;

ET0=1;

TR0=1;

while

(1)

{

exe();

display_time();

}

}

voiddelay(intz)

{intx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddisplay_time()

{

P0=0x00;

dula=1;

P0=0x3e;

dula=0;

wela=1;

P0=0xfe;//01111111

wela=0;

delay

(1);

 

P0=0x00;

dula=1;

P0=0x48;

dula=0;

wela=1;

P0=0xfd;

wela=0;

delay

(1);

P0=0x00;

dula=1;

P0=table[ss];

dula=0;

P0=0xff;

wela=1;

P0=0x7f;

wela=0;

delay

(1);

P0=0x00;

dula=1;

P0=table_point[miao%10];

dula=0;

P0=0xff;

wela=1;

P0=0xbf;

wela=0;

delay

(1);

P0=0x00;

dula=1;

P0=table[shii];

dula=0;

wela=1;

P0=0xdf;

wela=0;

delay

(1);

P0=0x00;

dula=1;

P0=table[bai];

dula=0;

wela=1;

P0=0xef;

wela=0;

delay

(1);

P0=0x00;

dula=1;

P0=table[qian];

dula=0;

wela=1;

P0=0xf7;

wela=0;

delay

(1);

P0=0x00;

dula=1;

P0=xx;

dula=0;

wela=1;

P0=0xfb;

wela=0;

delay

(1);

}

voidexe()

{

if(xxx==1)

{

xx=0x40;

}

if(xxx==0)

{

xx=0x00;

}

miao=(miao1)*533/196;

miao=miao*2;

qian=miao/1000;

bai=(miao-qian*1000)/100;

shii=(miao-qian*1000-bai*100)/10;

ss=(int)((ge+shii)/2);

}

voidT0_time()interrupt1

{

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

num++;

if(num==10)

{

miao1=n;

n=0;

num=0;

}

}

voidwaibu_time()interrupt0

{

n++;

}

 

实验四、基于51系列单片机控制的直流电机PWM调速

一、实验目的

1.掌握脉宽调制(PWM)的方法。

2.用程序实现脉宽调制,并对直流电机进行调速控制。

二、实验原理

1.PWM(PulseWidthModulation)简称脉宽调制。

即,通过改变输出脉冲

的占空比,实现对直流电机进行调压调速控制。

2.实验线路图:

三、实验内容

1.利用实验室提供的单片机应用系统及直流电机驱动电路板,编制控制程序,实现直流电机PWM调速控制。

四、实验步骤及结果

(1)用平台protus绘制仿真电路,并如下图所示

(2)编写程序,并把程序导入到protus绘制的文件中,结果如图所示

加速后:

减速后:

反向:

五、实验总结

本次实验通过调节脉宽来进行直流电机调速,用到了定时器中断,对按键的检测可以用扫描法,也可以用外部中断,考虑到实际运用,用外部中断能减少CPU占用。

对PWM调速的理解和运用也更加深刻了。

自己在以后遇到此类问题的时候也能个熟练运用了。

六、源程序:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitdula=P2^0;sbitwela=P2^1;sbitP10=P1^0;sbitP11=P1^1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1