收藏 分销(赏)

波形采集存储与回放系统设计报告.doc

上传人:精**** 文档编号:4616185 上传时间:2024-10-07 格式:DOC 页数:33 大小:458KB 下载积分:12 金币
下载 相关 举报
波形采集存储与回放系统设计报告.doc_第1页
第1页 / 共33页
波形采集存储与回放系统设计报告.doc_第2页
第2页 / 共33页


点击查看更多>>
资源描述
波形采集存储与回放系统设计报告 33 2020年4月19日 文档仅供参考,不当之处,请联系改正。 基于51单片机电子设计报告之 波形采集、存储与回放系统 院 系: 电子通信工程 团 组: 姓 名: 110 指导老师: /8/15 目录 一、设计任务求…………………………… 3 二、系统方案论证与选择………………… 6 三、系统硬件的设计…………………… 10 四、系统软件的设计………………………12 五、参考文献………………………………14 六、结论……………………………………15 附录………………………………………16 附录 1 程序代码………………………………16 附录 2 硬件原理图……………………………30 附录 3 PCB图(部分)…………………………32 一、 设计任务求 <1>、任务 设计并制作一个波形采集、存储与回放系统,示意图如图1 所示。该系统能同时采集两路周期信号波形,要求系统断电恢复后,能连续回放已采集的信号,显示在示波器上。 <2>、要求 1.基本要求 (1)能完成对A 通道单极性信号(高电平约4V、低电平接近0V)、频率约1kHz 信号的采集、存储与连续回放。要求系统输入阻抗不小于10 kΩ,输出阻抗不大于1kΩ。 (2)采集、回放时能测量并显示信号的高电平、低电平和信号的周期。原信号与回放信号电平之差的绝对值≤50 mV,周期之差的绝对值≤5%。 (3)系统功耗≤50mW,尽量降低系统功耗,系统内不允许使用电池。 2. 发挥部分 (1)增加B 通道对双极性、电压峰峰值为100mV、频率为10Hz~10kHz 信号的采集。可同时采集、存储与连续回放A、B 两路信号,并分别测量和显示A、B 两路信号的周期。B 通道原信号与回放信号幅度峰峰值之差的绝对值≤10 mV,周期之差的 绝对值≤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万。在正常情况下,运算放大器所需要的输入电压非常小。 ⑵输入阻抗非常大。运算放大器工作时,输入端相当于一个很小的电压加在一个很大的输入阻抗上,所需要的输入电流也极小。 ⑶输出阻抗很小,因此,它的驱动能力非常大。 2.DAC0832的外部连接 DAC0832的外部连接线路如图10.10所示。 3.运算放大电路和低通滤波电路 LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连. 第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1经过反向放大电路-(R2/R1)倍。 实验表明,输出波形效果不错 四、 系统软件的设计 本程序的程序流程图如下所示 五、 参考文献 [1] 康华光. 电子技术基础模拟部分(第五版). 高等教育出版社, . [2] 阎 石. 数字电子技术基础(第五版). 高等教育出版社, . [3] 刘爱华 满宝元. 传感器原理与应用技术.人民邮电出版社, . [4] 马 彪. 单片机应用技术. 同济大学出版社, . [5] 郭天祥. 51单片机C语言教程. 北京: 电子工业出版社, . [6] 刘建清. 轻松玩转51单片机C语言.北京航空航天大学出版社, . [7] 彭 伟. 单片机C语言程序设计实例100例. 北京: 电子工业出版社, . 六、 结论 本方案的系统设计符合 年全国大学生电子设计竞赛试题(H)题的要求。 经过单片机控制一个数模转换器DAC0832将采集到的数据进行模数转并经过运算放大器LM324能够将其电流输出线性地转换成电压输出到外部设备示波器进而实现波形的采集存储与回放。 附录……………………………………… 附录 1 程序代码…………………………… /*******adc.h文件******/ #ifndef __ADC_H__ #define __ADC_H__ void DelayUs2x(unsigned char t); void DelayMs(unsigned char t); bit LCD_Check_Busy(void) ; void LCD_Write_Com(unsigned char com); void LCD_Write_Data(unsigned char Data); void LCD_Clear(void); void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) ; void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data); void LCD_Init(void) ; void init1602(void) ; void Delay_Ms (unsigned int a); void ADC_Init (unsigned char CHA); unsigned char ADC_Read (void); #endif /*----------------------------------------------- 名称:LCD1602.h 论坛: 修改:无 内容: 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK ------------------------------------------------*/ #ifndef __eeprom_H__ #define __eeprom_H__ bit LCD_Check_Busy(void) ; void LCD_Write_Com(unsigned char com) ; void LCD_Write_Data(unsigned char Data) ; void LCD_Clear(void) ; void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) ; void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) ; void LCD_Init(void) ; #endif /* --- STC International Limited ---------------- 一个完整的EEPROM 测试程序,用宏晶的下载板能够直接测试 STC12C5AxxAD 系列单片机 EEPROM/IAP 功能测试程序演示 STC12C52xxAD 系列单片机 EEPROM/IAP 功能测试程序演示 STC11xx 系列单片机 EEPROM/IAP 功能测试程序演示 STC10xx 系列单片机 EEPROM/IAP 功能测试程序演示 --- STC International Limited ------------------ --- 宏晶科技 设计 /1/12 V1.0 -------------- --- Mobile: ------------------------ --- Fax: ------------------------- --- Tel: ------------------------- --- Web: .com -------------------- 本演示程序在STC-ISP Ver 3.0A.PCB 的下载编程工具上测试经过,EEPROM 的数据 在P1 口上显示, 如果要在程序中使用或在文章中引用该程序,请在程序中或文章中 注明使用了宏晶科技的资料及程序 */ #include <STC12C5A60S2.H> #include <intrins.H> #include "adc.H" unsigned int i=0,j; unsigned char guanji,cy,cy0,huifang=1; sbit kep1=P1^7; typedef unsigned char INT8U; typedef unsigned int INT16U; //定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数 //#define ENABLE_ISP 0x80 //系统工作时钟<30MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x81 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值 #define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x84 //系统工作时钟<6MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x85 //系统工作时钟<3MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x86 //系统工作时钟<2MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x87 //系统工作时钟<1MHz 时,对IAP_CONTR 寄存器设置此值 #define DEBUG_DATA 0x5A //本测试程序最终存储在 EEPROM 单元的数值 #define DATA_FLASH_START_ADDRESS 0x00 //STC5Axx 系列 EEPROM 测试起始地址 union union_temp16 { INT16U un_temp16; INT8U un_temp8[2]; }my_unTemp16; INT8U Byte_Read(INT16U add); //读一字节,调用前需打开IAP 功能 void Byte_Program(INT16U add, INT8U ch); //字节编程,调用前需打开IAP 功能 void Sector_Erase(INT16U add); //擦除扇区 void IAP_Disable(); //关闭IAP 功能 void Delay(); void main (void) { unsigned char ram[100]={0}; unsigned char b=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,"zhou yi chen "); LCD_Write_String(1,0,"zhou yi chen "); // 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,"PINLV 1.017 KHZ "); 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 = 读出字节 INT8U Byte_Read(INT16U add) { IAP_DATA = 0x00; IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x01; //IAP/ISP/EEPROM 字节读命令 my_unTemp16.un_temp16 = add; IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp8[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= 须编程字节的数据 void Byte_Program(INT16U add, INT8U ch) { IAP_CONTR = ENABLE_ISP; //打开 IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令 my_unTemp16.un_temp16 = add; IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp8[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 = 扇区地址 void Sector_Erase(INT16U add) { IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令 my_unTemp16.un_temp16 = add; IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp8[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 功能,不需要每次都关 } void IAP_Disable() { //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, //一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 IAP_CONTR = 0; //关闭IAP 功能 IAP_CMD = 0; //清命令寄存器,使命令寄存器无命令,此句可不用 IAP_TRIG = 0; //清命令触发寄存器,使命令触发寄存器无触发,此句可不用 IAP_ADDRH = 0; IAP_ADDRL = 0; } void Delay() { INT8U i; INT16U d=5000; while (d--) { i=255; while (i--); } } 附录 2 硬件原理图…………………………… 附录 3 PCB图(部分)………………………
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服