基于数字滤波的单片机仿真和C语言开发.doc

上传人:土8路 文档编号:10356362 上传时间:2021-05-11 格式:DOC 页数:22 大小:843KB
返回 下载 相关 举报
基于数字滤波的单片机仿真和C语言开发.doc_第1页
第1页 / 共22页
基于数字滤波的单片机仿真和C语言开发.doc_第2页
第2页 / 共22页
基于数字滤波的单片机仿真和C语言开发.doc_第3页
第3页 / 共22页
基于数字滤波的单片机仿真和C语言开发.doc_第4页
第4页 / 共22页
基于数字滤波的单片机仿真和C语言开发.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《基于数字滤波的单片机仿真和C语言开发.doc》由会员分享,可在线阅读,更多相关《基于数字滤波的单片机仿真和C语言开发.doc(22页珍藏版)》请在三一文库上搜索。

1、目 录1 软件介绍11.1 protues软件介绍11.2 Keil软件22 主要元器件介绍32.1 51单片机相关知识32.2 ADC0808相关知识52.3 DAC0832相关知识53 数字滤波器设计原理及方法63.1中值滤波器设计原理计算法63.2 AD转换电路83.3 DA转换模块94 创新拓展模块94.1 2*2矩阵键盘94.2 增加的三类滤波器介绍115 整体电路图设计126 程序代码127 仿真结果及分析177.1 仿真波形图177.2 结果分析198 心得体会209 参考文献211 软件介绍1.1 protues软件介绍Proteus ISIS是英国Labcenter公司开发的

2、电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(3) 提供软件调试功能。在硬件仿真系统

3、中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。(4) 具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本章介绍Proteus ISIS软件的工作环境和一些基本操作。特点:支持ARM7,PIC ,AVR,HC11以及8051系列的微处理器CPU模型,更多模型正在开发中: 交互外设模型有LCD显示、RS232终端、通用键盘、开关、按钮、LED等;强大的调试功能,如访问寄存器与内存,设置断点和

4、单步运行模式;支持如IAR、Keil和Hitech等开发工具的源码C和汇编的调试;一键“make”特性:一个键完成编译与仿真操作;内置超过6000标准SPICE模型,完全兼容制造商提供的SPICE模型;DLL界面为应用提供特定的模式;基于工业标准的SPICE3F5混合模型电路仿真器。14种虚拟仪器:示波器、逻辑分析仪、信号发生器、规程分析仪等。1.2 Keil软件Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个

5、功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51开发系统基本知识Keil C51开发系统基本知识 (1)系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之

6、高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 (2)Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试

7、,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。2 主要元器件介绍2.1 51单片机相关知识1. MCS-51单片机的结构及编程方法 MCS-51单片机的组成: CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、I/O口(串口、并口)、内23部总线 和中断系统等。组成框图如下: 8051单片机的组成框图(1)cpu中央处理器 由运算器和控制器组成,是8位的cpu,具有布尔运算和8位寻址功能。运算器完成算术运算和逻辑运算

8、。CPU根据PC中的地址将欲执行指令的指令码从存储器中取出,存放在IR中,ID对IR中的指令码进行译码,定时控制逻辑在OSC配合下对ID译码后的信号进行分时,以产生执行本条指令所需的全部信号。(2) 存储器MCS-51单片机按程序存储器可分为内部无ROM型(如8031)和内部有ROM型(如8051)两种,连接时 引脚有区别。程序存储器结构如右图所示:程序存储器 :一般将只读存储器(ROM)用做程序存储器。可寻址空间为64KB,用于存放用户程序、数据和表格等信息。数据存储器:一般将随机存储器(RAM)用做数据存储器。可寻址空间为64KB。MCS-51数据存储器可分为片内和片外两部分。(3) 特殊

9、功能寄存器(SFR) MCS-51有21个特殊功能寄存器(也称为专用寄存器),包括算术运算寄存器、指针寄存器、I/O口锁存器、定时器/计数器、串行口、中断、状态、控制寄存器等,它们被离散地分布在内部RAM的80HFFH地址单元中(不包括PC) ,共占据了128个存储单元,构成了SFR存储块。其字节地址可被8整除的SFR可位寻址。SFR反映了MCS-51单片机的运行状态。80C51内部结构(4) I/O接口 I/O接口是MCS-51单片机对外部实现控制和信息交换的必经之路,用于信息传送过程中的速度匹配和增加它的负载能力。8051内部有4个8位并行接口P0, P1, P2, P3,有1个全双工的可

10、编程串行I/O接口。(5) 定时器/计数器8051内部有两个16位可编程序的定时器/计数器,均为二进制加1计数器,分别命名为T0和T1。(6) 中断系统 8051可处理5个中断源(2个外部,3个内部)发出的中断请求,并可对其进行优先权处理。外部中断的请求信号可以从P3.2, P3.3引脚上输入,有电平或边沿两种触发方式;内部中断源有3个,2个定时器/计数器中断源和1个串行口中断源。8051的中断系统主要由中断允许控制器IE和中断优先级控制器IP等电路组成。2.2 ADC0808相关知识本次课程设计仿真使用的是ADC0808,ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件

11、。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。ADC0808引脚图2.3 DAC0832相关知识 根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。主要性能如下:(1)分辨率为8位;

12、(2)电流稳定时间1us; (3)可单缓冲、双缓冲或直接数字输入; (4)只需在满量程下调整其线性度; (5)单一电源供电(+5V+15V); (6) 低功耗,20mW。 DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料见下图: D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。运放的反馈电阻可通过R

13、FB端引用片内固有电阻,也可外接。DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。DAC0832的逻辑框图和引脚排列3 数字滤波器设计原理及方法3.1中值滤波器设计原理计算法数字滤波方法有很多种,如中值滤波、算术平均滤波、加权平均滤波,限幅滤波等等。本次课程设计我选用的是中值滤波。中值滤波是先对某一参数连续采样N次(一般N取奇数),然后把N次采样值按从小到大排列,取中间值为本次采样值。该滤波方法实际上是一种排序方法,我在此采用的是冒泡法排序。由于在冒泡法排序中,每出现一次前者数据大于后者数据,就要进行二者数据的交换。中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性

14、信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=medf(x-k,y-l),(k,lW) ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。该算法的程序如下:#define N 11 /N值可根据实际情况调整char filter()char valu

15、e_buf;char count,i,j,k,temp;for(count=0;countN;count+) /获取数据value_bufcount=get_data();delay();for(j=0;iN-1;i+) /排序k=j;for(j=i+1;jN;j+) if(value_bufjvalue_bufk); temp=value_bufk; value_bufk=value_bufj; value_bufj=temp; return value_buf(N-1)/2;中值滤波能有效地克服偶然因素引起的波动或采样器不稳定引起的误码等脉冲干扰。对温度、液位等缓慢变化的被测参数采用此算法

16、能收到良好的滤波效果,但对于流量、压力等快速变化的数据,不宜采用中位值滤波。3.2 AD转换电路ADC0808中,ADDA、ADDB、ADDC为模拟通道选择,编码为000111分别选中IN0IN7。ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。OE为输出允许信号,高电平时候打开三态输出缓存器,是转换后的数字量从D0D7输出。EOC为转换结束信号,启动转换后EOC变为低电平,转换完成后EOC编程高电平。START为AD转换启动信号,正脉冲启动AD

17、DAADDC选中的一路模拟信号开始转换,在其上跳变时,所有内部寄存器清零,在其下跳变时,开始进行AD转换。所以设计程序时,要先让START为0,在让START为1,最后让START为0。AD转换的程序如下:START = 0;START = 1;START = 0;while(EOC=0);OE = 1;a = P0;AD转换电路图3.3 DA转换模块DA0832有三种数模转换方法,直通方式、单缓冲方式、双缓冲方式,因为单片机输出后可以直接进行数模转换,所以这里我采用了不需要单片机控制的最为简单的直通方式,但是DA0832若用于直通方式。若用于直通方式下,则GND均接地,而VCC和ILE则接正

18、电源。VREF是参考电源。IOUT1、IOUT2是两个输出端。DA0832输出的是电流,要利用运算放大器转换成电压信号。DA转换电路图4 创新拓展模块本次课设拓展模块设计了一个2*2矩阵键盘,通过矩阵键盘的控制达到中值、限幅、加权平均、滑动平均四种滤波器交替实现的目的。4.1 2*2矩阵键盘在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。由此可见,在需要的键数比较多时,采用矩阵法

19、来做键盘是合理的。 本次课设设计了一个2*2最简矩阵键盘。如下图所示:2*2矩阵键盘2*2矩阵键盘程序设计如下:uchar Keyscan(void) /判断按键P1=0x3f;if(key1=0) /行扫描z1=1,z2=0;if(key2=0)z2=1,z1=0;if(z1=1) /列扫描 P1=0xfc;if(key4=0)z3=1;if(key3=0)z3=2;if(z2=1)P1=0xfc;if(key4=0)z3=3;if(key3=0)z3=4;return z3;4.2 增加的三类滤波器介绍1. 加权平均滤波在算术平均滤波和移动平均滤波中,N次采样值在输出结果中的权重是均等的,

20、取1/N。用这样的滤波算法,对于时变信号会引入滞后,N值越大,滞后越严重。为了增加新采样数据在移动平均中的权重,以提高系统对当前采样值中所受干扰的灵敏度,可采用加权平均滤波,它是移动平均滤波算法的改进。加权平均滤波是对连续N次采样值分别乘上不同的加权系统之后再求累加和,加权系统一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的辨识。各个加权系统均为小于1的小数,且满足总和等于1的约束条件。这样,加权运算之后的累加和即为有效采样值。为方便计算,可取各加权系数均为整数,且总和为256,加权运算后的累加和除以256,即舍去低字节后便是有效采样值。2. 限幅滤波限幅滤波的基本原理是把两次

21、相邻时刻(n和n-1)的采样值Yn和Yn-1相减,求出其差值,以绝对值表示,然后将这个差值与两次采样允许的最大偏差值Y比较,如果两次采样值的差值超过了允许的最大偏差值Y,则认为发生了随机干扰,并认为最后一次采样值Yn非法,应予剔除。剔除Yn后,可用Yn-1代替Yn;若未超过允许的最大偏差值范围,则认为本次采样值有效。可用如下公式表示:|Yn-Yn-1|Y;则Yn有效|Yn-Yn-1|Y;则Yn-1有效。3. 滑动平均滤 把连续取N个采样值看成一个队列,队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结

22、果N值的选取:流量,N=12;压力:N=4;液面,N=412;温度,N=14。对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统。5 整体电路图设计整体电路图6 程序代码#include #define uchar unsigned char#define A 0.005#define N 11sbit OE = P20;sbit START = P21;sbit EOC = P22;sbit key1=P10;sbit key2=P11;sbit key3=P16;sbit key4=P17;uchar a,z1,z2,z3,z4;uchar bufN =0;void change(

23、)int i;for(i=0;iN-1;i+)bufi=bufi+1;bufN-1=a;uchar get_data(n)change();return bufn;uchar Keyscan(void) /判断按键P1=0x3f;if(key1=0) /行扫描z1=1,z2=0;if(key2=0)z2=1,z1=0;if(z1=1) /列扫描 P1=0xfc;if(key4=0)z3=1;if(key3=0)z3=2;if(z2=1)P1=0xfc;if(key4=0)z3=3;if(key3=0)z3=4;return z3; uchar filter1()/中值滤波uchar value

24、_buffN,temp; int count,j,k;for(count=0;countN;count+) value_buffcount=get_data(count);for(j=0;jN-1;j+) k=j;for(j=j+1;jN;j+)if(value_buffj A ) | ( value - new_value A ) )return value; return new_value; uchar filter3() /滑动平均滤波uchar value_buffN;int i=0;int count;int sum=0;value_buffi+=get_data(count);i

25、f(i=N) i=0;for(count=0;countN;count+) sum+=value_buffcount;return (uchar)(sum/N);uchar filter4() /加权平均滤波uchar code coeN = 1,1,1,2,2,2,3,3,3,3,1100; uchar code sum_coe = 1+1+1+2+2+2+3+3+3+3+1100; uchar count; uchar value_bufN; int sum=0; for (count=0;countN;count+) value_bufcount = get_data(count); f

26、or (count=0;countN;count+) sum += value_bufcount*coecount; return (uchar)(sum/sum_coe); uchar ADC0808_READ(void) uchar res; START = 0; START = 1; START = 0; while(EOC=0); OE = 1; a = P0; z4=Keyscan(); if(z4=1) res=filter1(); if(z4=2) res=filter2(); if(z4=3) res=filter3(); if(z4=4) res=filter4(); ret

27、urn res; void main()z3=1;while(1) P3 = ADC0808_READ(); 7 仿真结果及分析7.1 仿真波形图中值滤波波形图限幅滤波波形图滑动平均滤波波形图加权平均滤波波形图7.2 结果分析限幅滤波的效果是和A值有关的,一般情况下,A值越小,则代表允许的噪声要越小,限幅滤波很适用于使幅值突变的噪声。中值滤波由于要求中值,所用到的排序算法会大大消耗时间,因此延时比较严重,但是总的来说选择排序比冒泡排序的延时情况要好。加权递推平均算法和上面一样,因为会求平均值,因此也会有时候产生中间值,但是如果把当前值得权值设的很大,而越久远之前的权值设的越小,则可明显改善此问

28、题,另外由于加权递推平均滤波中用到的乘法,因此会有一定的延时。8 心得体会大三下学期了,马上就要进入大四,此次课设也是大学仅剩的几个课设之一了,我想通过自己的努力,好好做一下,好好锻炼自己的专业能力。作为一名电信专业的大三学生,我觉得这个单片机是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,学习单片机和智能仪器已经有一年了,已经掌握了单片机的原理和如何用汇编语言编写程序,但是很少有机会取实践。如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计,就为我们提供了良好的实践平台

29、,这样能使我们对单片机及其应用认识和应用更加熟练,为我们以后走向社会工作打下良好基础。 在做单片机课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做一个符合要求的单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。为了写好程序,完成任务需查阅很多的资料,首先要先搞懂原理,比如ADC0808是如何工作的,DAC0832又是如何工作的,只有搞懂这些才能更好的设计出一个完善的系统。最后,要做好这个课程

30、设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;在设计过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。另外,这次大作业让我感到了团队合作的重要性。在团队中,我们互帮互助,对整个单片机课程设计来说,这是至关重要的,缺少每一个人都会对我们的设计产生影响。单片机课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。9 参考文献1 李正发.电工电子技术基础实验.北京:科学出版社 20052 李群芳,黄建.单片微型计算机与接口技术.北京:电子工业出版社 20053 周永金.模拟电子技术与应用.西安:陕西国防学院电子教研室 20054 朱志伟.单片机及嵌入式系统的应用.北京:北京航空航天大学出版社 20105 张毅刚.单片机原理及应用.北京:高等教育出版社 2003

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1