万用表的课程设计Word格式文档下载.docx
《万用表的课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《万用表的课程设计Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
2、设计思路与总体框图
1.方案选择
用单片机AT89S52与ADC0808设计一个数字万用表,配合分流电阻、分压电阻、基准电阻可以测量直流电压值,直流电流、直流电阻,四位数码显示。
实现各级量程的直流电压测量,其量程范围为0—5(V)。
实现不同量程的直流电流测量,其量程范围为0—100(mA)。
实现不同量程的电阻测量,其量程范围为0—1000(Ω)。
ADC0808是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
首先,利用P0口数据地址复用,将地址通过P0口输入到单片机中。
然后,充分利用单片机强大的运算转化功能将其转成适当的二进制信号控制数显以确保正确的显示被测量的读数。
2.总体框图
图一:
总体框图
3、系统硬件电路的设计
3.1数字多用表的主电路
数字多表仪表主电路如图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分别写入00H~07H,即可启动模拟量输入通道0~7进行A/D转换。
ADC0809参考正电压为5V,参考负电压为0V,时钟输入为2MHz。
图1数字多用表的主电路图
单片机的P1.0~P1.2引脚通过一个转换开关接地,通过判断P1.0~P1..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位数值,并且电阻测量范围只保证在0~ 1KΩ范围内误差不超过2Ω,如果要测量其他电阻,则需该改R19的值。
为满足图-2电路需要的-5V电源,利用LM324做一个反向电路,将+5V的电源转换成了-5V,如图-3:
图-3
3.3数字多用表的电压测量输入电路
图-4
图-4所示为数字多用表的电压测量输入电路,待测电压经过低通滤波器滤除高频干扰,再经过同向放大器送给ADC0809,电压测量输入范围0~5V,ADC0809的分辨率为8位,测量误差为5/255=0.02V。
3.4数字万用表的电流测量输入电路
图-5
图-5是数字万用表电流测量输入电路。
电流测量范围为1-100mA,因为ADC0809是电压转化器,必须将电压才能进行测量,这可以通过串接电阻RL来实现,注意RL必须很小(如0.1Ω),否则营销电流数值,由于待测电流和RL都很小,RL两端的电压也很小,必须将其放大到ADC0809能够分辨的范围之内。
4、系统的软件设计
数字多用表的软件设计如下程序所示,完成堆栈指针初始化之后,通过单片机P1.0—P1.2引脚进行测量功能判断,根据不同引脚电平分别进行电阻、电压或电流测量。
每种测量过程都基本相同,先读取ADC0809的A/D转换数据,然后进行相应的数据处理,最后将处理后的数据送往LED数码管进行显示。
数字多用仪表的软件程序:
org0000h;
单片机复位地址
ajmpmain;
转移到主程序处
org0100h;
main被定位在0x0100处
main:
movsp,#80h;
初始化堆栈指针
jnbP1.0,cr
jnbP1.1,cv
jnbP1.2,ca
cr:
movR7,#00h
lcalladc
LCALLRDAT
lcallDISPLAY
sjmpmain
CV:
MOVR7,#01H
LCALLADC
LCALLVDAT
LCALLDISPLAY
SJMPMAIN
CA:
MOVR7,#02H
LCALLADAT
LCALLDISPLAY
ADC:
MOVA,R7;
0808A/D转换子程序
MOVDPTR,#7FFFH
MOVX@DPTR,A
JBP3.3,$
MOVXA,@DPTR;
输入转换结果
RET
vdat:
movR2,#00h
movR3,A
movR6,#01h
movR7,#0F4h
callMULD2;
乘以500
clrC
movA,r5
addA,#60h;
加96修正
movr5,A
movA,r4
addcA,#00h
movr4,A
movA,r3
movr3,A
movA,r2
movr2,A
movr0,#30h
movr1,#34h
movA,R2
mov@r1,A
incr1
movA,R3
movA,R4
movA,R5
mov@r1,#00h
mov@r1,#0FFh
callDIVD4;
除以255
movr1,#38h
mov@r1,#0Ah
callDIVD4
mov43h,33h
mov42h,33h
mov41h,33h
movr0,#40h
mov@r0,#00h
incr0
movA,41h
movDPTR,#SEGMENT7
movcA,@A+DPTR
orlA,#80h
mov@r0,A
movA,42h
movA,43h
ret
ADAT:
movB,A
movA,#0B6h
clrC;
以下根据范围设置数值以防溢出
subbA,B
jcLARGERA
movA,B
subbA,#16h
jcLESSA
ajmpMIDDLEA
LARGERA:
movA,#0B6h
ajmpCALCULATEA
LESSA:
movA,#16h
MIDDLEA:
movA,B
CALCULATEA:
movr2,#0C3h
movr3,#50h
movr6,#00h
movr7,A
callMULD2;
乘以50000
subbA,#70h;
以下减去102000
mov37h,A
subbA,#8Eh
mov36h,A
subbA,#01h
mov35h,A
subbA,#00h
mov34h,A
mov@r1,#01h
mov@r1,#5Eh
incr1
mov@r1,#0A0h
callDIVD4;
除以89760
movA,33h
mov43h,A
mov42h,A
cjneA,#3Fh,NOTEQU
movA,#00h
NOTEQU:
mov41h,A
mov40h,#00h
RET
rdat:
movR6,#03h
movR7,#0E8h
callMULD2;
乘以1000
连续进行4次除以10的操作
movA,33h;
取得10进制值
cjneA,#3Fh,NONZERO
NONZERO:
mov40h,A
DELAY_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+1
djnzR6,DELAY_5ms2;
djnzR5,DELAY_5ms1;
SEGMENT7:
DB3Fh;
7段数码管字符0的abcdefg的值,a在最低位,最高位始终保留为0
DB06h
DB5Bh
DB4Fh
DB66h
DB6Dh
DB7Dh
DB07h
DB7Fh
DB6Fh
DISPLAY:
movDPTR,#0fEffh;
写第一位数码管
movr1,#40h
movA,@r1
movx@DPTR,A
setbC
movP1.4,C
callDELAY_5ms
incr1
movA,@r1;
写第二位数码管
movP1.5,C
写第三位数码管
movP1.6,C
写第四位数码管
movP1.7,C
ret
;
双字节二进制无符号数乘法
被乘数在R2(高位)、R3(低位)中,乘数在R6(高位)、R7(低位)中。
乘积在R2(高位)、R3、R4、R5(低位)中。
用到累加器A,B,PSW,R2~R7。
永远不会产生进位。
在出口时总是清除C。
若结果超出2个字节范围则OV=1。
MULD2:
MOVA,R3
MOVB,R7
MULAB
MOVR4,B
MOVR5,A
MOVB,R6
ADDA,R4
MOVR4,A
CLRA
ADDCA,B
MOVR3,A
MOVA,R2
ADDCA,B
RLCA
XCHA,R2
MOVB,R6
MULAB
ADDA,R3
MOVR2,A
ORLA,R3
JZMULD21
SETBOV
MULD21:
CLROV
四字节无符号数除法
R0存放被除数,除数,商数的地址。
从R0开始的连续四个字节为结果的余数,入口时可以为任意,但在出口时发生变化。
其后的连续4个字节在入口时是被除数,出口时是商数。
再其后的连续四个字节在入口时是除数,出口时保持不变。
用到累加器A,B,PSW,R0~R7。
如果除数为零,则置OV=1标志,否则清零。
DIVD4:
MOVA,R0
MOVB,A
ADDA,#08h
MOVR1,A
MOVA,#00h
ORLA,@R1
INCR1
JZDIVD45
MOVR1,B
MOVR2,#04h
DIVD41:
MOV@R1,#00h
DJNZR2,DIVD41
MOVR3,#20h
DIVD42:
MOVR2,#08h
MOVA,B
MOVR0,A
ADDA,#07h
CLRC
DIVD43:
MOVA,@R1
RLCA
MOV@R1,A
DECR1
DJNZR2,DIVD43
ADDA,#03h
ADDA,#0Bh
SUBBA,@R0
MOVR4,A
DECR0
MOVR5,A
MOVR6,A
MOVR7,A
JCDIVD44
MOVA,R4
MOVA,R5
MOVA,R6
MOVA,R7
INC@R1
DIVD44:
DJNZR3,DIVD42
MOVR0,B
DIVD45:
end
5、系统的设计仿真
电压测量仿真
电流测量仿真
电阻测量仿真
6.1总结与体会
数字多用表的课程设计,从确定方案、查找资料、仿真电路图,到最后电路设计实践,耗时2个星期。
数字多用表的设计方案采取AT89S52单片机结合A/D转换器,从而实现对电阻、电流和电压的测量的方案,从而实现电阻、电流和电压的数字化测量。
本次课程设计,虽然方案基本出来了,但是在硬件制作方面出现了几个问题,这也暴露出我们知识方面的一欠缺。
不足主要体现在以下几个方面:
(1)ADC0809的第10脚的时钟信号,我们是通过单片机编程实现的但是由于频率过低,只有500KHz,造成LED数码管显示不稳定而出现闪烁现象。
最终验收时是通过从外部信号发生器输入2MHz时钟信号解决的。
(2)万用板焊接时,由于布线不太合理,使得背面线很零乱。
并给后面的线路检查带来了不少麻烦。
(3)对Proteus仿真软件使用不熟练,使画仿真图时遇到不少问题。
(4)51单片机基础知识不扎实,电路分析遇到比较多的问题历经两个星期的课程设计后我深得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。
虽然最终的结果让人失望,但在此期间我们也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴