数字万用表的课程设计_第1页
数字万用表的课程设计_第2页
数字万用表的课程设计_第3页
数字万用表的课程设计_第4页
数字万用表的课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、课程名称: 数字万用表的设计专 业: 电子信息工程 班 级: 0学 号: 姓 名: 指导教师 : 目 录1 、设计任务3 1.1设计目的31.2设计指标及要求32、设计思路与总体框图33、系统硬件电路的设计43.1主控芯片43.2模数转换部分43.3 电阻测量输入电路63.4电压测量输入电路73、5电流输入测量电路93.6 自锁开关104、软件设计104.1主程序设计104.2 a/d转换子模块115、系统调试 115.1硬件调试115.2 硬件故障115.3硬件调试方法125.4软件调试125.5软件故障125.6软件调试方法 126 实验数据处理126.1实验数据 126.2实验数据分析

2、137总结与体会137.1 总结 147.2体会148 参考文献149 附录程序141、设计任务11设计目的采用a/d转换器adc0804和stc89c51单片机,设计一台数字多用表,能进行电压、电流和电阻的测量,测量结果通过lcd液晶显示器显示,通过按键进行测量功能转换。12设计指标及要求电压测量范围020v,测量误差约为0.05v,电流测量范围1200ma,测量误差约为0.5ma,电阻测量范围01000,测量误差约为2。2、设计思路与总体框图1.方案选择 用单片机stc89c51与adc0804设计一个数字万用表,配合分流电阻、分压电阻、基准电阻可以测量直流电压值,直流电流、直流电阻,四位

3、数码显示。实现各级量程的直流电压测量,其量程范围为020(v)。实现不同量程的直流电流测量,其量程范围为0200(ma)。实现不同量程的电阻测量,其量程范围为01000()。adc0804是带有8位a/d转换器、8路多路开关以及微处理机兼容的控制逻辑的cmos组件。它是逐次逼近式a/d转换器,可以和单片机直接接口。首先,利用p1 口数据地址复用,将地址通过p1口输入到单片机中。然后,充分利用单片机强大的运算转化功能将其转成适当的二进制信号控制数显以确保正确的显示被测量的读数。 2.总体框图液晶显示stc89c51单片机(实现译码驱动)模数转换(adc0804)待测电压分档电压(量程转换)待测电

4、阻待测电流分档电流(量程转换)分档电阻(量程转换)图一:总体框图3、系统硬件电路的设计3.1主控芯片本电压表采用stc89c52为主控芯片,电路如下图所接:3.2模拟转换部分该电压表采用的adc0804,此芯片优点是并行输出,速率快,缺点是只有8位,精度不高。下来adc0804芯片图:单片机的p2.0 p2.2引脚通过一个转换开关接地,通过判断p2.0 p2.2引脚电平的高低,决定是否进行电阻测量、电压测量或电流测量。为了方便,将数字地和模拟地都直接接到了一起,db0db7为并行输出口,cs,rd,wr为控制芯片模数转换及读取芯片数据和写数据的引脚,adc0804可以自己产生时钟,只要在clk

5、r和clkin端接入电阻(10k)和电容(理论为150pf本人接的220pf),可产生脉冲信号。vref为参考电压端,vin+和vin为电压输入端。当电压加在vin+和vin端时,在db0db7可输出八位到单片机,本处参考电压为5v,则当输入电压u时,输出数据为temp,则u/temp=5/255.3.3数字多用表电阻输入电路图-二 图-二所示为数字多用表的电阻测量输入电路。运算放大器的反馈电阻rx作为待测电阻,通过1k电阻r10接到5v电源上,那么放大器的输出电压rv=5*rx/(rp+r15+r0+rx),将rv送给adc0804,转换后得到数字量为dv=rv*255/5。单片机读取a/d

6、转换数据,再经过逆向运算可得rx=dv*(r1p+r0+r15)/(5-dv)*255,注意此时得到的rx是二进制数,需要转化成十进制数后才能送给1602显示,程序中采取用4字节无符号除法,连续进行4次除以10的除法,依次取得4位数值,并且电阻测量范围只保证在01k范围内误差不超过2,如果要测量其他电阻,则需该改rp的值。3.4数字多用表的电压测量输入电路图-四图-四所示为数字多用表的交流电压测量输入电路,acv量程为012v待测电压经交流电压测量图过低通滤波器滤除干扰,再经过同向放大器送给adc0804,电压测量输入范围012,adc084的分辨率为8位,测量误差为12/255=0.05v。

7、d5为整流管,d4起保护作用。r24、c6组成平滑滤波器。c5、c4为隔直电容。uout=uac(有效值)图-五直流电压测量图图-五直流电压测量电路。dcv量程为012v。uout=r8*u/(r7+r8+r11),所以,u=(r7+r8+r11)* uout/r8。r7和r8为分压电阻,大小都为10m。r11为匹配电阻,保证等值分压。r13为限流电阻,大小为1m。3.5数字万用表的电流测量输入电路图-六电流测量电路图图-六是数字万用表电流测量输入电路。电流测量范围为1-200ma,因为adc0804是电压转化器,必须将电压才能进行测量,这可以通过串接电阻rp来实现,注意rp必须很小(如0.1

8、),否则营销电流数值,由于待测电流和rl都很小,rl两端的电压也很小,必须将其放大到adc0804能够分辨的范围之内。r12为限流电阻,大小为1m。d2,d3为双向限幅过压保护二极管,起过流保护作用。3.6 自锁开关 图-七 自锁开关图用来控制测量哪一种变量,同时用来检测正测的信息,通过导线送入到单片机。上面接10k的限流电阻。4、软件设计4.1主程序 主程序包括初始化部分 调用a/d转换子程序和调用显示程序,如下图所示:4.2 a/d转换子模块:a/d转换子程序用于对adc0804八路输入模拟电压进行a/d转换,并将转换的数值存入八个相应的存储单元中,如下图: 5、系统调试基于单片机的数字电

9、压表在组装好以后,便可进入系统的在线调试,起主要任务是排除样机硬件故障并完善其硬件结构,试运行所设计的程序,排除程序错误,优化程序结构,使系统达到预期的功能,进而固化软件。5.1硬件调试单片机应用系统的硬件和软件调试时交叉进行的,但通常是先排除样机中明显的硬件故障,尤其是电源故障,才能安全和仿真器相连,进行综合调试。5.2 硬件电路故障(1)错线 开路 短路;(2)元器件损坏(3)电源故障5.3 硬件调试方法 本设计调试中所用的调试方法是静态测试: 在样机加电之前,首先用万用表等工具,根据硬件电器原理图和装配图仔细检查样机线路的正确性,并核对元器件的型号 规格和安装是否符合要求。第二步是加电后

10、检查各插件上引脚的点位,仔细测量各电位是否正常。第三步是在不加电的情况下,除单片机以外,插上所有的元器件,最后用仿真适配器将样机的单片机插座盒仿真器的仿真接口相连,为联机调试做准备。5.4 软件调试5.5 软件电路故障(1)当以断点或连续方式运行时,目标系统没有按规定的功能进行操作或什么结果也没有,这是由于程序转移到意外之外或在某处死循环所造成的。(2)结果不正确5.6 软件调试方法软件调试所使用的方法有:计算程序的调试方法,i/o处理程序的调试法,综合调试法6、实验数据处理6.1实验数据012直流电压为 012交流电压为次数标准值电压示值满度误差次数标准值电压示值满度误差1122334455

11、667788991010111112121313141415151617181920实验数据0-1k电阻为 0-200ma电流为次数标准值电压示值满度误差次数标准值电压示值满度误差112233445566778899101011111212131314141515161718192062实验数据分析 直流0-12v量程精度为 满度误差 为 交流0-21v量程精度为 满度误差为 电流0-200ma量程精度为满度误差为7、 总结与体会数字多用表的课程设计,从确定方案、查找资料、仿真电路图,到最后电路设计实践,耗时2个星期。数字多用表的设计方案采取stc89c51单片机结合a/d转换器,从而实现对电

12、阻、电流和电压的测量的方案,从而实现电阻、电流和电压的数字化测量。本次课程设计,虽然方案基本出来了,但是在硬件制作方面出现了几个问题,这也暴露出我们知识方面的一欠缺。不足主要体现在以下几个方面:(1)adc0804的第10脚的时钟信号,我们是通过单片机编程实现的但是由于频率过低,只有500khz,造成1602液晶显示器显示不稳定而出现闪烁现象。最终验收时是通过从外部信号发生器输入2mhz时钟信号解决的。(2)万用板焊接时,由于布线不太合理,使得背面线很零乱。并给后面的线路检查带来了不少麻烦。(3)51单片机基础知识不扎实,电路分析遇到比较多的问题历经两个星期的课程设计后我深得做课程设计同时也是

13、对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。虽然最终的结果让人失望,但在此期间我们也曾一度热情高涨。从开始时满8、参考文献单片机原理及应用 张毅刚 主编 高等教育出版社单片机原理实用教程 徐爱钧 编著 电子工业出版社电子技术基础康华光 主编 高等教育出版社集成电路原理及应用谭博学、苗汇静 主编 电子工业出版社9、附录程序主程序:#include /头文件#include /头文件#include#include#include#in

14、clude#include#include#include void main()while(1)write_com(0x01);lcd_init(); display_voltage(); 1、 宏定义和定义变量:#define uchar unsigned char /宏定义#define uint unsigned intuchar table= measurement: ;uchar range20=range020v: ;uchar range200=range0200ma: ;uchar range2000=range02k:;uchar warning=please choice

15、! ;/*uchar error=error!; */ uint measure10; sbit key3=p27;sbit key0=p22;sbit key1=p21;sbit key2=p20;sbit lcd_rs=p23; / 定义液晶的rs端口sbit lcd_rw=p24; / 定义液晶的rw端口sbit lcd_en=p25; sbit back=p26;sbit spk=p27; / 定义液晶的en端口sbit cs=p32; / 定义ad的cs端口sbit rd=p31; /定义ad的rd端口sbit wr=p30;/sbit dula=p37;sbit intr=p37;

16、 /定义ad的wr端口uint temp,i,a1,a2,a3,a4; /定义变量 uint date;2、 延时部分:void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void delay_lcd()/1602指令之间延时uint x=5;while(x-);3、 ad转换和数据传送: void ad_init() /初始化adc0804cs=0;wr=1;_nop_();wr=0;_nop_();wr=1; uint ad_switch() /ad转换部分uint temp;p1=0xff;rd=1;_nop_();r

17、d=0;_nop_();temp=p1;/将转后的原始值返给单片机p1口return temp;uint ad_smooth()/软件滤波uint xx,i,temp;ad_init();for(i=0;i20;i+)measurei=ad_switch();delay(10); /每隔10us adc转换并采集一次数据,将得 /到的数据放到数组中,采集十个数据for(xx=0;xx20;xx+) /将十个数据冒泡法排序for(i=xx;imeasurei)temp=measurei;measurei=measurexx;measurexx=temp; for(i=6;i16;i+)/去掉了三

18、个最小值和两个最大值, /取中间五个数的平均值xx+=measurei;xx=xx/10;return xx; /将滤过波后的值存入单片机4、 1602子程序:void write_com(uchar com)/写指令delay(5);lcd_en=0;lcd_rs=0;lcd_rw=0;_nop_();lcd_en=1;p0=com;lcd_en=0;lcd_rs=0;void write_date(uchar date)/写数据delay(5);lcd_en=0;lcd_rs=1;lcd_rw=0;_nop_();lcd_en=1;p0=date;lcd_en=0;lcd_rs=0;voi

19、d lcd_init()/初始化 back=0; delay(15); lcd_en=0; write_com(0x38); write_com(0x38); write_com(0x38); write_com(0x06); write_com(0x0c); write_com(0x01); 5、 键盘扫描:uint keyscan()if(key0=0&key1=1&key2=1&key3=1)return 1;else if(key0=1&key1=0&key2=1&key3=1)return (2);else if(key0=1&key1=1&key2=0&key3=1)return

20、(3);else if(key0=1&key1=1&key2=1&key3=0)return (4);else if(key0=1&key1=1&key2=1&key3=1) return(5);else return (6);6、 数据整理及显示:void display20v(uint temp)/量程为20v时的显示状态uint num0,num1,num2,num3;if(temp7) temp=0;else temp=temp-7;num0=temp/51;num1=temp%51*10/51;num2=temp%51*10%51*10/51;num3=temp%51*10%51*1

21、0%51*10/51;write_com(0x80+0x40+11); write_date(num0+0x30);delay_lcd();write_com(0x80+0x40+12); write_date(.);delay_lcd();write_com(0x80+0x40+13); write_date(num1+0x30);delay_lcd();write_com(0x80+0x40+14); write_date(num2+0x30);delay_lcd();write_com(0x80+0x40+15); write_date(num3+0x30);delay_lcd();vo

22、id display200ma(uint temp)/电流200ma时的显示状态uint num0,num1,num2,num3;if(temp7) temp=0;else temp=temp-7;num0=temp/510;num1=temp%51*10/510;num2=temp%51*10%51*10/510;num3=temp%51*10%51*10%51*10/510;write_com(0x80+0x40+11); write_date(num0+0x30);delay_lcd();write_com(0x80+0x40+12); write_date(.);delay_lcd()

23、;write_com(0x80+0x40+13); write_date(num1+0x30);delay_lcd();write_com(0x80+0x40+14); write_date(num2+0x30);delay_lcd();write_com(0x80+0x40+15); write_date(num3+0x30);delay_lcd();void display2000(uint temp)/量程为2000欧时的显示状态uint num0,num1,num2,num3;if(temp7) temp=0;else temp=temp-7;num0=temp/51;num1=tem

24、p%51*10/5.1;num2=temp%51*10%51*10/5.1;num3=temp%51*10%51*10%51*10/5.1;write_com(0x80+0x40+11); write_date(num0+0x30);delay_lcd();write_com(0x80+0x40+12); write_date(.);delay_lcd();write_com(0x80+0x40+13); write_date(num1+0x30);delay_lcd();write_com(0x80+0x40+14); write_date(num2+0x30);delay_lcd();write_com(0x80+0x40+15); write_date(num3+0x30);delay_lcd();void display_voltage()uint numx,temp,temp0,temp1;/float temp;numx=keyscan()

温馨提示

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

评论

0/150

提交评论