波形采集存储与回放系统设计报告.docx
- 文档编号:27642766
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:23
- 大小:320.18KB
波形采集存储与回放系统设计报告.docx
《波形采集存储与回放系统设计报告.docx》由会员分享,可在线阅读,更多相关《波形采集存储与回放系统设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
波形采集存储与回放系统设计报告
基于51单片机电子设计报告之
波形采集、存储与回放系统
院系:
电子通信工程
团组:
姓名:
110
指导老师:
2012/8/15
一、设计任务求……………………………3
二、系统方案论证与选择…………………6
三、系统硬件的设计……………………10
四、系统软件的设计………………………12
五、参考文献………………………………14
六、结论……………………………………15
附录………………………………………16
附录1程序代码………………………………16
附录2硬件原理图……………………………30
附录3PCB图(部分)…………………………32
一、设计任务求
<1>、任务
设计并制作一个波形采集、存储与回放系统,示意图如图1所示。
该系统能同时采集两路周期信号波形,要求系统断电恢复后,能连续回放已采集的信号,显示在示波器上。
<2>、要求
1.基本要求
(1)能完成对A通道单极性信号(高电平约4V、低电平接近0V)、频率约1kHz信号的采集、存储与连续回放。
要求系统输入阻抗不小于10kΩ,输出阻抗不大于1kΩ。
(2)采集、回放时能测量并显示信号的高电平、低电平和信号的周期。
原信号与回放信号电平之差的绝对值≤50mV,周期之差的绝对值≤5%。
(3)系统功耗≤50mW,尽量降低系统功耗,系统内不允许使用电池。
2.发挥部分
(1)增加B通道对双极性、电压峰峰值为100mV、频率为10Hz~10kHz信号的采集。
可同时采集、存储与连续回放A、B两路信号,并分别测量和显示A、B两路信号的周期。
B通道原信号与回放信号幅度峰峰值之差的绝对值≤10mV,周期之差的
绝对值≤5%。
(2)A、B两路信号的周期不相同时,以两信号最小公倍周期连续回放信号。
(3)可以存储两次采集的信号,回放时用按键或开关选择显示指定的信号波形。
(4)其他。
<3>、说明
1.本系统处理的正弦波信号频率范围限定在10Hz~10kHz,三角波信号频率范围限定在
10Hz~2kHz,方波信号频率范围限定在10Hz~1kHz。
2.预留电源电流的测试点。
3.采集与回放时采用示波器监视。
4.采集、回放时显示的周期和幅度应是信号的实际测量值,规定采用十进制数字显示,
周期以“ms”为单位,幅度以“mV”为单位。
<4>、评分标准
二、系统方案论证与选择
1、题目要求及相关指标分析
题目的要求是将待测信号进行数字存储,并通过普通示波器将被测信号显示出来。
由于待测信号为模拟信号,存储过程为数字方式,故应该将模拟信号进行量化处理,然后存储到存储器中,当需要显示的时候,从存储器读出数据并恢复为模拟信号,并送往普通示波器Y输入端,在X输入端加入相应的扫描信号,采有X-Y方式观察信号的波形。
因此,设计的重点是模拟信号的处理与采样、数字信号的存储、普通示波器的显示控制、系统的控制4个方面。
2、方案的比较与分析
1)采样方式
方案一:
实时采样。
实时采样是在信号存在期间对其采样。
根据采样定理,采用速率必须高于信号最高频率分量的两倍。
对于周期的正弦信号,一个周期内应该大于两个采样点。
为了不失真的恢复原被测信号,通常一个周期内就需要采样八个点以上。
方案二:
等效时间采样法。
采用中高速模数转换器,对于频率较高的周期性信号采用等效时间采样的方法,即对每个周期仅采样一个点,经过若干个周期后就可对信号各个部分采样一遍。
而这些点可以借助步进延迟方法均匀地分布于信号波形的不同位置。
其中步进延迟是每一次采样比上一次样点的位置延迟△t时间。
只要精确控制从触发获得采样的时间延迟,就能够准确地恢复出原始信号。
等效时间采样虽然可以对很高频率的信号进行采样,可是步进延迟的采样技术与电路较为复杂。
再者,它只限于处理周期信号,而且对单次触发采样无能为力。
实时采样可以实现整个频段的全速采样,因此本设计采用方案一。
2)双踪显示方式
方案一:
每个通道都有一套独立的ADC和存储器,双踪显示时,只需轮流选择不同通道的波形数据,就可以实现两路波形的同时显示。
方案二:
只使用一片ADC,一片存储器和一片DAC,在采样的时候,用存储器地址的最低位控制模拟开关。
通过切换两路模拟信号,将采集到的数据分别存储到存储器的奇地址和偶地址上,双踪显示时通过扫描存储器中的数据即可将两路波形同时显示出来。
方案二使用的硬件电路较少,故我们选择方案二。
3)触发方式选择
要使屏幕上显示稳定的波形,则需将被测信号本身或者与被测信号有一定时间关系的触发信号加到触发电路。
触发源选择确定触发信号由何处供给。
通常有三种触发源:
内触发(INT)、电源触发(LINE)、外触发EXT)。
题目要求选择内触发,即使用被测信号作为触发信号。
方案一:
采用数字触发方式。
对波形信号进行采集,将采集到的波形数据和触发电平(可由键盘设置)进行比较,找到波形在上升过程中大于或等于该触发电平的点,即得到触发,此时开始对波形进行存储。
因为本来就需要对波形信号进行采集,使用这种方法无需要增加额外的硬件电路,实现方便。
但是,对波形每个周期只采集有限个点,不可能每次都能采集到等于触发电平的点(这时不得不以大于该电平的值为触发电平),从而使触发位置不稳定,连续触发时输出波形会有抖动现象。
方案二:
采用模拟触发方式。
通过比较器LM311将被测波形信号和触发电平进行比较,大于触发电平时输出为高电平,小于触发电平时则输出低电平,即可得到信号被整形后的脉冲序列,再在该脉冲序列的上升沿开始存储波形即实现了触发存储的功能。
这种触发方式稳定,故我们采用了这种方案。
4)水平和垂直位置的调节
a)水平移动的调节
方案一:
由FPGA内地址累加器的输出控制数模转换器不断地输出锯齿波。
在后级加一个加法器,调节滑动变阻器R的阻值,可以实现对锯齿波波形的直流电平叠加,从而达到调节显示器上波形左右位置的平移功能。
方案二:
通过对双口RAM读出数据的起始地址的偏移控制来控制波形的左右移动。
方案一实现左右平移,电路简单,效果明显。
但是一页屏幕的波形通过这样的平移,就必然会将一部分的波形移动到示波器屏幕以外,同时将示波器的另一边变成空白。
这样不符合实际数字示波器的功能要求。
再者,它也实现不了auto的功能。
而方案二方法新颖,对于波形在屏幕的满屏显示和auto的功能都可以轻易处理和简单实现。
于是本设计采用方案二。
b)垂直移动的调节
方案一与上述水平移动调节的方案一相同。
方案二是直接对双口RAM的数据进行处理。
譬如向上平移,可将波形的所有数据都加上一个偏移值,然后送到DAC0832,直接将输出的模拟信号加在y轴上。
但这种方法的问题是当RAM中数据较大时,加上某一个偏移值后数据均达到255,则波形的上半部分就会被削平。
而通过加法电路的调节则不会出现这个问题。
故我们选用方案一。
5)频率的测量
方案一:
用单片机扫描存储在RAM中波形数据,找到波形的上升过零点位置或者波形数据的峰值,并记录此时的地址ADR1,在扫描下一个波形的上升过零点位置或者波形数据的峰值,并记录此时的地址ADR2,通过如下公式计算出波形的频率:
f=1/[B×(ADR2-ADR1)/20]
其中,B为水平分辨率,单位为s/div。
方案二:
等精度测量法
先将待测信号进行二分频,用此信号作为闸门。
取FPGA内部40M信号作为基准信号,二分频后信号的上升沿开起计数器时钟计数,下降沿关闭计数。
由计得的数值来计算信号的频率。
方案一计算的频率数据的精度不会很高,加上采样的不稳定,必将导致频率测量的不正确。
而方案二测量的稳定性较高且数据较准确。
故我们选用方案二测量信号的频率。
三、系统硬件的设计
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
实验线路如图所示。
1.运算放大器
运算放大器有三个特点:
⑴开环放大倍数非常高,一般为几千,甚至可高达10万。
在正常情况下,运算放大器所需要的输入电压非常小。
⑵输入阻抗非常大。
运算放大器工作时,输入端相当于一个很小的电压加在一个很大的输入阻抗上,所需要的输入电流也极小。
⑶输出阻抗很小,所以,它的驱动能力非常大。
的外部连接
DAC0832的外部连接线路如图所示。
3.运算放大电路和低通滤波电路
LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连.
第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-(R2/R1)倍。
实验表明,输出波形效果不错
四、系统软件的设计
本程序的程序流程图如下所示
五、参考文献
[1]康华光.电子技术基础模拟部分(第五版).高等教育出版社,2005年.
[2]阎石.数字电子技术基础(第五版).高等教育出版社,2005年.
[3]刘爱华满宝元.传感器原理与应用技术.人民邮电出版社,2011年.
[4]马彪.单片机应用技术.同济大学出版社,2010年.
[5]郭天祥.51单片机C语言教程.北京:
电子工业出版社,2012年.
[6]刘建清.轻松玩转51单片机C语言.北京航空航天大学出版社,2011年.
[7]彭伟.单片机C语言程序设计实例100例.北京:
电子工业出版社,2011年.
六、结论
本方案的系统设计符合2011年全国大学生电子设计竞赛试题(H)题的要求。
通过单片机控制一个数模转换器DAC0832将采集到的数据进行模数转并经过运算放大器LM324可以将其电流输出线性地转换成电压输出到外部设备示波器进而实现波形的采集存储与回放。
附录………………………………………
附录1程序代码……………………………
/*******文件******/
#ifndef__ADC_H__
#define__ADC_H__
voidDelayUs2x(unsignedchart);
voidDelayMs(unsignedchart);
bitLCD_Check_Busy(void);
voidLCD_Write_Com(unsignedcharcom);
voidLCD_Write_Data(unsignedcharData);
voidLCD_Clear(void);
voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s);
voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData);
voidLCD_Init(void);
voidinit1602(void);
voidDelay_Ms(unsignedinta);
voidADC_Init(unsignedcharCHA);
unsignedcharADC_Read(void);
#endif
/*-----------------------------------------------
名称:
论坛:
修改:
无
内容:
引脚定义如下:
1-VSS2-VDD3-V04-RS5-R/W6-E7-14DB0-DB715-BLA16-BLK
------------------------------------------------*/
#ifndef__eeprom_H__
#define__eeprom_H__
bitLCD_Check_Busy(void);
voidLCD_Write_Com(unsignedcharcom);
voidLCD_Write_Data(unsignedcharData);
voidLCD_Clear(void);
voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s);
voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData);
voidLCD_Init(void);
#endif
/*
---STCInternationalLimited----------------
一个完整的EEPROM测试程序,用宏晶的下载板可以直接测试
STC12C5AxxAD系列单片机EEPROM/IAP功能测试程序演示
STC12C52xxAD系列单片机EEPROM/IAP功能测试程序演示
STC11xx系列单片机EEPROM/IAP功能测试程序演示
STC10xx系列单片机EEPROM/IAP功能测试程序演示
---STCInternationalLimited------------------
---宏晶科技设计2009/1/12--------------
---Mobile:
------------------------
---Fax:
3-------------------------
---Tel:
2-------------------------
---Web:
--------------------
本演示程序在STC-ISPVer3.0A.PCB的下载编程工具上测试通过,EEPROM的数据
在P1口上显示,如果要在程序中使用或在文章中引用该程序,请在程序中或文章中
注明使用了宏晶科技的资料及程序
*/
#include<12C5A>
#include<>
#include""
unsignedinti=0,j;
unsignedcharguanji,cy,cy0,huifang=1;
sbitkep1=P1^7;
typedefunsignedcharINT8U;
typedefunsignedintINT16U;
//定义Flash操作等待时间及允许IAP/ISP/EEPROM操作的常数
//#defineENABLE_ISP0x80//系统工作时钟<30MHz时,对IAP_CONTR寄存器设置此值
//#defineENABLE_ISP0x81//系统工作时钟<24MHz时,对IAP_CONTR寄存器设置此值
//#defineENABLE_ISP0x82//系统工作时钟<20MHz时,对IAP_CONTR寄存器设置此值
#defineENABLE_ISP0x83//系统工作时钟<12MHz时,对IAP_CONTR寄存器设置此值
//#defineENABLE_ISP0x84//系统工作时钟<6MHz时,对IAP_CONTR寄存器设置此值
//#defineENABLE_ISP0x85//系统工作时钟<3MHz时,对IAP_CONTR寄存器设置此值
//#defineENABLE_ISP0x86//系统工作时钟<2MHz时,对IAP_CONTR寄存器设置此值
//#defineENABLE_ISP0x87//系统工作时钟<1MHz时,对IAP_CONTR寄存器设置此值
#defineDEBUG_DATA0x5A//本测试程序最终存储在EEPROM单元的数值
#defineDATA_FLASH_START_ADDRESS0x00//STC5Axx系列EEPROM测试起始地址
unionunion_temp16
{
INT16Uun_temp16;
INT8Uun_temp8[2];
}my_unTemp16;
INT8UByte_Read(INT16Uadd);//读一字节,调用前需打开IAP功能
voidByte_Program(INT16Uadd,INT8Uch);//字节编程,调用前需打开IAP功能
voidSector_Erase(INT16Uadd);//擦除扇区
voidIAP_Disable();//关闭IAP功能
voidDelay();
voidmain(void)
{
unsignedcharram[100]={0};
unsignedcharb=0,c=0,a=0;
//a=Byte_Read(0);//读EEPROM的值,存到read_eeprom
//EA=1;//全局中断开
//EX0=1;//外部中断0开
//IT0=1;//边沿触发
//EX1=1;//外部中断1开
//IT1=1;//IT1=1表示边沿触发
init1602();
ADC_Init(0);
//ADC_Read();
LCD_Write_String(1,0,"zhouyichen");
LCD_Write_String(1,0,"zhouyichen");
//LCD_Write_Char(3,1,'o');
while
(1)
{
for(i=0;i<100;i++)
{
ram[i]=Byte_Read(i);//读EEPROM的值,存到read_eeprom
}
LCD_Write_String(1,0,"U==4V");
LCD_Write_String(1,1,"PINLVKHZ");
while(huifang==1&&kep1==1)
{
for(i=0;i<100;i++)
{
ADC_Init
(1);
a=ADC_Read();
P3=ram[i];//读EEPROM的值,存到read_eeprom
}
}
while(kep1==0)
{
for(i=0;i<100;i++)
{//if(i==0)
//Sector_Erase(0);//擦除整个扇区
ADC_Init
(1);
a=ADC_Read();
P3=a;
ram[i]=a;
//Byte_Program(i,a);//将DEBUG_DATA写入EEPROM
}
}
for(i=0;i<100;i++)
{
if(i==0)
Sector_Erase(0);//擦除整个扇区
Byte_Program(i,ram[i]);//将DEBUG_DATA写入EEPROM
}
}
}
//读一字节,调用前需打开IAP功能,入口:
DPTR=字节地址,返回:
A=读出字节
INT8UByte_Read(INT16Uadd)
{
IAP_DATA=0x00;
IAP_CONTR=ENABLE_ISP;//打开IAP功能,设置Flash操作等待时间
IAP_CMD=0x01;//IAP/ISP/EEPROM字节读命令
=add;
IAP_ADDRH=[0];//设置目标单元地址的高8位地址
IAP_ADDRL=[1];//设置目标单元地址的低8位地址
//EA=0;
IAP_TRIG=0x5A;//先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
IAP_TRIG=0xA5;//送完A5h后,ISP/IAP命令立即被触发起动
_nop_();
//EA=1;
IAP_Disable();//关闭IAP功能,清相关的特殊功能寄存器,使CPU处于安全状态,
//一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
return(IAP_DATA);
}
//字节编程,调用前需打开IAP功能,入口:
DPTR=字节地址,A=须编程字节的数据
voidByte_Program(INT16Uadd,INT8Uch)
{
IAP_CONTR=ENABLE_ISP;//打开IAP功能,设置Flash操作等待时间
IAP_CMD=0x02;//IAP/ISP/EEPROM字节编程命令
=add;
IAP_ADDRH=[0];//设置目标单元地址的高8位地址
IAP_ADDRL=[1];//设置目标单元地址的低8位地址
IAP_DATA=ch;//要编程的数据先送进IAP_DATA寄存器
//EA=0;
IAP_TRIG=0x5A;//先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
IAP_TRIG=0xA5;//送完A5h后,ISP/IAP命令立即被触发起动
_nop_();
//EA=1;
IAP_Disable();//关闭IAP功能,清相关的特殊功能寄存器,使CPU处于安全状态,
//一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
}
//擦除扇区,入口:
DPTR=扇区地址
voidSector_Erase(INT16Uadd)
{
IAP_CONTR=ENABLE_ISP;//打开IAP功能,设置Flash操作等待时间
IAP_CMD=0x03;//IAP/ISP/EEPROM扇区擦除命令
=add;
IAP_ADDRH=[0];//设置目标单元地址的高8位地址
IAP_ADDRL=[1];//设置目标单元地址的低8位地址
//EA=0;
IAP_TRIG=0x5A;//先送5Ah,再送A5h到ISP/IAP触发寄存器,每次都需如此
IAP_TRIG=0xA5;//送完A5h后,ISP/IAP命令立即被触发起动
_nop_();
//EA=1;
IAP_Disable();//关闭IAP功能,清相关的特殊功能寄存器,使CPU处于安全状态,
//一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
}
voidIAP_Disable()
{
//关闭IAP功能,清相关的特殊功能寄存器,使CPU处于安全状态,
//一次连续的IAP操作完成之后建议关闭IAP功能,不需要每次都关
IAP_CONTR=0;//关闭IAP功能
IAP_CMD=0;//清命令寄存器,使命令寄存器无命令,此句可不用
IAP_TRIG=0;//清命令触发寄存器,使命令触发寄存器无触发,此句可不用
IAP_ADDRH=0;
IAP_ADDRL=0;
}
voidDelay()
{
INT8Ui;
INT16Ud=5000;
while(d--)
{
i=255;
while(i--);
}
}
附录
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 波形 采集 存储 回放 系统 设计 报告