基于C单片机的数字滤波要点.docx

上传人:b****2 文档编号:17274897 上传时间:2023-07-23 格式:DOCX 页数:21 大小:419.46KB
下载 相关 举报
基于C单片机的数字滤波要点.docx_第1页
第1页 / 共21页
基于C单片机的数字滤波要点.docx_第2页
第2页 / 共21页
基于C单片机的数字滤波要点.docx_第3页
第3页 / 共21页
基于C单片机的数字滤波要点.docx_第4页
第4页 / 共21页
基于C单片机的数字滤波要点.docx_第5页
第5页 / 共21页
基于C单片机的数字滤波要点.docx_第6页
第6页 / 共21页
基于C单片机的数字滤波要点.docx_第7页
第7页 / 共21页
基于C单片机的数字滤波要点.docx_第8页
第8页 / 共21页
基于C单片机的数字滤波要点.docx_第9页
第9页 / 共21页
基于C单片机的数字滤波要点.docx_第10页
第10页 / 共21页
基于C单片机的数字滤波要点.docx_第11页
第11页 / 共21页
基于C单片机的数字滤波要点.docx_第12页
第12页 / 共21页
基于C单片机的数字滤波要点.docx_第13页
第13页 / 共21页
基于C单片机的数字滤波要点.docx_第14页
第14页 / 共21页
基于C单片机的数字滤波要点.docx_第15页
第15页 / 共21页
基于C单片机的数字滤波要点.docx_第16页
第16页 / 共21页
基于C单片机的数字滤波要点.docx_第17页
第17页 / 共21页
基于C单片机的数字滤波要点.docx_第18页
第18页 / 共21页
基于C单片机的数字滤波要点.docx_第19页
第19页 / 共21页
基于C单片机的数字滤波要点.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于C单片机的数字滤波要点.docx

《基于C单片机的数字滤波要点.docx》由会员分享,可在线阅读,更多相关《基于C单片机的数字滤波要点.docx(21页珍藏版)》请在冰点文库上搜索。

基于C单片机的数字滤波要点.docx

基于C单片机的数字滤波要点

HUBEINORMALUNIVERSITY

综合课程设计

(一)

IntegratedCurriculumDesign

(1)

 

所在院系

教育信息与技术学院

专业名称

信息工程

班级

1005

题目

基于单片机的数字滤波器

指导教师

成员

完成时间

2013.1.7

任务分工:

尤杉:

整体系统设计及编程调试。

柯俊:

进行资料的查询。

钱德超:

辅助编程,及proteus电路图的绘制。

陈小浩:

完成word文档的编辑。

摘要I

1绪论1

1.1仿真软件介绍1

1.2数字滤波器介绍1

2单片机和AD/DA相关知识3

2.151单片机相关知识3

2.2AD转换器相关知识4

2.3DA转换器相关知识5

3数字滤波器设计6

3数字滤波器系统设计6

3.1数字滤波器理论分析设计6

3.2单片机电路7

3.3数据采集电路8

3.4数模转换输出电路9

3.5数字电压表系统电路原理图10

4程序设计10

4.1程序流程图11

4.2AD转换器程序12

4.3程序代码13

6心得与体会20

参考文献21

1绪论

1.1仿真软件介绍

现代工业控制系统中,电路系统越来越复杂,因而带来的相互干扰也越来越强烈,模拟滤波电路已经不能满足要求,数字滤波应运而生。

数字滤波器的实现过程的实现过程是把输入的模拟信号数字化,也就是由采样器对输入的模拟信号进行周期性的采样,并对每个样本进行量化和编码,即模数转换。

从ADC输出的数字信号送入到数字信号处理器进行处理变化,处理器输出的数字信号再通过数模转换为模拟信号,这个过程要用到DAC来转换实现模拟信号的输出。

1.2数字滤波器介绍

ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。

它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:

(1)现了单片机仿真和SPICE电路仿真相结合。

具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

(2)支持主流单片机系统的仿真。

目前支持的单片机类型有:

68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

(3)提供软件调试功能。

在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。

(4)具有强大的原理图绘制功能。

可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。

还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。

配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:

*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。

PROTEUS是单片机课堂教学的先进助手。

 

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。

前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。

这在相当程度上替代了传统的单片机实验教学的功能,例:

元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

课程设计、毕业设计是学生走向就业的重要实践环节。

由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。

 

2单片机和AD/DA相关知识

2.151单片机相关知识

51单片机是对目前所有兼容intel8031指令系统的单片机的统称。

该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。

单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。

51系列单片机内包含以下几个部件:

一个8位CPU;一个片内振荡器及时钟电路;

4KB的ROM程序存储器;

一个128B的RAM数据存储器;

寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;

32条可编程的I/O口线;

两个16位定时/计数器;

一个可编程全双工串行口;

5个中断源、两个优先级嵌套中断结构。

51系列单片机如下图:

图151单片机引脚图

2.2AD转换器相关知识

ADC0808是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式AD转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

(1)主要特性:

  1)8路输入通道,8位A/D转换器,即分辨率为8位。

  2)具有转换起停控制端。

  3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时) 

  4)单个+5V电源供电

  5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

  6)工作温度范围为-40~+85摄氏度

  7)低功耗,约15mW。

(2)内部结构

ADC0808是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。

图2ADC0808引脚

2.3DA转换器相关知识

根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:

直通方式、单缓冲方式和双缓冲方式。

主要性能如下:

  

(1)分辨率为8位;

 

(2)电流稳定时间1us;

  (3)可单缓冲、双缓冲或直接数字输入;

  (4)只需在满量程下调整其线性度;

  (5)单一电源供电(+5V~+15V);

(6)低功耗,20mW。

DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。

所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料见下图:

D/A转换结果采用电流形式输出。

若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。

运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。

DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。

图2ADC0809引脚

图2ADC0809引脚

图3DAC0832引脚

 

3数字滤波器系统设计

3.1数字滤波器理论分析设计

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

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

限幅滤波的基本原理是把两次相邻时刻(n和n-1)的采样值Yn和Yn-1相减,求出其差值,以绝对值表示,然后将这个差值与两次采样允许的最大偏差值ΔY比较,如果两次采样值的差值超过了允许的最大偏差值ΔY,则认为发生了随机干扰,并认为最后一次采样值Yn非法,应予剔除。

剔除Yn后,可用Yn-1代替Yn;若未超过允许的最大偏差值范围,则认为本次采样值有效。

可用如下公式表示:

|Yn-Yn-1|≤ΔY;则Yn有效

|Yn-Yn-1|>ΔY;则Yn-1有效

此算法的样例子程序如下:

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

chardata;   //上一次的数据

charfilter_1()

{

chardatanew; //新数据变量

datanew=get_data();  //获得新数据

//滤波算法

ucharfilter1()

{

ucharnew_value,value;

value=get_data(N-2);//把第十个值给value

new_value=get_data(N-1);//第十一个值给new_value

if((new_value-value>A)||(value-new_value>A))//如果差值大于0.002

returnvalue;

returnnew_value;

//中位值滤波算法

voidfilter2()

{

intcount,i,j;//定义存储数据的数组

uchartemp;//定义存储数据的数组

for(count=0;count

{

buf[count]=get_data(count);

}

for(j=0;j

{

for(i=0;i

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

{temp=buf[i];

buf[i]=buf[i+1];

buf[i+1]=temp;

}

}

res=buf[(N-1)/2];//11个数排序后取中间的数值

}

该算法主要用于处理变化比较缓慢的数据,如温度、物体的位置等。

使用时关键在于最大偏差值的Δy的选择,通常可根据经验获得,也可按照输出参数可能的最大变化速度Vmax及采样周期T来决定ΔY的值,即ΔY=VmaxT。

3.2整体框架

整体框架图如下:

3.1单片机最小系统如下:

图4单片机最小系统

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

我使用了P0口作为接受AD转换的结果的端口,而P1口则输出数据到DA转换器。

另外还利用了P2作为控制端口,P2.0-P2.2用来控制AD转换器,而P1.0-P1.3外接四个开关,用来实现滤波方式的选择。

3.3数据采集电路

由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000~111分别选中IN0~IN7。

ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。

CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为500KHz-600kHZ。

START为AD转换启动信号,正脉冲启动ADDA~ADDC选中的一路模拟信号开始转换。

OE为输出允许信号,高电平时候打开三态输出缓存器,是转换后的数字量从D0~D7输出。

EOC为转换结束信号,启动转换后EOC变为低电平,转换完成后EOC编程高电平。

图5ADC模数转换

3.4数模转换输出电路

这里我用了DA0832来进行数模转换。

DA0832的引脚图如下图所示:

图6DAC数模转换

DA0832有三种数模转换方法,直通方式、单缓冲方式、双缓冲方式,因为单片机输出后可以直接进行数模转换,所以这里我采用了不需要单片机控制的最为简单的直通方式,但是DA0832若用于直通方式。

若用于直通方式下,则GND均接地,而VCC和ILE则接正电源。

VREF是参考电源。

IOUT1、IOUT2是两个输出端。

DA0832输出的是电流,要利用运算放大器转换成电压信号。

3.5数字电压表系统电路原理图

如下是此次设计仿真的数字滤波器电路总原理图。

此图总共分为三个部分,分别是采用电路ADC,处理分析部分单片机,调理信号输出部分DAC。

图8数字滤波器设计总原理图

4程序设计

4.1程序流程图

图9程序流程图

4.2程序代码

#include

#defineucharunsignedchar

#defineA0.002

#defineN11

sbitcon1=P1^0;//滤波方法选择

sbitcon2=P1^1;

sbitkey=P1^4;//控制是否滤波

sbitled=P1^5;

sbitOE=P3^0;

sbitSTART=P3^1;

sbitEOC=P3^2;

sbitCLOCK=P3^4;

uchara;

ucharres;

ucharbuf[N]={0};

voidADC0808();//模数转换函数声明

voidchange();//数值更新函数声明

ucharget_data(n);

ucharfilter1();//限幅滤波函数声明

voidfilter2();//中值滤波函数声明

voiddelay(ucharz);

voidinint();

voidmain()//主函数

{

while

(1)

{

inint();

ADC0808();

P2=res;

}}

voidADC0808()

{

START=0;

START=1;

START=0;

led=0;

EOC=~EOC;//取反负跳变进入外部中断

delay

(1);

if(key==0)

{

if(con1==0)//选择限幅滤波

res=filter1();

if(con2==0)//选择中值滤波

filter2();

}

elseres=a;

}

voidchange()

{

uchari;

for(i=0;i

buf[i]=buf[i+1];

buf[N-1]=a;

}

ucharget_data(n)//数据更新

{

change();

returnbuf[n];

}

//限幅滤波

ucharfilter1()

{

ucharnew_value,value;

value=get_data(N-2);//把第十个值给value

new_value=get_data(N-1);//第十一个值给new_value

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

returnnew_value;

}

//中值滤波法

voidfilter2()

{

intcount,i,j;//定义存储数据的数组

uchartemp;//定义存储数据的数组

for(count=0;count

{

buf[count]=get_data(count);

}

for(j=0;j

{

for(i=0;i

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

{temp=buf[i];

buf[i]=buf[i+1];

buf[i+1]=temp;

}

}

res=buf[(N-1)/2];//11个数排序后取中间的数值

}

voidexter0()interrupt0

{led=1;

P0=0xff;//P0端口作为输入预先置1

OE=1;//使能输出置1

a=P0;

OE=0;//使能输出关闭

}

voidtimer0()interrupt1//产生500KhZ提供给ADC0808

{

TH0=(65536-2)/256;

TL0=(65536-2)%256;

CLOCK=~CLOCK;

}

voidtimer1()interrupt3//采样频率20HZ

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

a=P0;

}

voidinint()

{TMOD=0x11;//设置定时器工作方式

TH0=(65536-2)/256;//装初值

TL0=(65536-2)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;//开总中断

ET0=1;//开定时器0中断

TR0=1;//启动定时器0中断

ET1=1;//开定时器1,启动定时器1

TR1=1;

EX0=1;//开外部中断

IT0=1;//外部中断触发方式

}

voiddelay(ucharz)//延时函数

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);}

 

5仿真及结果分析

通过正确的编写程序和不断调试发现,比较理想的滤波效果是中位值滤波,先幅滤波效果不太理想,下面给出两种滤波图型:

限幅滤波

中位值滤波:

当噪声信号的频率为1,幅度为4时,有效信号频率为5,幅度为1事,出现严重失真,图形如下:

当噪声信号的频率为50,幅度为1时,有效信号频率为5,幅度为2,滤波比较理想,图形如下:

结果分析:

限幅滤波的效果是和A值有关的,一般情况下,A值越小,则代表允许的噪声要越小,限幅滤波很适用于使幅值突变的噪声。

限幅滤波适用于变化缓慢的场合,比如主要用于处理变化比较缓慢的数据,如温度、物体的位置等。

使用时关键在于最大偏差值的Δy的选择,通常可根据经验获得。

而且通过仿真过程中不断修改A的值,滤波效果会明显发生变化,通过改变信号的频率,滤波的结果也会发生明显变化,当信号的频率过高时,滤波效果会使最终的波形发生明显的失真现象。

中位值滤波和噪声信号的频率及幅度有一定关系,当噪声频率较小时,幅度较大滤波效果不是很理想。

6心得与体会

通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计、组装并调试一个数字电压表测量系统。

需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。

在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。

动手能力得到很大的提高。

从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。

在以后学习中我要加强对使用电路的设计和选用能力。

但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。

把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。

这对今后从事技术工作无疑是个很好的训练。

通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。

同时也让我充分认识到自己的空想与实践的差别,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。

还有就是每次在组团做试验都会感觉特别的充实,我们可以按照自己设计的电路去完成,老师也不是死板的要求我们怎么怎么,而是给了我们尽可能大的自己决定的余地,这次的元器件都是按照我们设计出来的电路参数给定的,而且每位老师都很耐心的为我们解决试验中所出现的问题,最后真心的感谢老师对我们课程设计的建议和帮助,我们才得以圆满的完成这次课程设计!

 

参考文献

[1]李群芳,肖看.单片机原理接口与应用.北京:

清华大学出版社,2005。

[2] 陈小忠.单片机实用接口技术子程序[M].人民邮电出版社,2005。

[3] 阎石.数字电子技术基础(第三版).北京:

高等教育出版社,2003。

[4] 高峰.单片微机应用系统设计及应用技术.北京:

机械工业出版社,2004。

[5]郭天祥51单片机c语言教程.电子工业出版社。

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

当前位置:首页 > 农林牧渔 > 畜牧兽医

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

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