暑期实习报告-数字电压表.doc

上传人:wux****ua 文档编号:9478611 上传时间:2020-04-05 格式:DOC 页数:23 大小:428.50KB
返回 下载 相关 举报
暑期实习报告-数字电压表.doc_第1页
第1页 / 共23页
暑期实习报告-数字电压表.doc_第2页
第2页 / 共23页
暑期实习报告-数字电压表.doc_第3页
第3页 / 共23页
点击查看更多>>
资源描述
电子实习报告 数字电压表姓名:严宏海学号:20101003032班级:075102-22指导老师:王巍、郝国成、张晓峰、闻兆海、王国洪、吴让仲、李杏梅、王瑾中国地质大学(武汉)机械与电子信息学院通信工程专业2012年6月22日目 录一、前言2二、系统方案的选择和论证22.1 数模转换模块 22.2 模拟数据采集处理模块 2 2.3 液晶显示模块 32.4 AC-DC转换模块 3三、 软件硬件设计 33.1所采用实验方案的原理33.2硬件设计部分 43.3软件设计部分 8四、 测试数据与结果分析 94.1测试仪器94.2测试数据94.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.4 AC-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、档位使用的是模数转换器的输入引脚,程序通过,C B A(C B A代表ADC0809地址编码中的C B A,C接地)。来控制选通哪一条电路。CBA =000选择2-20V档位,CBA=001则选择0.2-2V档位,CBA=010选择0-0.2V档位。3.1.2、ADC0809模数转换模块:ADC0809是将输入的模拟值转化为8位二进制值输出,也就是对一个模拟量进行量化采用逐次逼近的方法近似为数字量。l 由于三路采集从不同的输入口输入(IN0、IN1、IN2),所以ADC0809的三个地址输入(A、B、C)分别接单片机P2的5、6、7脚。l 从各口输入的电压值范围0-5V,所以ADC0809采取5V的标准电压,以待量化进行数模转换。l ADC0809的工作是通过单片机S52中的程序控制的,当ADC0809的ALE=1 ,START下降沿时启动模数转换,此时EOC=0;转化结束后EOC=1,若OE=1,则允许单片机从ADC0809中读取数据,读取结束后,OE=0。l 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: 图13.2.2模数转换模块该模块采用的主要芯片使ADC0809。首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。ALE信号常与START信号连在一起,这样连接可以在信号的前沿写入地址信号,在其后沿启动A/D转换,(图2为ADC0809信号的时序配合图)。图2 ADC0809信号的时序配合在本设计中,选通了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.5P3.7。3.2.5 AC-DC转换模块、电压补偿模块采用的AC-DC转换芯片是AD637,完成了将交流电转换成其直流有效值。其最终转换公式是:V0=VIN2/VDEN之所以要有电压补偿,是因为AD637的电压转换不是线性的,在大于4V之后则输出的电压小于输入的交流电压的有效值。在0-4V的范围就直接将V0加到直流电压的输入。所以要加一个放大器LM324进行补偿。R2设计为可调电阻就是为了调节放大器的放大倍数。具体的电路连接图如下: 图63.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)*输入电压所得到的。所以,若getdata26则正常处理:选档程序如下:if ( (B0=0)&(A0=0) & (getdata26) / 选择量程大,转向 0.2-2V v2;m=2; if ( (B0=0)&(A0=1) & (getdata254) / 选择量程小,转到2-20量程 v20;m=1; if ( (B0=1)&(A0=0) & (getdata254) /选择量程小,转到0.2-2量程v2;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.0110.10.0769.00.12122.00.18188.0 表10.2V-2V档测量的数据(直流)万用表测试(V)1602显示值(mV)0.262580.444470.454540.616110.848471.0410501.1611681.3013011.6316391.7617881.942.03 表22V-20V档测量的数据(直流)万用表测量(V)1602显示值(V)2.012.012.672.723.373.424.44.355.15.096.16.037.06.907.97.888.58.479.59.529.89.8810.310.1911.811.7612.612.714.014.0515.015.518.818.6 表34.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=P25;sbit rw=P26;sbit e =P27;sbit ST=P30;sbit OE=P31;sbit EOC=P32;sbit CLK=P33;sbit ALE=P37;sbit led1=P22;sbit led2=P23;sbit led3=P24;sbit A0=P34;/代表地址编码中的Asbit B0=P35; /代表地址编码中的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;a0;a-)for(b=20;b0;b-); bit lcd_busy()/ 测试LCD忙碌状态,实际上延时一会同样可以达到效果 bit result; rs = 0; rw = 1; e = 1; delay(5); result = (bit)(P0 & 0x80); 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(table1count);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)&(A0=0) & (getdata26) / 选择量程大,转向 0.2-2V v2;m=2; if ( (B0=0)&(A0=1) & (getdata254) / 选择量程小,转到2-20量程 v20;m=1; if ( (B0=1)&(A0=0) & (getdata254) /选择量程小,转到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;i2;i+ )/显示量程 writecomm(0xc0+i); writedat(table0i); delay(5); for(i=0;i12;i+ ) writecomm(0x80+i); writedat(table2i); 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;i2;i+ )/显示量程 writecomm(0xc0+i); writedat(table0i); delay(5); for(i=0;i12;i+ ) writecomm(0x80+i); writedat(table3i); 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;i2;i+ )/显示量程 writecomm(0xc0+i); writedat(table0i); delay(5); for(i=0;i12;i+ ) writecomm(0x80+i); writedat(table4i); 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;j40;j+) delay(250); void t1(void) interrupt 3 using 0 /用于产生ADC0809的时钟信号 TH1=(65536-200)/256; TL1=(65536-200)%256; CLK=CLK7.2电路图7.3材料清单名 称数 量10K7个22uF1个30PF2个电位器503 、504 各一个,103 两个按键1个11.0592M晶振1个LM3241片ADC08091片89C511片
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!