万用表的课程设计培训资料.doc
Good is good, but better carries it.精益求精,善益求善。万用表的课程设计-数字万用表的设计院(系)_专业_班级_姓名_学号_2012年6月21日目录1、设计任务.11.1设计目的.11.2设计指标及要求.12、设计思路与总体框图.13、系统硬件电路的设计.23.1多用表主电路.23.2电阻测量输入电路./.33.3电压测量输入电路.43.4电流输入测量电路.54、系统的软件设计.65、系统的设计仿真.146、总结与体会.167、参考文献.171、设计任务11设计目的采用8位8路A/D转换器ADC0809和AT89S52单片机,设计一台数字多用表,能进行电压、电流和电阻的测量,测量结果通过LED数码管显示,通过按键进行测量功能转换。12设计指标及要求电压测量范围05V,测量误差约为0.02V,电流测量范围1100mA,测量误差约为0.5mA,电阻测量范围01000,测量误差约为2。2、设计思路与总体框图1.方案选择用单片机AT89S52与ADC0808设计一个数字万用表,配合分流电阻、分压电阻、基准电阻可以测量直流电压值,直流电流、直流电阻,四位数码显示。实现各级量程的直流电压测量,其量程范围为05(V)。实现不同量程的直流电流测量,其量程范围为0100(mA)。实现不同量程的电阻测量,其量程范围为01000()。ADC0808是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。首先,利用P0口数据地址复用,将地址通过P0口输入到单片机中。然后,充分利用单片机强大的运算转化功能将其转成适当的二进制信号控制数显以确保正确的显示被测量的读数。2.总体框图数码管显示74LS374锁存器AT89S52单片机(实现译码驱动)模数转换(ADC8080)待测电压分档电压(量程转换)待测电阻待测电流分档电流(量程转换)分档电阻(量程转换)图一:总体框图3、系统硬件电路的设计31数字多用表的主电路数字多表仪表主电路如图1所示。89S52单片机通过线选方式扩展了A/D转换器ADC0809和4位LED数码管,单片机的P2.7引脚作为ADC0809的片选信号,因此A/D转换器的端口地址为7FFFH.片选信号和信号一起经或非门产生ADC0809的启动信号START和地址锁存信号ALE。片选信号和信号一起经或非门产生输出允许信号OE,OE=1时选通三态门使输出锁存器中的转换结果送入数据总路线。ADC0809的EOC信号经反相后接到89S52的引脚,用于产生A/D转换完成中断请求信号。ADC0809芯片的3位模拟量输入通道地址输入端A、B、C分别接到89S52的P0.0、P0.1和P0.2,故只要向端口地址0C000H分别写入00H07H,即可启动模拟量输入通道07进行A/D转换。ADC0809参考正电压为5V,参考负电压为0V,时钟输入为2MHz。图1数字多用表的主电路图单片机的P1.0P1.2引脚通过一个转换开关接地,通过判断P1.0P1.2引脚电平的高低,决定是否进行电阻测量、电压测量或电流测量。3.2数字多用表电阻输入电路图-2图-2所示为数字多用表的电阻测量输入电路。运算放大器的反馈电阻Rx作为待测电阻,通过1K电阻R19接到-5V电源上,假定运算放大器理想,那么放大器的输出电压Rv=5×Rx/R19,将Rv送给ADC0809,转换后得到数字量为Dv=Rv×255/5。单片机读取A/D转换数据,再经过逆向运算可得Rx=Dv×R19/255,注意此时得到的Rx是二进制数,需要转化成十进制数后才能送给数码管显示,程序中采取用4字节无符号除法,连续进行4次除以10的除法,依次取得4位数值,并且电阻测量范围只保证在01K范围内误差不超过2,如果要测量其他电阻,则需该改R19的值。为满足图-2电路需要的-5V电源,利用LM324做一个反向电路,将+5V的电源转换成了-5V,如图-3:图-33.3数字多用表的电压测量输入电路图-4图-4所示为数字多用表的电压测量输入电路,待测电压经过低通滤波器滤除高频干扰,再经过同向放大器送给ADC0809,电压测量输入范围0,ADC0809的分辨率为8位,测量误差为5/255=0.02V。3.4数字万用表的电流测量输入电路图-5图-5是数字万用表电流测量输入电路。电流测量范围为1-100mA,因为ADC0809是电压转化器,必须将电压才能进行测量,这可以通过串接电阻RL来实现,注意RL必须很小(如0.1),否则营销电流数值,由于待测电流和RL都很小,RL两端的电压也很小,必须将其放大到ADC0809能够分辨的范围之内。4、系统的软件设计数字多用表的软件设计如下程序所示,完成堆栈指针初始化之后,通过单片机P1.0P1.2引脚进行测量功能判断,根据不同引脚电平分别进行电阻、电压或电流测量。每种测量过程都基本相同,先读取ADC0809的A/D转换数据,然后进行相应的数据处理,最后将处理后的数据送往LED数码管进行显示。数字多用仪表的软件程序:org0000h;单片机复位地址ajmpmain;转移到主程序处org0100h;main被定位在0x0100处main:movsp,#80h;初始化堆栈指针jnbP1.0,crjnbP1.1,cvjnbP1.2,cacr:movR7,#00hlcalladcLCALLRDATlcallDISPLAYsjmpmainCV:MOVR7,#01HLCALLADCLCALLVDATLCALLDISPLAYSJMPMAINCA:MOVR7,#02HLCALLADCLCALLADATLCALLDISPLAYSJMPMAINADC:MOVA,R7;0808A/D转换子程序MOVDPTR,#7FFFHMOVXDPTR,AJBP3.3,$MOVXA,DPTR;输入转换结果RETvdat:movR2,#00hmovR3,AmovR6,#01hmovR7,#0F4hcallMULD2;乘以500clrCmovA,r5addA,#60h;加96修正movr5,AmovA,r4addcA,#00hmovr4,AmovA,r3addcA,#00hmovr3,AmovA,r2addcA,#00hmovr2,Amovr0,#30hmovr1,#34hmovA,R2movr1,Aincr1movA,R3movr1,Aincr1movA,R4movr1,Aincr1movA,R5movr1,Aincr1movr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0FFhcallDIVD4;除以255movr1,#38hmovr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0AhcallDIVD4mov43h,33hcallDIVD4mov42h,33hcallDIVD4mov41h,33hmovr0,#40hmovr0,#00hincr0movA,41hmovDPTR,#SEGMENT7movcA,A+DPTRorlA,#80hmovr0,Aincr0movA,42hmovDPTR,#SEGMENT7movcA,A+DPTRmovr0,Aincr0movA,43hmovDPTR,#SEGMENT7movcA,A+DPTRmovr0,AretADAT:movB,AmovA,#0B6hclrC;以下根据范围设置数值以防溢出subbA,BjcLARGERAmovA,BsubbA,#16hjcLESSAajmpMIDDLEALARGERA:movA,#0B6hajmpCALCULATEALESSA:movA,#16hajmpCALCULATEAMIDDLEA:movA,BCALCULATEA:movr2,#0C3hmovr3,#50hmovr6,#00hmovr7,AcallMULD2;乘以50000clrCmovA,r5subbA,#70h;以下减去102000movr5,Amov37h,AmovA,r4subbA,#8Ehmovr4,Amov36h,AmovA,r3subbA,#01hmovr3,Amov35h,AmovA,r2subbA,#00hmovr2,Amov34h,Amovr0,#30hmovr1,#38hmovr1,#00hincr1movr1,#01hincr1movr1,#5Ehincr1movr1,#0A0hcallDIVD4;除以89760movr1,#38hmovr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0AhmovDPTR,#SEGMENT7callDIVD4movA,33hmovcA,A+DPTRmov43h,AcallDIVD4movA,33hmovcA,A+DPTRmov42h,AcallDIVD4movA,33hmovcA,A+DPTRcjneA,#3Fh,NOTEQUmovA,#00hNOTEQU:mov41h,Amov40h,#00hRETrdat:movR2,#00hmovR3,AmovR6,#03hmovR7,#0E8hcallMULD2;乘以1000movr0,#30hmovr1,#34hmovA,R2movr1,Aincr1movA,R3movr1,Aincr1movA,R4movr1,Aincr1movA,R5movr1,Aincr1movr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0FFhcallDIVD4;除以255movr1,#38hmovr1,#00hincr1movr1,#00hincr1movr1,#00hincr1movr1,#0AhmovDPTR,#SEGMENT7callDIVD4;连续进行4次除以10的操作movA,33h;取得10进制值movcA,A+DPTRmov43h,AcallDIVD4movA,33hmovcA,A+DPTRmov42h,AcallDIVD4movA,33hmovcA,A+DPTRmov41h,AcallDIVD4movA,33hmovcA,A+DPTRcjneA,#3Fh,NONZEROmovA,#00hNONZERO:mov40h,AretDELAY_5ms:movR5,#01h;设置R5初始计数值DELAY_5ms1:movR6,#16h;设置R6初始计数值DELAY_5ms2:movR7,#70h;设置R7初始计数值DELAY_5ms3:djnzR7,DELAY_5ms3;延时时间为Time=(R7*2)+2+1)*R6+2+1)*R5+1djnzR6,DELAY_5ms2;djnzR5,DELAY_5ms1;retSEGMENT7:DB3Fh;7段数码管字符0的abcdefg的值,a在最低位,最高位始终保留为0DB06hDB5BhDB4FhDB66hDB6DhDB7DhDB07hDB7FhDB6FhDISPLAY:movDPTR,#0fEffh;写第一位数码管movr1,#40hmovA,r1movxDPTR,AsetbCmovP1.4,CclrCmovP1.4,CcallDELAY_5mssetbCmovP1.4,Cincr1movA,r1;写第二位数码管movxDPTR,AsetbCmovP1.5,CclrCmovP1.5,CcallDELAY_5mssetbCmovP1.5,Cincr1movA,r1;写第三位数码管movxDPTR,AsetbCmovP1.6,CclrCmovP1.6,CcallDELAY_5mssetbCmovP1.6,Cincr1movA,r1;写第四位数码管movxDPTR,AsetbCmovP1.7,CclrCmovP1.7,CcallDELAY_5mssetbCmovP1.7,Cret;双字节二进制无符号数乘法;被乘数在R2(高位)、R3(低位)中,乘数在R6(高位)、R7(低位)中。;乘积在R2(高位)、R3、R4、R5(低位)中。;用到累加器A,B,PSW,R2R7。;永远不会产生进位。;在出口时总是清除C。;若结果超出2个字节范围则OV=1。MULD2:MOVA,R3MOVB,R7MULABMOVR4,BMOVR5,AMOVA,R3MOVB,R6MULABADDA,R4MOVR4,ACLRAADDCA,BMOVR3,AMOVA,R2MOVB,R7MULABADDA,R4MOVR4,AMOVA,R3ADDCA,BMOVR3,ACLRARLCAXCHA,R2MOVB,R6MULABADDA,R3MOVR3,AMOVA,R2ADDCA,BMOVR2,AORLA,R3JZMULD21SETBOVRETMULD21:CLROVRET;四字节无符号数除法;R0存放被除数,除数,商数的地址。;从R0开始的连续四个字节为结果的余数,入口时可以为任意,但在出口时发生变化。;其后的连续4个字节在入口时是被除数,出口时是商数。;再其后的连续四个字节在入口时是除数,出口时保持不变。;用到累加器A,B,PSW,R0R7。;如果除数为零,则置OV=1标志,否则清零。;在出口时总是清除C。DIVD4:MOVA,R0MOVB,AADDA,#08hMOVR1,AMOVA,#00hORLA,R1INCR1ORLA,R1INCR1ORLA,R1INCR1ORLA,R1JZDIVD45MOVR1,BMOVR2,#04hDIVD41:MOVR1,#00hINCR1DJNZR2,DIVD41MOVR3,#20hDIVD42:MOVR2,#08hMOVA,BMOVR0,AADDA,#07hMOVR1,ACLRCDIVD43:MOVA,R1RLCAMOVR1,ADECR1DJNZR2,DIVD43MOVA,R0ADDA,#03hMOVR1,AMOVA,R0ADDA,#0BhMOVR0,AMOVA,R1SUBBA,R0MOVR4,ADECR1DECR0MOVA,R1SUBBA,R0MOVR5,ADECR1DECR0MOVA,R1SUBBA,R0MOVR6,ADECR1DECR0MOVA,R1SUBBA,R0MOVR7,AJCDIVD44MOVA,BMOVR0,AADDA,#03hMOVR1,AMOVA,R4MOVR1,ADECR1MOVA,R5MOVR1,ADECR1MOVA,R6MOVR1,ADECR1MOVA,R7MOVR1,AMOVA,R0ADDA,#07hMOVR1,AINCR1DIVD44:DJNZR3,DIVD42MOVR0,BCLROVCLRCRETDIVD45:SETBOVCLRCRETend5、系统的设计仿真电压测量仿真电流测量仿真电阻测量仿真6.1总结与体会数字多用表的课程设计,从确定方案、查找资料、仿真电路图,到最后电路设计实践,耗时2个星期。数字多用表的设计方案采取AT89S52单片机结合A/D转换器,从而实现对电阻、电流和电压的测量的方案,从而实现电阻、电流和电压的数字化测量。本次课程设计,虽然方案基本出来了,但是在硬件制作方面出现了几个问题,这也暴露出我们知识方面的一欠缺。不足主要体现在以下几个方面:(1)ADC0809的第10脚的时钟信号,我们是通过单片机编程实现的但是由于频率过低,只有500KHz,造成LED数码管显示不稳定而出现闪烁现象。最终验收时是通过从外部信号发生器输入2MHz时钟信号解决的。(2)万用板焊接时,由于布线不太合理,使得背面线很零乱。并给后面的线路检查带来了不少麻烦。(3)对Proteus仿真软件使用不熟练,使画仿真图时遇到不少问题。(4)51单片机基础知识不扎实,电路分析遇到比较多的问题历经两个星期的课程设计后我深得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。虽然最终的结果让人失望,但在此期间我们也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味。7、参考文献单片机原理及应用张毅刚主编高等教育出版社单片机原理实用教程徐爱钧编著电子工业出版社电子技术基础康华光主编高等教育出版社集成电路原理及应用谭博学、苗汇静主编电子工业出版社-