序
🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的数字存储示波器的设计
1.硬件系统
硬件系统由以下几部分组成:
(1)CPU及其外围设备
本系统CPU采用Atmel AT89C52单片机,其外围设备包括RAM62256、串行传输电平变换芯片MAX232
以及CPU时钟、键盘等。
(2)AD转换、DMA控制电路
这部分电路是本系统的核心部分,负责数据的采集和存储,同时根据两种不同的工作方式采用不同的逻辑。当用户指定工作方式后,CPU会给出相应的控制信号,这部分电路根据给出的信号控制各芯片的片选、锁存等。具体地说,CPU的P1.2与P1.4端提供AD的控制信号。具体逻辑如表一:
表一:AD及DMA控制电路译码真值表
P1.2 | P1.4 | AD工作状态 | 缓冲器1片选 | 缓冲器2片选 | 62256WR来源 | AD时钟来源 | AD片选 |
0 | 0 | 存储输入 | 1 | 0 | AD | 时序发生器 | 0 |
0 | 1 | 初始测偏移电压 | 0 | 1 | CPU | 时序发生器 | 0 |
1 | 0 | 实时采集 | 0 | 1 | CPU | CPU-P1.3 | 0 |
1 | 1 | 不工作 | 0 | 1 | CPU | —— | 1 |
说明: [1]缓冲器1指CPU P0与62256低位地址线间的锁存器74HC573,缓冲器2指地址发生器与62256地址线间的缓冲器。
[2]实时采集时AD的控制信号由CPU P1.3端提供。
[3]以上三个片选均为低有效。
本系统采用AD公司的高速AD转换芯片AD7820,原厂资料中该芯片的转换时间为2μs,有两种工作模式。其中直通工作模式最简单,而且适合本系统工作要求,因此采用这种工作模式。
如图三所示,工作在直通模式时,AD7820的RD端接低电平,MODE端接高电平。WR端为高电平时,输出保持不变,INT保持低电平;当WR变为低电平后,AD转换启动,同时INT变为高电平。WR低电平应保持twr=(600ns-50μs);当WR再次变为高电平后,AD转换的结果经输出缓冲器输出并锁存,同时INT变为低电平。从WR的上升沿到AD输出有效数字的时间为tint=700ns(典型值),两次转换间隔时间为tp=600ns(最小值)。
图1:AD7820工作时序图(摘自AD公司原厂资料)
本系统工作在DMA方式时,采用6Mhz振荡器,经16分频后得到周期为2.67μs、占空比为50%的方波,将其接至AD7820的WR端,则可满足上述时序的要求。工作在实时采集方式时,则由CPU P1.3端提供WR信号。
本系统工作在DMA方式时,62256 WR端接AD7820 INT端,则每次采样完毕后,AD7820直接向62256写入数据。
其他控制时序和控制逻辑较简单,用一片译码器74LS138和一片数据选择器74LS253按表一中的逻辑联接即可。
(3)时钟及地址发生器
本系统地址发生器由四片四位计数器74LS161级连而成,最低位计数器的时钟接AD7820 INT端(附加两个非门延时),这样AD每完成一次转换就向62256内写入一次数据,启动下一次转换的同时将地址计数器输出增一。四片74LS161共有16根输出线,其中低十五位通过缓冲器(表一中缓冲器2)接至62256地址线,最高位经反相后接CPU INT0端。当计满15位向第16位进位时,触发CPU中断0,CPU响应中断后即停止DMA控制器的工作,系统即完成一轮AD转换及向62256种存储数据的过程。
本系统的时钟发生器及前面所述的6Mhz振荡器及16分频电路。振荡器由石英晶体振荡器及非门等构成,16分频采用计数器74LS161。这部分电路比较简单,不再赘述。
2.软件简介:
本软件主要完成数字示波器的数据后期处理工作;
开发环境:Visual C++ 6.0
适用平台:Windows 9X/Me/2000/XP
可执行文件大小:2.26MB
附加文件:mfc42.dll, MSCOMM32.OCX, msvcrt.dll
主要功能如下:
2.1.1串行数据接收:
采用VC附带ActiveX控件Microsoft Communications Control, version 6.0实现串口数据的接收;
如果内存允许,采集点数不限;因此,本软件也满足过程控制中大容量数据采集及图形处理的需要;
2.1.2数字滤波:
采用多项式光滑不等距插值,本方法是制定n个不等距节点xi(i=0,1,-------,n-1)上的函数值yi=f(xi)及精度要求,利用阿克玛(Akima)方法,计算指定子区间上的三次插值多项式与指定插值点上的函数值;
函数的调用格式为:
GetValueAkima(int n, double x[], double y[], double t, double s[], int k /*= -1*/)
2.1.3图像处理:
(1)波形图:
完成采集波形的绘制,支持各种动态操作,包括:图像的整体放大,整体缩小,还原初始最佳大小,移动,X向放大、缩小,Y向放大、缩小;
支持各种编辑操作,包括:图像数据的存储(存储成 .sun文件
),波形图、频谱图的打印,波形图、频谱图的拷贝(可在Word等编辑软件中粘贴);
支持波形图相及示波屏幕的视觉效果调整,包括:波形图、频谱图曲线颜色的任意调整条,线条宽度的调整,示波屏幕全屏化,背景模式的调整;
支持波形图处理数据量的动态调整:以克服图像失真,及图形处理速度慢等问题;
支持任意点电压值,时间值;两点之间电压差,时间差的动态读取;
支持采集数据的十六进制,十进制现实,支持数据的拷贝(可转移到Excel等数据处理软件中处理);
(2)频谱图:
采用离散Foriour变换,绘制周期图像的离散谱,非周期图像的连续谱,并给出相应频谱信息:
对于以上功能,提供方波,正弦波,随机波,单位阶跃响应四组测试数据模拟采集数据,供使用者练习,以熟悉本软件;
提供使用说明,供使用者参考;
2.1.4软件界面效果如下:
(1) 主界面:
图2:软件主界面(非实际大小,下同)
(2)波形图界面:
图3:波形显示界面
(3)波形图示数面板界面:
图4:波形读数面板界面
(4)频谱图界面:
3. 测试结果
测试方法:以信号源的输出作为本系统的输入,分别测试本系统在两种不同工作方式时对应各种频率、各种形式的输入信号的输出如下:
3.1.1存储输入方式:
(1)1kHz正弦波输入1,原图如下:
(2)1kHz正弦波输入2,原图如下:
从以上各图中可以看出:
(1)不论工作在那种方式时,当输入信号频率相对较高时,显示出的波形将很密集而难于观察,因此部分波形经过了局部放大以便于观察。
(2)实时采集方式得到的波形明显好于存储输入方式。这一方面是因为工作在实时采集方式时AD工作频率较低,采集的数据比较可靠;另一方面因为工作在实施采集方式时,所得数据立即经单片机传入计算机中,而工作在存储输入方式时,数据要先向62256中存储,经过步骤较多,而由实验条件所限,数据总线和地址总线上必然有诸多干扰,因此会影响存储的波形数据。
(3)注意图九、图十中的箭头所指处,在实验中观察到每次工作在存储方式时此处都有相同的尖峰。观察实验数据,发现每组数据中都有一段固定的地址(00F0H~00FFH)对应的数据始终为常值(为我们以前所做的实验中向里写入的有规律的数据),不随输入信号而改变,反映在波形上正是图九、图十中的尖峰。由于在32k数据中只有这16个始终不正常,因此我们认为是62256对应存储单元损坏,使新的数据不能写入所致。
(4)根据以上分析,我们认为如果能够制作出成品PCB板,可能可以抑制总线上的干扰,效果应该会有所改善。另一方面,在软件中我们采用了插值算法,使得绘制出的曲线比较光滑。但是如果有个别数据点出现干扰,反映在图形上就会有一个很明显的尖峰。如图十二中的两处箭头所指出的,如果此处数据点在╳处,那么波形就很光滑,因此可以认为这两个点的数据是干扰数据。如果在改进软件中的数字滤波算法,滤掉数据中的高频干扰,效果应该也会有所改善。
图5:频谱图显示界面
如果学弟学妹们在毕设方面有任何问题,随时可以私信我咨询哦,有问必答!学长专注于单片机相关的知识,可以解决单片机设计、嵌入式系统、编程和硬件等方面的难题。
愿毕业生有力,陪迷茫着前行!