简易信号分析仪设计报告.docx

上传人:b****2 文档编号:496065 上传时间:2023-04-29 格式:DOCX 页数:37 大小:237.52KB
下载 相关 举报
简易信号分析仪设计报告.docx_第1页
第1页 / 共37页
简易信号分析仪设计报告.docx_第2页
第2页 / 共37页
简易信号分析仪设计报告.docx_第3页
第3页 / 共37页
简易信号分析仪设计报告.docx_第4页
第4页 / 共37页
简易信号分析仪设计报告.docx_第5页
第5页 / 共37页
简易信号分析仪设计报告.docx_第6页
第6页 / 共37页
简易信号分析仪设计报告.docx_第7页
第7页 / 共37页
简易信号分析仪设计报告.docx_第8页
第8页 / 共37页
简易信号分析仪设计报告.docx_第9页
第9页 / 共37页
简易信号分析仪设计报告.docx_第10页
第10页 / 共37页
简易信号分析仪设计报告.docx_第11页
第11页 / 共37页
简易信号分析仪设计报告.docx_第12页
第12页 / 共37页
简易信号分析仪设计报告.docx_第13页
第13页 / 共37页
简易信号分析仪设计报告.docx_第14页
第14页 / 共37页
简易信号分析仪设计报告.docx_第15页
第15页 / 共37页
简易信号分析仪设计报告.docx_第16页
第16页 / 共37页
简易信号分析仪设计报告.docx_第17页
第17页 / 共37页
简易信号分析仪设计报告.docx_第18页
第18页 / 共37页
简易信号分析仪设计报告.docx_第19页
第19页 / 共37页
简易信号分析仪设计报告.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易信号分析仪设计报告.docx

《简易信号分析仪设计报告.docx》由会员分享,可在线阅读,更多相关《简易信号分析仪设计报告.docx(37页珍藏版)》请在冰点文库上搜索。

简易信号分析仪设计报告.docx

简易信号分析仪设计报告

简易信号分析仪设计

摘要:

本次设计以32位单片机STM32为控制核心,由电压跟随器、程控放大电路、过零比较电路、衰减电路、波形显示等部分电路组成。

用等效采样方式对波形幅值进行检测,用过零检测方式对信号频率采样,用直流叠加电路,将双极性的信号,变为单极性信号。

并通过有效值与峰值的关系,实现对正弦波,三角波,方波等波形的判断。

采样的波形,用TFT真彩屏进行显示。

本设计可以实现对输入20Hz-200KHZ、0.05Vpp-10Vpp波形的判断,并可实现幅值、频率、有效值、失真度的检测。

关键词:

信号分析仪STM32等效采样A/D

一、系统方案

1、方案比较与选择

方案一:

用单片机STC12C5A60S2作为核心控制器件。

即由5A60S2、A/D转换器、D/A转换器及RAM存储器等组成系统。

若采用该方案,则单片机不仅要对数据进行处理,还要完成复杂的时序控制,且单片机对数据的处理速度较低,而题目要求的被测信号频率最高达到200KHz,难以达到设计要求。

方案二:

用STM32作为核心控制器件。

STM32片内有12位的高精度A/D,单路A/D采样速率最大可达1MHZ。

且STM32可以两路A/D交叉采样,采样速率最大可达2Mhz。

理论上满足设计的要求,且该芯片相比其它32位芯片功耗低,价格更便宜。

方案三:

用LPC2138作为核心控制器件。

LPC2138片内有16位的高精度A/D,CPU速率高达60MHZ,且LPC2138可以两路A/D交叉采样,采样速率最大可达2Mhz,程序存储器容量/512kb。

理论上满足设计的要求,且该芯片相比其它32位芯片功耗更低,价格便宜。

故本设计选用方案三。

2、系统方案描述

本简易信号分析仪用LPC2138作为数据处理及控制的核心,该核心又分为四大模块:

程控放大,频率采样、幅值采样及显示控制部分。

程控放大电路是将输入小信号进行放大;频率采样模块是通过过零检测电路输出的方波,采集信号的频率,LPC2138根据该频率的范围,改变幅值采样的速率;幅值采样模块通过LPC2138的A/D接口采集信号的幅值,幅值采样频率由信号的频率决定,根据幅值采样的结果,控制信号的放大倍数,算出信号峰峰值、有效值、及信号的类型。

电路中设计的直流叠加电路,将双极性的信号提高到0-3.3v以内,以便LPC2138采样。

本信号分析仪显示则利用普通模拟示波器的X-Y方式。

A/D转换后的模拟量经LPC2138处理好后,输出到屏幕上面显示。

在设计中,为了隔离前后级的影响,我们使用了电压跟随电路。

系统框图如图1.1所示。

图1.1系统框图

需要注意的是,本系统要处理的信号频率高达200kHZ。

并且要显示波形。

用两路A/D交叉采样最高2MHZ,仍然不能够将信号完整的显示出来,并且幅值也会检测不准。

所以A/D采样时,用到等效分析算法,解决这个问题。

在选择运放时,我们发现许多宽带集成运放都很容易产生自激,带宽不能满足要求,经过反复测试,最终选择了高速宽频带运放CA3140。

二、理论分析与计算

1、A/D采样分析

LPC2138的单路A/D采样速率最大为1MHZ,而输入信号的频率最高为200KHZ,如果仅仅用单路A/D采样,是不能完成对高频信号不失真的采样,所以在本设计中,我们创造性的用了等效采样的方法,达到用低速A/D对高频信号的采集的目的。

等效采样的原理如图2.1所示,由于周期信号在各周期内的波形完全相同,可以在各周期内的不同时刻分别采集数据,然后将采集的数据合成完整的采样波形。

第一次的采样时刻为周期原点,第二个周期到来后延时∆t后再进行第二次采样,第三次采样则是在第三个周期到来后再延时2∆t的时刻,以此类推。

将采集到的数据以间隔∆t顺序排列,即可恢复信号波形。

等效采样速率fs=1/∆t,而实际的采样频率fs´=1/(T+∆t),由于∆t<>fs´。

因此,利用等效采样技术可以用较低速的A/D实现对高频周期信号的采样。

图2.1等效采样原理图

LPC2138片内A/D有12位,3.3.V供电,A/D的转化精度Vref/(2^12)约为0.8mv,完全满足设计要求的3%的幅值误差。

三、电路与程序设计

1、电路设计

(1)放大器设计方案

本设计用程控放大器PGA202。

PGA202的增益为1、10、100、1000(十进制),带宽满足该设计范围。

程控放大器通过LPC2138控制放大倍数,当50mv1v,信号不进行放大。

电路通过PGA202与衰减电路的控制,可将信号Vpp维持在250mv至2.5v之间。

该电路主要元件还包含一个电压跟随器,电压跟随器主要进行阻抗变换,隔离前级电路与后级电路之间的影响。

从而增加对后级电路的驱动能力,增大输入阻抗,减小输出电阻。

放大电路如图3.1所示。

图3.1放大电路

(2)频率测量方案

频率的测量主要通过过零比较器实现,过零比较器采用LM393。

LM393是高增益,宽频带器件。

当信号大于零时输出高电平,当信号小于零时输出低电平。

信号输入时,MCU检测到电平跳变沿,定时器开始计时,当检测到第二个跳变沿时,停止计时,定时器的定时时间就是该信号的周期。

通过多次测量取平均值来提高频率的准确率。

频率测量电路如图3.2所示。

图3.2频率测量电路

(3)有效值、失真度测量,波形检测方案

有效值即为均方根,主要通过A/D采样的幅值进行计算。

均方根计算公式:

P=√(∑ⅹ^2/N),√为根号。

对于均方根和峰值的比,方波约等于1,正弦约等于0.5倍根号2,三角波约等于三分之一倍,可以据此判定波形。

(4)衰减电路方案

衰减电路将信号固定衰减1/4,该电路用精密电阻进行衰减,但由于高频时,电阻会有分布电容的存在,阻值选取不正确,会让波形失真,通过实际测量,选取2.2k左右的阻值的电阻,可以满足对信号的衰减要求。

并用可调电容151电容对其进行高频补偿。

衰减电路如图3.3所示。

图3.3衰减电路

(5)信号取样电路设计方案

由于LPC2138的A/D采样接口,内部有采样电路。

所以本次设计,未考虑外部采样电路,经实验,A/D采样效果能够达到设计的要求。

(6)直流叠加电路

直流叠加电路的输入是经程控放大器放大,衰减电路衰减过后的信号。

该信号Vpp在250mv至2.v之间,该电路是用加法器的原理,将直流叠加到交流上,实现交流的电位提升。

让电路的输出信号Vpp在0v至3v之间。

直流叠加电路如图3.4所示。

图3.4直流叠加电路

2、软件设计

(1)主流程图

(2)源程序(见附页)

四、系统调试与测试结果

1、调试

(1)测试仪器:

UTG9020D全数字任意波形发生器、UTD2052CEC示波器、DT9205A数字万用表。

(2)测试方法

硬件模块测试:

系统硬件由四个模块构成,所以分四部分进行调试。

首先对程控放大模块进行测试,在两个极限频率,两个极限幅值下测量,改变放大倍数,观察波形的质量,对电路参数进行调整。

其它模块测试过程一样,最后将所有模块连接在一起,进行测量。

软件模块测试:

采用自下而上的调试方式,先对模块测试程序的调试,待全部通过之后将所有的软件程序串接起来并结合硬件电路进行整体调试。

2、测试结果

100HZ-400KHZ,0.5Vpp~10Vpp的信号述如下,频率能够测准准,幅值能够测准,满足设计要求的3%,1%的误差,正弦波波形判断不准。

畸变信号失真度算不准。

能够正常显示波形。

4、结果分析

从测试数据可以看出,简易信号分析仪系统运行正常,能按照题目要求进行测试,并自动选择量程。

在周期信号频率范围为200Hz~20KHz,幅度变化范围为0.5Vpp~5Vpp的情况下,能完成以下参数测量:

(1)对正弦波、三角波、方波(无直流偏置,下同)三种输入信号,系统具备测量和数字显示信号的频率、电压峰峰值的功能;

(2)正弦波、三角波、方波频率的测量,测量误差小于1%;

(3)正弦波、三角波、方波电压峰峰值的测量,测量误差小于3%;

(4)对正弦波、三角波、方波三种输入信号,系统能自动识别波形并用符号指示。

扩大信号频率范围为20Hz~200KHz,输入电压范围为0.05Vpp~10Vpp的情况下,系统能完成以下测量:

(1)能够用LCD屏(点阵数不少于纵64*横128)显示信号波形,显示的波形大小适中,纵向应超过半屏,横向应有1至3个周期的波形,波形没有明显失真,同时指示出纵横向满屏的标度;

(2)完成信号频率和幅度(峰峰值)测量,误差分别小于1%和3%;

5、总结

经过这四天三夜的努力,我们实现了题目的基本要求,创造性的用了等效采样的方法,发挥部分也大部分实现了功能。

通过不断的硬件试验和程序调试,简易信号分析仪系统能较好的按照题目的要求运行。

但是好的结果总是经历不平凡的坎坷,期间我们曾不断调试电阻、电容,让其达到比较精确地目的。

由于时间紧,工作量大,加之我们经验不足,水平有限,系统还存在很多需要改进的地方。

经过改进,相信系统会更加具有说服力,并且更加美观大方。

本次竞赛极大地锻炼了我们各方面的能力,我们懂得了合作的重要性与思维的无限性。

虽然我们遇到了很多困难与障碍,但是总体上成功与挫折交织,困难与希望并存,今后我们将继续努力,争取更大进步。

参考文献

[1]童诗白,华成英.模拟电子技术基础.第三版.北京:

高等教育出版社,2001

[2]刘军.例说STM32.第一版.北京航空航天大学出版社,2011

[3]JopsephYiu,宋岩(译).Cortex-M3权威指南[M].北京:

清华大学出版社,2009

附页:

一、原理图

二、部分源程序

/******************************************************************/

/*自启动定时器匹配两路AD(P0.25-AD0.4,P0.13-AD1.4)采样电压并显示

波形,频率,峰峰值,有效值,失真度(涉及低频和高频采样的优化算法)*/

/******************************************************************/

#include"config.h"

#include"math.h"

#defineucharunsignedchar;

#defineuintunsignedint;

constuint32ck0=1<<28;

constuint32ck1=1<<29;

 

constuint32RS=1<<1;

constuint32RW=1<<3;

constuint32EN=1<<5;

constuint32PSB=1<<7;

#defineDATA0xFF<<18

uint8cnt1=0,cnt0=0;

//uint8s_f0[128],s_f1[128];

uint32s_f4[128],s_f5[129];//s_f3[128]

//uint32s_f6[128];

uint8cy_cnt=0,cy_cnt1=0,cy_cnt_zt=0;

uint32a0;//a0为上下沿同时捕获的第一个时刻

uint32a,b,c;//a为上升沿时刻值,b为下降沿时刻值,c为计数变量,flag为标志

uint8flag;

uint8FEND;//频率扫描结束标志位1表示频率扫描结束

uint8ADOVER;//AD采样128次结束标志位,为1表示采样结束

uint32TALL,T,F,Tc,T64,T641;//TALL为50个周期总时间,T为平均周期,F为频率,Tc为采样频率

uint8rcv_data;

uint8fsw,fw,fq,fb,fs,fg;//频率位:

百千,十千,千,百,十,个

uint8ge,shi,bai,qian;//AD0位值

uint8ge1,shi1,bai1,qian1;//AD1位值

uint16vpp;//双路AD中使用

uint16vr,Dt;//vr是有效值存储空间,Dt是失真度存储空间

uint16vpp;//双路AD中使用

uint16da,xiao;

uint16revise=0;//用于调整波形在中线附近显示

uint16AD0OUT[64];//AD0.4采样值存储数组

uint16AD1OUT[64];//AD1.4采样值存储数组

uint16adzhi[128];//AD采样值存储数组

uint16huitu[128];//用于绘图用

uint8boxing;//用于判断是什么波形1表示方波,2表示正弦波,3表示三角波

uint16paixu[128];

uint8buff[1024];

uint16vpp;//双路AD中使用

 

uint16AD0OUT[64];//AD0.4采样值存储数组

uint16AD1OUT[64];//AD1.4采样值存储数组

uint16adzhi[128];//AD采样值存储数组

uint16huitu[128];//用于绘图用

uint32ADC_Data04,ADC_Data14;//AD0.4采样瞬时值,AD1.4采样瞬时值

uint8sample_cnt0=0,sample_cnt=0,ad0sample_w=0,ad1sample_w=0,sampleflag[128],sample_w[128],sampleendflag=0;

uint8constdis0[]={"Vp/mV"};

uint8constdis1[]={"F/KHz"};

uint8constdis2[]={"Vr/mV."};

uint8constdis3[]={"Dt/%"};

uint8constdis4[]={"0123456789"};//频率对应数组

uint8constdis5[]={"FZS"};//分别是方波正弦波三角波的首字母

 

/*DelayNS()长软件延时*/

voidDelayNS(uint32dly)

{

uint32i;

for(;dly>0;dly--)

for(i=0;i<500;i++);

}

/*写指令数据到LCDRS=L,RW=L,E=脉冲,D0-D7=指令码。

*/

voidlcd_wcmd(uint8cmd)

{

IO0CLR=RS;

IO0CLR=RW;

DelayNS

(1);

IO0SET=EN;//打开并口

DelayNS

(1);

IO1PIN=(cmd)<<18;

DelayNS

(1);

IO0CLR=EN;//关闭并口这个函数怎么写,完全参照时序图去写,

}

 

/*写显示数据到LCDRS=H,RW=L,E=脉冲,D0-D7=数据。

*/

voidlcd_wdat(uint8dat)

{

IO0SET=RS;

IO0CLR=RW;

DelayNS

(1);

IO0SET=EN;

DelayNS

(1);

IO1PIN=(dat)<<18;

DelayNS

(1);

IO0CLR=EN;

}

/*LCD显示汉字初始化设定,只设必须的,若显示图片初始化设定得另外设定*/

voidlcd_init()

{

//unsignedinti;

IO0SET=PSB;//并口方式

lcd_wcmd(0x34);//扩充指令操作0011xRGLR=1扩充指令G=0关闭绘图显示L=0

DelayNS

(1);

lcd_wcmd(0x30);//基本指令操作

DelayNS

(1);

lcd_wcmd(0x08);//睡眠模式

DelayNS

(1);

lcd_wcmd(0x0C);//显示开,关光标00001DCBD=1整体显示,C=0关光标,B=0关游标位置

DelayNS

(1);

lcd_wcmd(0x01);//清除LCD的显示内容

DelayNS

(1);//改变启动时间长短

}

 

/*设定显示位置*/

voidlcd_pos(uint8X,uint8Y)

{

uint8pos;

if(X==0)

{X=0x80;}//参照12864PDF文档设定

elseif(X==1)

{X=0x90;}

elseif(X==2)

{X=0x88;}

elseif(X==3)

{X=0x98;}

pos=X+Y;

lcd_wcmd(pos);

}

/********************************************************************************************************

**

**清整个GDRAM空间

**

*********************************************************************************************************/

voidclrgdram()

{

unsignedcharx,y;

for(y=0;y<64;y++)

{

for(x=0;x<16;x++)

{

lcd_wcmd(0x34);

DelayNS

(1);

lcd_wcmd(y+0x80);//行地址

DelayNS

(1);

lcd_wcmd(x+0x80);//列地址

DelayNS

(1);

lcd_wcmd(0x30);

DelayNS

(1);

lcd_wdat(0x00);

DelayNS

(1);

lcd_wdat(0x00);

DelayNS

(1);

}

}

}

/********************************************************************************************************

**

**清除屏幕

**

*********************************************************************************************************/

voidclrscreen()

{

lcd_wcmd(0x30);

lcd_wcmd(0x01);

DelayNS

(1);

}

/*------------------显示图片------------------------*/

voidDisp_Img(unsignedchar*img)

{unsignedintj=0;

unsignedcharx,y,i;

for(i=0;i<9;i+=8)

for(y=0;y<32;y++)/*原来为y<26,上下两个半屏不能正常对接显示,导致显示的图片中间有空隙*/

for(x=0;x<8;x++)

{lcd_wcmd(0x36);//功能设置---8BIT控制界面,扩充指令集

lcd_wcmd(y+0x80);//行地址

lcd_wcmd(x+0x80+i);//列地址

lcd_wcmd(0x30);

lcd_wdat(img[j++]);

lcd_wdat(img[j++]);

}

}

//把AD转换的值转换成为以3300为基准电压源的电压值

voidzhuanhuan_ADout()

{

uint8i;

for(i=0;i<128;i++)

{

s_f4[i]=s_f4[i]*3300;

s_f4[i]=s_f4[i]/1024;

}

}

//求电压的峰峰值vpp////////////////////////////////////////////////////

voidqiuvpp()

{

uint8i,j;

uint16k;

revise=0;

for(i=0;i<128;i++)

{

paixu[i]=s_f4[i];//把值放排序数组中用于排序

}

for(i=0;i<128;i++)//把数组从小到大排序程序

{

for(j=0;j<127;j++)

{

if((paixu[j])>(paixu[j+1]))

{

k=paixu[j];

paixu[j]=paixu[j+1];

paixu[j+1]=k;

}

}

}

da=(paixu[124]+paixu[125]+paixu[126])/3;

xiao=(paixu[1]+paixu[2]+paixu[3])/3;

vpp=da-xiao;//求出vpp

}

//求电压的有效值和判断是什么波形////////////////////////////////////////

voidyouxiaoboxing()

{

uint8i;

uint32k,zhzhi,temp;

zhzhi=(da+xiao)/2;

k=0;

for(i=0;i<128;i++)

{

if(s_f4[i]>zhzhi)

temp=((s_f4[i]-zhzhi));

else

temp=((zhzhi-s_f4[i]));

k=k+temp*temp;//求出所有点的平方和

}

k=k/128;

vr=sqrt(k);//求出有效值

temp=(vpp*vpp)/4;

if(k>7*temp/10)

{

boxing=1;//表示为方波

}

elseif(k<2*temp/5)

{

boxing=3;//表示为正弦波

}

else

{

boxing=2;//表示为sanjiao波

}

}

//处理AD采样结果子程序//////////////////////////////////////////////////

voidhandle_AD(void)

{

uint8i=0,j=0,k=0;

revise=0;

for(i=0;i<128;i++)

{

huitu[i]=s_f4[i]/64;

}

revise=42-(vpp/2/64);//revise表示调整的意思,调整波形始终以中线为中心在上下两屏显示

for(i=0;i<128;i++)//列

{

for(j=0;j<64;j++)//行

{

k=63-huitu[i];//在哪一行

if(k==j)//若在第j行//i/8+16*j表示在哪行哪个字节(一行有16个字节)

buff[i/8+16*(j-revise)]=buff[

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2