基于proteus的模拟信号数字滤波及动态波形输出.docx

上传人:b****3 文档编号:26773324 上传时间:2023-06-22 格式:DOCX 页数:40 大小:216.48KB
下载 相关 举报
基于proteus的模拟信号数字滤波及动态波形输出.docx_第1页
第1页 / 共40页
基于proteus的模拟信号数字滤波及动态波形输出.docx_第2页
第2页 / 共40页
基于proteus的模拟信号数字滤波及动态波形输出.docx_第3页
第3页 / 共40页
基于proteus的模拟信号数字滤波及动态波形输出.docx_第4页
第4页 / 共40页
基于proteus的模拟信号数字滤波及动态波形输出.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

基于proteus的模拟信号数字滤波及动态波形输出.docx

《基于proteus的模拟信号数字滤波及动态波形输出.docx》由会员分享,可在线阅读,更多相关《基于proteus的模拟信号数字滤波及动态波形输出.docx(40页珍藏版)》请在冰豆网上搜索。

基于proteus的模拟信号数字滤波及动态波形输出.docx

基于proteus的模拟信号数字滤波及动态波形输出

 

智能仪器基础与设计

设计报告

学院(系):

机电工程学院

专业:

测控技术与仪器

学生:

指导教师:

完成日期:

2015年1月

智能仪器基础与设计

基于单片机C语言编程及LCD液晶显示器的

数字滤波显示系统设计

 

DesignofDigitalFilterandDisplaySystemBasedonClanguageProgrammingandSingle-ChipComputers

基于单片机C语言编程及LCD液晶显示器的

数字滤波显示系统设计

[摘要]本次实验设计的主要内容是在Proteus仿真环境下,借助单片机和c语言编程,实现对模拟信号的采集、滤波以及对滤波后信号的LCD动态显示。

本次设计主要采用了三中滤波方式:

平均值滤波、中位置滤波、递推平均滤波。

应用的主要器件有:

MCS-51单片机,TLC5498位串行AD,KS0108控制的12864LCD。

通过对叠加了噪声信号的模拟信号的模数转换实现信号采集,在单片机内部采用函数滤波滤出信号上面叠加的高频噪声,最后通过单片机控制两个LCD分别输出采集到的叠有噪声的信号和滤波后的结果。

[关键字]数字滤波LCD动态显示MCS-51TLC549KS010812864

 

[Abstract]ThisexperimentdesignismainlybasedontheenvironmentofProteus8.0,single-chipcomputerandClanguageprogramming.Thisdesignmanagedtocollectanalogsignal,filtersignalanddynamicdisplaysignalonLCD.Inthisdesign,weused3diffidentfiltermethods:

meanfilter;mediumfilter;recursiveaveragefiltering.Thedevicesweusedare:

MCS-51single-chipcomputer;8-bitserialADCTLC549;LCD12864withitsdriverKS0108.

[Keyword]DigitalfilteringLCDdynamicdisplayMCS-51TLC549KS010812864

 

1引言

1.1课题背景介绍

1.1数字滤波器的研究背景与意义

当今,数字信号处理技术正飞速发展,它不但自成一门学科,更是以不同形式影响和渗透到其他学科:

它与国民经济息息相关,与国防建设紧密相连;它影响或改变着我们的生产、生活方式,因此受到人们普遍的关注。

数字化、智能化和网络化是当代信息技术发展的大趋势,而数字化是智能化和网络化的基础,实际生活中遇到的信号多种多样,例如广播信号、电视信号、雷达信号、通信信号、导航信号、射电天文信号、生物医学信号、控制信号、气象信号、地震勘探信号、机械振动信号、遥感遥测信号,等等。

上述这些信号大部分是模拟信号,也有小部分是数字信号。

模拟信号是自变量的连续函数,自变量可以是一维的,也可以是二维或多维的。

大多数情况下一维模拟信号的自变量是时间,经过时间上的离散化(采样)和幅度上的离散化(量化),这类模拟信号便成为一维数字信号。

因此,数字信号实际上是用数字序列表示的信号,语音信号经采样和量化后,得到的数字信号是一个一维离散时间序列;而图像信号经采样和量化后,得到的数字信号是一个二维离散空间序列。

数字信号处理,就是用数值计算的方法对数字序列进行各种处理,把信号变换成符合需要的某种形式。

例如,对数字信号经行滤波以限制他的频带或滤除噪音和干扰,或将他们与其他信号进行分离;对信号进行频谱分析或功率谱分析以了解信号的频谱组成,进而对信号进行识别;对信号进行某种变换,使之更适合于传输,存储和应用;对信号进行编码以达到数据压缩的目的,等等。

数字滤波技术是数字信号分析、处理技术的重要分支。

无论是信号的获取、传输,还是信号的处理和交换都离不开滤波技术,它对信号安全可靠和有效灵活地传输是至关重要的。

在所有的电子系统中,使用最多技术最复杂的要算数字滤波器了。

数字滤波器的优劣直接决定产品的优劣。

2各部分器件功能及使用方法介绍:

2.1MCS-51单片机:

图2.1-2

在HMOS技术大发展的背景下,Intel公司在MCS-48系列的基础上MCS-51系列单片机[1],于1980年推出了8位MCS-51系列单片机。

它与以前的机型相比,功能增强了许多,就其指令和运行速度而言,超过了INTEL8085的CPU和Z80的CPU,成为工业控制系统中较为理想的机种。

较早的MCS-51典型时钟为12MHz,而目前与MCS-51单片机兼容的一些单片机的时钟频率达到40MHz甚至更高,现在已有400MHz的单片机问世。

 

51系列是基本型,包括8051、8751、8031、8951.这四个机种区别,仅在于片内程序储存器。

8051为4KBROM,8751为4KBEPROM,8031片内无程序储存器,8951为4KBEEPROM。

其他性能结构一样,有片内128BRAM,2个16位定时器/计数器,5个中断源。

其中,8031性价比较高,又易于开发,目前应用面广泛。

51系列单片机的特点

-8位cpu

-片内带振荡器,频率范围为1.2MHz~12MHz

-片内带128B的数据存储器

-片内带4KB的程序存储器

-程序存储器的寻址空间为64KB

-片外数据存储器的寻址空间为64KB

-128个用户位寻址空间

-21个字节特殊功能寄存器

-4个8位的I/O并行接口:

P0、P1、P2、P3

-两个16位定时、计数器

-两个优先级别的五个中断源

-一个全双工的串行I/O接口,可多机通信

-111条指令,包含乘法指令和除法指令

-片内采用单总线结构

-有较强的位处理能力

-采用单一+5V电源

2.2AD转换器TLC549:

TLC549是TI公司生产的一种低价位、高性能的8位A/D转换器,它以8位开关电容逐次逼近的方法实现A/D转换,其转换速度小于17us,最大转换速率为40000HZ,4MHZ典型内部系统时钟,电源为3V至6V。

它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。

图2.2-1

图2.2-2

 

TLC549引脚图:

REF+:

正基准电压输入2.5V≤REF+≤Vcc+0.1。

REF-:

负基准电压输入端,-0.1V≤REF-≤2.5V。

且要求:

(REF+)-(REF-)≥1V。

VCC:

系统电源3V≤Vcc≤6V。

GND:

接地端。

/CS:

芯片选择输入端,要求输入高电平VIN≥2V,输入低电平VIN≤0.8V。

DATAOUT:

转换结果数据串行输出端,与TTL电平兼容,输出时高位在前,低位在后。

ANALOGIN:

模拟信号输入端,0≤ANALOGIN≤Vcc,当ANALOGIN≥REF+电压时,转换结果为全“1”(0FFH),ANALOGIN≤REF-电压时,转换结果为全“0”(00H)。

I/OCLOCK:

外接输入/输出时钟输入端,同于同步芯片的输入输出操作,无需与芯片内部系统时钟同步。

TLC549工作时序:

当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB(A7)自DATAOUT端输出,接着要求自I/OCLOCK端输入8个外部时钟信号,前7个I/OCLOCK信号的作用,是配合TLC549输出前次转换结果的A6-A0位,并为本次转换做准备:

在第4个I/OCLOCK信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个I/OCLOCK信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。

转换时间为36个系统时钟周期,最大为17us。

直到A/D转换完成前的这段时间内,TLC549的控制逻辑要求:

或者/CS保持高电平,或者I/OCLOCK时钟端保持36个系统时钟周期的低电平。

由此可见,在自TLC549的I/OCLOCK端输入8个外部时钟信号期间需要完成以下工作:

读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。

 

2.3LCD液晶显示器12864:

KS0108B专用于图形点阵显示的液晶显示控制器,每一个KS0108B芯片内置8x64字节显示RAM,可直接控制显示64x64点的LCD显示,用户只需要向KS0108B的显示RAM中送数据,KS0108B就会自动扫描将显示RAM的数据自动在LCD液晶显示器上显示出来。

显示操作的指令仅有5条,使用起来极其方便。

宽电压工作范围:

2.7-5.5V;

与单片机连接为8位数据线+3根控制线的连接方式;

512字节显示RAM:

显示64x64图形点;

自带64SEG的液晶驱动电路;

图2.3-1

图2.3-2

 

3数字滤波器设计:

3.1数字滤波原理介绍:

数字滤波方法有很多种,如中值滤波、算术平均滤波、加权平均滤波,限幅滤波等等。

本次课程设计我选用的是限幅滤波方法和中位值滤波法

注:

本程序中,滤波时间常数完全由滤波函数中的delay()函数的设定值决定。

除限幅滤波之外,如果不在滤波函数中加延迟或者延迟时间设置不当会造成滤波结果不理想。

3.1.1限副滤波

A、方法:

根据经验判断,确定两次采样允许的最大偏差值(设为A)

每次检测到新值时判断:

如果本次值与上次值之差<=A,则本次值有效

如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值

B、优点:

能有效克服因偶然因素引起的脉冲干扰

C、缺点

无法抑制那种周期性的干扰

平滑度差

程序:

/*A值可根据实际情况调整

value为有效值,new_value为当前采样值

滤波程序返回有效的实际值*/

#defineA10

charvalue;

charfilter()

{

charnew_value;

new_value=get_ad();

if((new_value-value>A)||(value-new_value>A))

returnvalue;

else

returnnew_value;

}

3.1.2中位值滤波法

A、方法:

连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值

B、优点:

能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果

C、缺点:

对流量、速度等快速变化的参数不宜

程序:

/*N值可根据实际情况调整

排序采用冒泡法*/

#defineN11

charfilter()

{

charvalue_buf[N];

charcount,i,j,temp;

for(count=0;count

{

value_buf[count]=get_ad();

delay();

}

for(j=0;j

{

for(i=0;i

{

if(value_buf[i]>value_buf[i+1])

{

temp=value_buf[i];

value_buf[i]=value_buf[i+1];

value_buf[i+1]=temp;

}

}

}

returnvalue_buf[(N-1)/2];

}

3.1.3算术平均滤波法

A、方法:

连续取N个采样值进行算术平均运算

N值较大时:

信号平滑度较高,但灵敏度较低

N值较小时:

信号平滑度较低,但灵敏度较高

N值的选取:

一般流量,N=12;压力:

N=4

B、优点:

适用于对一般具有随机干扰的信号进行滤波

这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动

C、缺点:

对于测量速度较慢或要求数据计算速度较快的实时控制不适用

比较浪费RAM  

程序:

#defineN12

charfilter()

{

intsum=0;

for(count=0;count

{

sum+=get_ad();

delay();

}

return(char)(sum/N);

}

3.1.4递推平均滤波法(又称滑动平均滤波法)(FIR前身)

A、方法:

把连续取N个采样值看成一个队列

队列的长度固定为N

每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)

把队列中的N个数据进行算术平均运算,就可获得新的滤波结果

N值的选取:

流量,N=12;压力:

N=4;液面,N=4~12;温度,N=1~4

B、优点:

对周期性干扰有良好的抑制作用,平滑度高

适用于高频振荡的系统

C、缺点:

灵敏度低

对偶然出现的脉冲性干扰的抑制作用较差

不易消除由于脉冲干扰所引起的采样值偏差

不适用于脉冲干扰比较严重的场合

比较浪费RAM

程序:

#defineN12

charvalue_buf[N];

chari=0;

charfilter()

{

charcount;

intsum=0;

value_buf[i++]=get_ad();

if(i==N)i=0;

for(count=0;count

sum+=value_buf[count];

return(char)(sum/N);

}

3.1.5中位值平均滤波法(又称防脉冲干扰平均滤波法)

A、方法:

相当于“中位值滤波法”+“算术平均滤波法”

连续采样N个数据,去掉一个最大值和一个最小值

然后计算N-2个数据的算术平均值

N值的选取:

3~14

B、优点:

融合了两种滤波法的优点

对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差

C、缺点:

测量速度较慢,和算术平均滤波法一样

比较浪费RAM

程序:

#defineN12

charfilter()

{

charcount,i,j;

charvalue_buf[N];

intsum=0;

for(count=0;count

{

value_buf[count]=get_ad();

delay();

}

for(j=0;j

{

for(i=0;i

{

if(value_buf[i]>value_buf[i+1])

{

temp=value_buf[i];

value_buf[i]=value_buf[i+1];

value_buf[i+1]=temp;

}

}

}

for(count=1;count

sum+=value[count];

return(char)(sum/(N-2));

}   

3.1.6限幅平均滤波法

A、方法:

相当于“限幅滤波法”+“递推平均滤波法”

每次采样到的新数据先进行限幅处理,

再送入队列进行递推平均滤波处理

B、优点:

融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差

C、缺点:

比较浪费RAM

程序略参考子程序1、3

3.1.7一阶滞后滤波法

A、方法:

取a=0~1

本次滤波结果=(1-a)*本次采样值+a*上次滤波结果

B、优点:

对周期性干扰具有良好的抑制作用适用于波动频率较高的场合

C、缺点:

相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号

程序:

/*为加快程序处理速度假定基数为100,a=0~100*/

#definea50

charvalue;

charfilter()

{

charnew_value;

new_value=get_ad();

return((100-a)*value+a*new_value);

}

3.1.8加权递推平均滤波法

A、方法:

是对递推平均滤波法的改进,即不同时刻的数据加以不同的权

通常是,越接近现时刻的数据,权取得越大。

给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低

B、优点:

适用于有较大纯滞后时间常数的对象

和采样周期较短的系统

C、缺点:

对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差

程序:

/*coe数组为加权系数表,存在程序存储区。

*/

#defineN12

charcodecoe[N]={1,2,3,4,5,6,7,8,9,10,11,12};

charcodesum_coe=1+2+3+4+5+6+7+8+9+10+11+12;

charfilter()

{

charcount;

charvalue_buf[N];

intsum=0;

for(count=0,count

{

value_buf[count]=get_ad();

delay();

}

for(count=0,count

sum+=value_buf[count]*coe[count];

return(char)(sum/sum_coe);

}

3.2单片机电路:

使用51系列单片机——AT89C51,利用这个单片机进行编程,实现对输入信号的滤波。

使用P1口作为接受AD转换器TLC549的结果的端口,P1.4-P1.7连接四个开关控制滤波算法选择。

P0口输出显示数据,P2、P3分别作为控制端控制两个LCD液晶显示器显示。

图3.2-1

3.3数据采集电路:

图3.3-1

TLC549是8位穿行输出AD转换器,模拟量从AIN输入后,电压值在+REF和-REF之间的输入信号会被转换成数字量从SDO串行输出。

引脚连线如上图

3.4LCD液晶显示电路:

单片机P0连接两个LCD12864显示器输出显示数据。

P2、P3口作为LCD控制端。

引脚连接图如下:

图3.4-1

3.5总电路图

图3.5-1

4程序设计:

4.1程序流程图:

4.2总程序关键点解析:

仿真采用的AD转换器是TLC549,这是一个8位串行输出AD,8位一个一个输入单片机时用变量ad暂存,每输入完成一个字节,再从ad转存到变量a中保存。

对应主程序中的TLC549()和TLC549_Get()子程序

本程序采用三种滤波方式,分别为平均值滤波,中位值滤波,递推平均滤波。

而这三种滤波方式的滤波原理具体来说都是需要先采样多个新号,处理后输出一个信号,所以都可以看做是低通滤波。

滤波常数设定由滤波函数中的delay_filter函数设定值决定。

延迟过小会造成无法滤除高频噪声,延迟过大会造成有效信号失真,要根据所要求滤除的信号灵活设定滤波常数。

在噪声频率大于等于有效信号频率40倍时滤波效果较好。

当两个LCD同时输出时,由于需要轮流进行,而LCD不具备计时功能,所以输出波形的点数(直观表现为波形周期)会比一个LCD单独输出时少。

但其实信号的周期不论是有效信号还是滤波后信号,周期并没有发生变化。

这程序还有点问题没有解决,一是显示的初始坐标没有设定好,第一屏信号会从LCD最左边输出,造成坐标图的覆盖。

二是两个LCD同时输出的时候,第一个LCD不知为啥就不清屏了。

有时间还得在研究研究。

4.3LCD12864驱动子程序头文件:

#include

#define_LCD12864_h

#defineucharunsignedchar

#defineuintunsignedint

voiddelay(uintk);

voidwcode_1(ucharcom,ucharcs1,ucharcs2);

voidwcode_2(ucharcom,ucharcs1,ucharcs2);

voidwdata_1(ucharda,ucharcs1,ucharcs2);

voidwdata_2(ucharda,ucharcs1,ucharcs2);

voidset_startline_1(uchari);

voidset_startline_2(uchari);

voidset_adr_1(ucharx,uchary);

voidset_adr_2(ucharx,uchary);

voidclear_1(void);

voidclear_2(void);

voidiniti_LCD_1(void);

voidiniti_LCD_2(void);

sbitCS2_1=P2^1;

sbitCS1_1=P2^0;

sbitRS_1=P2^2;

sbitRW_1=P2^3;

sbitE_1=P2^4;

sbitCS2_2=P3^1;

sbitCS1_2=P3^0;

sbitRS_2=P3^5;

sbitRW_2=P3^6;

sbitE_2=P3^7;

voidiniti_LCD_1(void)

{wcode_1(0x3f,1,1);

set_startline_1(0);

clear_1();

}

voidiniti_LCD_2(void)

{wcode_2(0x3f,1,1);

set_startline_2(0);

clear_2();

}

voiddelay(uintk)

{

while(k--);

}

voidwcode_1(ucharcom,ucharcs1,ucharcs2)

{

CS1_1=cs1;

CS2_1=cs2;

RW_1=0;

RS_1=0;

P0=com;

E_1=0;

delay(10);

E_1=1;

delay(10);

E_1=0;

}

voidwcode_2(ucharcom,ucharcs1,ucharcs2)

{

CS1_2=cs1;

CS2_2=cs2;

RW_2=0;

RS_2=0;

P0=com;

E_2=0;

delay(10);

E_2=1;

delay(10);

E_2=0;

}

voidwd

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

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1