实用电容测量仪设计.doc
实用电容测量仪设计姓名: 刘立鹏专业: 电子信息工程班级: 电子10学号: 20104075008时间: 2013年4月8日目录1功能说明 32 整体方案设计 42.1 方案论证42.2 方案选择63 单元模块设计63.1 AT89C51单片机工作电路 63.2 系统时钟电路 7 内部时钟电路7 外部时钟电路83.3 555芯片电路93.4 系统显示电路103.5 系统按键电路113.6 系统总电路图124 软件设计134.1 软件设计原理及所用工具134.2 软件设计流程图154.3 编写程序166 设计总结227 参考文献231功能说明:基于AT89C51单片机与555芯片数显式电容测量。该方案主要是根据555芯片应用特点,把电容大小转变成555输出频率大小,进而可以通过单片机对555输出频率进行测量,再通过该频率计算出被测参数。在系统软件设计中,是以Proteus为仿真平台,使用C语言编程编写了运行程序。该测量仪具有结构简单,成本低廉,精度较高,方便实用等特点。2 整体方案设计本设计整体思路是:基于AT89C51单片机与555芯片数字式电容测量。该方案主要是根据555芯片应用特点,把电容大小转变为555输出频率大小,进而可以通过单片机对555输出频率进行测量。2.1 方案论证设计中采用了两个方案,具体方案见方案一与方案二。方案一:利用多谐振荡原理如图2.1所示。电容C电阻R与555芯片构成一个多谐振荡电路。在电源刚接通时,电容C上电压为零,多谐振荡器输出V0为高电平V0通过R对电容C充电。当C上冲得电压Vc=Vr时,施密特触发器翻转,V0变为低电平,C又通过R放电,Vc下降。当Vc=Vr时施密特触发器又翻转,输出Vc又变为高电平,如粗往复产生震荡波形。图2.1 多谐振荡原理图这种方法是利用了一个参考电容实现,虽然硬件结构简单,软件实现却相对比较复杂。方案二:直接根据充电放电时间判断电容值这种电容测量方法主要利用了电容充放电特性Q=UC,放电常数r=RC,通过测量及被测电容相关电路充放电时间来确定电容值。一般情况下,可设计电路使T=ARC(T为振荡周期或处罚时间;A为电路常数及电路参数有关)。这种方法中应用于555芯片组成单稳态触发器,在秒脉冲作用下产生触发脉冲,来控制门电路实现计数,从而确定脉冲时间,通过设计合理电路参数,使计数值及被测电容相对应。其原理如图2.2所示.图2.2 根据充电放电时间判断电容值原理这种方法硬件结构相对复杂,实际上是通过牺牲硬件部分来减轻软件部分负担,但在具体设计中会碰到很大问题,而且硬件一旦设计好,可变性不大。方案三:基于AT89C51单片机与555芯片构成多谐振荡电路电容测量这种电容测量方法主要是通过一块555芯片来测量电容,让555芯片工作在直接反馈无稳态状态下,555芯片输出一定频率大小跟被测量电容之间关系是:f=0.772/(R*Cx),我们固定R大小,其公式就可以写为:f=k/C x,只要我们能测量出555芯片输出频率,就可以计算出测量电容。如图2.3所示。图2.3 基于AT89C51单片机与555芯片构成多谐振荡电路电容测量2.2 方案选择 通过对上述方案比较,已知方案三不仅硬件结构简单,而且软件设计业简便。能够满足测量精度高、易于实现自动化测量等设计需要,而且单片机构成应用系统有较大可靠性、系统扩展、系统配置灵活,容易构成各种规模系统。所以选择方案三。3 单元模块设计通过简单系统框图,系统主要由四个主要部分组成:单片机,晶振电路设计,555芯片电路设计,显示电路设计,复位电路设计。3.1 AT89C51单片机工作电路 本设计核心是单片机电路,考虑到需要一个中断输入,存储容量、外部接口对单片机端口需要以及兼顾到节约成本原则,选用了常用AT89C51单片机。AT89C51是低功耗、高性能、经济8位CMOS微处理器,工作频率为024MHz,内置4K字节可编程只读闪存,128x8位内部RAM,16位可编程IO总线。它采用Atmel公司非易储器制造技术,及MCS51指令设置与芯片引脚可兼容。AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用微处理器与Flash存储器结合在一起,特别是可反复擦写Flash存储器可有效地降低开发成本。AT89C51工作最简单电路是其外围接一个晶振与一个复位电路,给单片机接上电源与地,单片机就可以工作了。其最简单工作原理图如下图。3.2 系统时钟电路时钟在单片机中非常重要,单片机各功能部件运行都是以时钟频率为基准。时钟频率直接影响单片机速度,时钟电路质量也直接影响单片机系统稳定性。常用时钟电路有两种方式,一种是内部时钟方式,另一种为外部时钟方式。 内部时钟电路内部时钟方式:内部时钟方式电路图如下图3.2所示。图3.2 内部时钟电路MCS-51单片机内部有一个用及构成振荡器高增益反相放大器,该高增益反相放大器输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚接石英晶体振荡器与微调电容,就构成一个稳定自激振荡器电路。12MHz之间。晶体频率越高,则系统时钟频率也就越高,单片机运行速度也就越快。为了提高温度稳定性,应采用温度稳定性能好NPO高频电容。MCS-51单片机常选择振荡频率6MHz或12MHz石英晶体。 外部时钟电路外部时钟方式:外部时钟方式电路图如下图3.3所示。图3.3 外部时钟电路外部时钟方式是使用外部振荡脉冲信号,常用于多片MCS-51单片机同时工作,以便于同步。对外部脉冲信号只要求高电平持续时间大于20us,一般为低于12MHz方波。外部时钟源直接接到XTAL2端,直接输入到片内时钟发生器上。由于XTAL2逻辑电平不是TTL,因此要外接一个4.7k10k上拉电阻。这次设计采用MCS-51内部时钟方式。因为外部时钟方式是用外部振荡脉冲信号,用于多片MCS-51单片机同时工作。在这次设计中只用一个MCS-51单片机,不需要振荡脉冲信号。3.3 555芯片电路555芯片电路应用电路很多,如:多个单稳、多个双稳、单稳与无稳,双稳与无稳组合等。在实际应用中,除了单一品种电路外,还可组合出很多不同电路。本次设计中应用电路是直接反馈型无稳类电路。电路如图3.4所示。图3.4 555芯片电路 555芯片芯片输出频率为,只要我们改变电阻R,就可以达到改变电阻量程目,图中提供了四组电阻,所以说有四组电容测量量程,每个量程之间跨度是10倍关系。在555芯片输出方波后,由于硬件原因,输出方波会有很多毛刺,为了去除这些毛刺本设计中使用了一个两输入及门(74HC08),让信号通过74HC08后会使输出波形毛刺减少很多,使单片机测量结果变得精确。3.4 系统显示电路LCD以其微功耗、体积小、显示内容丰富、超薄轻巧诸多优点,在袖珍式仪表与低功耗应用系统中得到越来越广泛应用。这里介绍字符型液晶模块是一种用5x7点阵图形来显示字符液晶显示器,根据显示容量可以分为1行16个字、2行16个字、2行20个字等等,这里我们使用是2行16个字1602液晶模块。图3.5 LCD1602引脚图1602 采用标准16脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 电位器调整对比度第4 脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线, 高电平时进行读操作,低电平时进行写操作。当RS与RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW 为低电平时可以写入数据。第6 脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第1516脚:空脚3.5 系统按键电路按键是实现人机对话比较直观接口,可以通过按键实现人们想让单片机做不同工作。键盘是一组按键集合,键是一种常开型开关,平时按键两个触点处于断开状态,按下键是它们闭合。键盘分编码键盘与非编码键盘,案件识别由专用硬件译码实现,并能产生键编号或键值称为编码键盘,而缺少这种键盘编码电路要靠自编软件识别称为非编码键盘。在单片机组成电路系统及智能化仪器中,用更多是非编码键盘。图3.6就是一种比较典型按键电路,在按键没有按下时候,输出是高电平,当按键按下去时候,输出低电平。图3.6 按键电路3.6 系统总电路图当各个部分电路设计完成后,下面工作就是组合成一个总电路图。 图3.7 总电路图4 软件设计4.1 软件设计原理及所用工具本次设计所选用Keil C51中编译/连接器软件Keil uVision2作为编译器/连接工具。整个程序设计过程中遇到最大问题如何根据测量到方波频率来计算所测量电容大小。在前面介绍中我们知道:555时基芯片输出频率跟所使用电阻R与电容C关系是:又因为,所以即:如果单片机采用12M晶振,计数器T0值增加1,时间就增加1S,我们采用中断方式来启动与停止计数器T0,中断触发方式为脉冲下降沿触发,第一次中断到来启动T0,计数器值为,第二次中断到来停止T0,计数器器值为,则测量方波周期为,如何开始时刻计数器值,则。简单时序图如下。T555输出的方波启动T0停止T0图4.1 时序图则: 单片机计数器值N=0-65535,为了测量精度,N取值一般在1005000,当电阻R越大,电容C值就越小。我们取不同电阻值,就得到不同电容测量量程。第一档: 150uF第二档: 0.15 uF第三档: 0.010.5 uF第四档: 0.0010.05 uF为了编写程序方便,我们只计算,后面单位可以根据使用量程自行添加。测量范围大小。4.2 软件设计流程图图4.2为整个程序设计流程。T0,INT0初始化启动555有无中断有无按键有无中断启动计数器T0停止计数器T0计算电容的大小显示电容值有无按键NYnNYNYNY图4.2 软件设计流程图4.3 编写程序根据上面流程图,编写程序:#include "reg51.h"#include"intrins.h"/库函数#define DATA P0sbit RW=P21;/1602写数据sbit RS=P20;/1602写地址sbit EN=P22; /1602工作使能sbit b_test=P37; /开始测量电容按键输入sbit _reset=P35; /555时基芯片工作控制信号unsigned int T_flag,N,C,i,Dis1,Dis0;unsigned int b6=0X13,0X0D,0X00,0X00,0X25,0X16; /显示C=00UF/*延时1MS*/void Delay1ms(unsigned int mm)unsigned int i; for(mm;mm>0;mm-) for(i=100;i>0;i-);/*检查忙否*/void Checkstates() unsigned char dat; RS=0; RW=1; doEN=1;/下降沿 _nop_();/保持一定间隔_nop_(); dat=DATA; _nop_();_nop_(); EN=0; while(dat&0x80)=1);/*LCD写命令函数*/void wcomd(unsigned char cmd) Checkstates(); RS=0; RW=0; DATA=cmd; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); EN=0;/*LCD写数据函数*/void wdata(unsigned char dat) Checkstates(); RS=1; RW=0; DATA=dat; EN=1; _nop_(); _nop_(); _nop_(); _nop_(); EN=0;/*初始化*/void LCDINIT() Delay1ms(15); wcomd(0x38);/功能设置 Delay1ms(5); wcomd(0x38);/功能设置 Delay1ms(5); wcomd(0x01);/清屏 Delay1ms(5); wcomd(0x08);/关显示 Delay1ms(5); wcomd(0x0c);/开显示,不开光标/*显示函数*/void Display(void) /显示函数unsigned char i,j; unsigned char a12=0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53;/显示measurements LCDINIT(); for(i=0;i<12;i+)/写显示第一行 wcomd(0x80+i); Delay1ms(1); wdata(ai); Delay1ms(1); for(j=0;j<6;j+)/写显示第二行 wcomd(0xc0+j); Delay1ms(1); wdata(0x30+bj); Delay1ms(1);Delay1ms(150);void main() IE=0x81; /打开全部中断控制,并开启外部中断允许 TMOD=0x09; /T0为16位计数工作方式1 IT0=1; /设置外部中断触发方式为脉冲触发 TH0=0x00; TL0=0x00; T_flag=0; _reset=0; while(1) while(!b_test) /如果有测量按键输入就往下执行 i=0; _reset=1; /启动555时基芯片 EX0=1; /开启中断0 while(_reset) /超出等待时间,中断还没有过来,就退出 i+; if(i>5000) /设置最长等待时间 _reset=0; /最长等待时间到还没有中断,停止555 if(N<100) /如果计数值小于100,显示SM,表示应换用小一点量程 b3=0X1D; b2=0X23; if(N>5000) /如果计数值大于5000,显示LA,表示应换用大一点量程 b3=0X11; b2=0X1C; if(N>=100 && N<=5000) C=N/100; /计算电容大小 b2=C/10; /计算电容值十位 b3=C-b2*10; /计算电容值各位 Display(); /显示电容大小void int0(void) interrupt 0 /第一次中断开始计数,第二个中断停止计数 T_flag=!T_flag; if(T_flag=1) TR0=1; /开始计时 if(T_flag=0) TR0=0; /停止计时 EX0=0; /关闭中断 _reset=0; /停止发出方波 N=TH0*256+TL0; /计算计数器值 N=N*5/3; TH0=0x00; /恢复初值 TL0=0x00;6 设计总结本设计硬件电路比较简单,这大大降低了成本。而采用单片机可以提高系统可靠性与稳定性,缩小系统体积,调试与维护方便。本设计通过由555芯片与电容电阻组成振荡电路来输出方波,通过单片机定时器T0测量其脉冲宽度,从而达到测量其周期目,再通过单片机软件编程,对数据进行进一步计算从而得出被测电容值,再通过LCD1602显示出其测量值。系统软件部分是系统实现功能关键,软件部分是在Keil51平台上使用是C语言编写程序。本系统通过一个测量按键启动整个测量程序,通过外部中断零INT0来控制计数器T0开始与停止,INT0采用边沿触发方式,在第一个脉冲边沿启动T0,使T0开始计数,在第二个脉冲边沿停止T0计数,然后通过对数据计算与处理最后将数据显示在LCD1602上。总之,整个系统工作正常,完成了设计任务全部要求。虽然本设计完成了设计任务,但无法得到十分精确测量结果,这主要是有以下几点原因,首先单片机对于脉冲宽度测量精确度有限,其次是外界干扰对波形有一定影响,还有硬件自身也有一部分原因。希望在之后设计之中能够得到进一步解决。第 1 页7 参考文献1 康华光主编,电子技术基础(模拟部分),北京:高等教育出版社2 康华光主编,电子技术基础(数字部分),北京:高等教育出版社3 谢自美主编,电子线路设计/实验/测试,武汉:华中科技大学出版社,4 吴黎明主编,单片机原理及其应用技术,北京:科学出版社,5 丁英丽主编,交流型微小电容测量电路设计,北京:电工技术杂志,6 王毓银主编,数字电路逻辑设计,北京:高等教育出版社,7 李海清,黄志遥,王宝凉主编,电容传感器新型微弱电容测量电路,北京:传感技术学报,8 罗民昌主编,集成电路系统,北京:中国铁道出版社,9张毅刚主编,MCS-51单片机应用系统,哈尔滨:哈尔滨工业大学出版社,10申忠如,申淼,谭亚丽主编,MCS-51单片机原理及系统设计,西安:西安交通大学出版社,2008年3月第1版11付晓光主编,单片机原理及使用技术,北京:清华大学出版社,12李桂安主编,电子技术实验及课程设计,南京:东南大学出版社,13夏继强主编,单片机实验及实践教程,北京:北京航空航天大学出版社,14肖洪兵主编,跟我学用单片机,北京:北京航空航天大学出版社,15申忠如,郭福田,丁晖主编,现代测试技术及系统设计,西安:西安交通大学出版社,