您好,欢迎访问三七文档
程控滤波器设计报告2011109313刘旭东20112134彭声浩2010800521向嫚丽本设计给出了以凌阳16位单片机Spce061A为核心的程控滤波器的基本原理与实现方案。该系统由放大电路、滤波电路、显示电路三个模块构成,通过单片机系统通过控制整个系统实现滤波显示功能。其中放大电路中采用了数字电位器,通过软件编程来改变阻值进而改变增益;采用基于MAX261的滤波电路技术并结合单片机实现了滤波器的参数测量,可通过键盘切换低通、高通滤波器类型;频率特性由软件灵活设置,使得截止频率步进精确到1KHZ;用LED数码管实时显示数据及其状态。方案论证与比较方案一:在正相输入端输入信号,反相输入端连接反馈电路,为了控制放大电路的增益可调,并且达到规定的步进,反馈电阻可由一系列满足计算参数要求的电阻并联,并且可以选通,整个硬件电路原理简单,但是结构繁冗复杂。方案二:运用程控放大器对信号进行放大调整,通过改变选通电阻使程序控制放大器的增益,在电路结构上降低难度,并且还可以变换电压增益,只要电压选取合适,可以达到题目要求。方案三:同方案二,考虑到具体电路的实现,本方案采用运算放大器对信号2进行放大,由数字电位器控制反馈电阻的大小,选取合适的电位器,使其达到题目要求的步进,同时与单片机相连,来控制电阻的变化,进而达到合适的增益步进以及题目要求的增益范围。综合考虑,方案一硬件电路结构复杂,方案二程控电阻数量有限,难以达到要求的增益步进,方案三电路简单,易于控制,故采用方案三。滤波电路方案一:采用传统的设计方法,滤波电路河运放结合设计出二阶有源低通滤波器,其中同相比例放大电路的增益就是通带电压的增益,同样方法可得二阶高通滤波器,实现低高通的滤波。方案二:基于焊接的二阶滤波电路稳定性低,性能较差,可以直接把已有的巴特沃斯四阶低通滤波器芯片引用到电路,增强电路的稳定性;同时也引用类似的性能比较好的高通滤波器,通过芯片的选通实现高低通滤波。方案三:鉴于本滤波器的滤波需要程序控制,将可编程的MAX261通用滤波器引入电路,通过单片机程序控制,实现低高通滤波。由于本芯片技术已比较成熟,性能较好,并且稳定性高。综合考虑,方案一由于稳定性低,不易实现,方案二技术成熟的高通滤波器不易购买,故采用方案三。显示部分方案一:将六位LED数码管与单片机相连,通过程序控制其参数的设置,使其在数码管上进行显示。方案二:通过单片机系统软件编程,在液晶显示器上实现放大及滤波参数,即LCD液晶显示。虽然方案二的技术已经相当成熟,而且显示比较灵活,但是方案一相对而言比较简单,由于设计时间以及条件有限,而且足以满足要求,所以仍采用方案一。系统结构与框图本系统以凌阳十六位单片机为核心,通过程序控制数字电位器的输入阻抗,决定放大器的增益以及步进增益,同时在信号放大的输出端用示波器进行观察,和信号源进行比对,进而确定放大电路的可靠性。放大后的信号会经过电压跟随器进行缓冲,然后进行滤波,滤波电路的核心在于MAX261通用滤波器,通过单片机编程和按键实现对滤波器高低通的控制,最后通过单片机系统将系统信号综合处理后实现按键显示。滤波电路芯片MAX261是CMOS双二阶通用升关电容有源滤波器,由微处理器精确控制滤波函数。它可构成各种带通、低通、高通、陷波和全通滤波器,且不需外部器件。每个器件含两个二阶滤波器,在程序控制下设置中心频率fo、品质因数Q和滤波器工作方式。显示部分该模块通过单片机与键盘共同控制四位数码显示管对相关参数进行显示,其中,通过键盘的操作,决定对放大电路部分和滤波电路部分参数显示的选通,然后分别细化显示。软件部分本系统用软件设计了特殊功能键,通过对1*4键盘的简单操作,可实现对放大电路参数的显示,软件采用结构化程序设计方法,功能模块各自独立,具体流程见图系统初始化:加电后完成系统硬件和变量的初始化,其中包含变量设置、标志位设定、控制口状态设置、功能键设置等。控制显示:按键后,由单片机读取所定值,进行数据处理。显示测量结果:从键盘按键选择,通过单片机控制参数的显示。图3-2MAX261内部结构放大电路在放大电路之后的测试端子处直接连数字示波器进行观察,测试结果如下表1所示:表1放大电路测试结果滤波电路把输出信号通入数字滤波器内与LED显示的结果进行比对,并判断是否达到设计要求的带宽,在0.5fc处是否电压增益不大于30dB。当滤波器设置为低通时:当-3dB截至频率fc可在500HZ~26kHZ范围内可调,调节频率步进可达1kHZ,0.5fc处方大器与滤波器电压增益小于30dB。当滤波器设置为高通时:当-3dB截至频率fc可在500HZ~26kHZ范围内可调,调节频率步进可达1kHZ,0.5fc处方大器与滤波器电压增益小于30dB。综上可得,测试结果在设计要求允许的范围之内。值得提出的是,由于本设计采用了256抽头的数字电位器,大大改善了步进增益精度,整体改善了滤波器的精度要求。误差分析在测试的基础上,进行MATLAB软件仿真,经过比对分析,本系统所产生的误差主要由以下三方面引起的:(1)信号源不稳定,信号在传输的过程中也会衰减,而在本设计中信号源的形态显示起着至关重要的作用,因此在设计中要尽量优化信号源。(2)放大电路产生的误差。首先运放以及其他元器件的性能不很理想,存在静态损耗;其次,电路方面虽然已经优化设计,但是不可避免的存在各种功耗。(3)滤波器的功耗。目前MAX261滤波技术已经成熟,滤波阶数也相对较高,性能较好。但是这里有电路变换的误差,芯片与单片机及其软件数据流转换的误差。改进措施(1)尽量减小静态功耗。实测运放的电静态电流对静态功耗的影响较大,因此,在元器件选择时要给予考虑。在本设计中,所采用运放也不很理想,选择高性能的芯片将进一步改善系统。(2)尽量减小动态功耗。(3)选择精度更高的数字电位器和性能更好的MAX芯片,提高系统性能精确度。主要源程序代码如下:#includeSPCE061A.h#includeDig.h#includeKey.hunsignedintg_Data[11]={0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};intmain(void){intEnt_Flag=0;unsignedintuiKey;unsignedintuiData[4]={1,0,0,1};uiData[0]=0;uiData[3]=0;Key_Init();DIG_Init();while(1){uiKey=Key_Get();10switch(uiKey){caseKEY_0:if(Ent_Flag==0){uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=7//第四位数码管显示“7”}break;caseKEY_1://数字“8”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=8//第四位数码管显示“8”}break;caseKEY_2://数字“9”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=9//第四位数码管显示“9”}break;caseKEY_3://保留“F1”键break;caseKEY_4://数字“4”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=4//第四位数码管显示“4”}break;caseKEY_5://数字“5”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{11uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=5}break;caseKEY_6://数字“6”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=6}break;caseKEY_7://保留“F2”键按下break;caseKEY_8://数字“1”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=1////第四位数码管显示“1”}break;caseKEY_9://数字“2”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=2//第四位数码管显示“2”}break;caseKEY_A://数字“3”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=3//第四位数码管显示“3”}12break;caseKEY_B://保留“F3”键按下break;caseKEY_C://功能“DEL”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[3]=uiData[2];uiData[2]=uiData[1];uiData[1]=uiData[0];uiData[0]=0;//第一位数码管显示“0”}break;caseKEY_D://数字“0”键按下if(Ent_Flag==0)//判断“ENT”键是否按下,即确认键是否按下?{uiData[0]=uiData[1];//显示数字左移一位uiData[1]=uiData[2];uiData[2]=uiData[3];uiData[3]=0//第四位数码管显示“0”}break;caseKEY_E://保留“F4”键按下break;caseKEY_F://功能“ENT”键按下Ent_Flag=1;break;default:break;}DIG_Set(1,g_Data[uiData[0]]);//第一位数码管显示DIG_Set(2,g_Data[uiData[1]]);//第二位数码管显示DIG_Set(3,g_Data[uiData[2]]);//第三位数码管显示DIG_Set(4,g_Data[uiData[3]]);//第四位数码管显示*P_Watchdog_Clear=0x0001;//清看门狗}}.INCLUDESPCE061A.inc.INCLUDEDig.inc.INCLUDEKey.inc.TEXT13.PUBLIC_IRQ4_IRQ4:……………滤波器参数设置源程序代码:#includestdio.hintmain(void){……floatfclk=4e6.Q=6.0,f0,n1,n2;intadd=0m=1;n1=in(fclk*2/(3.141
本文标题:程控滤波器设计报告
链接地址:https://www.777doc.com/doc-2035983 .html