基于AD5与5单片机的数字电压表_第1页
基于AD5与5单片机的数字电压表_第2页
基于AD5与5单片机的数字电压表_第3页
基于AD5与5单片机的数字电压表_第4页
基于AD5与5单片机的数字电压表_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大连海事大学信息科学技术学院2012年专业技能大赛基于51单片机的数字万用表论文队名:风中旗舰队长:石镇嘉 11级电信2班队员:吴俊峰 11级通信1班队员:耿 钰 11级通信3班2012年6月2日目录一、摘要及关键词1二、总设计流程图2三、方案比较3四、各单元设计原理4.1 供电电压的选取34.2 AD7705采集与转换(测量直流电压)44.3 单片机内部数据处理54.4 1602液晶显示器5五、扩展部分5.1AD7705采集与转换(测量电流) 75.2AD7705采集与转换(测量电阻) 85.3 短路检测 9六、系统调试流程10七、总结7.1元件清单及其特性 107.2设计总结 117.3比

2、赛心得 11八、PCB板及原理图12附录:详细程序 12参考文献 20一、摘要及关键词摘要:在比赛中我们通过A/D芯片(AD7705)对外部电压值进行采集,经转换后传输给单片机(89C52),使用液晶(1602)输出测量得到的电压值。该实验板可以测量不同增益下对应范围的电压值,并使部分量程下精确度理论上达到8增益。对于-2020V,增益值为1。在拓展中,我们根据闭合电路欧姆定律,改进程序及实验板,使之能够测量电流、电阻,同时能对短路状态做出检测。关键词:A/D7705双极性多量程电压测量多量程电流电阻测量短路检测二、总设计流程图外部待测模拟量外部供电电压AD780提供基准电压AD7705对外部

3、模拟量的采集、处理89C52对传输的数据进行处理1602液晶对被测量数据的实时显示三、方案比较本次比赛基础要求设计量程为0-5V,精确度至少为0.02V的电压表。根据精确度计算公式:精确度=量程/2n(n为ADC的位数),结合扩展的25V,做出以下方案比较:方案一:使用STC12C51进行模数转换,但由于其内置ADC精度不够(8位),勉强能够满足基础要求,但无法达到扩展要求。故舍弃此方案。方案二:ADC选用AD7705,单片机采用89C52,使用AD780提供基准电压。16位AD处理25V时精度为0.0004。同时使用继电器完成自动量程转换,但由于电路的复杂程度和比赛时间,最终我们没有做此扩展

4、。方案三:ADC选用AD7705,单片机采用89C52,使用AD780提供基准电压。充分利用89c52的丰富I/O口及AD7705的高精度、双极性特性将作品设计成拥有五档电压测量、五档电流测量、七档电流测量及短路检测的多用表。最终我们组决定使用方案三完成比赛。四、各单元设计原理1、供电电压选取由于实验要求使用A/D测量05V电压,使用DC Power Supply提供外部供电电压,或以USB接口给系统上电,经过AD780芯片,对A/D输入适合工作的基准电压,为AD7705、单片机提供稳定的2.5V工作电压。2、AD7705对模拟量的采集及转换(测量电压)(1)AD7705为16位双极性模数转换

5、器,它包括一个-(或电荷平衡)ADC、片内带静态RAM 的校准微控制器、时钟振荡器、数字滤波器和一个双向串行通信端口。该器件的电源电流仅为320A,使得它理想地用于电池供电的仪器中。器件具有两种可选电源电压范围分别是2.73.3V 或4.755.25V。它具有高精度校准、测量的能力,适应电压表的精度要求。(2)设计实验板共有5个量程,分别为:-200mV200mV 对应增益值为 8-22V 对应增益值为 1-2020V 对应增益值为 1-200200V 对应增益值为 1-500500V 对应增益值为 1(3)实验通过开关使不同阻值分压电阻接入电路来改变电压表量程。开关抬起有效。如图连接A/D与

6、单片机,对A/D进行初始化,设置为双极性、无缓冲、增益为1、滤波器不工作、自校准、更新速率为20Hz的状态。通过编译的读、写程序,完成A/D对外部模拟量的采集和处理,并将数据传送给单片机。3、单片机数据处理(直流电压)(1)本作品设计有五个电压档位。在程序中我们通过设置switch 语句实现对不同档位的选取和控制,AD转换后的数据被传输至单片机中对应档位的数据处理函数,单片机根据相应档位的参数设置将数据处理还原为真实电压值,并转换为可被液晶读取的2进制形式。(2)测量直流电压的公式为:电压真值=数据V/增益值*对应的档位参数4、1602液晶显示器(1)对1602进行初始化,设置相关功能。160

7、2液晶初始化程序:显示器模块原理图:(2)关于显示正负号及小数点,本次显示000.00000精度(3)关于数据处理之后的输出,将经过单片机处理得到的数据V发送至1602液晶,通过display函数(部分程序如下),实现液晶对数据的显示。同时设计保护数据,当测得数据大于档位上限时,系统输出档位上限值。void display()(部分程序)chardisp9="12345678"disp0= (v/10000000)+0x30; v%=10000000; disp1= (v/1000000)+0x30; v%=1000000;disp2= (v/100000)+0x30; v

8、%=100000; disp3= (v/10000)+0x30; v%=10000; disp4= (v/1000)+0x30; v%=1000;disp5= (v/100)+0x30; v%=100; disp6= (v/10)+0x30;v%=10;disp7= (v/1)+0x30;五、扩展部分1、电流测量利用闭合电路欧姆定律,在测电压的基础上可以实现对电流的测量。实验中共有五个档位,分别为:-22mA对应增益值为8-2020mA对应增益值为8-200200mA对应增益值为8-22A对应增益值为8-1515A对应增益值为1对于电流数据的处理,将AD采集到的数据v输入单片机后,根据计算公式

9、对v进行处理,以第一档程序举例:其中对数据处理的公式为:电流真值=数据/增益值*对应的档位参数2、电阻测量(1)本次比赛的电阻测量在说明中并没有,我们组为了充分利用AD7705资源、锻炼组员的能力,额外做了电阻测量和短路检测的拓展。(2)电阻测量的原理为:根据闭合电路欧姆定律R=U/I,由于前两步已完成对电压与电流的测量,所以此处只需要在数据处理时,使用某档位电压/对应档位流过待测电阻的电流值即可。(3)电阻测量的档位及对应增益值020对应增益值为20200对应增益值为202k对应增益值为2020k对应增益值为20200k对应增益值为202M对应增益值为20100M对应增益值为1(4)电阻测量

10、的数据处理(20档为例)电阻测量的数据处理公式为:U/Rx=2.5/(Rx+Ro) Ro:相应电阻档的已知串联电阻3、短路检测在P2.5连接蜂鸣器系统,当表笔两端电阻小于15时,P2.5赋低电平,蜂鸣器工作。 六、系统调试流程1、给开发系统上电,调节液晶对比度,检测电路各处有无短路、断路、或元件工作状态不正常的情况。2、依次按下所有开关,检查各档位跳转情况。3、进入电压档,依次从大量程检测至小量程,计算理论与实际的偏差,通过对程序的控制和对硬件的修改。使误差保持在0.1%以下。4、按照步骤3的方法测量电流、电阻,记录数据,检测精确度。5、进入20档,接通短路检测端口,将正负表笔短接,检测蜂鸣器

11、发声是否正常。6、多次测量各物理量,检测实验板稳定性。最后将实验板断电,做好实验记录。七、总结1、元件清单及其特性表7-1:元件清单元件名称规格型号单位数量ADCAD7705片1瓷片电容33pF只1瓷片电容0.1uF只1电解电容1uF只1电解电容10uF只1电阻5M只2电阻1M只2单片机STC89C52片1基准电压芯片AD780片1无源晶振2.4576M只1液晶1602块1自锁开关个20表7-2:STC89C52主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程U

12、ART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位2、设计总结本次比赛,我们组使用AD7705模数转换器,完成了对直流电压、电阻,电流,短路检测等量的测量,分别有5个、7个、5个档位。1602液晶上行显示档位,下行显示实时数据。实验功能基本实现,精确度达到要求范围。3、比赛心得本次比赛是我们进入大学以来参加的第一次电子设计大赛,从一开始对此的一无所知,对各种知识的渴求,一点点学习我们需要的知识,在网上搜寻资料寻找最合适的AD芯片,对AD的学习,编写程序,焊制电路板,调试系统,改进和更新每一步都是不容易的。在这个过程中,我们不仅收获了知识,还有与学长的交流,与队员之间的默契,调试

13、成功的喜悦。回想这次比赛,需要改进的有几点:(1)在调试过程中对元器件的损耗,由于错误的使用外部电压导致元件烧坏的事情应注意避免;(2)在写程序的过程中,对已有材料的借鉴,开始并没有很好的和我们自己的实验结合上,耽误了一些时间;(3)硬件处理方面,由于电路的复杂,开始用手焊的孔板测试,在电路连接上出现较多失误,导致调试失败。以后要认真连好每一条线、每一元件。八、PCB板及原理图附录:部分程序/*文件名称:ad7705.c功能:数字万用表说明:电压五档、电流五档、电阻七档 设计者:石镇嘉、吴俊峰、耿钰*/#include<reg52.h>#include<intrins.h&g

14、t;#define uint unsigned int#define uchar unsigned charsbit ADC_CLK=P17 ;sbit ADC_DIN=P30 ;sbit ADC_DOUT=P30 ;sbit ADC_DRDY=P31;sbitlcden=P32;sbitlcdrs=P33;sbit U=P27; sbit I=P35;sbit R=P15;/*电压档*/sbit a=P14; /*电流档*/sbit f=P20;/*电阻档*/sbit k=P10;/*短路口*/sbit DUANLU=P25;/*函数声明*/Void delayms(uintxms);uin

15、t choose();void readad_16deal_choose();voidInitADC(void); 50void display();void display0();char code table0="welcome! " /欢迎界面char code table11="DC-200mV200mV" /档符显示char code table35=" 0200k" 100char code table36=" 02M"char code table37=" 0100M"/*/voi

16、d main() DUANLU=1;InitLCD();while(1) InitADC(); readad_16deal0(); readad_16deal_choose();display(); uint choose() U=0;a=0;b=0;c=0;d=0;e=0; I=1;f=0;g=0;h=0;i=0;j=0; R=0;k=0;l=0;m=0;n=0;o=0;p=0;q=0;if(U)if(a)ch=11;else if(b) ch=12;else if(c) ch=13;else if(d) ch=14;else if(e) ch=15;else if(I)return ch;

17、void readad_16deal_choose()/各档处理函数选择 switch(choose()case 11: readad_16deal11();break;/电压case 21: readad_16deal21();break;/电流case 31: readad_16deal31();break;/电阻 voiddelayms(uintxms)uinti,j;for(i=xms;i>0;i-)for(j=110;j>0;j-);voidInitADC(void)uchar z;ADC_CLK=1;ADC_DIN=1;for(z=0;z<40;z+) ADC_C

18、LK=0;ADC_CLK=1; /防止接口迷失,通信寄存器返回到等待写状态WriteToReg_ADC(0x20); /通道1,下一个写时钟寄存器WriteToReg_ADC(0x00); /写时钟寄存器设置更新速率为20Hz 0x03:200HzWriteToReg_ADC(0x10); /通道1,下一个写设置寄存器/WriteToReg_ADC(0x40); /写设置寄存器 ,设置成双极性、无缓冲、增益为1、滤波器不工作、自校准switch(choose()case 0:display0();break;case 11: WriteToReg_ADC(0x58);break;/增益8以下全

19、为双极性case 37: WriteToReg_ADC(0x40);break; /增益1 delayms(50);voidInitLCD(void)lcden=0;write_com(0x38); /设置16*2显示,5*7点阵,8位数据接口write_com(0x0c); /开显示,不显示光标write_com(0x06); /写一个字符后地址指针加1write_com(0x01); /显示清零,数据指针清零voidwrite_com(uchar com)lcdrs=0; P0=com;delayms(5);lcden=1;delayms(5);lcden=0;voidwrite_data

20、(uchar date)lcdrs=1; P0=date;delayms(5);lcden=1;delayms(5);lcden=0;/*写ad转换寄存器*/uintWriteToReg_ADC(uintbyteword)uintToken,z;uint AD16bit_WriteToReg;ADC_CLK=1;Token=0x80; AD16bit_WriteToReg=byteword;for(z=0;z<8;z+)if(AD16bit_WriteToReg & Token)ADC_DIN=1; / 输入数据位elseADC_DIN=0;delayms(1);ADC_CLK=

21、1;delayms(1);ADC_CLK=0;ADC_CLK=1; Token=Token>>1; ADC_CLK=1;ADC_DIN=1; /结束return(TRUE);/*读16位AD数值*/uint ReadADC_16BitValue()uint z;unsigned long AD16bit;/uint AD16bit;WriteToReg_ADC(0x38); while (ADC_DRDY) ; /等待数据准备 /delayms(5); ADC_CLK=1; AD16bit=0x0000;for(z=0;z<16;z+)AD16bit=AD16bit<&

22、lt;1;ADC_CLK=0;delayms(1);if(ADC_DOUT=1)AD16bit=AD16bit|0x0001; ADC_CLK=1;ADC_CLK=1;ADC_DIN=1;return(AD16bit);void readad_16deal0() char count=0;readad_16bit=ReadADC_16BitValue();if(readad_16bit>0x8000)&(readad_16bit<0x8000)AC=1;if(readad_16bit>0x8000)DATA=readad_16bit-0x8000;if(readad_

23、16bit<0x8000)DATA=0x8000-readad_16bit;DATAF=DATA;/*电压-200200mV为例*/void readad_16deal11() /200m 300 DATAF2=DATAF/32767*31250000; v0=DATAF2; v=v0;if(v>20000000)v=20000000;for(count=0;count<14;count+) write_com(0x80+count);write_data(table11count); /*电流 -22mA为例*/void readad_16deal21() /2mA DAT

24、AF2=DATAF/32767*2500000000/8/106; v0=DATAF2; v=v0;if(v>200000)v=200000;for(count=0;count<14;count+) write_com(0x80+count);write_data(table21count); /*电阻 20为例*/void readad_16deal31() / 20 DATAF2=(DATAF/32767*125000)*2040/(250-(DATAF/32767*125); v0=DATAF2; v=v0;if(v>2000000)v=2000000;/if(DATAF<30000)D=1;/ else D=0;for(count=0;count<13;count+) write_com(0x80+count);write_data(table31count); write_com(0x80+13);write_data(0xf4);void display() /档符显示前移到各档处理函数中 /本函数可共用chardisp9="12345678"disp0= (v/10000000)+0x30; /0对应的十进制ASCII码48换为十六进制即为0x30v%=10000000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论