好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

暑期实习报告——数字电压表

暑期实习报告——数字电压表 本文关键词:电压表,暑期,实习报告,数字

暑期实习报告——数字电压表 本文简介:电子实习报告数字电压表姓名:严宏海学号:20101003032班级:075102-22指导老师:王巍、郝国成、张晓峰、闻兆海、王国洪、吴让仲、李杏梅、王瑾中国地质大学(武汉)机械与电子信息学院通信工程专业2012年6月22日目录一、前言……………………………………………………………2二、系统方案的选

暑期实习报告——数字电压表 本文内容:

电子实习报告

数字电压表

姓名:严宏海

学号:20101003032

班级:075102-22

指导老师:王巍、郝国成、张晓峰、闻兆海、王国洪、吴让仲、李杏梅、王瑾

中国地质大学(武汉)机械与电子信息学院通信工程专业

2012年6月22日

一、前言……………………………………………………………2

二、系统方案的选择和论证………………………………………………2

2.1

数模转换模块

…………………………………………………………………2

2.2

模拟数据采集处理模块

………………………………………………………2

2.3

液晶显示模块

…………………………………………………………………3

2.4

AC-DC转换模块

………………………………………………………………3

三、

软件硬件设计

……………………………………………………3

3.1所采用实验方案的原理…………………………………………………………3

3.2硬件设计部分

…………………………………………………………………4

3.3软件设计部分

…………………………………………………………………8

四、

测试数据与结果分析

…………………………………………………

9

4.1测试仪器…………………………………………………………………………9

4.2测试数据…………………………………………………………………………9

4.3测试数据分析…………………………………………………………………10

五、实验心得……………………………………………………………14

六、参考文献……………………………………………………………14

七、附录………………………………………………………14

一、前言

本数字电压表可以对直流电源和交流电压进行比较准确的测量。其中直流部分的测量范围是0-20V,分为三个档位:0-0.2V,0.2V-2V,2V-20V。该直流电压表的测量电路主要由三个模块组成:模拟数据采集处理模块、A/D转换模块及液晶显示控制模块。模拟数据的采集处理模块由模拟电路部分完成。A/D转换模块主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到STC89S51单片机进行数据处理。显示模块是单片机将处理好的数据送到液晶1602进行显示。交流部分的测量范围是0-5V,测量的是交流电压的有效值。该交流电压表的测量电路由三个模块构成:AC-DC转换模块、电压补偿模块、直流电压表测试模块。其中AC-DC转换模块由AD637完成。电压补偿模块对AD637的非线性部分进行补偿,由LM324完成。直流电压表测试模块由直流部分完成。

二、

系统方案的选择和论证

2.1数模转换模块

方案一:用分离元件完成数据采集AD转换的功能。该方案由于需要大量的元器件,实现起来比较复杂,而且精度不易控制。

方案二:选则集成芯片ADC0809。ADC0809的采样频率为8位的、以逐次逼近原理进行模—数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8个单断模拟输入信号中的一个进行A/D转换。由于本实验要求的测量误差是26则正常处理:

选档程序如下:

if

(

(B0==0)m=1;}

if

(

(B0==1)m=2;}

3.3.3液晶显示模块

ADC0809的输出端与单片机的P0口相连,单片机的P1口与1602的8为数据口相连,1602的RS

RW

E三个控制端分别连接P3.5,P3.6,P3.7。

temp=(getdata*1.0/255)*2000;

a=temp/1000;

b=temp/100%10;

c=temp/10%10;

d=temp%10;

在得到得到要在1602上显示的四位数值a,b,c,d后,再在合适的位置加上小数点即可。P0口的getdata经过数据处理后,送至P1口,由程序控制显示。

四、测试数据与结果分析

4.1测试仪器

(1)数字万用表

(2)双通道数字示波器

(3)频率发生器

4.2测试数据

0-0.2V档测量的数据(直流)

万用表测量(V)

1602显示值(mV)

0.01

10.1

0.07

69.0

0.12

122.0

0.18

188.0

表1

0.2V-2V档测量的数据(直流)

万用表测试(V)

1602显示值(mV)

0.26

258

0.44

447

0.45

454

0.61

611

0.84

847

1.04

1050

1.16

1168

1.30

1301

1.63

1639

1.76

1788

1.94

2.03

表2

2V-20V档测量的数据(直流)

万用表测量(V)

1602显示值(V)

2.01

2.01

2.67

2.72

3.37

3.42

4.4

4.35

5.1

5.09

6.1

6.03

7.0

6.90

7.9

7.88

8.5

8.47

9.5

9.52

9.8

9.88

10.3

10.19

11.8

11.76

12.6

12.7

14.0

14.05

15.0

15.5

18.8

18.6

表3

4.3数据分析

用MATLAB分别做不同量程的曲线拟合图,横坐标是1602显示值,纵坐标万用表测量值,做三次曲线拟合。然后做万用表测量值和1602显示值之差,再做三次曲线拟合

0-0.2V档测量的数据(直流)

图8

图9

分析:从图8可以看出,线性良好。图9纵坐标单位为MV,在60MV和160MV左右时,误差较小接近于0.但在量程的两端误差较大。

4.3.2

0.2V-2V档测量的数据(直流)

图10

图11

分析:从图10可以看出,线性良好。图11纵坐标单位为MV,0.4-1.4范围内,误差较小,在2MV左右.但在量程的两端误差较大。

4.3.3

2V-20V档测量的数据(直流)

图12

图13

分析:从图12可以看出,线性良好。图13纵坐标单位为V,4V-12V范围内,误差较小,在0.05V左右.但在量程的两端误差较大,误差达到0.1V-0.15V。

在0-2V的范围内测试时,精度完全满足,在2-20V测试时,经过调整分压那一路的电位器,精度也能满足要求。另外本实习中对电阻及电位器数值的确定要尽可能精准。

五、实验心得

因为对单片机这一块比较熟悉,电路的仿真及程序编写半天就做完了,在实习的过程中遇到的最大问题是LM324的参考电压没选择正确,开始看书上给的是12-15V,后来经过仔细研究及对LM324输出端的测量发现,LM324参考电压给6-7V时,LM324输出端能够输出0-5V的电压,而这一电压正好是ADC0809的采集范围。在0-2V的范围内测试时,精度完全满足,在2-20V测试时,经过调整分压那一路的电位器,精度也能满足要求。另外本实习中对电阻及电位器数值的确定要尽可能精准。

这个实验没有来得及做出扩展部分感觉很遗憾,因为手头上没有交流转直流的AD芯片,调试电路是一个枯燥乏味的工作,是需要耐心、细心、耐力的事情,如果这些都做不到,要想完成一个好的项目可以说是一个很难完成的任务,我个人觉得我在这方面还是需要加强,必须耐下心来,认认真真的对待。

六、参考文献

【1】汪文,《单片机原理及应用》

【M】.

武汉:华中科技大学出版社,2007.3

【2】谢子美,《电子线路.设计.试验.测试》【M】.北京:清华大学出版社,2007

【3】高峰,《单片微型计算机与接口技术》【M】.北京:科学出版社,2003

七、附录

7.1单片机程序

/*

LM324的参考电压可以是单电源,取6V左右,关键是要能从LM324的输出端能输出0-5V,

不能超过5V,也不能小于5V,ADC0809的参考电压5V尽量稳定*/

#include

#define

uchar

unsigned

char

#define

uint

unsigned

int

uchar

a,b,c,d;

unsigned

char

getdata;

unsigned

int

temp;

unsigned

int

i,j;

unsigned

char

m;

uchar

code

table0[]=“V=“;

uchar

code

table1[]=“0123456789mV

.“;

uchar

code

table2[]=“Range:2-20V“;

uchar

code

table3[]=“Range:0.2-2V“;

uchar

code

table4[]=“Range:0-0.2V“;

sbit

rs=P2^5;

sbit

rw=P2^6;

sbit

e

=P2^7;

sbit

ST=P3^0;

sbit

OE=P3^1;

sbit

EOC=P3^2;

sbit

CLK=P3^3;

sbit

ALE=P3^7;

sbit

led1=P2^2;

sbit

led2=P2^3;

sbit

led3=P2^4;

sbit

A0=P3^4;//代表地址编码中的A

sbit

B0=P3^5;

//代表地址编码中的B

#define

v20

B0=0;A0=0;

//0

通道

#define

v2

B0=0;A0=1;

//1

通道

#define

v0_2

B0=1;A0=0;

//2

通道

void

TimeInitial()

//用于产生ADC0809所需的时钟信号

{

TMOD=0x10;

TH1=(65536-200)/256;

TL1=(65536-200)%256;

EA=1;

ET1=1;

TR1=1;

CLK=1;

}

void

delay(unsigned

char

x)//延时函数

{

unsigned

char

a,b;

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

for(b=20;b>0;b--);

}

bit

lcd_busy()//

测试LCD忙碌状态,实际上延时一会同样可以达到效果

{

bit

result;

rs

=

0;

rw

=

1;

e

=

1;

delay(5);

result

=

(bit)(P0

e=

0;

return

result;

}

void

writecomm(uchar

comm)

{

//while(lcd_busy());

rs=0;

rw=0;

e=0;

delay(5);

P0=comm;

e=1;

delay(5);

e=0;

}

void

writedat(uchar

dat)

{

//while(lcd_busy());

rs=1;

rw=0;

e=0;

delay(5);

P0=dat;

e=1;

delay(5);

e=0;

}

void

writesmh(uchar

add,uchar

date)

{

uchar

count;

count=date;

writecomm(0xc0+add);

delay(5);

writedat(table1[count]);

delay(5);

}

void

init()

{

delay(50);

writecomm(0x38);

delay(50);

writecomm(0x0c);

delay(50);

writecomm(0x06);

delay(50);

writecomm(0x80);

delay(5);

writecomm(0x01);

delay(50);

}

void

main()

{

init();

v0_2;

m=3;

TimeInitial();

while(1)

{

ST=0;//启动ADC0809

ALE=1;

ST=1;

delay(50);

ST=0;

ALE=0;

while(EOC==0);

//等待转换结束

OE=1;

getdata=P1;

OE=0;

//锁定输出

temp=getdata;

//数据处理

delay(50);

a=temp/1000;

b=temp/100%10;

c=temp/10%10;

d=temp%10;

writecomm(0x80+0x40+12);

writedat(a+48);

writedat(b+48);

writedat(c+48);

writedat(d+48);

delay(50);

if

(

(B0==0)m=1;}

if

(

(B0==1)m=2;}

temp=(getdata*1.0/255)*2000;

a=temp/1000;

b=temp/100%10;

c=temp/10%10;

d=temp%10;

delay(50);

if(m==1)

{

for(i=0;i<2;i++

)//显示量程

{writecomm(0xc0+i);

writedat(table0[i]);

delay(5);

}

for(i=0;i<12;i++

)

{

writecomm(0x80+i);

writedat(table2[i]);

delay(5);

}

writesmh(4,a);

delay(5);

writesmh(5,b);

delay(5);

writesmh(6,13);

delay(5);

writesmh(7,c);

delay(5);

writesmh(8,d);

delay(5);

writesmh(9,12);

delay(5);

writesmh(10,11);

delay(5);

}

if

(m==2)

{

for(i=0;i<2;i++

)//显示量程

{

writecomm(0xc0+i);

writedat(table0[i]);

delay(5);

}

for(i=0;i<12;i++

)

{

writecomm(0x80+i);

writedat(table3[i]);

delay(5);

}

writesmh(4,a);

delay(5);

writesmh(5,b);

delay(5);

writesmh(6,c);

delay(5);

writesmh(7,d);

delay(5);

writesmh(8,12);

delay(5);

writesmh(9,10);

delay(5);

writesmh(10,11);

delay(5);

}

if

(m==3)

{

for(i=0;i<2;i++

)//显示量程

{

writecomm(0xc0+i);

writedat(table0[i]);

delay(5);

}

for(i=0;i<12;i++

)

{

writecomm(0x80+i);

writedat(table4[i]);

delay(5);

}

writesmh(4,a);

delay(5);

writesmh(5,b);

delay(5);

writesmh(6,c);

delay(5);

writesmh(7,13);

delay(5);

writesmh(8,d);

delay(5);

writesmh(9,10);

delay(5);

writesmh(10,11);

delay(5);

}

for(j=0;j<40;j++)

delay(250);

}

}

void

t1(void)

interrupt

3

using

0

//用于产生ADC0809的时钟信号

{

TH1=(65536-200)/256;

TL1=(65536-200)%256;

CLK=~CLK}

7.2电路图

7.3材料清单

10K

7个

22uF

1个

30PF

2个

电位器

503

、504

各一个,103

两个

按键

1个

11.0592M晶振

1个

LM324

1片

ADC0809

1片

89C51

1片

22

TAG标签: