基于51单片机的数字电容测量仪设计

2020-02-08来源: 51hei关键字:51单片机  数字电容测量仪  定时电路

本设计详细介绍了一种基于单片机的数字式电容测量仪设计方案及实现方法。设计的主要方法是采用555芯片构成单稳态触发器,将电容容量转换为脉冲宽度。通过单片机的计时器测量脉宽, 根据已知的R值,通过单片机的运算功能,计算出电容容量,最后,再通过单片机的普通I/O口控制液晶屏显示出电容容量的计算结果。系统的测量范围为10pF~ 500uF, 具有多个量程,可根据用户需要由用户选择,与用户的交互是通过键盘实现,不同量程的实现是通过单片机的I/O口控制继电器的吸合与断开来选择不同的R值,从而实现不同的量程。同时,本设计注重设计方法及流程,首先根据原理设计电路,再通过protues仿真,利用keil编程,进而借助altium designer 制作PCB,最后到焊接元器件,调试直至成功。

1  系统方案设计
1.1 设计说明及要求
1.1.1 设计说明

框图中的外接电容是定时电路中的一部分。当外接电容的容量不同时,与定时电路所对应的时间也有所不同,即C=f(t),而时间与脉冲数目成正比,脉冲数目可以通过计数译码获得。

1.1.2 设计要求

(1)基本要求

① 自制稳压电源。

② 被测电容的容量在10pF至10000μF范围内

③ 设计四个的测量量程。

④ 显示测量结果,测量误差小于2.5%。

数字显示:显示分辨率:每档满量程的0.1%;

电容测量:电压可选择5V,25V,50V;

为实现该设计,达到相应的设计要求,本次设计中考虑了三种设计方案,三种设计方案中主要区别在于硬件电路和软件设计的不同,对于本设计,三种方案均能够实现,最后根据设计要求、可行性和设计成本的考虑选择了基于STC89C52单片机和555芯片构成的单稳态触发电路测量电容的方案。

现在一一介绍论证如下。

1.3方案Ⅱ

根据积分电路原理可得C=Ui*dt/R*Uo,将经过RC充电电路后,输出的与电容对应的电压值输入到ADC0809中,经过处理后,将相应的数值传到单片机里,再通过公式运算,求得相应的电容C值,在LCD上显示。

图1-2 方案Ⅱ电容测量框图


1.5 三种方案作简单的比较

比较上述三种方案可知,方案Ⅰ和ⅠⅠ采用了A/D转换器,价格比较昂贵;而且根据公式可知,再换算电压与电容值时,时间参数t起着至关重要的作用,对t的计算要精确,不然误差值会很大,所以调试起来有一定难度;方案Ⅲ电路简单,原理清晰,易于实现,易于控制,本设计就是基于方案Ⅲ展开的。

2.2 硬件电路设计
2.2.1  单片机电路设计

为使单片机正常工作,除电源供电部分外,还需提供晶振电路和复位电路。具体电路如下:

                              图2-3 单片机工作电路

由图2-3可知,9脚外接的是按键复位电路,18,19脚外接的是晶振电路,这样,就构成了单片机正常工作的必备电路。同时,为使P0口正常工作,并增加其带负载能力,P0口需接了上拉电阻(在图中未画出)。

2.2.2 555时钟芯片与单片机连接

图2-4是555时钟芯片构成的单稳态触发电路,6脚和7脚接在一起,R2和C4构成商店复位电路,2脚用于接收单片机P3.7口产生的低脉冲,3脚接于P3.2脚,用于门控制计时器0的启动与停止。从而将电容容量转为脉冲宽度。

图2-4 555芯片与单片机的连接

2.2.3 低脉冲产生电路

如图2-5所示,按键接于P3.3口,即外部中断1接口,因此低脉冲是利用中断实现的,P3.7口产生低脉冲,可在软件中的外部中断1函数中实现,整个过程为,需要测量时,按键,产生外部中断,利用外部中断,用软件再在P3.7口产生一个低脉冲,之所以利用中断实现该功能,是为了增加产品的可靠性,因为按键的时间是比较长的,直接用按键产生低脉冲可能导致T1 > Tw ,导致测量错误。而利用中断,可以直接在中断函数中产生一个固定时间的低脉冲,保证了测量条件,避免发生错误。

图2-5  按键产生低脉冲电路

2.2.4  键盘电路

如图2-6所示键盘电路主要用于与用户进行交互,如用户需要选择量程时,就必须交互。键盘分为独立键盘和矩阵键盘,这里只需要实现量程的选择,共四个量程,故无需矩阵键盘,4个独立按键就完全够用了。

图2-6   键盘电路

2.2.5  指示灯电路

如图2-7所示,指示灯主要用于给用户以提示,如当前量程提示,超量程提示等等。 D2用于超量程提示,D6用于电源提示。

图2-7  指示灯电路



2.2.6  量程选择电路

在图2-4中可以看到,在RC充电回路中,R值是固定的,不可变的,那么量程也显然是不可变的,因此,需要在此加入可调节充电回路电阻的电路部分,这里,利用继电器可以简单实现。具体电路如图2-8所示,利用继电器时需特别注意,由于单片机输出电流是很小的,不足以驱动继电器吸合,因此要加驱动电路,在这里,选择ULN2003芯片来实现。当然,也可以利用典型的三极管驱动来实现,虽然选择的是芯片实现驱动,在这里也将典型的三极管驱动电路列于此。如图2-9所示。

图2-8  实现量程选择电路


图2-9  利用三极管的驱动电路

2.2.7  液晶显示电路

   如图2-10所示,lcd接与P1口,用于显示电容值以及一些相应的测量信息。

图2-10  lcd显示电路

至此,整个电容测量仪的硬件设计部分就设计好了,接下来,需要的就是与之相匹配的软件支持了。

2.3 软件设计

软件编程平台选择最常用的keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的C语言编程。在编程中,将该程序分为三个模块:延时模块,1602显示模块及主函数模块。方便调试与理解。具体程序见附录二。总体程序较长,但并不复杂,可根据需要重点看主函数,与硬件电路结合起来,注重程序后紧跟的注释,理解起来是比较容易的,在此就不再一一详细分析。

2.4 量程范围设置

由于量程的选择是非常重要的一个环节,在这里单独讨论量程的选择。

系统采用单片机片内16 位的定时器测量TW 的宽度, 标准计数脉冲的周期为1 微秒时, 为确保计数器不发生溢出, 要求TW < 65 毫秒。同时, 为减小量化误差对结果的影响, 要求TW > 1 微秒。当TW >100 微秒以上时, 可忽略量化误差的影响。为满足10pF ~ 500uF 的测量范围, 可通过设置不同充电电阻R 的阻值来实现。理论计算的电阻R 阻值、理论量程范围以及系统选择的量程范围如表2-1 所示。系统分为四个量程, 可测量10pF ~ 500uF 的电容。

表2-1 R值与量程范围的关系

R值(欧姆)

理论量程范围

选择的范围

10M

9pF ~ 5. 9nF

10pF ~ 5nF

100K

900pF ~ 590nF

5nF ~ 500nF

1K

90nF ~ 59uF

0. 5uF ~ 50uF

100

900nF ~ 590uF

F 50uF ~ 500uF


2.5 altium designer 原理图设计及PCB制作
2.4.1 原理图设计

图2-11 原理图设计

2.4.2          PCB制作

图2-12  PCB设计

在此并没有布双层板,红色的线仅仅只是为了标志出跳线。

2.4.3          设计结果

图2-13   设计结果实物图

各个按键功能如图中文字说明。

3系统测试

由于该作品需实现的功能仅为测电容,在此不列出其他的测试。


3.1 测量100pf的电容

在此以100pf电容测试为例,演示整个测试过程。测试标称值为101的电容,即测量电容值为100pf的电容。104的电容实物如图2-14所示。测试结果如图2-15所示。若量程选择错误,测试结果如图2-16所示。


图2-14 100nf的电容实物


图2-15 2nf电容正常测试



图2-16 量程错误情况下的测试

3.2 测量4.7uf的电容

再以测试4.7uf电容为例,测试结果如图2-18所示。

图2-18 测试4.7uf的电容

3.3 测试结果

将测量的一系列电容的电容值与标准值比较。比较结果如表3-1。


表3-1 测量值与标准值比较

标准值

测量值

误差

100pf

99.10pf

1%

2nf

2nf

0%

4.7uf

4.70uf

0%

100uf

100.66uf

1%



由表3-1中数据可知,平均误差是0.5%,低于设计扩展要求的2.5%,测量范围是10pf~500uf,基本满足设计要求的10pf~10000uf。测量结果由液晶直观显示。综合以上分析,该设计满足整体设计要求。


3.1 误差分析

由于产生的0.5%左右的误差,在这里简要分析一下误差产生的原因。

电容测量的误差主要由NE555 定时器构成的单稳态触发电路的非线性误差T 、计数器的量化误差􀀁N 和标准计数脉冲的频率偏移TC 产生[2] [ 3] 。因此有:

系统采用的标准计数脉冲来自单片机内核时钟, 由片外的高精度晶振与片内电路自激振荡产生,频率非常稳定, 可以忽略其频偏对测量结果的影响。量化误差􀀁N 是数字电路的特有误差, 最坏的情况下等于 1。如采用12M 的晶振, 可获得1MHz 的标准计数脉冲, 量化产生的最大误差为1 微秒。通过设置充电电阻R 的阻值, 使TW 达到毫秒级时, 量化误差的影响非常小, 可以忽略。非线性误差是由器件的非线性特性产生的, 可通过硬件参数修正和软件算法补偿来减小。


4  结论与心得体会

经过本次历经4周的实习,使得我又进一步对单片机系统,尤其测量电容的电路系统有了深一步认识。在做前期准备工作时,老师不希望我们用555芯片做这个实验,因为如果是555芯片震荡电路来测量的话

[1] [2]
关键字:51单片机  数字电容测量仪  定时电路 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic487575.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于51单片机的pwm直流电机调速
下一篇:STC单片机+DM134实现LED多段控制

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

9课:单片机数据传递类指令
(R1)=12H(A)=30H(34H)=34HMOV 45H,34HMOV DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,@R0(45H)=34H(DPTR)=6712H(12H)=67H(R0)=12H(A)=67H说明:用括号括起来代表内容,如(23H)则代表内部RAM23H单元中的值,(A)则代表累加器A单元中的值。进入DOS状态,进入WAVE所在的目录,例D:WAVE键入MCS51,出现如下画面<单片机数据传递指令>图1按File->Open,出现对话框后,在Name处输入一个文件名(见图2),如果是下面列表中已存在的,则打开这个文件,如果不存在这个文件,则新建一个文件(见图
发表于 2020-03-10
9课:单片机数据传递类指令
8课:单片机寻址方式与指令系统
通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习8051单片机的指令部份。一、概述1、指令的格式我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们不难理解,本质上它们完全等价,只是形式不一样而已。2、汇编我们写指令使用汇编格式,而计算机
发表于 2020-03-10
7课:单片机的特殊功能寄存器
通过前面的学习,我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部的寄存器作一个完整的功能分析吧!下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。对上面的图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到对应I/O口的锁存器就能了,那么对于定时/计数器,串行I/O口
发表于 2020-03-10
7课:单片机的特殊功能寄存器
6课:单片机并行口结构
”。2、输入结构这是并行口的一位的输出结构示意图,再看,除了输出之外,还有两根线,一根从外部管脚接入,另一根从锁存器的输出接出,分别标明读管脚和读锁存器。这两根线是用于从外部接收信号的,为什么要两根呢?原来,在51单片机中输入有两种方式,分别称为‘读管脚’和‘读锁存器’,第一种方式是将管脚作为输入,那是真正地从外部管脚读进输入的值,第二种方式是该管脚处于输出状态时,有时需要改变这一位的状态,则并不需要真正地读管脚状态,而只是读入锁存器的状态,然后作某种变换后再输出。请注意输入结构图,如果将这一根引线作为输入口使用,我们并不能保证在任何时刻都能得到正确的结果(为什么?)参考图2输入示意图。接在外部的开关如果打开,则应当是输入1,而如果闭合开关
发表于 2020-03-10
6课:单片机并行口结构
5课:单片机延时程序分析
是多长时间吧。设一个单片机工作于12M晶体震荡器,它的时钟周期是1/12(微秒)。它的一个机器周期是12*(1/12)也就是1微秒。(请计算一个工作于6M晶体震荡器的单片机,它的机器周期是多少)。MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行。这也不难再解,不是吗?我让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长。为了恒量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。INTEL对每一条指令都给出了它的指令周期数,这些数据,大部份不需要我们去记忆,但是有一些指令是需要记住的,如DJNZ指令是双周
发表于 2020-03-10
5课:单片机延时程序分析
单片机模拟I2C总线及24C02(I2C EEPROM)读写实例
;*//************************************************************************//* Name:AT24C02存储器的读写程序,用到I2C总线,含相对独立的I2C总线读写函数 *//* Language: C51单片机编程语言                                          *//* Platform: Win98,Intel Celeron 433 Processor,伟福仿真器,仿真8751     *//* Author
发表于 2020-03-10
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved