您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于PC通信的单片机数字电压表
基于PC智能数字电压表设计物理与电子工程学院电子信息科学与技术(应用技术)2011级李俊学号20110520164指导老师罗海军摘要:传统的数字电压表有自己的特点,它们适合在现场做手工测量,而要完成远程测量并对测量的数据做进一步处理,运用传统的数字电压表是无法完成的。为此,本文设计了基于PC通信的数字电压表,该表既可以完成现场数据的测量与显示,又可以通过串行通信将测量数据传递给PC,从而可借助PC的强大功能对测量数据做进一步处理。因此,这种类型的数字电压表无论在功能和实际应用中,都具有传统数字电压表无法比拟的优点,这使得它的开发和应用都具有良好的前景。关键词:数字电压表;A/D转换器;PC通信;单片机1实验系统方案介绍本次实验以单片机作为电路的核心部件,采用软件编程和硬件相结合的方式设计了一种量程可以自动切换且具有高清晰度显示的数字式直流电压表。其硬件电路简单,主要用软件编程的方式检测输入信号的大小来实现数字电压表的量程自动切换功能,在硬件电路上通过发光二极管来显示被测电压所选择的档位。输入的模拟电压通过A/D转换模块将其转换成数字电压,再通过软件编程的方式使其在LED数码显示器上显示出来,实现了数字电压表的数字显示功能。上位机串口通信利用PC机与AT89C51单片机之间的通信程序设计实现电压显示。并详述了在VC6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现电压显示。由单片机采集一个电压信号,将采集到的电压信号传送给PC机显示,PC机用VC6.0编写程序,单片机程序用C语言编写。整机电路包括:数据采集电路的单片机最小化设计、单片机与PC接口电路、单片机时钟电路、复位电路等。上位机采用AT89S51芯片,A/D转换采用ADC0809芯片。通过RS232串行口与PC进行通信,传送所测量的直流电压数据。本次试验——基于PC机串行通信的数字电压表设计,该系统由硬件和软件两部分构成,硬件主要包括数据采集电路、数据A/D转换电路、单片机与PC通信的接口电路;软件主要有单片机数据采集与显示程序、单片机与上位机通信程序、上位机数据处理程序。根据数据采集的工作原理,运用STC89C52RC单片机和ADC0809进行模/数转换,设计实现智能数字电压表,最后完成单片机与PC机的串行数据通信,传送并显示实时检测到的电压值。系统设计方案框图:图1系统框图2A/D转换电路介绍A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。ADC0809是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。图2A/D转换流程图2.1ADC0808的接口方法ADC0809的输出引脚(D0-D7)可直接与单片机的数据总线相连;A、B、C、三条引脚与地址线中的低三位相连,使8路输入端所对应的地址范围是:FFF0H-FFF7H。ADC0809工作时必须外接时钟,如果单片机的主振频率为6MHz,则可直接借用单片机的ALE信号作为ADC0809的时钟信号。当单片机不访问片外RAM时(即不使用MOVX系列指令时),ALE信号是时钟频率的六分频,在6MHz的晶振频率下,ALE的频率是1MHz。如果单片机采用了更高频率(如12MHz)的晶振,直接用ALE作为ADC0809的时钟就不恰当了,此时可以把ALE二分频之后再提供给ADC0809。ADC0809的输入或输出都是高电平有效,而MCS-51系列单片机上,一些引脚的输或输出却为低电平有效,所以当ADC0809与单片机相连接时,必须采用一些门电路进行电平转换。A/D转换结束信号EOC端通过“非门”与MCS-51单片机的INT1引脚相连,使每次A/D转换完毕就产生中断请求,MCS-51单片机收到中断请求后,可读取ADC0809的输出数据。3上位机的介绍3.1单片机与PC机通信原理MCS-51单片机有一个全双工的串行通讯口UART。利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。所以单片机和PC机之间可以方便地进行串口通讯。单片机串口有3条引线:TXD(发送数据)、RXD(接收数据)和GND(信号地)。因此在通信距离较短时可采用零MO·DEM方式,简单三连线结构。IBM—PC机有两个标准的RS232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平;为了PC机与MCS-51机之间能可靠地进行串行通信,需要用电平转换芯片,我们采用了MAXIM公司生产的专用芯片MAX232进行转换。电路如图所示。图5RS232通讯原理图3.2上位机编程方案选择本次实验采用VC6.0++来实现编程,上位机与单片机进行通信的程序编写可用VB、VC等软件。由于VB作为面向对象的编程工具不够完全,效率比VC低,提供的命令语言环境较弱,通过串口设备一次最多只能交换16B的数据,对较大数据量的传输存在很大的局限性,很难实现较为复杂的数据处理,VC6.0++是一种功能强大的面向对象的Windows编程开发平台。VC6.0的优点是界面简洁,占用资源少,操作方便。所以本设计采用VC作为串口编程工具。上位机采用VC++6.0实现可视化界面及与下位机的通信功能。Windows环境下的串口通信技术方案主要有两种,其一就是使用MSComm控件,此控件具有丰富的用于串口通信的属性及事件,提供了一系列标准通信命令的接口,用它可以创建全双工、事件驱动、高效实用的通信程序;另外一种途径就是采用API函数来直接实现与下位机的通信,但这种方法要涉及很多底层设置。打开VC++6.0,建立一个基于对话框的MFC应用程序,串口通信采用MSComm控件来实现。3.3单片机编程方案选择本次实验单片机的编程选择C语言编写,因为它简洁紧凑、灵活方便、运算符丰富、数据结构丰富、C是结构式语言、C语法限制不太严格,程序设计自由度大、C语言允许直接访问物理地址,可以直接对硬件进行操作、C语言程序生成代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低10へ20%、C语言适用范围大,可移植性好C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画它是数值计算的高级语言。所以我选用C语言来编写此程序。4总结本次试验主要是以AT89C51单片机为核心设计数字电压表。这个基于PC智能数字电压表的最大优点是电路简单,测量精度高,但其中也存在着些不足可以改进,比如本设计的精度不是太高,还可以改进。用C语言程序设计,对单片机、AD转换器、LED数码管都进行程序控制,需要注意的是,单片机对ADC0809通道选择的控制,以及送到LED显示前的设置。由于电压在进入电路时,有可能经过了放大(或衰减),所以在显示前须对即将显示的电压进行缩小(或扩大),就需要在C语言编程时进行除法器(或乘法器)的编写。AT89C51单片机与PC机的串行通信的实现的设计和内容,AT89C51是一种带4K字节闪烁可编程可擦除只读寄存器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,所以它的使用前景会是相当广泛与受欢迎。因此我们有必要来学习它与PC机的通信。本次试验测试得到的结果与理论值的确存在一定的误差,产生误差的原因有几个:①待测电压的脉冲波动及自做的电源不为5V。②在给A/D0809的参考电压也可能存在波动,参考电压的波动会使得电压精度的下降,这也是产生误差的原因;③人为的误差,在程序编写的时候,为了避免麻烦,对小数进行四舍五入的计算,这样对于数据小些就会产生较大的误差。通过本次实验,让我深刻的了解到单片机的广泛应用以及学好单片机的必要性。单片机应用的意义不仅在于它的广阔范围及所带来的经济效益。更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。由于使用的是高效单片机作为核心的测量系统,以及灵敏度和精度较高的A/D转换器,使本直流电压电流表具有精度高、灵敏度强、性能可靠、电路简单、成本低的特点,加上经过优化的程序,使其有很高的智能化水平。参考文献[1]杜洋.A/D转换芯片ADC0832的应用[J].中国仪器仪表,2005,(07):41-42.[2]李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.[3]常铁原,陈文军.多路数据采集系统的设计[J].电子技术应用,2008,(6):21-22.[4]崔玮.Protel99SE电路原理图与电路板设计教程[M].北京:海洋出版社,2005.[5]朱晓荣,周东辉.分布式数据采集与控制系统[J].电子产品世界,2003,(8):34-36.[6]徐顺刚.基于单片机的高速数据采集系统[J].重庆师范学院学报,2003,(03):2-4.
本文标题:基于PC通信的单片机数字电压表
链接地址:https://www.777doc.com/doc-2571221 .html