简易数字电压表的设计论文.docx
《简易数字电压表的设计论文.docx》由会员分享,可在线阅读,更多相关《简易数字电压表的设计论文.docx(17页珍藏版)》请在冰豆网上搜索。
![简易数字电压表的设计论文.docx](https://file1.bdocx.com/fileroot1/2023-2/4/d4a8b007-348c-4570-81c2-8a4a72b8ce1d/d4a8b007-348c-4570-81c2-8a4a72b8ce1d1.gif)
简易数字电压表的设计论文
2.1ATMEL89C51单片机系统和显示电路3
2.2A/D转换电路4
3系统软件设计5
3.1初始化程序5
3.2A/D转换子程序5
3.3显示子程序6
4系统安装调试及结果14
4.1系统安装调试14
4.1.1电路焊接14
4.1.2程序下载及程序下载14
4.2系统调试结果14
4.2.1调试所用工具14
4.2.2记录测试数据14
5总结15
6致谢15
7注释
8参考文献
简易数字电压表的设计
【内容摘要】此在现代检测技术中,常需用高精度数字电压表进行现场检测,将检测到的数据送入微计算机系统,完成计算、存储、控制和显示等功能。
本文中的数字电压表的控制系统采用ATMEL89C51单片机,A/D转换器采用TLC549为主要硬件,实现数字电压表的硬件电路与软件设计。
该系统的数字电压表电路简单,所用的元件较少,成本低,调节工作可实现自动化。
【关键词】数字单片机;数字电压表;A/D转换;模拟信号
1引言
数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。
目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。
与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
2系统硬件设计
硬件电路设计主要包括:
ATMEL89C51单片机系统,A/D转换电路,显示电路。
图2-1是数字电压表硬件电路原理图。
图2-1数字电压表硬件电路原理图
2.1ATMEL89C51单片机系统和显示电路
由于单片机体积小、重量轻、价格便宜,所以本系统采用ATMEL89C51单片机,其原理图如图1所示。
89C5l的P1、P3.0~P3-3端口作为四位LED数码管显示控制。
P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。
P0端口作TLC549的A/D转换数据读入用,P2端口用作TLC549的A/D转换控制。
ATMEL89C51的性能特点:
·4K字节可编程闪烁存储器
·寿命:
1000写/擦循环
·数据保留时间:
10年
·全静态工作:
0Hz-24MHz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2.2A/D转换电路
图2-2TLC549A/D转换原理图
D/A转换电路就是将数字信号转换成模拟信号的电路。
数据转换精度和转换速度是衡量D/A转换器的重要指标。
A/D转换由集成电路TLC549完成。
TLC549A/D转换电路如图2所示。
TLC549具有8路模拟信号输入端口,地址线(23~25脚)可决定对哪一路模拟信号进行A/D转换。
22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。
6脚为测试控制,当输入一个2s宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。
9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。
l0脚为0809的时钟输入端,利用单为0809的时钟输入端,利用单片机30引脚的六分频晶振频率再通过14024Z分频得到1MHz时钟。
3系统软件设计
图3-1主程序图图3-2A/D转换测量程序
3.1初始化程序
系统上电,初始化程序将70H~77H内存单元清0,P2口置0。
系统默认为循环显示8个通道的电压值,当进行一次测量后,将显示每一通道的A/D转换值,每个通道显示时间为1S。
70H~77H内存单元存放采样值,78H~7BH内存单元存放显示数据,依次为个位、十位、百位、通道标志位。
3.2A/D转换子程序
A/D转换子程序用来控制对0809/k路模拟输入电压的A/D转换,并将对应的数值存入70H~77H内存单元。
3.3显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示。
测量数据在显示时需转换成BCD码放在78H~7BH内存单元中,其中7BH存放通道标志数。
R3作为8路循环控制,R0用作显示数据指针。
程序代码如下:
/*******************************************************************/
*文件名:
tlc549.c
*主要功能:
应用IIC总线读取tlc549模数转换后的电压值
*时钟:
11.0592MHz
********************************************************************/
#include
#include
#include
#include<164.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
//sbitsda=P0^2;
//sbitscl=P0^3;
sbitTlc549_CLK=P2^5;
sbitTlc549_DATA=P2^6;
sbitTlc549_CS=P2^7;
voiddelay_us(uintx);
voidshift(unsignedcharfunction,intb);
voidled_display();
//ucharAD_convert();
intTLC549_OUTPUT();
/*constcharled_code[19]={0x11,0xd7,0x32,0x92,0xd4,//0,1,2,3,4
0x98,0x18,0xd3,0x10,0x90,//5,6,7,8,9
0x50,0x1c,0x39,0x16,0x38,0x78,//a,b,c,d,e,f
0xfe,0xef,0xff};//-dotdark
/*******************************************************************/
*名称:
voiddelay_us(uintx)
*功能:
延时
*输入:
NULL
*全局变量:
NULL
*返回值:
NULL
*调用:
NULL
*说明:
通过改参数X来改变延时的时间
********************************************************************/
voiddelay_us(uintx)
{
uinti;
for(i=0;i<=x;i++)
{
_nop_();
}
}
/********************************************************************
*名称:
voidshift(ucharn)
*功能:
把一个显示代码送入数码管显示
*输入:
NULL
*全局变量:
NULL
*返回值:
NULL
*调用:
NULL
*说明:
从最高位开始读入
********************************************************************/
/*
voidshift(ucharn)
{
ucharm,i;
m=led_code[n];
scl=0;
for(i=0;i<8;i++)
{
if(m&0x80)
{
sda=1;
}
else
{
sda=0;
}
scl=1;
scl=0;
m<<=1;
}
}
*/
/********************************************************************
*名称:
voidled_display(uintqian,ucharbai,ucharshi,ucharge)
*功能:
从tlc549读出一个字节数据
*输入:
NULL
*全局变量:
NULL
*返回值:
NULL
*调用:
voidshift(ucharn)
*说明:
把模数转换后得到的电压值调数码管显示
********************************************************************/
voidled_display()
{
ucharshi,ge;
uchardianya;
uintch;
volatilefloatSdata=0;
//dianya=AD_convert();
dianya=TLC549_OUTPUT();
Sdata=dianya*100/50.0;
ch=(uint)Sdata;
shi=ch/10%10;//取十位
ge=ch/100;//取个位
shift(0,18);
shift(0,18);
shift(0,18);
shift(0,18);
shift(0,18);
shift(0,18);
shift(0,shi);
shift(1,ge);
}
/********************************************************************
*名称:
ucharAD_convert()
*功能:
从tlc549读出一个字节数据(模数转换)
*输入:
NULL
*全局变量:
NULL
*返回值:
T1:
从tlc549中读出的数据
*调用:
NULL
*说明:
一个变量与数据口的数相或8次,就取走一个数据
********************************************************************/
ucharAD_convert()
{
ucharT1=0,i=0;
Tlc549_CLK=0;
Tlc549_CS=1;
delay_us
(2);
//delay(10);
Tlc549_CS=0;
for(i=0;i<8;i++)
{
T1=T1|Tlc549_DATA;
Tlc549_CLK=1;
delay_us
(2);
//delay(10);
Tlc549_CLK=0;
T1<<=1;
}
Tlc549_CS=1;
delay_us(3);
//delay(10);
returnT1;
}
/**************TLC初开始化****************************************/
voidTLC549_Init()
{
Tlc549_CS=1;
Tlc549_DATA=1;
Tlc549_CLK=0;
}
/**************TLC数据输出*****************************************/
intTLC549_OUTPUT()
{
unsignedinti,v=0;
Tlc549_CS=0;
Tlc549_CLK=0;
delay_us
(1);
for(i=8;i>0;i--)
{
v<<=1;
Tlc549_CLK=1;
delay_us
(1);
if(Tlc549_DATA)v|=0x01;
delay_us
(1);
Tlc549_CLK=0;
}
Tlc549_CS=1;
delay_us
(1);
return(v);
}
/********************************************************************
*名称:
voidmain()
*功能:
主函数
*输入:
NULL
*全局变量:
NULL
*返回值:
NULL
*调用:
NULL
********************************************************************/
intmain()
{
TLC549_Init();
//TLC549_OUTPUT();
while
(1)
{
led_display();
delay_us(10000);
}
return0;
/*while
(1)
{
shift(1,1);
shift(0,3);
shift(1,4);
shift(0,5);
delay_us(10000);*/
//}
}
4系统安装调试及结果
4.1系统安装调试
系统调试主要分三部分:
电路焊接,软件调试及程序下载。
4.1.1电路焊接
完成PCB板的制作后,在电路板上安装元件,并焊接。
经过将近三天的电路焊接,系统电路焊接基本完成。
4.1.2程序下载及程序下载
软件编程采用C语言和汇编语言设计,C语言在KeiluVision3开发环境和MicrosoftVisualC++开发环境下完成设计和编译。
在系统板以及各功能模块连接好后,将从PC机并口接上ISP下载线,给系统上电,并对系统板进行程序下载测试,51单片机支持ISP在线编程。
4.2系统调试结果
4.2.1调试所用工具
表1仪器设备使用说明
仪器设备名称
仪器设备型号
示波器
TDS2012型
万用表
DT9205A型
信号发生器
SPF40型
稳压电源
HH1733B2型
4.2.2记录测试数据
制作的作品按照课题设计要求,对各项指标进行测试,测量最大值+5V最小值0V,精确到0.1V。
5总结
通过这次课程设计的学习我学到了不少知识,并且进一步熟悉了做板的流程和仪器的使用,专业知识更加精深真的是受益匪浅啊。
制作过程也并不是一帆风顺的,我们也遇到了许多困难,但是我们通过上网查资料,图书馆内查阅书籍克服了这些困难并最终制作成功。
据调试和所测量数据,本系统采用ATMEL89C51单片机作为主控核心,按照设计要求,完成了数字电压表的设计。
该系统的数字电压表电路简单,所用的元件较少,成本低,设计简单,容易实现,适合于要求不同的电子技术应用领域。
6致谢
在本课题完成之际,我们的基础理论得到了进一步巩固和加深,同时在此基础上,我们掌握了仪器仪表的硬件设计原理和软件调试方法。
但这些都离不开我们身边的老师和同学的大力帮助与支持。
感谢彭宇林老师的帮助。
7注释
[J].北京:
北京航空航天大学出版社,2004.第172页.
8参考文献
[1]谢自美.点子线路设计·实验·测试(第三版)[J].西安:
华中科技大学大
学出版社,2006.
[2]谢自美.点子线路综合设计[J].北京:
华中科技大学出版社,2006.
Designofsimpledigitalvoltagemeter
RenkaiChenMiaoxin
[Abstract]:
Thisinmoderndetectiontechniques,theyoftenneedtousehigh-precisiondigitalvoltmeteron-sitetestingwilldetectthedataintothemicro-computersystems,completethecalculation,storage,controlanddisplayfunctions.ThefiguresinthisarticlevoltagemetercontrolsystemATMEL89C51microcontroller,A/DconvertersuseaTLC549asthemainhardware,thehardwareimplementationofdigitalvoltagemetercircuitandsoftwaredesign.Thesystem'sdigitalvoltmetercircuitissimple,usingfewercomponents,lowcost,regulationworkcanbeautomated.
[Keywords]:
Digitalmicrocomputer;digitalvoltmeter;A/Dconversion;analogsignal
附件
简易数字电压表实物图