电压表Word格式.docx
- 文档编号:16570505
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:16
- 大小:413.91KB
电压表Word格式.docx
《电压表Word格式.docx》由会员分享,可在线阅读,更多相关《电压表Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
二、系统组成及工作原理
1、信号的处理
当信号高于3v时要进行电阻分压衰减;
当电压小于300mv时要对信号进行高精度运放放大,然后信号经过缓冲器提高其负载能力,最后信号进行低通滤波器其截止频率在10HZ左后滤除高频噪声及干扰,最后送出给积分部分电路进行积分。
2、处理器的选择
STC单片机所特有的在线下载功能和其他公司的单片机不同,不是利用SPI进行在线编程,而是利用IAP功能,在系统运行时编程,因此,可以通过串口来对单片机进行编程。
其电路极为简单,只要所使用的单片机系统具有232串口通信功能即可。
.工作宽温度范围,-40℃~85℃,在系统可编程,无需编程器,可远程升级,抗干扰强.价格低廉,所以采用了STC89C52单片机.
3、积分器及比较器选择
积分器采用运放TL062,其漏极电流小,电阻选取一般的电阻,电容选择CBB电容,即可满足该设计的积分电路的要求。
比较器采用LM393输出接一二极管1N4148至单片机的外部中断0,即可由单片机控制定值积分的时间关断。
4、电源电路的选择
采用并联型线性稳压电路TL431。
优点是精度更高,纹波更小,输出电压可调,可获得稳定的正负参考电压。
5、电子开关的选择
CD4051模拟开关。
优点是价格便宜,开关速度快,驱动方便,但导通电阻大。
6、显示方法的选择
采用LCD1602模块。
优点是微功耗,体积小,内置驱动电路,接口简单,显示信息量大,字迹美观。
7、AC-DC转换
采用运方式半检波电路和一个加法器组成精密全波检波电路,输出电压与输入电压的绝对值成正比,即可由交流转化为直流进行检测。
8、总体设计原理
本设计基于STC89C52单片机的3位半积分式直流数字电压表设计的设计思路及实现方法。
在设计中,充分利用了89C52单片机内部的高速计数器和以分立元件组成的双积分型A/D转换器的优良特性,使整个设计达到了比较满意的效果。
硬件设计主要有双电源电路、信号采集电路、开关逻辑控制电路、积分比较与自动回零电路、单片机系统、显示电路组成。
软件编程采用模块化结构,主要有时序子程序,系数运算子程序,自动量程转换子程序,显示子程序等组成。
信号经过电阻分压器统一衰减后,经过运放缓冲后,开始先对信号进行积分,后开始对基准源进行反积分,然后经过单片机运算处理后判断计数N2的大小来选择量程再继续进行了下一轮的测试,最后送单片机显示。
系统框图如下图所示:
图一
三、硬件电路的设计.
1信号处理电路
图二
信号经过电压分阻条统一衰减后经过缓冲器提高其负载能力,然后经过电子开关选择量程进行放大或者者衰减。
当输入电压大于3V时,对输入电压进行分压衰减,分压电阻选用1M和9M的,分压比为1/10。
当输入电压小于300mv时由电子开关控制信号进行高精度运放放大,采用TL062运放放大器进行放大10倍,电阻取值R3=100K,R1=10K。
。
2双积分电路设计
图三
单片机通过对开关CD4051控制电路来控制双积分A/D转换,单片机首先先控制开关逻辑控制s4接通(衰减档)将待测电压进行正积分,再使Vref接通对反积分基准电压进行反积分,同时单片机内部计数器开始计数,到一定时间后比较电路中的比较电路输出中断信号,单片机停止计数并得到计数值N2,通过对N2值的比较在选择合适的量程档,最终经过换算由LCD1602显示出来。
A/D转换是在单片机和开关逻辑控制电路的控制下有条不紊地进行,全部过程可分三个阶段:
(1)正积分:
也称信号采集阶段。
在这个阶段,通过单片机对开关逻辑控制电路的控制对检测电压OUT2积分。
积分器的输出电压随时间线性地增加。
正积分时间由单片机控制,定时为T1,在T1结束时积分器的输出电压为:
Vout(T1)=-1/C1*R4∫UX(公式一)
(2)反积分:
也称计数阶段。
在这个阶段,通过单片机对开关逻辑控制电路的控制对基准电压VEF积分。
经过T2时间后回到0,
Vout2(T2)=Vout1+1/C2*R9∫Vref(公式二)
UX=Un*T2/T1(公式三)
由此可以看出UX的大小取决于定值积分时间T2的大小。
(3)回零阶段:
也称复位阶段,在该阶段,因反积分使比较器输出由高电平变成低电平,再由单片机控制开关逻辑控制电路动作,使s1导通(接地),为下一次积分做准备。
3基准电压电路设计
图四
负电源电压采用高精度可编程稳压器件TL431产生,然后进过电源滤波。
在经过缓冲器进行隔离,以免后级电路对基准源产生负载影响,影响基准源的精度。
4精密检波电路
图五
采用运方式半检波电路和一个加法器组成精密全波检波电路,输出电压与输入电压的绝对值成正比,即可由交流转化为直流进行检测,当ui<
0时,ui=-uo;
当ui>
0时,ui=uo。
5单片机最小系统及显示电路设计
图六
采用89c52单片机最小系统来控制,双积分的电路的逻辑开关转换和计时显示等。
四、软件设计
控制芯片为STC89C52,由于处理器速度较快,所以采用c语言编程方便简单.软件流程如图下
电压表主流程图
初始开始是默认输入电压大于3V,即接衰减档,当检测完一次时根据计数N2值得大小判断量程,当N2>
6000时即测试电压大于3v,当600<
N2<
6000时即测试电压在300mv至3v之间,当N2<
600时,即测试电压小于300mv。
当被测电压小于3v时,逻辑开关控制不接衰减,然后继续测试并判断。
五、测试结果及分析
由于实际作品还未完成,这部分未完成,程序部分大致以完成。
电压测试数据(室温条件下)
标准电压值
自动量程选择
实测电压值
误差/﹪
3V
300mV档
mV
3V
3V档
V
30V档
参考文献:
[1]《模拟电子线路基础》,吴运昌著,广州:
华南理工大学出版社,2004年;
[2]《数字电子技术基础》,阎石著,北京:
高等教育出版社,1997年;
[3]《单片机原理及应用》,马延涛,2002年;
附录:
附1:
元器件明细表:
1、STC89C52
2、TL062
3、1602液晶
附2:
仪器设备清单
1、低频信号发生器
2、数字万用表
3、数字示波器
4、稳压电源
附3:
电路图图纸
整体电路图
附4:
程序清单
#include<
reg51.h>
#include<
math.h>
stdlib.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P1^0;
sbitRW=P1^1;
sbitEN=P1^2;
sbitAN=P1^5;
//开关选择控制AN、BN、CN
sbitBN=P1^6;
sbitCN=P1^7;
unsignedcharcodestr1[]={"
DVM"
};
unsignedcharcodestr2[]={"
0915211020"
unsignedcharcodeASCII[15]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
.'
:
'
M'
V'
U'
unsignedcharcodeCls[]={"
"
staticunsignedcharDisNum=0;
//显示用指针
//unsignedlongintcount;
unsignedlongS=0,N2=0,TH3=0,TL3=0,U1=0;
unsignedlongspeed=0;
bitflag=0;
unsignedchardisbuff[4]={0,0,0,0,};
unsignedchardisbu[4]={0,0,0,0,};
/*************************lcd1602程序**************************/
voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)
{
unsignedinti,j;
for(i=0;
i<
ms;
i++)
for(j=0;
j<
100;
j++);
}
voidwr_com(unsignedcharcom)//写指令//
delay1ms
(1);
RS=0;
RW=0;
EN=0;
P0=com;
EN=1;
voidwr_dat(unsignedchardat)//写数据//
;
RS=1;
P0=dat;
voidlcd_init()//初始化设置//
{
//BLK=0;
delay1ms(15);
wr_com(0x38);
delay1ms(5);
wr_com(0x08);
delay1ms(5);
wr_com(0x01);
wr_com(0x06);
wr_com(0x0c);
voiddisplay(unsignedchar*p)//显示//
while(*p!
='
\0'
)
{
wr_dat(*p);
p++;
}
init_play()//初始化显示
lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
voidConut1(void)
U1=0.5*N2;
//MV
disbuff[0]=U1/10000;
//计算10v位
disbuff[1]=U1%10000/1000;
//计算v位
disbuff[2]=U1%10000%1000/100;
//计算100mv位
disbuff[3]=U1%10000%1000%100/10;
//计算10mv位
disbuff[4]=U1%10000%1000%100%10;
//计算mv位
wr_dat(ASCII[14]);
wr_com(0xc1);
wr_dat(ASCII[11]);
wr_com(0xc2);
wr_dat(ASCII[disbuff[0]]);
//显示十V位
wr_com(0xc3);
wr_dat(ASCII[disbuff[1]]);
//显示V
wr_com(0xc4);
wr_dat(ASCII[10]);
//显示点
wr_com(0xc5);
wr_dat(ASCII[disbuff[2]]);
//显示100mv
wr_com(0xc6);
wr_dat(ASCII[disbuff[3]]);
//显示10mv
wr_dat(ASCII[disbuff[4]]);
//显示mv
/********************************************************/
voidtimer1(void)interrupt1//T1中断用来计数器溢出,强制换挡
flag=0;
voidint0(void)interrupt0//外部中断0控制定时器1停止计数
EX0=0;
TR1=0;
//定值积分完成关闭定时器1
AN=0;
BN=0;
CN=0;
//接通地为电容放电
TH3=0xFF-TH1;
//读取定值积分时间N2
TL3=0xFF-TL1;
N2=TH3*256+TL3;
EX0=1;
/********************主程序***********************************/
voidmain()
init_play();
//初始化显示
TMOD=0x11;
//设T0为方式1,TI定时1;
TH0=(65536-60000)/256;
//60ms定时
TL0=(65536-60000)%256;
TH1=0xFF;
TL1=0xFF;
ET0=1;
//允许T0中断
EA=1;
//全局中断开
//外部中断0开
IT0=1;
//边沿触发
while
(1)
//初始化接地
delay1ms(5);
if(flag==0)
{AN=1;
BN=1;
}//接衰减
else
{AN=1;
//不接衰减
}
TR0=1;
//启动定时器0开始定时积分60ms
if(flag==0&
N2>
=6000)//如果大于3V
{Conut1();
}//大于3V档显示
else
{flag=1;
}//换挡标志
if(flag==1)
{
if(N2>
60000)
{flag=0;
}//换挡标志
if(N2>
=6000&
=60000)
{Count2();
}//300mv~3v档显示
else
{Count3();
}//小于300mv档显示
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电压表
![提示](https://static.bdocx.com/images/bang_tan.gif)