数字电压表设计与制作报告.docx
《数字电压表设计与制作报告.docx》由会员分享,可在线阅读,更多相关《数字电压表设计与制作报告.docx(24页珍藏版)》请在冰豆网上搜索。
数字电压表设计与制作报告
江阴职业技术学院
项目设计报告
项目:
数字电压表设计与制作
摘要
本文介绍了一种基于单片机的简易数字电压表的设计。
该设计主要由三个模块组成:
A/D转换模块,数据处理模块及显示模块。
A/D转换主要由芯片ADC0832来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。
数据处理则由芯片AT89C51来完成,其负责把ADC0832传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0832芯片工作。
该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。
此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个四位一体的7段数码管显示出来。
关键词单片机;数字电压表;A/D转换;AT89C51;ADC0832.
Abstract
Thispaperwhichintroducesakindofsimpledigitalvoltmeterisbasedonsingle-chipmicrocontrollerdesign.Thecircuitofthevoltagemeterismainlyconsistedofthreemouldpieces:
A/Dconvertingmouldpiece,A/DconvertingismainlycompletedbytheADC0832,itconvertsthecollectedanalogdataintothedigitaldataandtransmitstheoutcometothemanifestationcontrollingmouldpiece.DataprocessingismainlycompletedbytheAT89C51chip,itprocessesthedataproducedbytheADC0832chipandgeneratestherightmanifestationcodes,alsotransmitsthecodestothemanifestationcontrollingmouldpiece.Also,theAT89C51chipcontrolstheADC0832chiptowork.
Thevoltmeterfeaturesinsimpleelectricalcircuit,loweruseofelements,lowcost,moreover,itsmeasuringprecisionandreliability.Thevoltmeteriscapableofmeasuringvoltageinputsfrom1routerangingfrom0to5volt,anddisplayingthemeasurementsthoughadigitalcodetubeof7piecesofLED.
KeywordsSingle-chipmicrocontroller;Digitalvoltmeter;A/Dconverter;AT89C51;ADC0832
第一章绪论
1.1课题的应用场合
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。
由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。
传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。
采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。
数字电压表是诸多数字化仪表的核心与基础[2]。
以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。
目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。
本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:
转换模块、数据处理模块及显示模块。
其中,A/D转换采用ADC0832对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。
1.2系统的功能和性能指标
数字电压表由A/D转换、数据处理及显示控制等组成,测量0~5.0V范围内的输入电压值,由四位一体的7段数码管显示,最大分辨率0.1V,误差±0.05V。
以AT89C51和ADC0832为核心内件。
ADC0832实现模数转换。
单片机AT89C51是整个系统的核心,实现输入端的分路选择(量程转换),模数转换后数据的处理及在数码管上数据的显示,提供ADC0832芯片的工作频率等功能。
第二章总体方案
2.1方案设计与选择
AT89C51具有如下特点:
40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器
AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89S5与AT89C51相比,前者的性能比后者高,所以本设计采用AT89C51芯片。
数模转换芯片选择:
ADC0809是采样分辨率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,转换时间为100μs。
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
由于ADC0832芯片的转换时间短,并且性能比较高,所以采用ADC0832作为数模转换芯片.
2.2系统的总体结构
数字电压表系统硬件设计框图
第三章硬件电路设计
3.1硬件电路框图
硬件电路设计由6个部分组成;A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、键盘以及测量电压输入电路。
数字电压表系统硬件设计框图
3.2主要器件选择与应用
数模转换芯片:
ADC0832是采样分辨率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,转换时间为100μs。
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
由于ADC0832芯片的转换时间短,并且性能比较高,所以采用ADC0832作为数模转换芯片。
3.3单片机小系统设计
晶振电路:
单片机内部每个部件要想协调一致地工作,必须在统一口令——时钟信号的控制下工作。
单片机工作所需要的时钟信号有两种产生方式,即内部时钟方式和外部时钟方式。
单片机内部有一个构成振荡器的增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输入端,这个放大器与作为反馈元件的片外晶振一起构成自激振荡器。
在该图中,电容C1和C2取22PF,晶体的振荡频率取12MHz,晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。
3.4键盘与显示电路设计
应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。
本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。
4-LED显示器引脚如图所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。
4位LED引脚
对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。
第四章软件设计
4.1软件组成框图
4.2软件流程图设计
4.3主要程序设计
#include
#include
typedefunsignedintuint;
typedefunsignedcharuchar;
/*****************端口定义**************/
sbitCS=P3^4;
sbitCLK=P3^5;//定义时钟信号
sbitDI=P3^6;
sbitDO=P3^6;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴段码表
voiddelay(uintxms)//延时函数
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(ucharadd,uchardat)
{
ucharaa=0x80;
P0=table[dat];//送段码
if(add==1)P0|=0x80;
P2=~(aa>>add);//送位码
delay
(1);
P2=0xff;
}
ucharAD0832(bitchannel)
{
ucharAdcByte0,AdcByte1,i;
CLK=0;_nop_();_nop_();
DI=1;_nop_();_nop_();
CS=0;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
DI=1;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
DI=channel;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;
DI=1;
for(i=0;i<8;i++)
{
AdcByte0<<=1;
CLK=1;
_nop_();_nop_();
CLK=0;
_nop_();
AdcByte0|=DO;
}
if(DO)
AdcByte1|=0x80;
for(i=0;i<7;i++)
{
AdcByte1>>=1;
CLK=1;
_nop_();_nop_();
CLK=0;
_nop_();
if(DO)AdcByte1|=0x80;
}
CS=1;
return(AdcByte0==AdcByte1?
AdcByte0:
0);
}
voidmain()
{
uintdate;
ucharAdcByte,bit0,bit1,bit2,bit3,i;
while
(1)
{
AdcByte=AD0832(0);
date=(AdcByte/255.0)*5*100;
bit0=date%10;
bit1=date%100/10;
bit2=date%1000/100;
bit3=date/1000;
for(i=0;i<100;i++)
{
display(3,bit0);
display(2,bit1);
display(1,bit2);
display(0,bit3);
}
}
}
第五章系统调试
5.1调试的方法与工具
用keil软件编写程序,编好程序后再进行编译,编译完成后检查程序有无错误,然后修改程序直到没有错为止,然后再与硬件联调,直到仿真出结果。
5.2Proteus仿真调试及效果
5.3软硬件联合调试
在系统上电开始测量前,要用万用表的电压档对被测电压进行估测,然后以此选择适当的量程,防止过大电压烧坏A/D转换器。
首先用万用表按照原理图逐步检查印刷板中各器件的电源及各引脚的连接是否正确,有否断路、短路或者虚焊,尤其是给电路供电的电源部分要重点检查,是否稳定,且稳定即可说明电源电路的设计基本达到要求。
如果电压没有达到要求,要及时排查给予解决,以免烧坏芯片和其他元器件。
软件调试时先进行单元测试,分别对各个代码模块进行测试,看其是否实现了规定功能,再把已经测试过的模块组合起来进行测试,一旦不能正确运行,要找出程序中的错误,确定大致的出错位置,研究有关部分的错误程序,找出错误原因,修改设计和代码,以排除错误。
在程序编写完成后,就可以利用仿真器进行初步调试,观察在计算机里能否通过编译与运行并达到设计的基本要求。
在基本符合的情况下,利用仿真器与工作正常的硬件连接进行仿真调试;或用编程器把程序烧写到芯片中,直接观察能否正常运行。
如果达不到设计要求或者不能正常运行,可以直接在程序中进行修改。
系统调试中遇到的问题及解决的方法:
1)在应用滤波电容的过程中,一开始是把电容串联在电路中,导致电路无法导通,而后我们短路电容,解决了问题。
2)电源指示灯上,一开始发现接上电源,指示灯不亮,经过仪器测量发现正负极接反,后重新焊接,问题解决。
3)由于源程序的多处错误,使得仿真无法通过,后经过单步调试,把存在的错误一一排除,通过了软件仿真。
4)在烧录芯片的过程中,由于选择烧录文件的错误及芯片自身问题(因多次烧录,无法再次烧录)使得烧录失败,后经过老师指导并更换了AT89C51芯片,解决了问题。
5.4系统运行
调试好之后,把程序固化到单片机芯片中,单机运行,数码管显示被测电压,调节电位器,仿真电压表与之变化,数码管显示数值与电压表数值相同,可以看出系统运行正常。
5.5调试心得
从开始设计数字电压表到完成这个项目的设计,我从中学到了许多关于调试方面的经验,这些经验都是从困难中累积起来的,每当调试遇到无法继续下去时,总感觉渺茫时,我总是告诉自己不能放弃,一定要坚持下来,慢慢理清思绪,找出出错的地方,不断调试,每当自己克服一重重困难,才发现自己进步了许多。
第六章展望与拓展
通过本次设计,我对单片机这门课程有了更进一步的了解。
无论是在其硬件连接方面还是在软件编程方面,都取得了新的收获。
本次实验采用了AT89S51单片机芯片,与以往我们所熟悉的C51芯片有许多不同之处,通过本次设计及查阅相关资料,我对其之间的区别有了一定的认识,在本设计报告的硬件介绍部分也对其作了详细的论述。
S51在C51的基础上增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。
单片机的应用如今已经在工业、电子等方方面面展现出它的优越性,利用单片机设计电路已经成一乐一种趋势,他与外围的简单电路加上优化程序就可以构建成任意的产品,使得本设计得以实现。
随着单片机的发展,他必将在未来显示出更大的活力。
致谢
由于是初次尝试设计电路,由于知识及经验的匮乏,难免遇到很多困难,如果没有老师的督促指导以及同学们的支持,很难顺利的完成此次设计。
从开始做这个项目到完成,都离不开老师、同学、朋友给以的帮助,在这里请接受我的谢意!
参考资料
[1]胡健.单片机原理及接口技术.北京:
机械工业出版社,2004年10月
[2]王毓银.数字电路逻辑设计.高等教育出版社,2005年12月
[3]于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月
[4]谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月
[5]李广弟.单片机基础.北京航空航天大学出版社,2007年5月
[6]姜志海,黄玉清等著.单片机原理及应用[M].北京:
电子工业出版社.2005年7月
[7]魏立峰.单片机原理及应用技术.北京大学出版社,2005年
[8]周润景.Protues在MCS-51&ARM7系统中的应用百例.第一版.北京:
电子工业出版社,2006年
[9]边春远等著.MCS-51单片机应用开发实用子程序[M].北京:
人民邮电出版社.2005年9月.
附录
附录Ⅰ系统电原理图
附录Ⅱ系统仿真效果图
附录Ⅲ样机实物图
附录Ⅳ软件流程图
数字式直流电压表主程序框图
A/D转换流程图
附录Ⅴ源程序清单
#include
#include
typedefunsignedintuint;
typedefunsignedcharuchar;
sbitCS=P3^4;
sbitCLK=P3^5;
sbitDI=P3^6;
sbitDO=P3^6;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(ucharadd,uchardat)
{
ucharaa=0x80;
P0=table[dat];
if(add==1)P0|=0x80;
P2=~(aa>>add);
delay
(1);
P2=0xff;
}
ucharAD0832(bitchannel)
{
ucharAdcByte0,AdcByte1,i;
CLK=0;_nop_();_nop_();
DI=1;_nop_();_nop_();
CS=0;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
DI=1;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
DI=channel;_nop_();_nop_();
CLK=1;_nop_();_nop_();
CLK=0;
DI=1;
for(i=0;i<8;i++)
{
AdcByte0<<=1;
CLK=1;
_nop_();_nop_();
CLK=0;
_nop_();
AdcByte0|=DO;
}
if(DO)
AdcByte1|=0x80;
for(i=0;i<7;i++)
{
AdcByte1>>=1;
CLK=1;
_nop_();_nop_();
CLK=0;
_nop_();
if(DO)AdcByte1|=0x80;
}
CS=1;
return(AdcByte0==AdcByte1?
AdcByte0:
0);
}
voidmain()
{
uintdate;
ucharAdcByte,bit0,bit1,bit2,bit3,i;
while
(1)
{
AdcByte=AD0832(0);
date=(AdcByte/255.0)*5*100;
bit0=date%10;
bit1=date%100/10;
bit2=date%1000/100;
bit3=date/1000;
for(i=0;i<100;i++)
{
display(3,bit0);
display(2,bit1);
display(1,bit2);
display(0,bit3);
}
}
}
THANKS
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考,如有侵权联系删除!