基于STC单片机虚拟简易示波器的设计.docx
- 文档编号:30023932
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:17
- 大小:276.77KB
基于STC单片机虚拟简易示波器的设计.docx
《基于STC单片机虚拟简易示波器的设计.docx》由会员分享,可在线阅读,更多相关《基于STC单片机虚拟简易示波器的设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于STC单片机虚拟简易示波器的设计
题目:
基于STC单片机虚拟简易示波器的设计
1•实验目的及意义1..
2.试验内容及方案论证1.
3.系统工作原理2.
4.硬件电路设计2.
5.系统软件设计4..
5.1下位机设计4.
5.2上位机设计8.
6.系统调试10
6.1硬件调试10
6.2软件调试1.0
6.3软硬联调11
7.实验结果与误差分析11
8.实验小结及体会1.2
参考文献:
13
1.实验目的及意义
(1)学会利用AT89C5X系列单片机控制AD7862实现模拟的电压的采集;
(2)学会利用串口与PC机进行通信将测量数据发送给PC机,在PC机上利用VisualC++6.0编写上位机界面,并显示数据与波形;
(3)通过应用AltiumDesigner6软件掌握电路板的原理图绘制及pcb板的生成;
(4)学会利用KeiluVision4软件编写并调试单片机的下位机程序,利用KeiluVision4与wave6000软件结合,对硬件电路采集来的数据进行分析。
2.试验内容及方案论证
在实际应用中,经常会遇到一些突发信号,需要对其进行高速采集,这种情况下采用高速的A/D自然成为首选。
AD7862是AD公司推出的一个高速,低功耗,双12位的A/D转换,单+5V供电,功率为60mW。
它包含两个4us的延时的ADC,两个锁存器,一个内部的+2.5V参考电压和一个高速并行输出端口。
有四个模拟输入通道,分为两组,由A0选择。
每一组通道有两个输入(VA1&VA2orVB1&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参考电压或者由外部提供参考电压;;
&单一电源工作。
本实验采用的微处理器是STC89C52RC单片机。
STC89C52RC单片机使用方便,它与AT89S52单片机具有相同的内核,内部有256Bytes片内RAM、8KFlashROM,支持串口下载,易于在线编程调试,故采用这种单片机来做处理器。
由于A/D的输出位数是12位,单片机的寄存器是8位的,所以要分成两次才能读得A/D转换的结果。
本设计中,只需将单片机的两个10口(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、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或vad7862
图3AD7862硬件设计电路图
3、单片机控制模块电路图如图所示,单片机的控制AD采样,要保证电容和
晶振振荡器给单片机提供合适的工作频率,此实验采用11.0592M晶振
图4STC89C52硬件设计电路图
5.系统软件设计
5.1下位机设计
下位机主要处理三方面的工作:
一、是控制AD7862采集VA1端得模拟电压信号,得到数字量,并保存到单片机内部的RAM单元;二、是是通过定时器0的方式2定不同的采样率,得出所采波形的采样周期;三、是负责与PC通信,将保存的数据发送到PC,让上位机做处理。
数据采集部分主要依据AD7862工作时序来完成。
AD7862的工作时序图如下:
图5AD7862工作时序图
如图5所示,CONVST、CS、RD、A0由单片机来控制,让AD采哪个通道、何时采集等;BUSY与单片机的INTO管脚相连从而通过外部中断0来提高AD7862的工作效率,当CONVST下降沿一来,AD转换开始,这时两个锁存器同时锁存两个通道的模拟量,在大约3.6us之后,转换完成同时BUSY的下降沿向单片机申请外部中断0,这个时候AD7862的输出寄存器的数据是有效的,可以读取数据。
A0为0可以读A通道。
当/CS和/RD有效时,数据可以从12位的并行数据总线上读出。
图6下位机流程图
下位机程序代码如下:
#include
#includevintrins.h>
#inelude
typedefunsignedintuint;
typedefunsignedcharuchar;
sbitconvst=PO9;/定义AD的CONVST(低有效)端口
sbitBUSY=P0A1;//定义AD的BUSY端口
sbitRD1=P0A2;〃定义AD的RD(低有效)端口
sbitCS=P0A3;//定义AD的CS(低有效)端口
ucharsamplingCounter=0;/采样计数器
ucharsamplingFlag=0;/采样率标志位
ucharsendFlag=0;/串口发送标志位
ucharAD_H=0,AD_L=0;
ucharidataAD_result[120][2];
voidsentda(void);
voidAD_unit(void);
voidMicfo_unit(void);
voidmain(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;
samplingCounte叶+;〃记录采样次数
if(samplingCounter==120)〃带采样120次后,将这120次的采样结
果一次性发送给上位机
{
sendFlag=1;
samplingCounter=0;
}
}
}
voidAD_unit(void)//ADC初始化函数
{
CS=1;
RD1=1;
convst=1;
}
voidMicfo_unit(void)//初始化串口和定时器0
{
SCON=0x50;//SCON:
工作模式1,8-bitUART,允许接收
PCON|=0x80;//波特率倍增
TMOD=0x20;//TMOD:
定时器T1,工作模式2,8位自动重载方式
TH1=0xFD;//当波特率为19200时,定时器初值
TL1=0xFD;
TR1=1;//开定时器1
ES=1;//开串行中断
EA=1;//开总中断
}
//串口发送子函数,将读取到的串口数据发送给上位机
voidsentda(void)
{
chari,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)*LSB
AD7862的转换结果输出是以二进制的补码表示的,当其输入电压为负时,数据处理的方法采用上面的方法,而不必还原成原码。
上位机的数据处理核心程序为:
for(CONT=0;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_maxv(float)m_result) { m_max=(float)m_result; } elseif(m_min>(float)m_result) { m_min=(float)m_result; } } m_Vpp=m_max-m_min; 此时就可以对采集的信号进行处理和分析,得到采集的电压值、最大最小值 和峰峰值,并画出信号的波形图。 6.系统调试 根据方案设计的要求,调试过程共分三大部分: 硬件调试、软件调试和软硬件联调。 电路按模块调试,各模块逐个调试通过后再联调。 6.1硬件调试 通过制作原理图、PCB板到做成板子将原件焊接完毕,这一过程都要保持 一种认真的态度。 为了方便调试,我在硬件电路中加了液晶和开关,采用分块调 试的方法。 电路由多个模块组成,AD转换电路、串口通信电路、单片机控制电路、调试电压电路。 经调试,当采集低于10v电压时,液晶上能准确显示电压值,说明硬件电路总体工作。 6.2软件调试 在确定编程思路以后将各模块的程序及各子程序编好,使用Keil进行调试, 根据Keil提示的错误对程序进行修改。 除了语法差错和逻辑差错外,当确认程序没问题时,用“伟福”开始调试,看其中值的变化,有错误时直接在上面修改,直到能全部通过,并用串口调试助手看结果是否正确。 最后下载到单片机进行调 试,看是否能达到预期的目的。 当下位机基本设计好后,就要设计上位机的内容了,由于VC++没有接触过,所以从最简单的开始搞,主要是进行数据处理和控制并显示出来,选择好串口号,点击“打开串口”和开始采集”按钮,画出波形并显示电压“当前值”、“最大值”、“最小值”和“峰峰值”。 表示的值跟测量值基本符合。 6.3软硬联调 下载程序到单片机后,利用串口调试助手首先查看是否输出空载电压和直流电压正确。 在本次设计中,通过观察发现硬件电路输出正常,但输出数据不正确,所以问题锁定在程序的问题,经过多次进行程序的修改及调试,最终系统工作正常。 7.实验结果与误差分析 将时间连续、幅值也连续的模拟量转换为时间离散、幅值也离散的数字信 号,A/D转换一般要经过取样、保持、量化及编码4个过程。 在实际电路中,这些过程有的是合并进行的,例如,取样和保持,量化和编码往往都是在转换过程中同时实现的。 取样定理: 设取样信号的频率为fs,输入模拟信号的最高频率分量的频率为fimax,则fs与fimax必须满足fs大于等于2fimax的关系。 一般取fs大于2fimax。 将取样电路每次取得的模拟信号转换为数字信号都需要一定的时间,为了给 后续的量化编码过程提供一个稳定值,每次取得的模拟信号必须通过保持电路保持一段时间。 在量化过程中,由于取样电压不一定能被量化单位整除,所以量化前后不可 避免地存在误差,此误差称之为量化误差。 量化误差属原理误差,它是无法消除的。 A/D转换器的位数越多,各离散电平之间的差值越小,量化误差越小,分辨率也就越高。 然而在实际的实验过程中,检测到的误差要远大于这个值,一般为10-30mV的样子。 产生误差的因素有很多: (1)电源。 USB电源的纹波比较大,幅值不稳定。 在芯片的电源接口部分应加上相应的滤波电容,以减小电源波动对芯片的干扰。 (2)数据字地与模拟地。 特别对于AD芯片,数字地一定要与模拟地隔开,实际中用的是0欧姆电阻,它可以相当于很窄的电流通路,能够有效地限制环路电流,使噪声得到抑制。 电阻在所有频带上都有衰减作用。 (3)干扰。 单片机在传送数据的时候,由于外界干扰的存在可能会发送误 码给上位机。 此外上位机将得到的数据进行类型转换的时候也存在着误差,这给 后来的曲线绘制带来了一些影响。 另外要注意,加入的测试信号幅度不宜过大,正常范围为-10V到+10V,最大范围为-17V到+17V,否则超过最大范围的话会烧坏AD7862芯片;所加交流信号的频率由于受采集速率的限制也要控制在一定的范围之内。 下面各图是分别对不同频率的信号进行数据采集结果: 8.实验小结及体会 总结一下这次接口实验我的方法是: 首先自己摸索学习,遇到问题查找相关 资料观看和有关的视频教程;然后从网上搜索相话题看看别人做的东西;最后问 他人,身边有很多比我学得好的人,有的硬件好,有的软件强。 (这在我要说一 下,由于以前没有学过vc++,在学习过程中遇到很多的问题,查阅的资料也比较乱,后来在同学的介绍和帮助下使我在串口这一块有了不小的收获。 )我觉得我 不会放弃这么好的有用的资源的。 然后是与别人讨论,交流思路,看看我的设计思路方法是不是有不合理之处。 此外,在别人需要帮助的时候,给予提醒和讲解,不断充实自己。 参考文献: [[1]郭天祥等.51单片机C语言教程一入门、提高、开发、拓展全攻略•电子工业出版社,2008. [2]何立民.单片机应用系统设计.北京: 北京航空航天大学出版社,2004. [3]张洪润等.单片机应用设计200例.北京: 北京航空航天大学出版社,2006. [4]孙余凯等.电子元器件检测选用代换手册.电子工业出版社,2007. ⑸谭思良等.VisualC++串口通信工程开发实例导航[M].北京.人民邮电出版社.2003 ⑹兰吉昌等,单片机C51完全学习守册.北京: 化学工业出版社,2008 [7]李朝青,PC机及单片机数据通信技术.北京: 北京航空航天大学出版社,2000 [8]求是科技‘VisualC++VisualBasic串并口开发技术工程应用实例导航.北 京: 人民邮电出版社,2006 [9]龚建伟,熊光明等.VisualC++/TurboC串口通信编程实践.北京: 电子工 业出版社,2004
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC 单片机 虚拟 简易 示波器 设计