数字式电参数测试仪一、绪论本文介绍了一种基于高精度恒流源采样技术的新型数字式电参数测试仪,利用微处理器实现对电阻、直流电压、直流电流、频率等电参数的测量,该系统使用单片机AT89C51为核心芯片,通过ADS1100来进行A/D转化,通过LM334来采集恒流源,通过LCD1602来显示测量数据。
并给出了整个系统的总体设计方案,制作了样机,实际测试表明该:数字式电参数测试仪完全满足题目规定的基本要求和发挥部分的要求。
二、系统方案本设计是一种基于高精度恒流源采样技术的新型数字式电参数测试仪,利用微处理器实现对直流电压、直流电流、电阻、频率等电参数的测量,该系统主要通过ADS1110来进行A/D转化,通过LM334来采集恒流源,通过LCD来显示测量数据。
并给出了整个系统的总体设计方案,制作了样机,实际测试表明该:数字式电参数测试仪完全满足题目规定的基本要求和发挥部分的要求。
该系统要求用单5V直流电源供电,能测量电阻、直流电压、直流电流、频率等电参数。
该系统控制系统采用STC89C52单片机,A/D转换采用ADS1100,显示部分采用LCD显示,恒流源采用LM334产生。
该系统设计方案框图如图所示:系统功能框图:主要芯片:OP07C,LM324,ADS1110,MAX232,LM334,LM319,LCD1602,L7805,STC89C52 设计要求电阻测量范围(10Ω~1MΩ)相对误差<0.3%电流测量范围(100μA~10mA)相对误差<0.2%电压测量范围(100mV~10V)相对误差<0.1%频率测量范围(10Hz~100kHz)相对误差<0.01%输入正弦信号为50 mV的正弦交流信号2.1系统控制部分本设计采用STC89C52八位单片机实现。
单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。
而且体积小,硬件实现简单,安装方便。
2.2 A/D转换部分由于该系统的测量精度要达到0.3%,普通的8位AD转换芯片无法达到这一要求,而ADS1110是16位A/D转换,线性误差仅为0.0015%,内置自校准电路,串行输出接口,可方便地与单片机配接。
同时具有功耗低,精度高,抗干扰能力强等特点,适合要求精度较高的仪器仪表。
2.3显示部分采用点阵字符型LCD液晶显示,可以显示数字与阿拉伯字母等字符,随着半导体技术的发展,LCD的液晶显示越来越广泛的应用于各种显示场合。
液晶显示可以工作在低电压、低功耗下,显示界面友好、内容丰富。
数码管显示驱动简单,但是不能显示高精度数位。
综合考虑,选用LCD来实现显示功能。
LCD使用的型号是1602。
2.4测量电阻、电流、电压电路部分①把测电阻转化为测电压,通过OP07整合再经AD转换,进入单片机测量。
电阻测量分4档②把测电流转化为测电压,通过OP07整合再经AD转换,进入单片机测量。
电流测量分2档③测电压,把被测电压通过OP07整合再经AD转换,进入单片机测量。
电压测量分2档。
三、硬件设计3.1电阻测量电路、电流测量电路、电压测量电路根据题目要求,通过LM334产生恒流源分4档测电阻,分2档测电流和电压。
测电流模块测电压模块测电阻模块3.2 测频率电路一个波形通过LM324两级放大,再通过LM319电压比较器整形,由于频率接近100KHZ的时候,波形失真,频率不变,故再通过40106进一步整形。
测频率模块3.3 A/D转换电路采用16位AD转换器ADS1100进行转换,再把数据送入89C51进行处理。
AD模块MCU模块MCU扩展模块3.4 LCD 显示电路LCD1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、DE 三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。
LCD模块3.5 按键电路按键控制开关。
按键模块3.6串口下载模块串口实现对程序的读入,使程程度得到调试。
工作在5V电压下。
串口下载模块3.7 电源模块通过L7805跟L7905使电压保持在+5V与-5V之间电源模块四、软件设计软件流程主要包括三个阶段:初始化阶段、计算阶段还有最后显示阶段。
各个阶段完成各自的任务,这样模块化处理可以减少出现差错的概率。
即使出现差错,也可以准确的找出有问题的模块并进行改进。
4.1测电压部分用ADS1110读入输入电压,再利用其自身的转换公式换算出电压,再通过LCD1602显示出来。
4.2测频率部分利用单片机的计时器/计数器及中断来测频率。
首先设定TMOD = 0x15,即启用T0计数及T1定时,以及选择工作方式1。
给定闸门时间25ms,即25ms定时溢出进入中断,40次之后即为1s的时间,此时T0计数器中计的脉冲个数即为频率,把它表示出来,然后在LCD1602中显示。
4.3 测电流部分测电流实质上即为测电压,外部输入一个电流,经过电路中的一个定值电阻时形成压降,即为电阻两端的电压,然后把此电压引入ADS1110即可,测出电压,再除以那个定值电阻得到的值即为输入电流,然后显示。
4.4 测电阻部分测电阻实质上即为测电压,电路中利用LM334形成恒流源产生恒定电流,次电流经过待测电阻到地,在待测电压两端形成电压,然后把此电压引入ADS1110即可,测出电压,再除以那个恒定电流得到的值即为待测电阻,然后显示。
4.5显示阶段采用1602 液晶显示器,先把信号转化成ASCII 码,再输入1602 液晶显示器,通过显示器程序就可以所测的频率显示在液晶屏上。
由于主程序是不断的循环执行,液晶显示器就可以不断地动态的显示所测的频率。
五、系统测试5.1 测试方法与仪器仪器:型号为MS8050的五位数字万用表、型号为HY3002D—3的稳压源,型号为YB1610H DDS的数字合成信号源、型号为TDS2012的1GHz的TEK示波器测量方法:电压测量方法:用稳压源输出电压,再用5位数字万用表测量理论值,然后再用自制万用表对电压进行多组数据测量比对。
测量数据如下图:电流测量方法:将恒流源接入测量电流的接口,用5位数字万用表测得其理论值,然后再用自制万用表对电路进行行多组数据测量比对。
电阻测量方法:先用五位数字万用表测出理论值,再用自制的万用表对电阻进行多组数据测量行比对。
测量数据如下图:频率测量方法:先用数字信号源输入波形,再用示波器观察测量,再用自制万用表测量,进行多组数据比对。
测量数据如下:六、总结由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项基本指标和发挥功能的要求。
在这次设计中,我们更好地学习了硬件焊接、软件编程和高精度调试等。
但是由于时间有限,我们其他的发挥功能无法实现,我们将在自己以后的学习中更加努力。
频率计就设计而言功能相对简单,但其频率的测量范围满足需求,和市场上的一些数字频率计相比具有易操作,响应速度快等优势。
此频率计预处理电路设计简单而又巧妙,计算频率的算法简洁可行,整个频率计简单实用。
另外此频率计容易进行功能扩展,可以增加一个分频电路用来增加频率的测量范围,还可以增加一些功能,如脉宽,占空比等。
参考文献1.钱进.基于AT89C2051 的高精度数字频率计的设计[J] . 机电产品开发与创新,2007,20(1):86-87.2.卢飞跃.基于单片机的高精度频率计设计[J]. 电子测量技术,2006,29(5):96-97.3.杜刚,高军,童宁宁.基于AT89C2051 单片机的频率计设计[J].微计算机应用,2004,25(4):498-501.4.卢伟,熊茂华《串行A/D转换器MAX187与单片机的接口》[J].计算机与现代化,20052:65-685.Fayyad U M,Piatetsky-Shapiro G,Smyth,P. From data min-ing to knowledge discovery:An overview. In:Advances in Knowledge Discoveryand Data Mining,Fayyd U M,Piatetsky-Shapiro G(eds),1~35.6.黄宋魏《ADS1110芯片及其应用》(昆明冶金研究院,云南昆明650031)7.章津楠,张长胜,郭清成《一种简单方法实现基于STC89C52RC 单片机的频率计》(温州大学计算机科学与工程学院浙江温州325035 )8.孙汝建《基于I2C 总线的16 位A/ D 转换器ADS1110 及其应用》(南京水利科学研究院南京, 210024)附录:程序代码:测电压:#include <reg52.h>#include "cpu.h"#include "lcd.h"#include "freq.h"#include "ads1110.h"sbit LCD_BG = P2^4;CPU_INT16S OutputCode;CPU_INT08U Config;CPU_FP32 Voltage;static void LCD_Delay1s (CPU_INT16U n){CPU_INT16U i, j, k;for (i = 0; i < n; i++) {for (j = 0; j < 1000; j++) {for (k = 0; k < 128; k++) {}}}}void main (void){LCD_InitDisp();LCD_BG=0;while (1) {ADS1110_Read(ADS1110_ADDRESS, &OutputCode, &Config);if ((OutputCode >= ADS1110_MINIMUM_CODE) && (OutputCode <= ADS1110_MAXIMUM_CODE)){Voltage = (CPU_FP32)OutputCode * 2.048 / 32768;}LCD_Dispshuzhi(1, 0, 4, (CPU_FP32)Voltage);LCD_DispStr(0,4,"Voltage");LCD_DispStr(1,6,"V");LCD_Delay1s(1);}}测电阻:#include <reg52.h>#include "cpu.h"#include "lcd.h"#include "freq.h"#include "ads1110.h"sbit LCD_BG = P2^4;CPU_INT16S OutputCode;CPU_INT08U Config;CPU_FP32 Voltage,Resistance;static void LCD_Delay1s (CPU_INT16U n){CPU_INT16U i, j, k;for (i = 0; i < n; i++) {for (j = 0; j < 1000; j++) {for (k = 0; k < 128; k++) {}}}}void main (void){LCD_InitDisp();LCD_BG=0;while (1) {ADS1110_Read(ADS1110_ADDRESS, &OutputCode, &Config);if ((OutputCode >= ADS1110_MINIMUM_CODE) && (OutputCode <= ADS1110_MAXIMUM_CODE)){Voltage = (CPU_FP32)OutputCode * 2.048 / 32768;}Resistance = (CPU_FP32)Voltage*680/0.134/1000;LCD_Dispshuzhi(1, 0, 3, (CPU_FP32)Resistance);LCD_DispStr(0,3,"Resistance");LCD_DispStr(1,6,"KR");LCD_Delay1s(1);}}测频率:#include <reg52.h>#include "cpu.h"#include "lcd.h"#include "freq.h"#include "ads1110.h"sbit LCD_BG = P2^4;CPU_INT32U Freq_Frequence;static void LCD_Delay1s (CPU_INT16U n){CPU_INT16U i, j, k;for (i = 0; i < n; i++) {for (j = 0; j < 1000; j++) {for (k = 0; k < 128; k++) {}}}}void main (void){EA=1;LCD_InitDisp();Freq_InitFrequence();LCD_BG=0;while (1) {Freq_GetFrequence(&Freq_Frequence);LCD_DispStr(0,3,"frequence");LCD_Dispshuzhi(1,0,3,(CPU_INT32U)Freq_Frequence); LCD_DispStr(1,7,"HZ");}}。