课题数字电压表的设计_第1页
课题数字电压表的设计_第2页
课题数字电压表的设计_第3页
课题数字电压表的设计_第4页
课题数字电压表的设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、等级:湖南工程学院应用技术学院课 程 设 计课程名称 单片机原理及应用 课题名称 数字电压表的设计 专 业 电气工程及其自动化班 级 电气1183 学 号 201113010307 姓 名 刘中华 指导教师 赵葵银 2014 年 5 月 23 日湖南工程学院应用技术学院课程设计任务书课程名称: 单片机原理及应用 题 目: 数字电压表的设计 专业班级: 电气1183 学生姓名: 刘中华 学号: 201113010307 指导老师: 赵葵银 审 批: 任务书下达日期 2014年 5 月12日设计完成日期 2014年 5月23日设计内容与设计要求设计内容:1)简易数字电压表可以测量051V的输入电压

2、值,经过A/D转换,经过单片机处理后,在LED数码管上显示。2)如测试端输入4.0V,则应显示4.0,测试精度为0.2V。设计要求:1)系统设计方案正确、合理;2)进行系统的硬件设计;3)完成必要元器件选择;4)完成应用程序设计与仿真调试;*5)进行应用程序的调试;主 要 设 计 条 件1、MCS-51单片机实验操作台1台;2、PC机及单片机调试软件;3、Proteus软件4、实验室调试说 明 书 格 式1. 封面2. 课程设计任务书3. 目录4. 系统总体方案设计5. 系统硬件设计6. 软件设计(包括流程图)7. 系统的安装调试说明8、 总结 9、参考文献10、附录11、课程设计成绩评分表。

3、 进 度 安 排第一周星期一、上午:布置课题任务,课题介绍及讲课。 下午:借阅有关资料,总体方案讨论。星期二、确定总体方案,学习与设计相关内容。星期三、各部分方案设计。星期四、各部分设计。星期五、设计及上机调试。第二周星期一:设计及上机调试。星期二:调试,中期检查。星期三:调试、写说明书。星期四-星期五上午:写说明书、完成电子版并打印成稿。星期五下午:答辩。参 考 文 献参考文献1、单片机原理与应用 王迎旭等编 机械工业出版社2、51系列单片机设计实例 楼然苗等编 北京航空航天大学出版社3、计算机硬件技术基础实验教程 黄勤等编 重庆大学出版社4、微型计算机接口技术及应用 刘乐善主编 华中科技大

4、学出版社5、单片微型计算机原理及接口技术陈光东等编 华中科技大学出版社目录第1章 引言7第2章设计总体方案72.1设计要求72.2 设计思路72.3设计方案8第3章硬件电路设计83.1 单片机系统83.2 A/D转换模块83.3 复位电路93.4 时钟电路设计103.5 LED显示器与单片机接口设计103.6总体电路设计11第4章 程序设计114.1程序设计总方案124.2系统子程序设计124.2.1 初始化程序124.2.2 A/D转换子程序124.2.3 显示子程序13第5章 仿真135.1软件调试135.2 显示结果14第6章 使用说明14第7章 心得体会15参考文献16附录A 程序清单

5、17附录B 原理图25第1章 引言在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。 传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能

6、力强,可扩展性强、集成方便,还可与PC实时通信。数字电压表是诸多数字化仪表的核心与基础。目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。其中,A/D转换采用PCF8591进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。第2章 设计总体方案2.1设计要求以MCS-51系列单片机为核心器件,组成简单的直流数字电压表。采用1路模拟量输入,能够测量

7、0-5V之间的直流电压值。电压显示用4位一体的LED数码管显示,能够显示两位小数。 用键盘实现复位、显示通道+、显示通道-、循环显示、单通道显示、停止等功能。2.2 设计思路据设计要求,选择AT89C51单片机为核心控制器件。A/D转换采用PCF8591实现,与单片机的接口为P1口。电压显示采用4位一体的LED数码管。2.3设计方案硬件电路设计由6个部分组成; A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路、按键控制电路。硬件电路设计框图如图2-1所示。测量电压输入 振荡电路 AT89C51 P1 P2 P2 P0 时钟电路 按键电路 复位电路

8、A/D转换电路显示系统PCF8591图2-1 数字电压表系统硬件设计框图第3章硬件电路设计3.1 单片机系统 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。3.2 A/D转换模块现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系

9、统的关键接口电路。 PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I²C总线上接入8个PCF8591器件,而无需额外的硬件。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由I²C总线的最大速率决定。PCF8591引脚AIN0AIN3:模拟信号输入端。 A0A3:引脚地址端。 VDD、VSS:电源端。 (2.56V) SDA、SCL:I2C 总线的数据线、 时钟线。 OSC:外部时钟输入端,内部

10、时钟 输出端。 EXT:内部、外部时钟选择线,使 用内部时钟时 EXT 接地。 AGND:模拟信号地。 3-1 A/D连接图 单片机与AD转换芯片PCF8591连接如图3-1所示。PCF8591遵循I²C协议,SCL、SDA分别为PCF8591的时钟线和数据线,需接10K上拉电阻,以使信号线保持高电平通过两者配合完成一次完整的I²C总线时序。图中正是通过单片机的P1.1和P1.2控制SCL和SDA总线的电平变化来控制AD芯片PCF8591的启动的。而RV1RV4则是AD芯片的模拟输入端,用来产生模拟信号。3.3 复位电路 单片机在启动运行时都需要复位,使CPU和系统中的其他

11、部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图3-2是51系列单片机统常用的上电复位和手动复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。 图3-2 复位电路3.4 时钟电路设计单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟

12、脉冲是单片机控制中的时序电路发出的。MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。 本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路只需要一个晶振和2个电容即可,如图3-3所示。图3-3 振荡电路电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统

13、中选择的是12MHz,因而时钟信号的震荡频率为12MHz。3.5 LED显示器与单片机接口设计为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图3-4所示。图3-4 LED与单片机接口间的设计3.6总体电路设计经过以上的设计过程,可设计出基于单片机的简易数字电压表硬件电路原理图如图3-9所示。 图3-9 简易数字电压表电路图此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分

14、压后由PCF8591的AIN0通道进入(由于使用的AIN0通道,所以A0,A1,A2均接低电平),经过模/数转换后,数据信号通过双线双向I2C总线以串行的方式进行传输,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外, 单片机的P1.1和P1.2控SCL和SDA总线的电平变化来控制AD芯片PCF8591的启动AD转换。第4章 程序设计4.1程序设计总方案根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个

15、系统软件的主程序,如图4-1所示。返回开始?开机初始化显示查键N启动通道转换读AD转换转换成工程量修改显示内容调显示Y 图4-1 数字电压表主程序框图4.2系统子程序设计4.2.1 初始化程序所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是给寄存器设置初始值,等待启动信号。4.2.2 A/D转换子程序A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将数值存入相应的内存单元,其转换流程图如图4-2所示。开始启动转换转换结束?输出转换结果数值转换显示结束NY 图4-2 A/D转换流程图4.2.3 显示子程序显示子程序采用动态

16、扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一味LED的显示时间为1ms。第5章 仿真5.1软件调试软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与Keil uvision2工具软件结合进行编程仿真调试。本次课程设计中就出现了许许多多的问题:1.不

17、能停止。我排查了各部分连接电路,发现是软件中那个中断程序出了问题。本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。5.2 显示结果图5-1复位图5-2 循环显示第6章 使用说明此数字电压表,共设有复位按键。仿真开始,按启动键即可开始测量显示,可通过变换单路/循环以及暂停继续按键进行测量。当需要重启时,只需按下复位键便可重新开始测量。按键如图6-1所示。 第7章 心得体会 为期2个星期的课程设计已经结束,在这几个星期的学习、设计过程中我感触颇深。使我对单片机的理论知识有了具体的认识。通过这次设计,

18、我的理论知识掌握得更扎实,动手能力明显提高。同时,通过网上搜索等多方面的查询资料,比如我们用的AT89S51芯片。通过本次课程设计我学到许多在书本上没有的知识,也认识到理论联系实践的重要。理论学得好,但如果只会纸上谈兵,一点用都没有。通过这次课程设计,我掌握了常用元件的识别和测试,通过对电路的分析,结合实际实验,并利用其它电路作为辅助,提出了一种制作数字电压表的有效方法,解决了在制作数字电压表时经常出现的数字显示不了,显示数字模糊的问题。以及如何提高电路的性能等等。在实验过程中,我们遇到了不少的问题。比如:通道选择、复位、停止功能缺失等。在老师和同学的帮助下,把问题一一解决,那种心情别提有多高

19、兴,很有成就感。同时,在设计中暴露出我们在理论学习中所存在的问题,有些理论知识还处于半只半解的状态,通过实验加深了我们对这些知识的理解。特别是在排查电路,程序问题时,使我们熟练掌握了一些处理电路故障程序的方法。虽然两周的课程设计很短,但是充分锻炼了我们的团队合作能力以及对知识点的巩固,也培养了我们独立思考和设计能力,树立了对知识点应用的信心最后用一句话来结束吧。“实践是检验真理的唯一标准”。另外通过本次课程设计让我对PROTUES和KEIL软件的使用有了进一步的了解,感觉收获不小。参考文献王迎旭.单片机原理与应用.2版.北京:机械工业出版社,2012赵晓安.MCS-51 单片机原理及应用.天津

20、:天津大学出版社,2001胡汉才.单片机原理及系统设计.北京:清华大学出版社,2002张刚毅,彭喜元.单片机原理与应用设计.北京:电子工业出版社,2008周向红.51单片机课程设计.武汉:华中科技大学出版社,2011郭天祥.51单片机C语言教程.北京:电子工业出版社,2011吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用.北京:清华大学出附录A 程序清单 /*- 名称:IIC协议 PCF8591ADDA转换 日期:2009.5 修改:无 内容:此程序通过IIC协议对DAAD芯片操作,读取电位器的电压,并输出模拟量,用LED亮度渐变指示-*/ #include<reg52.h> /

21、包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include <intrins.h> /包含NOP空指令函数_nop_(); #define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数据地址 sbit Sda=P12; /定义总线连接端口 sbit Scl=P11;sbit key1=P30; bit ADFlag; /定义AD采样标志位unsigned char code Datatab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/7段数共阴码管段码表data un

22、signed char Display8;/定义临时存放数码管数值/*- 延时程序-*/ void mDelay(unsigned char j) unsigned int i; for(;j>0;j-) for(i=0;i<125;i+) ; /*- 初始化定时器1-*/void Init_Timer1(void) TMOD |= 0x10; TH1=0xff; /* Init value */ TL1=0x00; /PT1=1; /* 优先级 */ EA=1; /* interupt enable */ ET1=1; /* enable timer1 interrupt */

23、TR1=1; /*- 启动IIC总线-*/ void Start(void) Sda=1; _nop_(); Scl=1; _nop_(); Sda=0; _nop_(); Scl=0; /*- 停止IIC总线-*/ void Stop(void) Sda=0; _nop_(); Scl=1; _nop_(); Sda=1; _nop_(); Scl=0; /*- 应答IIC总线-*/ void Ack(void) Sda=0;_nop_();Scl=1;_nop_();Scl=0;_nop_();/*- 非应答IIC总线-*/void NoAck(void) Sda=1; _nop_();

24、Scl=1; _nop_(); Scl=0; _nop_(); /*- 发送一个字节-*/ void Send(unsigned char Data) unsigned char BitCounter=8; unsigned char temp; do temp=Data; Scl=0; _nop_(); if(temp&0x80)=0x80) Sda=1; else Sda=0;Scl=1;temp=Data<<1;Data=temp;BitCounter-; while(BitCounter); Scl=0; /*- 读入一个字节并返回-*/ unsigned char

25、 Read(void) unsigned char temp=0; unsigned char temp1=0; unsigned char BitCounter=8; Sda=1; do Scl=0; _nop_(); Scl=1; _nop_(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) temp1=temp<<1;temp=temp1; BitCounter-; while(BitCounter);return(temp); /*- 写入DA数模转换值-*/ void DAC(unsi

26、gned char Data) Start(); Send(AddWr); /写入芯片地址 Ack(); Send(0x40); /写入控制位,使能DAC输出 Ack(); Send(Data); /写数据 Ack(); Stop(); /*- 读取AD模数转换的值,有返回值-*/ unsigned char ReadADC(unsigned char Chl) unsigned char Data;Start(); /写入芯片地址 Send(AddWr); Ack();Send(0x40|Chl);/写入选择的通道,本程序只用单端输入,差分部分需要自行添加 /Chl的值分别为0、1、2、3,

27、分别代表1-4通道 Ack(); Start(); Send(AddRd); /读入地址 Ack(); Data=Read(); /读数据 Scl=0; NoAck(); Stop(); return Data; /返回值 /*- 主程序-*/void main() /DA数模输出变量 unsigned char ADtemp; /定义中间变量 Init_Timer1(); while(1) if(ADFlag) /定时采集输入模拟量 ADFlag=0;ADtemp=ReadADC(0);Display0=Datatab(ReadADC(0)/50|0x80;/处理0通道电压显示Display1=Datatab(ReadADC(0)%50)/10;ADt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论