基于51单片机的电容测量仪.doc_第1页
基于51单片机的电容测量仪.doc_第2页
基于51单片机的电容测量仪.doc_第3页
基于51单片机的电容测量仪.doc_第4页
基于51单片机的电容测量仪.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的电容测量仪设计摘要:本设计详细介绍了一种基于单片机的数字式电容测量仪设计方案及实现方法。设计的主要方法是由LM393组成的LC 振荡器,由单片机测量LC 震荡回路的频率, 根据已知的电容值,通过单片机的运算功能,计算出电容容量,最后,再通过单片机的普通I/O口控制液晶屏显示出电容容量的计算结果。系统的测量范围为1pF12000F, 具有多个量程,可根据用户需要由用户选择,与用户的交互是通过按键实现,不同量程的实现是通过开关的闭合与断开来选择不同的R值,从而实现不同的量程。同时,本设计注重设计方法及流程,首先根据原理设计电路,再通过protues仿真,利用keil编程,最后到焊接元器件,调试直至成功。关键词:电容测量;LM393;LC震荡;单片机;LCD显示Design of capacitance measuring instrument based on single chip microcomputerAbstract: This design introduces a design scheme of digital capacitance measuring instrument based on MCU and the realization method. The design method of the LC oscillator is composed by LM393, measured by single chip microcomputer LC oscillating circuit frequency, according to the known capacitance value, through the single-chip computing function, calculate capacity, finally, through the microcontroller I/O port control LCD screen shows the calculation results of the electrical capacitance. The measurement range of 1pF12000 F, having a plurality of range, according to user needs can be selected by the user, the interaction with the user is achieved through the key, to achieve different range is through the on-off of the open selection of different R value, so as to achieve different range. At the same time, the design focus on the design method and process, according to the principle of circuit design, through the Protues simulation, using keil programming, and finally to the welding components, debugging until success.Keywords: capacitance measurement; LM393; MCU; LCD display LC shocks; 目 录1前言11.1电容测试仪的发展历史及现状11.2电容测量技术手段22系统方案设计32.1设计方案33 单元电路设计73.1 测量原理73.1.1 小电容测量原理73.1.2 电解电容测量原理73.2 硬件电路设计93.2.1 单片机电路设计93.2.2 LM393芯片电路设计103.2.3 按键电路设计113.2.3 显示电路设计113.3 软件设计133.4 量程范围设置133.5 原理图设计及设计结果143.5.1 原理图设计143.5.2 设计结果153 系统测试163.1 测量小电容163.2 测量电解电容183.3 测量结果193.4 误差分析204 结论与心得体会20参考文献21附 录21致 谢40III1前言1.1电容测试仪的发展历史及现状当今电子测试领域,电容的测量已经在测量技术和产品研发中应用的十分广泛。电容通常以传感器形式出现,因此,电容测量技术的发展归根结底就是电容传感器的发展。由最初的用交流不平衡电桥就能测量基本的电容传感器。最初的电容传感器有变面积型,变介质介电常数型和变极板间型。现在的电容式传感器越做越先进,现在用的比较多的有容栅式电容传感器,陶瓷电容压力传感器等。电容测量技术发展也很快现在的电容测量技术也由单一化发展为多元化。现在国内外做传感器的厂商也比较多,在世界范围内做电容传感器做的比较好的公司有:日本figaro、德国tecsis、美国alphasense。中国本土测量仪器设备发展的主要瓶颈。尽管本土测试测量产业得到了快速发展,但客观地说中国开发测试测量仪器还普遍比较落后。每当提起中国测试仪器落后的原因,就会有许多不同的说法,诸如精度不高,外观不好,可靠性差等。实际上,这些都还是表面现象,真正影响中国测量仪器发展的瓶颈为:1.测试在整个产品流程中的地位偏低。由于人们的传统观念的影响,在产品的制造流程中,研发始终处于核心位置,而测试则处于从属和辅助位置。关于这一点,在几乎所有的研究机构部门配置上即可窥其一斑。这种错误观念上的原因,造成整个社会对测试的重视度不够,从而造成测试仪器方面人才的严重匮乏,造成相关的基础科学研究比较薄弱,这是中国测量仪器发展的一个主要瓶颈。实际上,即便是研发队伍本身,对测试的重视度以及对仪器本身的研究也明显不够。2.面向应用和现代市场营销模式还没有真正建立起来。本土仪器设备厂商只是重研发,重视生产,重视狭义的市场,还没有建立起一套完整的现代营销体系和面向应用的研发模式。传统的营销模式在计划经济年代里发挥过很大作用,但无法满足目前整体解方案流行年代的需求。所以,为了快速缩小与国外先进公司之间的差距,国内仪器研发企业应加速实现从面向仿制的研发向面向应用的研发的过渡。特别是随着国内应用需求的快速增长,为这一过渡提供了根本动力,应该利用这些动力,跟踪应用技术的快速发展。3.缺乏标准件的材料配套体系。由于历史的原因,中国仪器配套行业的企业多为良莠不齐的小型企业,标准化的研究也没有跟上需求的快速发展,从而导致仪器的材料配套行业的技术水平较低。虽然目前已有较大的改观,但距离整个产业的要求还有一定距离,所以,还应把标准化和模块化的研究放到重要的位置。还有,在技术水平没有达到的条件下,一味地追求精度或追求高指标,而没有处理好与稳定性之间的关系。上述这些都是制约本土仪器发展的因素。近年来我国测量仪器的可靠性和稳定性问题得到了很多方面的重视,状况有了很大改观。测试仪器行业目前已经越过低谷阶段,重新回到了快速发展的轨道,尤其最近几年,中国本土仪器取得了长足的进步,特别是通用电子测量设备研发方面,与国外先进产品的差距正在快速缩小,对国外电子仪器巨头的垄断造成了一定的冲击。随着模块化和虚拟技术的发展,为中国的测试测量仪器行业带来了新的契机,加上各级政府日益重视,以及中国自主应用标准研究的快速进展,都在为该产业提供前所未有的动力和机遇。从中国电子信息产业统计年鉴中可以看出,中国的测试测量仪器每年都以超过30%以上的速度在快速增长。在此快速增长的过程中,无疑催生出了许多测试行业新创企业,也催生出了一批批可靠性和稳定性较高的产品。1.2电容测量技术手段电容器作为非常重要的一个电学元件在现代电子技术中有着非常广泛的用途,电容定义为:电容器所带的电荷量Q与电容器两极板间的电势差U的比值,即:。这种原始的方法必须通过测量两个物理量来计算电容的大小,而其中的Q是比较难以测量的量。目前常用的两种测量电容的实现方法:一是利用多谐震荡产生脉冲宽度与电容值成正比信号,通过低通滤波后测量输出电压实现;二是利用单稳态触发装置产生与电容值成正比门脉冲来控制通过计数器的标准计数脉冲的通断,即直接根据充放电时间判断电容值。利用多谐震荡原理测量电容的方案硬件设计比较简单,但是软件实现相对比较复杂,而直接根据充放电时间判断电容值的方案虽然基本上没有用到软件部分,但是硬件却又十分的复杂。而且他们都无法直观的把测量的电容值大小显示出来。根据上面两种方案的优缺点,本次设计提出了硬件设计和软件设计都相对比较简单的方案:基于STC89C52单片机和由LM393芯片组成的LC 振荡器的数显式电容测量。该方案主要是根据LM393芯片的应用特点,把电容的大小转变成LM393输出频率的大小,进而可以通过单片机测量LC 震荡回路的频率。本方案的精度较高,硬件设计和软件设计也相对简单。2系统方案设计2.1设计方案本次设计中考虑了三种设计方案,三种设计方案中主要区别在于硬件电路和软件设计的不同,对于本设计三种方案均能够实现,最后根据设计要求、可行性和设计成本的考虑选择了基于STC89C52单片机和LM393芯片构成的LC 振荡器电路的测量的方案。现在一一介绍论证如下:方案一:利用多谐振荡原理测量电容测量原理如下图所示。电容C电阻R和555芯片构成一个多谐振荡电路。在电源刚接通时(K合上),电容C上的电压为零,多谐振荡器输出为高电平通过R对电容C充电。当C上冲得的电压= 时,施密特触发器翻转,变为低电平,C又通过R放电,下降。当= 时施密特触发器又翻转,输出又变为高电平,如此往复产生震荡波形。由理论分析可知 令 则 有式和测得的校准值测量值及存放的软件中的标准电容值C可得出待测电容值。实际应用中也可以通过测量和来算出图1 电容测量原理图图2 震荡波形图 测量误差分析:由式(6)可以看出,经过软件校准后得出的结果与的值有关。这样单片机晶振频率的绝对精度,环境温度的变化和电源电压的绝对精度引起的误差被消除。测量结果主要受标准电容的绝对精度影响,因此应该选择精度高、稳定性好的;其他误差来源包括周期测量的量化误差,除法运算产生的余数误差,电源电压的波动造成谐振频率偏移带来的误差,因此电路要用稳压性能好的稳压电源。这种方法的利用了一个参考的电容实现,虽然硬件结构简单,软件实现却相对比较复杂。 方案二、直接根据充放电时间判断电容值:这种电容测量方法主要利用了电容的充放电特性,放电常数,通过测量与被测电容相关电路的充放电时间来确定电容值。一般情况下,可设计电路使( T为振荡周期或触发时间;A为电路常数与电路参数有关)。这种方法中应用了555芯片组成的单稳态触发器,在秒脉冲的作用下产生触发脉冲,来控制门电路实现计数,从而确定脉冲时间,通过设计合理的电路参数,使计数值与被测电容相对应。其原理框图如图3所示。反向器单稳态触发器显示窄脉冲触发器秒脉冲发生器译码器锁存器记数器标准记数脉冲图3 电路原理框图误差分析:这种电容测量方法的误差主要由两部分组成:一部分是由555芯片构成的振荡电路和触发电路由于非线性造成的误差,其中最重要的是单稳态触发电路的非线性误差,(T由充放电时间决定,是被测电容值);另一部分是由数字电路的量化误差引起,是数字电路特有的误差该误差相对影响较小,可忽略不计。这种方法硬件结构相对复杂,实际上是通过牺牲硬件部分来减轻软件部分的负担,但在具体设计中会碰到很大问题,而且硬件一旦设计好,可变性不大。 方案三、基于STC89C52单片机和LM393芯片构成的LC 振荡器电路电容测量:这种电容测量方法主要是通过一块LM393芯片来测量电容,电路是一个由LM393组成的LC 振荡器。由单片机测量LC 震荡回路的频率,然后根据标准电容,求出电容,其中,F1是固有频率,F2是接入测试电容后的频率。只要我们能够测量出LC 振荡器电路的频率,就可以计算出测量的电容。计算频率的方法可以利用单片机的计数器和中断配合使用来测量,这种研究方法相当的简单。系统框图见图4。STC89C52LM393晶振电路被测电容测北容LCD1602显示复位电路按键图4 系统框图图中给出了整个系统设计的系统框图,系统主要由四个主要部分组成,单片机工作电路设计,LM393芯片电路设计,按键电路设计,显示电路设计。3 单元电路设计3.1 测量原理3.1.1 小电容测量原理测量电路图如下图5所示,电路是一个由LM393(U1A)组成的LC振荡器。由单片机测量LC震荡回路的频率,然后根据标准电容,求出求出电容,。图5 小电容测量电路注:此电路不仅可以测量小电容,也可测量电感和小信号频率,功能强大,精度较高。3.1.2 电解电容测量原理电解电容的测量是基于对RC 电路的时间常数的计算,电容的充电速度与R 和C 的大小有关,R 与C 的乘积越大,充电时间就越长。这个RC 的乘积就叫做RC电路的时间常数,即=RC。若R的单位用欧姆,C 的单位用法拉,则的单位为秒。图6 电容充电时间与电容两端电压之间的函数关系图示曲线可以得到充电过程的一般规律:是按指数规律上升的, 开始变化较快,以后逐渐减慢,并缓慢地趋近其最终值,当t=时,=0.632E (E为电源电压);本测量仪就是利用单片机测量=0到0.632E这段时间,用下列式子计算被测电容值:电路由比较器U1B,放电晶体管Q1、Q2等组成。设定比较器正输入端为,(=0.632E,调节Rref 获得),反向输入端接被测电容,当单片机P15 引脚为低电平时,电容放电。注意51单片机引脚的拉电流很小,不能直接驱动Q1,否则放电时间会很长。当单片机P15 引脚为高电平时,电容充电,当充电到 时,比较器翻转,触发单片机外部中断0,通过测得的充电时间和充电电阻的大小可以计算出电容大小。3.2 硬件电路设计3.2.1 单片机电路设计本设计的核心是单片机电路,考虑到需要一个中断输入,存储容量、外部接口对单片机端口的需要以及兼顾到节约成本的原则,选用了常用的STC89C52单片机。STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM,32 位I/O 口线, 看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种 软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。STC89C52工作的最简单的电路是其外围接一个晶振和一个复位电路,给单片机接上电源和地,单片机就可以工作了。其最简单的工作原理图如下图:图7 单片机工作电路由图7可知,9脚外接的是按键复位电路,18,19脚外接的是晶振电路,这样,就构成了单片机正常工作的必备电路。同时,为使P0口正常工作,并增加其带负载能力,P0口需接上拉电阻(在图中未画出)。3.2.2 LM393芯片电路设计图8是LM393芯片(U1A)构成的LC振荡器。由单片机测量LC震荡回路的频率,然后根据标准电容,求出求出电容,。图8 小电容测量电路图9是LM393芯片比较器U1B,放电晶体管Q1、Q2等组成的电容充放电电路,通过测得的充电时间和充电电阻的大小可以计算出电容大小。图9 电解电容电容测量电路3.2.3 按键电路设计按键是实现人机对话的比较直观的接口,可以通过按键实现人们想让单片机做的不同的工作。键盘是一组按键的集合,键是一种常开型开关,平时按键的两个触点处于断开状态,按下键是它们闭合。键盘分编码键盘和非编码键盘,案件的识别由专用的硬件译码实现,并能产生键编号或键值的称为编码键盘,而缺少这种键盘编码电路要靠自编软件识别的称为非编码键盘。在单片机组成的电路系统及智能化仪器中,用的更多的是非编码键盘。图10就是一种比较典型的按键电路,在按键没有按下的时候,输出的是高电平,当按键按下去的时候,输出的低电平。图10 按键电路其中Btn1是单片机复位按钮;Btn2是校准按钮,在测量小电容时候可以随时按下清零显示;Btn3 是功能切换按钮,用来在测量LCF(频率、小电容、电感)和测量电解电容之间切换。3.2.3 显示电路设计LCD以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里我们使用的是2行16个字的1602液晶模块。图11就是常见的LCD1602液晶显示屏引脚图:图11 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脚:空脚如图12所示,LCD1602接与P0口,用于显示电容值以及一些相应的测量信息。图12 LCD1602显示电路至此,整个电容测量仪的硬件设计部分就设计好了,接下来,需要的就是与之相匹配的软件支持了。3.3 软件设计软件编程平台选择最常用的Keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的C语言编程。在编程中,将该程序分为三个模块:数据处理模块,1602显示模块及主函数模块。方便调试与理解。具体程序见附录二。总体程序较长,但并不复杂,可根据需要重点看主函数,与硬件电路结合起来,注重程序后紧跟的注释,理解起来是比较容易的,在此就不再一一详细分析。3.4 量程范围设置由于量程的选择是非常重要的一个环节,在这里单独讨论量程的选择。为满足10pF 99.9uF 的测量范围, 可通过设置不同按键来实现。不同按键与对应的量程范围如表3.1所示。系统分为三个量程, 可测量1pF 12000uF 的电容。表3.1 按键与量程范围的关系按键是否按下量程范围无按键按下1pF-2.2F按下Btn30.01F-600F按下Btn3再按下S3200F-12000F 3.5 原理图设计及设计结果3.5.1 原理图设计图13 原理图设计3.5.2 设计结果图14 设计结果实物图注:各个按键功能如图中文字说明。图15 初始化界面3 系统测试3.1 测量小电容图16中的1.5pF 是未经校准的误差,一般这个值会比较大,必须校准后才能测小电容。电解电容测量档不需要校准,校准仅仅针对小电容。图16 未校准界面校准只需在小电容档(图中界面),不接入测量电容时,按一下校准(清零)按钮(原理图Btn2)即可, 会自动清零(图17所示)。图17 校准后界面在此以200PF电容测试为例,演示整个测试过程。校准后,直接将小电容接在与GND 之间即可,图18所示。第一行显示测得的电容值,第二行显示的是当前LC振荡电路的频率。图18 200PF测试结果3.2 测量电解电容按一次功能切换按钮(原理图中Btn3)都会切换到测电解电容的状态,然后根据S3弹起还是按下的状态自动识别测大电解还是测小电解电容。再次按下功能切换按钮(原理图中Btn3)会返回到测小电容的状态。这就是功能切换按钮的作用。除此之外,其它测量档位单片机能根据S1、S2、S3按下还是弹起自动识别,无需人为干预。S3 弹起时为测小电解档,第一行显示测量范围,第二行显示测得的电容值。图19 4.7F测试结果图20 220F测试结果图21 470F测试结果3.3 测量结果将测量的一系列电容的电容值与标准值比较。比较结果如表3.2。表3.2 测量值与标准值比较标准值测量值误差200PF182.8PF8.60%4.7F5.02F6.81%220F236.81F7.64%由表3.2中数据可知,平均误差是7%,测量范围是1PF12000F,满足设计要求的10PF99.9F。测量结果由液晶直观显示。综合以上分析,该设计满足整体设计要求。3.4 误差分析电容器 的容量的精确程度,基本上决定了整个测量过程的精度。应该选用稳定性好精度高的电容器,一般推荐使用云母电容器,买不到的话,独石或CBB 的也都可以将就用。非线性误差是由器件的非线性特性产生的, 可通过硬件参数修正和软件算法补偿来减小。4 结论与心得体会总之,通过一系列仿真和设计,数字式电容测量仪还是比较成功的做出来了。一路下来还是比较坎坷,从原理到实物,从调试到调试成功,遇到了很多问题,比如开关的选择、电源滤波、三极管驱动等等,其次,软件设计也遇到了很多问题,通过很长的时间才调试成功。通过这次设计也收获了很多,知识层面上,学得了很多新知识,解决问题的新方法。实践方面,提高了动手能力,提高了解决实际问题的能力等等。在思想上,更加明白的坚持不懈的重要性,学习探索的重要性,实践动手的重要性。参考文献1 康华光.电子技术基础 数字部分(第四版)M.北京:高等教育出版社.2000.72 康华光.电子技术基础 模拟部分(第四版)M.北京:高等教育出版社.2000.73 杨刚. 电子系统设计与实践M.北京:电子工业出版社,20044 赵文博. 新型集成电路速查手册M.北京:人民邮电出版社,20065 李群芳.单片微型计算机与接口技术(第3版)M. 北京:电子工业出版社,20086 李阳.高精度微小电容测量电路的研制J.上海计量测试,20047 刘军,李智. 基于单片机的高精度电容电感测量仪J. 研究与开发, 2007附 录程序清单:Main.c ,Measure.c ,LCD1602.c(a) Main.c程序清单:#include reg52.h#include .HeadLCD1602.h#include .Headdefine.h#include .HeadMeasure.hsbit correctbtn = P37;/按钮Btn2,用于校准sbit setbtn = P36;/按钮Btn3,用于功能选择sbit F_LC = P13;/选择测量频率还是LC标志 按下:=1(测频率)sbit L_C = P14;/选择测量L还是C标志 按下:=1(测电感)sbit Eb_Es = P16;/选择测量电解大电容还是小电容标志 按下:=1(测大电解)sbit dischg = P15; /电容放电端 放电=0,充电=1/Measure_Flag 测小电容=1-测电感=2-测频率=3-测小电解=4-测大电解=5unsigned char Measure_Flag;unsigned int T0_times;/T0计时50ms的个数,测频率=20(1s),测LC=10(0.5s)unsigned int Timer0_Num;unsigned int Timer1_Num;unsigned long Frequency0;unsigned long Frequency1;unsigned long Cx;unsigned long Lx;unsigned long EHx; /大电解unsigned long ELx;bitM_E_FLC; /功能切换按钮,M_E_FLC=0:测FLC;M_E_FLC=1:测电解电容void Main(void)unsigned char loge;unsigned char clear;/清屏标志位,如果功能转换则需要清屏Measure_Flag = 0; M_E_FLC = 0;/开机默认测FLCT0_times = 10;Timer0_Num = 0;Timer1_Num = 0;Frequency0 = 169500;/基准频率的一半Frequency1 = 0;LCD1602_Init();LCD_Write_String(0,0, biyesheji );LCD_Write_String(1,0, huangrenwei );for(loge=0;loge15;loge+)Delay_ms(200);MeasureFLC_init();while(1)Get_btn();/按键扫描Delay_ms(70);/该延时使按键切换稳定clear = Measure_Flag;/读测量类型标志及清屏Get_Measure_Flag();if(clear != Measure_Flag)LCD_Clear();switch(Measure_Flag)/计算及显示case1:/测小电容LC_Calculate();LCD_Write_String(0,0,Cx= );LCD_Write_LongPoint(0,4,8,1,Cx);LCD_Write_String(0,13, pF);LCD_Write_String(1,0,freq= );LCD_Write_Long(1,6,6,Frequency1*2);LCD_Write_String(1,13, Hz);break;case2:/测小电感LC_Calculate();LCD_Write_String(0,0,Lx= );LCD_Write_LongPoint(0,4,8,2,Lx);LCD_Write_String(0,13, uH);LCD_Write_String(1,0,freq= );LCD_Write_Long(1,6,6,Frequency1*2);LCD_Write_String(1,13, Hz);break;case 3:/测频率LCD_Write_String(0,0, Meas_Freq );LCD_Write_String(1,0,Freq= );if(Frequency140)/频率测试40Hz以上Frequency1=0;LCD_Write_Long(1,6,6,Frequency1);LCD_Write_String(1,13, Hz);break;case 4:/测小电解LCD_Write_String(0,0,0.01uFCEx600uF);LCD_Write_String(1,0,CEx= );LCD_Write_String(1,14,uF);LCD_Write_LongPoint(1,6,5,2,ELx);MeasureElec_init();break; case 5:/测大电解LCD_Write_String(0,0,220uF CEx 12mF);LCD_Write_String(1,0,CEx= );LCD_Write_String(1,14,uF);LCD_Write_LongPoint(1,6,6,1,EHx);MeasureElec_init();break;default:break; (b) Measure.c程序清单:#include reg52.h#include intrins.h#include .Headdefine.h#include .HeadMeasure.h#include .HeadLCD1602.h/*#define Cref 2200/在此标定基准电容值,单位pF/*sbit correctbtn = P37;/按钮2,用于校准sbit setbtn = P36;/按钮3,用于功能选择sbit F_LC = P13;/选择测量频率还是LC标志 按下:=1(测频率)sbit L_C = P14;/选择测量L还是C标志 按下:=1(测电感)sbit Eb_Es = P16;/选择测量电解大电容还是小电容标志 按下:=1(测大电解)sbit dischg = P15; /电容放电端 放电=0,充电=1/Measure_Flag 测小电容=1-测电感=2-测频率=3-测小电解=4-测大电解=5extern unsigned char Measure_Flag;extern unsigned int T0_times;extern unsigned int Timer0_Num;extern unsigned int Timer1_Num;extern unsigned long Frequency0;extern unsigned long Frequency1;extern unsigned long Cx;extern unsigned long Lx;extern unsigned long EHx;/大电解extern unsigned long ELx;extern bitM_E_FLC;/功能切换按钮,M_E_FLC=0:测FLC;M_E_FLC=1:测电解电容/*-判断测量类型-*/void Get_Measure_Flag(void)if(M_E_FLC=0)/测FLC按键选择标志位if(F_LC=1)Measure_Flag = 3;/测频率T0_times = 20;/T0定时1selseif(L_C=0)Measure_Flag = 1;/测小电容 elseMeasure_Flag = 2;T0_times = 10;/T0定时0.5selseTR0 = 0;/关闭测频率(含LC)功能ET0 = 0;if(Eb_Es=0)Measure_Flag = 4;/测小电解elseMeasure_Flag = 5; /测大电解/*-按键读取-*/void Get_btn(void)if(setbtn=0)/功能切换按钮按下Delay_ms(50);if(setbtn=0)M_E_FLC = M_E_FLC;/功能切换按钮有效后,要重新初始化相应测量函数if(M_E_FLC=0)EX0 = 0;/关闭测电解电容的功能(外部中断0)MeasureFLC_init();elseTR0 = 0;/关闭测频率(含LC)功能ET0 = 0;if(correctbtn=0)/校正按钮按下Delay_ms(50);/只有测小电容和电感时允许校正if(correctbtn=0)&(Measure_Flag=1)|(Measure_Flag=2)Frequency0 = Frequency1; /*-计算电容电感值-*/void LC_Calculate(void)float mes,mes1;mes = (float)Frequency0/(float)Frequency1;mes *= mes;if(mes=5)Cx = Cx/10+1;elseCx = Cx/10;mes1 = 3.1416*3.1416;mes1 *= 16;mes1 *= (float)Frequency0;mes1 = mes1/10000;mes1 *= (float)Frequency0;mes1 = mes1/1000;mes1 = mes1/1000;mes1 *= Cref;mes1 = 100000000/mes1;Lx = mes1*(1000*mes);/精确到0.01uH,四舍五入if(Lx%10)=5)Lx = Lx/10+1;ElseLx = Lx/10;if(Frequency150)/防止不接入电感时显示溢出值Lx = 0;/*-测试频率(小电容、小电感)-*/void MeasureFLC_init(void)Timer0_Num = 0;Timer1_Num = 0;TMOD = Bin(01010001);TH0 = 0x3c;TL0 = 0xb0;/定时50msTH1 = 0x3c;TL1 = 0xb0;/计数50000TR0 = 1;TR1 = 1;ET0 = 1;ET1 = 1;EA = 1;/*-测试电解电容-*/void MeasureElec_init(void)unsigned char i;EHx = 0;ELx = 0;TR1 = 0;ET1 = 0;EX0 = 0;dischg = 0;/放电Delay_ms(180);Delay_ms(200);dischg = 1;/充电Timer1_Num = 0;TMOD = Bin(00010001);TH1 = 0x3c;TL1 = 0xb0;/定时50msET1 = 1;TR1 = 1;IT0 = 1;/下降沿触发EX0 = 1;EA = 1;for(i=0;i=T0_times)/测频率取1s,测LC取0.5sTR0 = 0; TF0 = 0;TR1 = 0; TF0 = 0;Frequency1 = 50000*Timer1_Num + (unsigned int)(TH18)+TL1)-0x3cb0);Timer0_Num = 0;Timer1_Num = 0;TH0 = 0x3c;TL0 = 0xb0;/定时50msTH1 = 0x3c;TL1 = 0xb0;/计数50000TR0 = 1;TR1 = 1;/*-定时器1中断处理-*/void Timer1_interrupt(void) interrupt 3TH1 = 0x3c;TL1 = 0xb0;/计数50000(测频率),计时50ms(测电解电容)Timer1_Num+;/*-INT0中断处理-*/void INT0_Interrupt(void) interrupt 0if(Measure_Flag=4)ELx=(50000*Timer1_Num+(unsigned int)(TH1=0)ELx = ELx - 2;/修正误差 if(Measure_

温馨提示

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

评论

0/150

提交评论