电子系统设计报告.docx
- 文档编号:14002076
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:23
- 大小:493.67KB
电子系统设计报告.docx
《电子系统设计报告.docx》由会员分享,可在线阅读,更多相关《电子系统设计报告.docx(23页珍藏版)》请在冰点文库上搜索。
电子系统设计报告
电子系统设计报告
设计题目:
基于单片机的简易电压表设计
指导老师:
/////////
专业班级:
/////////
报告人姓名:
///////////(签名)学号:
//////////
信息工程学院通信工程教研室
摘要
数字电压表简称DVM,它是采用了数字化测量技术,把连续模拟量(直流输入电压)转换成不连续,离散的数字形式加以现实的仪表。
传统的指针是电压表功能单一,精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高,抗干扰能力强,可扩展性强,集成方便,不可与PC进行实时通信。
目前由各种单片机A/D转换器构成的数字电压表,已被广泛的应用为电子及其电工的测量,工业自动化仪表,自动测试系统等智能化测量领域,显示出强大的生命力。
数字电压表是诸多数字化仪表的核心与基础,电压表的数字化是将连续的模拟量如直流电压转换成不连续的离散的数字形式,并加以显示,这有别于传统的指针加刻度盘进行读数的方法,避免了读数的视差和视觉的疲劳,目前数字电压表的核心部件是A/D转换器,转换器的精度很大程度上影响着数字电压表的准确度。
本设计主要分为两部分:
软件仿真原理图及软件程序。
而软件仿真又大体可分为单片机小系统电路、A/D转换电路、LCD显示电路,各部分电路的设计及原理将会在软件仿真设计部分详细介绍;程序的设计使用C语言编程,利用keil软件对其编译,详细的设计算法将会在程序设计部分详细介绍。
关键字:
数字电压表转换A/D转换器
7.3AD转换程序……………………………………………………………………………..16
第一章绪论
在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。
而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。
数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。
由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。
传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。
采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。
数字电压表是诸多数字化仪表的核心与基础[2]。
以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。
目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。
最近的几十年来,随着半导体技术、集成电路(IC)和微处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型。
数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC化),另一方面,精度也从0.01%-0.005%。
第二章设计准备知识
2.1设计目的
基于51单片机,编写实验程序,使用LCD液晶显示所要测试模拟电压的数字电压值,使用软件仿真实现实验结果。
掌握模数转换器件ADC0804的应用原理,学习液晶显示原理。
2.2设计要求或内容
a)模数转换器件选用ADC0804
b)可以测量0—5V的电压值,精度为0.02V
c)须有显示
d)此题可用proteus仿真实现
2.3设计软件及材料
2.3.1单片机软件开发工具keil介绍
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点是,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
2.3.2仿真软件protues介绍
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
2.3.3ADC0804介绍
ADC0804是属于连续渐进式(SuccessiveApproximationMethod)的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。
以输出8位的ADC0804动作来说明“连续渐进式A/D转换器”的转换原理,动作步骤如下表示(原则上先从左侧最高位寻找起)。
2.3.4液晶显示器
或称LCD(LiquidCrystalDisplay),为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。
液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。
它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。
第三章整体设计过程
3.1设计思路
数字电压表的设计即将连续的模拟电压信号经过A/D转换器转换成二进制数值,再经由单片机软件编程转换成十进制数值并通过显示屏显示。
按系统实现要求,决定控制系统采用AT89C51单片机,A/D转换由于仿真软件里的ADC0804元件有问题,这里用ADC0808代替,它和ADC0804区别很小。
采用ADC0808。
数字电压表系统整体框图如下图3.1所示。
图3.1整体框图
系统通过软件设置单片机的内部定时器T0产生中断信号。
通过片选选择8路通道中的一路,将该路电压送入ADC0808的EOC端口产生高电平,同时将ADC0808的OE端口置为高电平,单片机将转换后结果存到片内RAM。
系统调出转换显示程序,将转换为二进制的数据在转换成十进制数并输出到LCD显示电路,将相应电压显示出来。
原理图如图3.2
3.2模块分析
3.2.1AT89C51单片机
接口分配电路设计如右3.3图所示:
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,在这里用到了P3.3/INT1(外部中断1)、P3.6/WR(外部数据存储器写选通)、P3.7/RD(外部数据存储器读选通)。
3.2.2A/D转换
图3.4A/D转换电路
接口分配电路设计如3.4所示:
ØIN0~IN7为8路模拟量输入端,这里只接一路电压信号,其输入信号是由直流电源及可调电阻提供。
ØOUT1~OUT8为8位二进制数字量输出端,其另一端连接到AT89C51单片机进行数值转换。
ØADDA、ADDB、ADDC为3位片选地址输入线,用于选通8路模拟输入中的一路。
ØALE为地址锁存允许信号,由单片机P3.6口写信号与P2.0口相或取反输入,高电平有效。
ØSTART为A/D转换启动脉冲输入端,由单片机P3.6口写信号与P2.0口相或取反输入一个正脉冲使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
ØEOC为A/D转换结束信号,当A/D转换结束时,此端输出一个高电平取反给P3.3口(转换期间一直为低电平)。
ØOE为数据输出允许信号,高电平有效。
当A/D转换结束时,此端由单片机P3.7读信号与P2.0口相或后取反输入一个高电平,才能打开输出三态门,输出数字量。
图3.5显示电路
3.2.3显示电路
接口分配设计如3.5图所示:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
由单片机P2.1口控制
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
由单片机P2.2口控制E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
由单片机P2.3口控制D0~D7为8位双向数据线。
由单片机P0口输入,经过阻值为1KΏ的上拉电阻连接。
3.3程序设计
3.3.1程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如下图所示。
图3.6数字式直流电压表主程序框图
3.3.2系统子程序设计
✓初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。
✓A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元。
✓显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。
3.4软件调试
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。
Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。
Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与uVisions3IDE工具软件结合进行编程仿真调试[8]。
本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。
第四章显示结果及误差分析
4.1显示结果
1.当IN0口输入电压值为5V时,显示结果如图所示,测量误差为0V。
图4.1输入电压为5V时,LCD的显示结果
2.当IN0输入电压值为3.50V时,显示结果如图所示。
测量误差为0V。
图4.2输入电压为3.50V时,LCD的显示结果
3.当IN0口输入电压值为1.50V时,显示结果如图16。
测量误差为0.01V。
图4.3输入电压为1.50V时,LCD的显示结果
图4.4输入电压为0V时,LCD的显示结果
4.2误差分析
通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表4所示:
表4.5简易数字电压表与“标准”数字电压表对比测试表
标准电压值/V
简易电压表测量值/V
绝对误差/V
0.00
0.00
0.00
0.50
0.51
0.01
1.00
1.00
0.00
1.50
1.51
0.01
2.00
2.00
0.00
2.50
2.50
0.00
3.00
3.00
0.00
3.50
3.49
0.01
4.00
4.00
0.00
4.99
5.00
0.01
由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。
这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。
从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0808的基准电压来解决。
因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。
当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
第五章出现的问题及解决
5.1问题:
刚开始时,显示利用的是LED数码管显示,但是由于题目要求的误差比较小,因此选用了LCD液晶显示。
LED显示器与单片机接口设计:
由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作。
如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。
为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图5.1所示。
5.2改进
本次实验采用的是LCD液晶显示,由于其有如下优点:
LCD(LiquidCrystalDisplay)液晶显示器使用了目前最新的全彩显示技术,而且原理简单易懂。
基本上,整个液晶显示技术的概念是利用液晶的物理特性:
通电时导通,排列变得有秩序,使光线容易通过;不通电时排列混乱,阻止光线通过。
让液晶如闸门般的阻隔或让光线穿过。
就技术面而言,液晶面板包含了两片相当精致的无钠玻璃素材,称为Substrates,中间夹着一层液晶。
当光束通过这层液晶时,液晶本身会排排站立或扭转呈不规则状,因而阻隔或使光束顺利通过。
较之CRT显示器来说,LCD克服了CRT体积庞大、耗电和闪烁的缺点,但也同时带来了造价过高、视角不广以及彩色显示不理想等问题。
但是从技术上来说,液晶显示器的优势依然很明显,并且具体表现以下几个方面上:
1.体积更小,重量更轻。
2.相对显示面积更大。
3.零辐射,无闪烁。
4.功耗小,抗干扰能力强。
5.画面质量更高。
6.使用功能更为智能化。
第六章设计总结
本学期的电子系统设计从实验到论文,涵盖了大学这几年学习的很多课程。
在大二学习模拟电子和数字电子技术基础时,不知道它们是用来干什么的。
特别是模电,模电比数电难度大,而且用途也没有数电那么明显。
(曾在数电实验中做过跑马灯等实验)。
学了C语言和汇编也觉得是无用武之地,直到后来学习了单片机和EDA才知道它们的用处。
KeilC51是51系列兼容单片机C语言软件开发系统,对它的使用可以类比以前学过的VC软件和VHDL软件,学起来也比较容易,也切身感受到了它强大的功能。
通过它生成的HEX文件,可以用在很多仿真软件上,实现仿真。
Protues软件是EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
在实验室经常缺少一些具有完整功能的硬件设备,因此,在做完要求的项目外可以用该软件画一些原理图,并通过编写程序实现其功能。
通过一学期的电子系统设计设计课程的学习与最后论文的完成,为后来的电子设计起了很大作用。
这虽然是一个数字电压表的设计但是实际上就是一个数据采集的程序设计,只不过这里数据采集的是模拟电压罢了。
在Proteus软件部分的设计中也让我感受良多。
以前做的单片机的设计都只是写写程序,下载到单片机上运行,都只是编程方面的工作,很少涉及选择单片机试验台上已有芯片以外的芯片,更不用说芯片的一些管脚作用。
就像A/D转换器在Proteus中仿真软件ADC0804有问题所以用ADC0808代替。
而且ADC0808是单极性,输入电压范围为0~+5V,正好满足我们课题要求。
在局部电路图中遇到很多问题,通过查阅大量资料以及老师和同学的帮助讲解才逐渐懂得如何应用。
如在Proteus软件中仿真选用了最常用的直流电压电源和可调电阻组成0~+5V的模拟电压。
这种方法是平时很少注意到的基础性知识运用,在这次的课程设计中让我又有了新的收获。
基于单片机的数字电压表使用性强、结构简单、成本低、外接元件少。
在实际应用工作应能好,测量电压准确,精度高。
系统功能、指标达到了课题的预期要求、系统在硬件设计上充分考虑了可扩展性,经过一定的改造,可以增加功能。
本文设计主要实现了简易数字电压表测量一路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。
总之这次电路的设计和仿真,基本上达到了设计的功能要求。
在以后的实践中,我将继续努力学习电路设计方面的理论知识,并理论联系实际,争取在电路设计方面能有所提升。
第七章附件:
(程序)
7.1主程序
//************************头文件及宏定义***************
#include"includes.h"
#defineTIME0H0x3C
#defineTIME0L0xB0
unsignedcharClock=0;//定时器0中断计数
bita_DATransform=0;
//<<<<<<<<<<<<<<<<<<<把电压显示在LCD上>>>>>>>>>>>>>>>>>>>
voidvShowVoltage(unsignedintuiNumber)
{
unsignedcharucaNumber[3],ucCount;
if(uiNumber>999)
uiNumber=999;
//把计算数字的每个位存入数组
ucaNumber[0]=uiNumber/100;
ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;
ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
for(ucCount=0;ucCount<3;ucCount++)
{
vShowOneChar(ucaNumber[ucCount]+48);//从首位到末位逐一输出
if(ucCount==0)
vShowOneChar('.');
}
}
//*********************************主函数*******************************
voidmain()
{
//设置定时器0
TMOD=0x01;//定时器0,模式1。
TH0=TIME0H;
TL0=TIME0L;
TR0=1;//启动定时器。
ET0=1;//开定时器中断。
EA=1;//开总中断
vdInitialize();
Wrmingling(0x84);//写入显示起始地址(第二行第一个位置)
vShowChar("Voltage:
");
Wrmingling(0xC9);
vShowChar("(V)");
while
(1)
{
if(a_DATransform==1)
{
a_DATransform=0;
Wrmingling(0xC4);
vShowVoltage(uiADTransform());
}
}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>>>>>
voidTime0()interrupt1
{
if(Clock==0)
{
Clock=5;
a_DATransform=1;
}
else
Clock--;
TH0=TIME0H;//恢复定时器0。
TL0=TIME0L;
}
7.2SMC1602
//****************************SMC1602驱动程序******************
#include"SMC1602.h"//头文件及宏定义
//**************************把1个----命令-----写入LCD**********
voidWrmingling(unsignedcharucCommand)
{
myDelay();//先延时,延时子程序见后面。
LCDE=1;//把LCD改为写入--命令--状态。
LCDRS=0;
LCDRW=0;
LCDPORT=ucCommand;//输出命令。
LCDE=0;//最后执行命令。
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把1个---数据----写入LCD>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<过程同写入命令相似
voidWrData(unsignedcharucData)
{
myDelay();//先延时。
LCDE=1;//然后把LCD改为写入--数据--状态。
LCDRS=1;
LCDRW=0;
LCDPORT=ucData;//再输出数据。
LCDE=0;//最后显示数据。
}
voidvShowOneChar(unsignedcharucChar)
{
switch(ucChar)
{
case'':
WrData(0x20);break;
case'!
':
WrData(0x21);break;
case'"':
WrData(0x22);break;
case'#':
WrData(0x23);break;
case'$':
WrData(0x24);break;
case'%':
WrData(0x25);break;
case'&':
WrData(0x26);break;
case'>':
WrData(0x27);break;
case'(':
WrData(0x28);break;
case')':
WrData(0x29);break;
case'*':
WrData(0x20);break;
case'+':
WrData(0x2A);break;
case'-':
WrData(0x2D);break;
case'/':
WrData(0x2F);break;
case'=':
WrData(0x3D);break;
case'<':
WrData(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 设计 报告