1、电子0901班毕业设计吴祥贵简易自动电阻测试仪摘 要本设计根据题目要求制作一台简易自动电阻测试仪,能够测量100、1k、10k、10M四档不同的量程,并实现其中前三档的自动量程转换功能,同时自动显示小数点和单位。基于这些要求,经过讨论,决定利用555多谐振荡电路将电阻参数转化为频率,频率f是单片机很容易处理的数字量,一方面测量精度高,另一方面便于使仪表实现自动化,而且单片机构成的应用系统有较大的可靠性。通过输入单片机AT89C51控制继电器控制被测RC振荡电路频率的自动选择,输入输出控制采用键盘输入控制电路、LCD12864显示系统和报警控制电路组成,能很好的实现各个要求。单片机具有可编程性,
2、硬件的功能描述可完全在软件上实现,另一方面便于使仪表实现自动化,设计时间短,成本低,可靠性高。关键字:AT89C51单片机 555多谐振荡电路 继电器 自动量程转换AbstractThe design on the basis of the subject demand produced a simple automatic resistance tester, capable of measuring 100 Omega Omega, 1K, 10K, 10M Omega Omega four profile at different range, and realizes the auto
3、matic conversion range before the third, while automatically display a decimal point and unit. Based on these requirements, after discussion, decided to use the 555 multivibrator circuit resistance parameters are transformed into frequency, frequency of F SCM is easily handled the digital quantity,
4、a high measuring precision, on the other hand, so easy to realize automation of instrumentation, and chip microprocessor application system has higher reliability. Through the input of single-chip AT89C51 control relay to control the tested RC oscillating circuit frequency automatic selection, input
5、 / output control using the keyboard input control circuit, LCD12864 display system and an alarm control circuit, can achieve a very good all. Microcontroller having programmable, hardware description of the function can be completely realized in software, on the other hand, so easy to realize autom
6、ation of instrumentation, short design time, low cost, high reliability.Keywords: single chip AT89C51 555 multivibrator circuit relay automatic range switching目 录一、选题背景 - 1 -二、方案论证 - 1 -2.1方案论证与比较 - 1 -2.2设计思路 - 2 -2.2.1 总体方案组成和说明 - 2 -2.2.2 组成部分及说明 - 2 -三、设计实现 - 5 -3.1 测量电路设计 - 5 -3.2 通道选择电路设计 - 5
7、-3.3 控制电路设计 - 6 -3.4 显示电路 - 8 -3.5 软件设计 - 8 -四、测试及结果分析 - 9 -4.1 测试方法及使用的仪器 - 9 -4.2 指标测试和测试结果 - 9 -五、结论 - 9 -六、致谢 - 9 -参考文献 - 10 -附录 - 11 -附录1: 主要元器件清单 - 11 -附录2:程序清单 - 12 -附录3:实物图 - 22 -一、选题背景现代电子产品正以前所未有的速度,向着多功能化、体积最小化、功耗最低化的方向发展。本次设计出具有四档量程的简易自动电阻测试仪,量程分别为100、1k、10k、10M四档,难点在于小电阻的测量精度。测量时电阻值为3位数
8、字显示(最大显示数必须为999),能自动显示小数点和2字单位,如98.7欧姆,并实现前三档的自动量程转换。在本设计中我们着重介绍一种把电子元件的参数R转换成频率信号f,然后采用单片机控制后,再通过程序处理运算求出R,最后应用LCD12864显示的方法。量程自动转换原理分别是RC振荡电路和LM555多谐振荡器,这样就能够把待测电阻转换为频率,而频率f是单片机很容易处理的数字量。目前市面上测量电子元器件参数R的仪表种类较多,方法和优缺点也各有不同。一般的测量方法都存在计算复杂,不易实现自动测量而且很难实现智能化等缺点。将电阻参数转化为频率,这样处理一方面使测量精度提高了,另一方面也便于使仪表实现智
9、能化,并能很好的实现各个要求。二、方案论证2.1方案论证与比较方案一:最基本的就是根据 R 的定义式来测量。在如图2-4中,分别用电流表和电压表测出通过电阻的电流和通过电阻的电压,根据公式R=U/I求得电阻。这种方法要测出两个模拟量,不易实现自动化。而指针式万用表欧姆档是把被测电阻与电流一一对应,由此就可以读出被测电阻的阻值,如图2-5所示。这种测量方法的精度变化大,若需要较高的精度,必须要较多的量程,电路复杂。 图2-1 定义法测电阻 图2-2 万用表测电阻方案二:把电阻转换成频率信号 f ,转换的原理分别是 RC 振荡电路和555 电路,单片机根据所选通道,向模拟开关送两路地址信号,取得振
10、荡频率,作为单片机的时钟源,通过计数则可以计算出被测频率,再通过该频率,通过公式计算出各个电阻参数。然后根据所测频率判断是否转换量程,或者是把数据处理后,把电阻的值送显示部分显示出相应的参数值,利用编程实现量程自动转换。总结:通过精确度以及方便使用的角度考虑, 方案二的方法更好。2.2设计思路2.2.1 总体方案组成和说明本系统的电路设计方框图如图2-2所示,它由四部分组成: 控制部分主芯片采用单片机AT89C51;测量部分主要是采用利用RC振荡电路和555振荡电路实现将被测电阻转换为频率;通道选择部分主要是通过51单片机I/O接口控制继电器来自动选择被测频率的档位; 显示部分是通过LCD12
11、864、二极管指示灯及按键选择测量电路。图2-3系统设计框图2.2.2 组成部分及说明第一,控制部分(1)分析说明:本设计以单片机为核心,采用AT89C51单片机,利用其管脚特殊的功能以及具备的中断系统,延时程序来控制换挡,以及12864液晶屏的显示等等功能。(2)原理图图2-4单片机最小系统第二,测量部分(1)计算分析:RC振荡电路时利用555振荡电路实现被测电阻的频率,通过51单片机的I/O接口的自动识别量程,来实现自动测量。(2)原理图图2-5 LM555振荡电路第三,通道选择部分(1)分析说明:本设计通过单片机控制来控制继电器的自动选择,继电器是一种电子控制器件,它具有控制系统(又称输
12、入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。 (2)原理图图2-6 继电器自动选择第四,显示部分(1)分析说明:使用12864液晶显示屏,具有画面效果好,分辨率高,抗干扰能力强等特点,可以显示4行字,符合本次设计任务的要求。(2)原理图图2-7 12864显示三、设计实现3.1 测量电路设计根据题目要求,采用555多谐振荡电路,将电阻量转换为相应的频率信号值。考虑到单片机对频率的灵敏度,具体的讲就是单片机对10HZ10KHZ的频率计数精度最高。所以要选用合理的电阻和电容
13、大小,同时又要考虑到不能使电阻的功率过大。所以首先要确定对应档位时适合的频率,然后在确定电阻或电容值,从而算出4个电阻和电容的值以及对应频率范围。电阻的测量采用“脉冲计数法”,如下图所示由555电路构成的多谐振荡电路,通过计算振荡输出的频率来计算被测电阻的大小。 555接成多谐振荡器的形式,其振荡周期为:T=t1+t2=(ln2)(R1+Rx)*C1+(ln2)Rx*C1,得出:即,求出Rx表3-1 振荡测量电路对应量程参数档位电阻R1电容C1频率范围0100R1=200 C1=4.7uF7661543HZ1001KR2=15KC2=10nF84879492HZ1K10KR3=20KC3=10
14、nF36066568HZ10K10MR4=10M C4=4.7pF1093016387HZ3.2 通道选择电路设计利用实现测量CD4052类别的转换,CD4052是差分4通道数字控制模拟开关器件,有A0和A1两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止电流。表3-2 CD4052真值表INHIBITBA0000x,0y0011x,1y0112x,2y0113x,3y1xxNone该电路通过CD4052双向模拟开关控制量程的自动切换,直到进入适当的量程为止。电路流程图如下:图3-3量程自动转换流程图注:实际测试时由于CD4052出现问题,我们改用继电器实现量程转换,但原理相同。3
15、.3 控制电路设计本设计使用单片机为核心部件,来控制换挡以及显示。以下是单片机管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内
16、部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的
17、双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,如表1所示:表1 P3特殊功能口P3口引脚第二功能P3.0RXD(串行口输入)P3.1TXD(串行口输出)P3.2INT0(外部中断0输入)P3.3INT1(外部中断1输入)P3.4T0(定时器0外部脉冲输入)P3.5T1(定时器1外部脉冲输入)P3.6WR(外部数据存储器写脉冲输出)P3.7RD(外部数据存储器读脉冲输出)P3口同时为闪烁编程和编程校验接收一些控制信号。R
18、ST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器
19、的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.4 显示电路系统的显示部分采用OCM12864液晶显示模块。3.5 软件设计系统通过频率来控制量程
20、自动切换,并根据RC振荡频率公式换算成对应的电阻,然后再控制显示模块输出。图3-2 程序设计流程图四、测试及结果分析4.1 测试方法及使用的仪器测量方法:采用555多谐振荡电路,将电阻量转换为相应的频率信号值。再利用单片机及有关程序对范围的选择,显示侧量出数值。测试使用的仪器设备:数字万用表、示波器。4.2 指标测试和测试结果表4.1.2 测试结果对照分析表档位测量值测量值实际值010023141001K7682311K10K5614550110K10M8978K8870K五、结论本设计实现了一种利用51单片机实现的简易电阻测试仪,基于单片机和量程自动切换电路的控制系统,能够根据待测电阻的大小
21、实现适当频率的控制,再分别采样频率,通过程序计算待测电阻Rx并在12864液晶上显示。并且测量的数据结果较稳定。设计过程中出现问题有以下:1. 在测量振荡电路中电阻和电容值时,由于单片机对10HZ10KHZ的频率计数精度最高。所以要选用合理的电阻和电容大小。同时又要考虑到不能使电阻的功率过大,这样给我们计算带来了很多的麻烦。2.我们接收到频率较高,所以通过电路很难控制精确度,产生的误差比较大。3CD4052是差分4通道数字控制模拟开关器件,有A0和A1两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止电流。但是其频率较高不能自动换挡,最终我们选择了继电器来显示代替CD4052来自动换
22、挡的功能。 4、在实验过程中时常有捉襟见肘的感觉,一方面是理论不足,很多好的方案,好的思想由于理论的匮乏,无法理解,也不能使用,在以后的学习过程中理论的学习始终是重点;还有就是程序的问题,由于编程水平跟不上,加上思路也不清晰,导致程序的编写存在很大的问题,好的思想,无法在程序中展现出来,这也是以后需要加强的地方。六、致谢在做毕业设计的这段时间里,我学会了很多知识,同学之间的团结互助,老师孜孜不倦的教导,使我们感受了老师们认真负责的态度,毕业论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手设计电路图的时间里,记忆最深的是每一
23、步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。参考文献1. 高吉祥,黄智伟,丁文霞. 数字电子技术M. 北京:电子工业出版社,2003年,第1版2. 邹其洪 黄智伟 高嵩.电工电子实验与计算机仿真M.北京:电子工业出版社,2003年,第1版3. 张友汉.电子线路设计应用手册M.福建:福建科学技术出版社.2000.7第一版.4. 黄智伟.电子电路计算机仿真设计M. 北京:电子工业出版社,2004年第1版附录附录1: 主要元器件清单单元电路元器件型号及大小数量5V电源电路变压器220V1个整流
24、桥2W102个电解电容2200UF2个电解电容2200UF2个元片电容1044个三极管78051个三极管79051个电阻5102个发光二极管2个插针若干多路选择继电器继电器943-1C-SDS8个三极管C80508个电阻1K8个二极管8个插针若干单片机最小系统芯片AT89C511个晶振11.0592MHZ1个电容22PF2个电容10 UF1个按钮开关SW-PB1个电阻10K1个电阻1K1个插针若干555振荡电路LM5551个电阻4个RC振荡电路4个未知电阻附录2:程序清单/*12864子程序*/#include #include #include #include #define uchar
25、unsigned char#define uint unsigned int /宏定义/*12864接口定义*/sbit LCD_RS = P20; /1:输入数据 ;0:输入命令 sbit LCD_RW = P21; /1:读数据 0:写数据sbit LCD_EN = P22; /LCM使能端#define LCD_DATA P1 /12864总线端口 /*LCD功能初始化指令*/#define CLEAR_SCREEN 0x01 /清屏指令:清屏且AC值为00H#define AC_INIT 0x02 /将AC设置为00H。且游标移到原点位置#define CURSE_ADD 0x06 /
26、设定游标移动方向(默认游标右移)#define FUN_MODE 0x30 /工作模式:8位基本指令集#define DISPLAY_ON 0x0c /显示开,显示游标,且游标位置反白#define DISPLAY_OFF 0x08 /显示关#define CURSE_DIR 0x14 /游标向右移动:AC=AC+1#define SET_CG_AC 0x40 /设置AC,范围为:00H3FH#define SET_DD_AC 0x80/*汉字地址表*/uchar code addr_tab= /便于根据汉字坐标求出地址 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0
27、x87,/第一行汉字位置 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, /第二行汉字位置 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, /第三行汉字位置 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, /第四行汉字位置;/*n(ms)延时子程序*/void delayms(uint t) /约延时n(ms) uint i; while(t-) for(i=0;i150;i+); /*等待12864显示屏忙*/void WaitBusy(void) /延时一小段时间,等待12864显示屏空闲
28、 uchar i=5; while(i-);/*写指令代码*/void Lcd_WriteCmd(uchar cmdcode) LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; WaitBusy(); LCD_DATA = cmdcode; LCD_EN = 0;/*写数据*/void Lcd_WriteData(uchar dispdata) LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; WaitBusy(); LCD_DATA = dispdata; LCD_EN = 0;/*初始化12864显示屏*/void Lcd_Init() dela
29、yms(50); Lcd_WriteCmd(0x30); /选择基本指令集 delayms(2); WaitBusy(); Lcd_WriteCmd(0x30); /选择8bit数据流 delayms(2); Lcd_WriteCmd(0x0c); /开显示(无游标、不反白) delayms(2); Lcd_WriteCmd(0x01); /清除显示,并且设定地址指针为00H delayms(20);/*字符显示*/void display10(unsigned long m)/*这样写的好处就是能让每一位都能显示,且数据地址指针是自动加一位的*/ Lcd_WriteCmd(0x9a);/lcd_pos(2,4); /第四行第四个字节上显示; Lcd_WriteData(m+0x30); /显示个位; Lcd_WriteData(.);/写入“.”小数点固定 Lcd_WriteData(0+0x30); /显示百分位 Lcd_WriteData(0+0x30); /显示十分位 Lcd_WriteCmd(0x9a); /锁定显示位置; void display11(unsigned long u)/*这样写的好处就是能
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1