用AT89C2051单片机制作的数字电容表
用AT89C2051单片机制作的数字电容表
吴汉清
AT89C2051作为AT89C虽然51的简化版已经去掉了P0、P2等端口,使I/O口腔减少,但增加了电压比较器,因此其功能在某些方面得到了增强,如处理模拟量、简单的模数转换等。本文利用该功能设计了一个可测量容量小于2微的数字电容表,最大显示值为1999,读数单读数单毫微法(nf),量程分为四档,读数乘以相应的倍率。
电路工作原理
本数字电容表以电容器的充电规律作为测量依据,测试原理见图1。电源电
图1
压E 被测电容通过电阻R给出CX充电,CX随着充电时间的增加,两端原电压上升。充电时间t等于RC时间常数τ时,CX两端电压约为电源电压的63.2%,即0.632E 。数字电容表是以电压作为测试基准电压,测量电容器充电到达电压的时间,以了解电容器的容量。例如,设置电阻R的电阻值为1000欧元,CX两端电压升至0.632E 所需时间为1毫秒,然后公式τ=RC可知CX容量为1微法。
测量电路如图2所示。A为AT89C2051内部结构的电压比较器,AT89C2051
图2
的P1.0和P1.1口除了作I/O另一个功能是作为电压比较器的输入端,P1.0是同相输入端,P1.1为反向输入端,存储电压比较器的比较结果P3.6对应的寄存器,P3.6口在AT89C2051外无引脚。电压比较器的基准电压设定为0.632E ,在CX两端电压从0升到0.632E 的过程中,P3.当电池电压为0时,6口输出为0CX一旦两端电压超过0.632E 时,P3.6口输出变为1。以P3.以6口输出电平为基础,使用6口输出电平AT89C2051内部的定时器T计数充电时间,然后显示计数结果,得到测量结果。
整机电路见图3。电路由单片机电路、电容充电测量电路、数字显示电路等组成。
图3
部分组成。
AT89C2051年内部的电压比较器和电阻R2-R7等测量电路的组成R2-R5是由波段开关制成的量程电阻S1.电压比较器的基准电压由5选择V电源电压经R6、RP1、R7分压后得到调整RP基准电压可调节。当P1.在程序程序控制下输出高电平时,电容CX开始充电。量程电阻R2-R每档以10倍递减,因此每档显示读数以10倍递增。由于单片机内部P1.经实测,2口上拉电阻约为200K,其输出电平不能用作充电电压,因此使用R由于其他三个充电电阻和上拉电阻,5与上拉电阻相结合R因此,五是串联关系R2、R3、R4应从标准值减去1K,分别为999K、99K、9K。由于999K和1M因此,误差相对较小R2还是取1M。
数码管DS1-DS4、电阻R8-R数码显示电路由14等组成。本机采用动态扫描显示,用软件翻译字形码。P3.0-P3.5、P3.七口作数码显示七段笔划字形码输出,P1.3-P1.六口输出四个数字管的动态扫描位驱动码。由于共阴数码管在这里使用,AT89C2051的P1.3-P1.6口有25mA下拉电流能力,无需三极管即可驱动数码管。R8-R14为P3.0-P3.5、P3.当7口上拉电阻驱动数字管的每个字段时P3.当一个端口输出低电时,相应的字段笔划不会点亮,当其输出高电时,相应的上拉电阻可以点亮相应的字段笔划。
软件设计
程序用C语言编写,详见本刊网站。
该程序由主程序、定期中断服务子程序等模块组成。定时器T0数被测电容器的充电时间。定时器T1用于定期中断服务,定期时间为5ms,即5ms中断。数组BitTab[4] 存储位驱动码,DispTab[11] 用于存储字形码和数组DispBuf从定时器中存储4个元素T0读数据的4位数,1000位数。
程序显示每个数字的时间是5ms,所以4位数的完整周期是20ms(4次中断)。每过240ms(48次中断)刷新数据,即每240次ms测量电容量,测量时间小于2ms,由于此时间小于中断时间5ms,因此,在测量过程中不会中断。测量电容时P1.2口输出高电平,电容开始充电,同时定时器T当电容器充电达到基准电压时,0开始计数,P3.6口输出高电平,根据此程序判断停止T计数0,并读取数据发送数字管显示。如果测量电容器的容量超过测试文件的范围,计数值大于或等于2000,显示结果为1千位数,其他三位数不显示,与数字万用表的范围相同。此时可选择大一档的量程进行测试。
经过模拟和电路测试,发现单片机判断P3.6口是否输出高电平需要三个机器周期,这将增加显示值3,因此在程序中纠正误差,计数值减去3。
输出字形码P3口的P3.0-P3.5、P3.7,P3.6为空,P通过数组输出3口输出的数据DispTab[11]获取