当前位置:文档之家› 毕业论文基于STC单片机虚拟简易示波器的设计

毕业论文基于STC单片机虚拟简易示波器的设计

题目:基于STC单片机虚拟简易示波器的设计目录1.实验目的及意义 (1)2. 试验内容及方案论证 (1)3.系统工作原理 (2)4.硬件电路设计 (2)5.系统软件设计 (3)5.1下位机设计 (3)5.2 上位机设计 (6)6.系统调试 (8)6.1硬件调试 (8)6.2 软件调试 (8)6.3 软硬联调 (9)7.实验结果与误差分析 (9)8.实验小结及体会 ........................................................................ 错误!未定义书签。

参考文献: (11)1.实验目的及意义(1)学会利用AT89C5X系列单片机控制AD7862实现模拟的电压的采集;(2)学会利用串口与PC机进行通信将测量数据发送给PC机,在PC机上利用Visual C++ 6.0编写上位机界面,并显示数据与波形;(3)通过应用Altium Designer 6软件掌握电路板的原理图绘制及pcb板的生成;(4)学会利用Keil uVision4软件编写并调试单片机的下位机程序,利用Keil uVision4与wave6000软件结合,对硬件电路采集来的数据进行分析。

2. 试验内容及方案论证在实际应用中,经常会遇到一些突发信号,需要对其进行高速采集,这种情况下采用高速的A/D自然成为首选。

AD7862是AD公司推出的一个高速,低功耗,双12位的A/D转换,单+5V供电,功率为60mW。

它包含两个4us的延时的ADC,两个锁存器,一个内部的+2.5V参考电压和一个高速并行输出端口。

有四个模拟输入通道,分为两组,由A0选择。

每一组通道有两个输入(VA1 & VA2 or VB1 & VB2),它们能同时的被采样和转化,保存相对的信号信息。

它可以接受+10v的输入电压范围(AD7862-10),+2.5(AD7862-3)和0-2.5v(AD7862-2)。

对模拟电压输入,具有过电保护功能,相对地,允许输入电压到达+17v,+7v,+7v,而不会造成损害,本实验选用AD7862-10。

其具有以下主要特点:1、4通道模拟输入,2路同时转换(内置2个可同时工作的12位集成AD 转换器);2、4us转换时间,250ksps采样速率;3、可选模拟量输入±10V(AD7862-10);4、高速12位并行总线输出;5、内部提供+2.5V参考电压或者由外部提供参考电压;;6、单一电源工作。

本实验采用的微处理器是STC89C52RC单片机。

STC89C52RC单片机使用方便,它与AT89S52单片机具有相同的内核,内部有256 Bytes片内RAM、8K Flash ROM,支持串口下载,易于在线编程调试,故采用这种单片机来做处理器。

由于A/D的输出位数是12位,单片机的寄存器是8位的,所以要分成两次才能读得A/D转换的结果。

本设计中,只需将单片机的两个IO口(P2、P0)分别与AD7862的DB0-DB11相连,即可完成数据采集基本硬件设计。

本实验采用串口(RS232)将数据发送给PC机,波特率为9600、无校验;用VC++6.0编写相应的界面进行控制与显示。

最终利用上位机对采集的数据进行处理,画出模拟信号的波形,并显示模拟信号的电压值、最大值、最小值和峰峰值等。

3.系统工作原理系统由模拟信号输入、电源模块、AD采样模块、STC单片机控制模块、串口通信模块、计算机处理与显示模块组成。

电源模块提供总个系统工作的电压,保证系统正常工作。

STC单片机控制AD采样电压值,并将电压值通过串口传送给上位机,上位机通过VC程序对数据进行处理和显示。

上位机通过串口发送不同的标志位给下位机,控制下位机在不同的采样率下对模拟电压值进行采样。

图1 数据采集系统结构框图4.硬件电路设计1、串口进行通信模块:单片机串口为TTL电平,PC机串口为232电平,通过MAX232与单片机和AD芯片连接,实现电平转换和下位机和上位机的通信。

图2 RS232电平与TTL电平转换电路2、AD模块设计如下。

为了使得单片机能够更有效地控制AD7852工作,在连线的时候尽可能多地把AD7862的控制端与单片机的I/O相连接,以便供以后升级使用。

DB0-DB11是A/D转换后的数字量输出端口,它们分别与单片机的P1口P1.0-P1.3和P2和相连接,以便单片机把数字量读走。

CONVST是AD7862转换开始触发端口,与单片机的P0.0连接,BUSY、RD和CS分别与P0.1、P0.2和P0.3相连,VA1和VA2,VB1和VB2分别是模拟电压信号的四个输入通道,下图中将A0接地,选择VA0或VA1。

图3 AD7862硬件设计电路图3、单片机控制模块电路图如图所示,单片机的控制AD采样,要保证电容和晶振振荡器给单片机提供合适的工作频率,此实验采用11.0592M晶振。

图4 STC89C52硬件设计电路图5.系统软件设计5.1下位机设计下位机主要处理三方面的工作:一、是控制AD7862采集VA1端得模拟电压信号,得到数字量,并保存到单片机内部的RAM单元;二、是是通过定时器0的方式2定不同的采样率,得出所采波形的采样周期;三、是负责与PC通信,将保存的数据发送到PC,让上位机做处理。

数据采集部分主要依据AD7862工作时序来完成。

AD7862的工作时序图如下:图5 AD7862工作时序图如图5所示,CONVST、CS、RD、A0由单片机来控制,让AD采哪个通道、何时采集等;BUSY与单片机的INT0管脚相连从而通过外部中断0来提高AD7862的工作效率,当CONVST下降沿一来,AD转换开始,这时两个锁存器同时锁存两个通道的模拟量,在大约3.6us之后,转换完成同时BUSY的下降沿向单片机申请外部中断0,这个时候AD7862的输出寄存器的数据是有效的,可以读取数据。

A0为0可以读A通道。

当/CS和/RD有效时,数据可以从12位的并行数据总线上读出。

下位机程序代码如下:#include<reg52.h>#include <intrins.h>#include <math.h>typedef unsigned int uint;typedef unsigned char uchar;sbit convst=P0^0;//定义AD的CONVST(低有效)端口sbit BUSY=P0^1; //定义AD的BUSY端口sbit RD1=P0^2; //定义AD的RD(低有效)端口sbit CS=P0^3;//定义AD的CS(低有效)端口uchar samplingCounter = 0;//采样计数器uchar samplingFlag = 0;//采样率标志位uchar sendFlag = 0;//串口发送标志位uchar AD_H = 0,AD_L = 0;uchar idata AD_result[120][2];void sentda(void);void AD_unit(void);void Micfo_unit(void);void main(void){AD_unit();Micfo_unit();while(1){if(sendFlag){sentda();sendFlag = 0;}convst = 0;//开始AD转换while(BUSY==1);//检测ADC忙信号线,等待AD转换完成,若完成则执行下一步convst = 1;CS = 0;RD1 = 0;AD_result[samplingCounter][0] = P1&0x0f;AD_result[samplingCounter][1] = P2;RD1=1;samplingCounter++; //记录采样次数if(samplingCounter == 120) //带采样120次后,将这120次的采样结果一次性发送给上位机{sendFlag = 1;samplingCounter = 0;}}}void AD_unit(void) //ADC初始化函数{CS=1;RD1=1;convst = 1;}void Micfo_unit(void)//初始化串口和定时器0{SCON = 0x50;// SCON:工作模式1,8-bit UART,允许接收PCON|=0x80;//波特率倍增TMOD = 0x20;// TMOD:定时器T1,工作模式2, 8位自动重载方式TH1 = 0xFD;// 当波特率为19200时,定时器初值TL1 = 0xFD;TR1 = 1;//开定时器1ES = 1;//开串行中断EA = 1;//开总中断}//串口发送子函数,将读取到的串口数据发送给上位机void sentda(void){char i,j;for(j=0;j<120;j++){for(i=0;i<2;i++){SBUF = AD_result[j][i];while(!TI);TI = 0;}}}5.2 上位机设计下位机给上位机发送数据的时候先发送12位数据的高4位,后发送12位数据的低8位,这个时候上位机要对接收到数据进行数据处理。

在编写上位机程序的时候参考了串口调试助手的源程序,此源程序完成的功能是把接收到的数字量进行转换得到模拟电压的瞬时值,以及如何利用计算机串口向STC单片机发送命令,从而控制AD7862的采样率。

PC对接收到的数据进行处理,PC读回的数据是十六进制数,要经过一系列的处理,才能得到最后的显示值。

首先要判断得到的数据对应的电压是正或是负的。

若电压是正的,即数据小于2048,则处理公式如下:OUT=a*LSB式中a为得到的数字量,out为显示的电压,LSB为AD最小分辨电压。

若电压为负的,即得到的数据大于等于2048,则处理公式如下:OUT=(a-4096)*LSBAD7862的转换结果输出是以二进制的补码表示的,当其输入电压为负时,数据处理的方法采用上面的方法,而不必还原成原码。

上位机的数据处理核心程序为:for(CONT=0;CONT<Num;CONT++){ if((rxdata[2*CONT]&0X1E)==0X1E){rxdata[2*CONT]=rxdata[2*CONT]&0X1E;ReceiveData[2*CONT] = rxdata[2*CONT];ReceiveData[2*CONT+1] = rxdata[2*CONT+1];ResultData[CONT]= ReceiveData[2*CONT]*256 +ReceiveData[2*CONT+1];if(ResultData[CONT]>= 0x0800){ResultData[CONT] = ResultData[CONT] - 4096;}data[CONT]= float(ResultData[CONT])*20/4096+1.1;m_result=data[CONT];if (CONT==0||CONT==1){m_max=(float)m_result;m_min=(float)m_result;}if (CONT>1){if(m_max <(float)m_result ){m_max =(float)m_result;}else if (m_min > (float)m_result){m_min = (float)m_result;}}m_Vpp=m_max-m_min;此时就可以对采集的信号进行处理和分析,得到采集的电压值、最大最小值和峰峰值,并画出信号的波形图。

相关主题