暑期实习报告数字电压表.docx
- 文档编号:28650818
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:30
- 大小:226.16KB
暑期实习报告数字电压表.docx
《暑期实习报告数字电压表.docx》由会员分享,可在线阅读,更多相关《暑期实习报告数字电压表.docx(30页珍藏版)》请在冰豆网上搜索。
暑期实习报告数字电压表
电子实习报告
数字电压表
目录
一、前言……………………………………………………………2
二、系统方案的选择和论证………………………………………………2
2.1数模转换模块…………………………………………………………………2
2.2模拟数据采集处理模块………………………………………………………2
2.3液晶显示模块…………………………………………………………………3
2.4AC-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转换。
由于本实验要求的测量误差是<=1%,显示精度是0.01V,本设计采用ADC0809就可以满足要求。
ADC0809的分辨率是1/28,量化间隔为∆=
满量程输入电压/28-1,完成一次转换的时间是100us。
适合此设计使用。
方案三:
采用其他采样频率位数更高的AD转换芯片,如积分型(如TLC7135)、压频变换型(如AD650)、调制型(如AD7705)、并行比较型/串并行比较型(如TLC5510)。
这些AD转换芯片各有各的特点。
单本实验只需要采用常用的、性价比高的芯片就可以完成。
2.2模拟数据采集处理模块
方案一:
不加另外的模拟电路,直接让ADC0809采集输入电压,对于此设计不可行。
因为ADC0809只能对0-5V的模拟电压进行采样,而要求对0-20V的电压进行处理,故淘汰此设计。
方案二:
分三通道对0-0.2V,0.2-2V,2-20V分别放大25倍,2.5倍,分压四分之一,将其范围控制在ADC0809的采集范围0-5V内,这样可以避免ADC0809对比较小的电压和比较大的电压采样误差较大的弊端。
所以分压与放大两部分电路结合成功完成数据采集处理模块。
所以选择方案二。
2.3显示模块
方案一:
用CD4511进行译码,四位七段数码管进行显示。
因为CD4511可将BCD,码转换为可以再数码管上显示的数字,则在单片机的程序中不需要写译码的程序。
由于CD4511译码出的数据不能显示小数点,小数点的控制仍需在单片机程序中另外编写。
方案二:
用液晶LCD1602,显示清晰准确明显,显示编程容易控制,可以显示字母。
所以选择方案二。
2.4AC-DC转换模块
采用AD637完成AC-DC转换,再配合LM324完成交流转其对应的直流有效值的功能,精度较高。
三、详细软件硬件设计
3.1所采用实验方案的原理
3.1.1自动调档模块:
利用芯片LM324和ADC0809输入通道并结合程序实现自动调挡。
1、保证此模块输出到ADC0809的电压值维持在0-5V。
分三通道对0-0.2V,0.2-2V,2-20V分别放大25倍,2.5倍,分压四分之一。
利用运算放大器LM324来实现放大功能,通过电阻分压实现缩小功能。
2、档位使用的是模数转换器的输入引脚,程序通过,CBA(CBA代表ADC0809地址编码中的CBA,C接地)。
来控制选通哪一条电路。
CBA=000选择2-20V档位,CBA=001则选择0.2-2V档位,CBA=010选择0-0.2V档位。
3.1.2、ADC0809模数转换模块:
ADC0809是将输入的模拟值转化为8位二进制值输出,也就是对一个模拟量进行量化采用逐次逼近的方法近似为数字量。
●由于三路采集从不同的输入口输入(IN0、IN1、IN2),所以ADC0809的三个地址输入(A、B、C)分别接单片机P2的5、6、7脚。
●从各口输入的电压值范围0-5V,所以ADC0809采取5V的标准电压,以待量化进行数模转换。
●ADC0809的工作是通过单片机S52中的程序控制的,当ADC0809的ALE=1,START下降沿时启动模数转换,此时EOC=0;转化结束后EOC=1,若OE=1,则允许单片机从ADC0809中读取数据,读取结束后,OE=0。
●Clock信号是由单片机的一个定时器产生的。
3.1.3、单片机模块:
(程序见后面)
该模块主要是通过程序来实现两个功能:
1、控制ADC0809进行模数转换,单片机的P0口和ADC0809的8位输出口相连,来读取数据。
2、单片机通过P1口,外接液晶1602,还有复位电路和晶振电路。
3、定时器产生ADC0809的时钟信号。
3.1.4、显示模块
由液晶LCD1602显示,液晶相对数码管,显示清晰,能显示字母,可视性好。
3.2硬件设计部分
整体设计流程图
3.2.1单片机最小系统
单片机的最小系统由AT89S51、12M晶振、两个30p电容、10K电阻、复位开关组成。
如图1:
图1
3.2.2模数转换模块
该模块采用的主要芯片使ADC0809。
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
ALE信号常与START信号连在一起,这样连接可以在信号的前沿写入地址信号,在其后沿启动A/D转换,(图2为ADC0809信号的时序配合图)。
图2ADC0809信号的时序配合
在本设计中,选通了IN-0通道(A、B、C都为0),IN-0作为模拟信号的输入,通过D0-D7数据输出口与单片机进行数据传输。
由于ADC0809没有内部时钟,所以需要单片机提供时钟,本方案中通过单片机的定时器产生一方波信号可作为ADC0809的时钟信号。
3.2.3模拟数据采集处理模块
分三通道对0-0.2V,0.2-2V,2-20V分别放大25倍,2.5倍,分压四分之一,将其范围控制在ADC0809的采集范围0-5V内,这样可以避免ADC0809对比较小的电压和比较大的电压采样误差较大的弊端,加强其采样处理的准确性。
所以分压与放大两部分电路结合成功完成数据采集处理模块。
放大有LM324及电阻完成,分压有电阻分压即可,在输入到ADC0809之前,三通道都加一电压跟随器,使输入到ADC0809的采集电压稳定。
3.2.4显示模块
采用LCD液晶显示器1602。
其功率小,效果明显,显示编程容易控制,可以显示字母。
如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P3.5—P3.7。
3.2.5AC-DC转换模块、电压补偿模块
采用的AC-DC转换芯片是AD637,完成了将交流电转换成其直流有效值。
其最终转换公式是:
V0=VIN2/VDEN之所以要有电压补偿,是因为AD637的电压转换不是线性的,在大于4V之后则输出的电压小于输入的交流电压的有效值。
在0-4V的范围就直接将V0加到直流电压的输入。
所以要加一个放大器LM324进行补偿。
R2设计为可调电阻就是为了调节放大器的放大倍数。
具体的电路连接图如下:
图6
3.3软件设计部分
3.3.1数据处理模块
P0=getdata,而ADC0809的输出电压为Vout=(getdata/255)*5,对于2-20V的输入电压,由于采集时采用了分压四分之一,所以Vout=(getdata/255)*20,为了得到显示的各位整数值,此处乘以100,Vout=(getdata/255)*2000,得到要在1602上显示的四位数值a,b,c,d后,在a,b后,c,d前加小数点,最终在1602上显示ab.cd(V)即为量程在2-20V时,所测电压值。
在0-0.2V时,由于放大了25倍,所以Vout=(getdata/255)*5/25,为了得到要在1602上显示的四位数值a,b,c,d。
此处乘以10000。
最终在1602上显示abcd(mV)即为量程在2-20V时,所测电压值
在0.2-2V内时,由于放大了2.5倍,所以Vout=(getdata/255)*5/2.5,为了得到要在1602上显示的四位数值a,b,c,d。
此处乘以1000。
最终在1602上显示a.bcd(V)即为量程在2-20V时,所测电压值
所以三种情况可归结为:
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后,再在合适的位置加上小数点即可。
3.3.2数模转换及换挡模块
首先启动AD,由一START的端口的下降沿触发。
当AD转换完成标志EOC为1时,先将数据锁存,当AD采样数据给getdata后,再将OE置为1,输出转换得到的数据。
其中因为在采样处理模块有四分压,所以送给U0的电压值并不是原始的电压值。
对于2V-20V的电压,采样处理模块只对其进行四分压(0.5-5),然后送到U0。
要注意的是AD转换的数据是八位二进制的数。
而此二进制的数是由:
(参考电压/256)*输入电压所得到的。
所以,若getdata<26(26,也就是0.5V,是2V经过二分压所得到的。
)就转到0.2V-2V的档。
若getdata>26则正常处理:
选档程序如下:
if((B0==0)&&(A0==0)&&(getdata<26))//选择量程大,转向0.2-2V
{v2;m=2;}
if((B0==0)&&(A0==1)&&(getdata<26))//选择量程大,转到0-0.2量程
{v0_2;m=3;}
if((B0==0)&&(A0==1)&&(getdata>254))//选择量程小,转到2-20量程
{v20;m=1;}
if((B0==1)&&(A0==0)&&(getdata>254))//选择量程小,转到0.2-2量程
{v2;m=2;}
3.3.3液晶显示模块
ADC0809的输出端与单片机的P0口相连,单片机的P1口与1602的8为数据口相连,1602的RSRWE三个控制端分别连接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.20.2V-2V档测量的数据(直流)
图10
图11
分析:
从图10可以看出,线性良好。
图11纵坐标单位为MV,0.4-1.4范围内,误差较小,在2MV左右.但在量程的两端误差较大。
4.3.32V-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
#defineucharunsignedchar
#defineuintunsignedint
uchara,b,c,d;
unsignedchargetdata;
unsignedinttemp;
unsignedinti,j;
unsignedcharm;
ucharcodetable0[]="V=";
ucharcodetable1[]="0123456789mV.";
ucharcodetable2[]="Range:
2-20V";
ucharcodetable3[]="Range:
0.2-2V";
ucharcodetable4[]="Range:
0-0.2V";
sbitrs=P2^5;
sbitrw=P2^6;
sbite=P2^7;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitALE=P3^7;
sbitled1=P2^2;
sbitled2=P2^3;
sbitled3=P2^4;
sbitA0=P3^4;//代表地址编码中的A
sbitB0=P3^5;//代表地址编码中的B
#definev20B0=0;A0=0;//0通道
#definev2B0=0;A0=1;//1通道
#definev0_2B0=1;A0=0;//2通道
voidTimeInitial()//用于产生ADC0809所需的时钟信号
{TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
CLK=1;
}
voiddelay(unsignedcharx)//延时函数
{
unsignedchara,b;
for(a=x;a>0;a--)
for(b=20;b>0;b--);
}
bitlcd_busy()//测试LCD忙碌状态,实际上延时一会同样可以达到效果
{
bitresult;
rs=0;
rw=1;
e=1;
delay(5);
result=(bit)(P0&0x80);
e=0;
returnresult;
}
voidwritecomm(ucharcomm)
{//while(lcd_busy());
rs=0;
rw=0;
e=0;
delay(5);
P0=comm;
e=1;
delay(5);
e=0;
}
voidwritedat(uchardat)
{
//while(lcd_busy());
rs=1;
rw=0;
e=0;
delay(5);
P0=dat;
e=1;
delay(5);
e=0;
}
voidwritesmh(ucharadd,uchardate)
{
ucharcount;
count=date;
writecomm(0xc0+add);
delay(5);
writedat(table1[count]);
delay(5);
}
voidinit()
{delay(50);
writecomm(0x38);
delay(50);
writecomm(0x0c);
delay(50);
writecomm(0x06);
delay(50);
writecomm(0x80);
delay(5);
writecomm(0x01);
delay(50);
}
voidmain()
{
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)&&(A0==0)&&(getdata<26))//选择量程大,转向0.2-2V
{v2;m=2;}
if((B0==0)&&(A0==1)&&(getdata<26))//选择量程大,转到0-0.2量程
{v0_2;m=3;}
if((B0==0)&&(A0==1)&&(getdata>254))//选择量程小,转到2-20量程
{v20;m=1;}
if((B0==1)&&(A0==0)&&(getdata>254))//选择量程小,转到0.2-2量程
{v2;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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 暑期 实习 报告 数字 电压表