0 引言
近年来,随着制造技术的发展,单片机的价格越来越低,性能却不断提升,因而其应用范围也越来越广。然而在开发基于单片机的应用系统时,传统方法一般都需要大量的硬件设备,这些设备极易损坏而且携带不方便。为此,本文基于AT89C51数据采集系统详细说明了如何利用Pro-teus和两款串口仿真软件来进行单片机程序及外围电路的仿真设计。采用该方法可以大大简化硬件电路测试和系统调试过程,对单片机系统开发具有指导意义。本文介绍的基于AT89C5l单片机的数据采集系统能实现16路信号输入,每一路都是0~10 mV的信号,每秒钟采集一遍,从而将数据传给上位PC计算机。
1 硬件设计
1.1 主控芯片
AT89C51是一种带有4 KB闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,可为很多嵌入式控制系统提供灵活且价廉的方案。所以,本设计采用ATMEL公司的AT89C51作为程序的主控芯片。
AT89C51数据总线是由P0口提供的,P0口本身能以多种方式提供数据总线和地址总线。当ALE输出信号为高电平时,P0将输出的数据锁入总线驱动器中作为地址的低8位,然后和P2送出来的高8位地址一起组成一个完整的16位地址,以寻址到外部的64KB的地址空间。AT89C51的地址总线比较简单(只有3个:RD、WR、PSEN),其中RD是用来读取外部数据内存的控制线,WR是用来写数据到外部数据内存的控制线,PSEN是用来存取外部程序内存的读取控制线。
由于P0口是数据和地址分时复用口,故要进行地址锁存,本设计使用74HC573作为锁存器。
1.2 系统硬件电路
本系统的硬件电路原理如图1所示。因为ADC0809的地址选择端A、B、C都接地,所以ADC0809的数据采集通道只有IN0被选通。16路模拟信号连接到多路选择模拟开关HCC4067后,即可通过地址选择端A、B、C、D进行选择,每一次选通一路,选通的通道经IO COM X和ADC0809的IN0相连,以进行A/D转换。P2.7(地址总线最高位A 15)可作为A/D转换的启动开关,P2.7为低电平有效。在启动A/D转换时,可由写信号WR和P2.7控制ADC0809的地址锁存和转换启动。而在读取转换结果时,则由读信号RD和P2.7控制ADC0809的OE信号。若令P2.7为0,74HC573的A、B、C、D即可给出被选择的模拟通道的地址,此时若ABCD=0000,则16路信号的100被选通,并将其数据送到ADC0809的IN0中,地址是7FF0H;若ABCD:1111,地址为7FFFH,则指向IO15。所以,16路信号依次对应的地址为7FFOH~7FFFH。转换完成后,数据将保存到一数组中,直到当上位PC机通过串行口发信号时,AT89C51通过检测地址是否和本机地址相符来作出动作。如果地址相符,则发送A/D转换结果,如不相符,则继续等待。
1.3 信号选通与调理
本系统要求有16路模拟信号输入,而且必须将这些信号互相隔离,然后才能对这些信号逐一选通后进入A/D转换。为此,本系统选用了16选1多路模拟开关HCC4067。
一般传感器的输出信号都比较微弱,要将该微弱信号转换成有用的信号以便于后期使用,就要加入信号调理电路,其作用是进行信号放大和去除干扰等。本设计中的信号输入每路都是0~10mV.但ADC0809的输入要求是0~5 V,因此选用运算放大器OP07来进行信号放大。OP07是一种精密运算放大器,它使用双极性电源供电,精度较高,放大倍数为500,可把0~10 mV信号放大到0~5 V。使用OP07的信号调理电路如图2所示。
1.4 A/D采样电路
ADC0809是美国NS公司生产的CMOS组件,是一种8路输入单片模数转换器件,采用逐位逼近式A/D转换原理,它的输出输人接口全部为TTL电平,数据输出口线为三态,可以直接接到微机系统总线上,而无需另加I/O接口芯片。
由于本设计中使用16选1模拟开关来进行信号的选择,因此,ADC0809的信号选择功能就不使用了,设计时把ADC0809的地址选择端A、B、C都接地,即ABC=000,这样,选通通道始终是IN0。将EOC通过非门连接到AT89C51的INT0脚,可通过查询方式来检测转换是否完成。
由于ADC0809的典型工作频率640 kHz不太容易得到,所以通常使用相近频率且容易获得的信号进行替代。本设计中,单片机的晶振频率12MHz,ALE信号输出为晶振频率的六分之一(即2MHz、),可将该2 MHz经过74HC74四分频后得到500 kHz信号来给ADC0809使用。
1.5 串行口控制
AT89C51内部有一个可编程的全双工串行通信接口,该口能同时进行串行发送和接收,以便通过RXD引脚(串行数据接收端)和TXD引脚(串行数据发送端)与外界进行通信。AT89C51串行口有四种工作方式,本设计中,AT89C51串行口工作于方式3。串口方式3的波特率是可变的,它可由定时器T1的溢出率来控制。通过计算可以得到T1的装载初值为0xfd,波特率为9600bps。
RS232是用正负电压来表示逻辑状态的,它与TTL以高低电平来表示逻辑状态的规定不同。因此,为了能够同计算机接口或与终端的TTL器件连接,必须在RS232与TTL电路之间进行电平和逻辑关系的变换。目前广泛使用的集成电路转换器件是MAX232芯片,它可完成TTL到EIA的双向电平转换。MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器,可在单5V电源供电时提供EIA/TIA-232-E电平。每个接收器均可将EIA/TIA-232-E电平转换为5 V TTL/CMOS电平。这些接收器具有1.3 V的门限值及0.5V的典型迟滞,而且可以接收±30 V的输入。利用MAX232芯片连接单片机和PC的具体电路如图3所示。
由以上器件分析可知该系统所用到的电源电压总共有两种,其中运放OP07使用±12 V,其它芯片使用+5 V电压。
2 实验仿真
2.1 Keil C51软件的使用
Keil C51软件是众多单片机应用开发的优秀软件之一。本设计就是在Keil C51环境中编译数据采集程序的。本采集系统的程序主要分成三部分:主程序、A/D转换程序和串行通信程序。图4所示是其软件流程图。其中主程序是总的控制程序,主要实现各单元初始化、控制采样和中断等:A/D转换程序主要完成采样启动、数据保存等功能;串行通信程序则用来在有上位PC通过串行口发送数据到单片机时引发中断响应,也可通过PC机通信地址和本单片机地址是否相符来判断PC机是否和本单片机通信,如果地址相符,则发送A/D采样的结果给上位机,如果不相符,则跳出中断。串行中断和A/D转换部分的程序代码如下:
程序编写完成后,为了便于和proteus联合仿真,还应当在工程目录下生成一个.hex文件。
2.2 proteus仿真
一般情况下,个人配备单片机实验开发系统的成本较高,很多人无法承受。而且一般单片机的实验箱都是成品,学习者很难参与到其中的细节设计中去,动手能力也难以得到训练与提高。Proteus的出现恰好解决了这个矛盾。利用proteus可以随时搭建一个单片机应用系统,并对其进行仿真。proteus仿真软件包含两个应用程序,其中proteus_isis主要用于电路原理图的仿真,另外一个就是proteus_ares,用于直接将proteus_isis的仿真原理图生成pcb。本任务只涉及仿真,所以只用到proteus_isis。操作时,首先应建立一个新的工程文件,然后按照硬件原理图绘制仿真电路。Proteus的仿真电路设计如图7所示。
2.3 串口通信仿真
本设计仿真可在一个PC机上完成,但要用到串口仿真软件。虚拟串口工具VSPD XP就是一个虚拟串口软件,可模拟物理串口,而且使用比较简单。通信时,只要COM3发送数据,COM4就会收到,而COM4发送数据,COM3也会收到。
串口调试软件有很多种,还有串口调试助手等。本设计选用ComMonitor V2.0作为串口调试软件。
虚拟串口工具VSPD XP中COM3和COM4是一对虚拟串口,可以互相通信。本设计把proteus设置为COM3,把ComMonitor设置为COM4,然后在两者之间进行数据传输。对ComMonitor设置的方法如下:
(1)在左上角设置串口号和波特率,并打开串口;
(2)接收数据控制区设置的是十六进制显示,自动清空;
(3)发送区有三个,都选择为十六进制显示,分别写入"50", "1 2"和"45",其中"50"是本设计中单片机系统的地址,"12"和"45"是随意的两个数据(做测试用)。
2.4仿真结果分析
在proteus中点击界面左下角的仿真运行按钮使系统开始工作,然后在ComMonitor中依次发送三个发送区的预设数值,之后便可以看到运行结果:
(1)发送"50"时,由于和单片机地址相符合,根据程序设定,把A/D采样结果通过串行口发送给了主机,即COM4端。
(2')发送"12"和"45"时,单片机接收也同上面一样,并分别显示。
(3)三次发送数据,COM分别收到不同的数据。
实际上,在发送"12"和"45"时,单片机应该不送回数据,但为了仿真结果清晰,本程序中设置了收到除"50"以外的 数据回送功能,以便把收到的数据再发回去,这样,COM4就会依次收到"12"和"45"。
3 结束语
本文从工程角度出发,详细介绍了基于AT89C51单片机的数据采集系统所需的硬件电路配置以及相关的程序设计。同时用基于Proteus和Keil接口的单片机外围硬件电路构成了一个实用的数据采集系统。所得出的仿真结果完整地展示了一个单片机系统新的开发思路。