程控滤波器一、任务设计并制作程控滤波器,其组成如图1所示。放大器增益可设置;低通或高通滤波器通带、截止频率等参数可设置。放大器滤波器信号输入参数设置参数设置信号输出RL测试端子图1程控滤波器组成框图二、要求1.基本要求(1)放大器输入正弦信号电压振幅为10mV,电压增益为40dB,增益10dB步进可调,通频带为100Hz~40kHz,放大器输出电压无明显失真。(2)滤波器可设置为低通滤波器,其-3dB截止频率fc在1kHz~20kHz范围内可调,调节的频率步进为1kHz,2fc处放大器与滤波器的总电压增益不大于30dB,RL=1k。(3)滤波器可设置为高通滤波器,其-3dB截止频率fc在1kHz~20kHz范围内可调,调节的频率步进为1kHz,0.5fc处放大器与滤波器的总电压增益不大于30dB,RL=1k。(4)电压增益与截止频率的误差均不大于10%。(5)有设置参数显示功能。2.发挥部分(1)放大器电压增益为60dB,输入信号电压振幅为10mV;增益10dB步进可调,电压增益误差不大于5%。(2)制作一个四阶椭圆型低通滤波器,带内起伏≤1dB,-3dB通带为50kHz,要求放大器与低通滤波器在200kHz处的总电压增益小于5dB,-3dB通带误差不大于5%。(3)制作一个简易幅频特性测试仪,其扫频输出信号的频率变化范围是100Hz~200kHz,频率步进10kHz。(4)其他。摘要:本系统以MP430G2553单片机为控制核心,实现程控滤波的功能。前端放大器由运放和数字电位器构成,实现了增益0—40dB,步进10dB可调。滤波器采用程控数字电位器的技术,构成RC有源滤波网络,实现了程控高通、低通滤波截止频率1KHz—20KHz,步进1KHz可调。设人机接口采用4×1键盘及LCD液晶显示器,控制界面直观、简洁,具有良好的人机交互性能。关键词:程控滤波MSP430G2553数字电位器本系统以MSP430G2553单片机为控制核心,利用开关电容技术实现程控滤波的功能。前端放大器由运放和数字电位器构成,实现了增益0—40dB,步进10dB可调。1.方案论证根据题目要求,我们分以下三部分进行方案设计与论证1、主控单元方案一:采用80C51系列单片机,虽然我们对其比较熟悉,能够熟练的对它进行编程运用,但是它不是TI公司的产品。方案二:采用MSP430G2553单片机。它中断资源丰富,而且内置了在线仿真、编程接口,可方便地实现在线调试。经过比较后采用方案二。2、放大器部分程控放大器的增益,一般有两种途径,一种是改变反相端的输入电阻,另一种是改变负反馈电阻阻值。方案一:采用模拟开关或继电器作为开关,构成梯形电阻网络,单片机控制继电器或模拟开关的通断,从而改变放大器的增益。此方案的优点在于简单,缺点是电阻网络的匹配难以实现,调试很困难。方案二:用DAC的电阻网络,改变电阻的方法,电流输出型DAC内含R-2R电阻网络,可以作为运放的反馈电阻或输入电阻,在DAC输入数据的控制下,实现放大器增益的程控改变。该方案的优点无需外接精密电阻,增益完全由输入的数字量决定,就可以对信号进行放大或衰减,使用方便;缺点是信噪比较低,通频带较窄。方案三:非易失性数字电位器改变电阻,克服了模拟电位器的主要缺点,无噪声,寿命长,阻值可程控改变,设定阻值掉电记忆。该方案优点是增益范围宽,占用μP口少,成本低。通频带取决于运放的通频带。方案四:直接用运放构成放大电路,通过按键选择不同的电阻阻值,以实现步进可调的放大功能。在本题中,电压增益为40dB,增益10dB步进可调,通频带为100Hz~40kHz,放大器输出电压无明显失真。我们选择方案四,方案四结构简单,可操作性强,失真较小,原理简单。3、滤波器部分方案一:采用模拟开关或继电器作为开关,切换不同的RC组合来改变截止频率,优点是电路简单,缺点是电阻网络的匹配难以实现,调试很困难适合截止频率调节档位较少的滤波器。方案二:固定电容C,采用非易失性数字电位器改变电阻的数值,从而改变截止频率。优点是电路简单,缺点数字电位器是分档调节,不能实现电阻的连续可调。根据题目要求低通滤波器在2fc处,高通滤波器在0.5fc处,放大器与滤波器的总电压增益不大于30dB,我们选用四阶电压控制滤波器。在此我们选择方案二,我们可以通过改变RC电路的中C来匹配数字电位器,且数字电位器是由单片机来控制,可操作性强,技术先进,完成后的成品操作简单,高度智能。2.系统硬件设计2.1系统的总体设计框图图2程控滤波器结构框图本系统以MSP430G2553单片机作为主控单元,将设计任务分为放大器,低通滤波器,高通滤波器,人机接口单元等功能模块。放大器用LM324和不同电阻组成的放大电路构成。我们通过选择按键来控制放大器放大倍数。滤波器在单片机控制信号作用下在低通,高通,两种工作方式的切换。低通和高通滤波电路采用数字电位器,电容和运算放大器组成,单片机通过控制数字电位器接入电路的阻值,来实现截止频率的调节。本系统还设计了良好的人际交互接口,实现了键盘处理,液晶显示等功能。2、2单元模块设计(1)放大器模块设计放大器输入正弦信号电压振幅为10mV,对于毫伏级的信号放大一般要采用具有高共模抑制比、高精度、高输入阻抗的测量放大器。放大器电路采用LM324和不同的电阻组成。经过组合步进达到10DB的要求,所以放大倍数也被控制在一个很精确的范围。电阻的阻值与DB的对应关系:从上到下对应的分贝是0db、10db、20db、30db、40db2.2.1放大器电路设计我们采用两级级放大,具体电路图如图2.2:(2)滤波器模块设计2.2.2滤波器电路设计现以低通滤波电路设计为例说明。对于四阶低通滤波电路,图2.3由于在本次题目中我们用到了较高的20KHZ的频率,故此,我们采用了四阶的滤波器来完成滤波,四阶滤波器能在截止频率附近较好的完成滤波,其滤波曲线也能满足题目所给的其-3DB截至频率在1K--20K可调,2FC出放大器与滤波器的总电压增益不大于30DB的要求。我们采用的是RC结构的四阶滤波电路。低通滤波时:根据四阶的低通滤波函数,在大于截止频率fc时,幅频特性曲线以40/10f速度下降,所以在2fc处的增益为-12.04dB。再加上放大器的40dB增益,总增益为27.96dB,达到了题目小于30dB的要求。高通滤波时:根据四阶的高通滤波函数,在小于截止频率fc时,幅频特性曲线以40/10f速度上升,所以在0.5fc处的增益为-12.04dB。再加上放大器的40dB增益,总增益为27.96dB,也达到了题目小于30dB的要求。在电阻的选取上,我们采取了数字电位器取代电阻的方案。通过调整数字电位器的阻值来改变其截至频率,其原理图如下:在这里我们采用单刀双掷开关选择高通滤波还是低通滤波,经过测试发现,低通滤波和高通滤波都能很好的完成它的作用。3、显示模块设计:我们采用TI公司的MSP430g2553单片机开发板,用数字电位器实现步进可调,用1602液晶显示屏显示出设置的参数:在确立程序流程之后,下一步工作就是分析采用怎样的编程方式来实现,我考虑到程序的复杂性,在这里采用C来编程,将显示部分,频率选择和工作方式转换等都编成子程序,我们在主程序中直接调用,这样会使程序看起来直观和明白。总体电路图:五、设计验证及测试方法1.放大器测试方法:放大器输入端输入峰值为10mV的正弦信号,将放大器增益设置为40dB,从100Hz开始增大输入信号的频率,用示波器测试放大器的通频带。然后将输入信号的频率分别固定为100Hz、1kHz、40kHz,预置放大器增益,用低频毫伏表测试其实际增益,计算增益误差,并检验增益步进。2.滤波器测试方法:将放大器增益设置为40dB,滤波器设置为低通滤波器,预置滤波器的截止频率,用低频毫伏表和示波器测试其实际截止频率,计算相对误差,并检测截止频率步进和2cf处的电压总增益。高通滤波器的测试方法同上。椭圆滤波器的测试,将放大器的增益设置为40dB,用示波器测量其通带起伏,-3dB截止频率和200KHz的总电压增益。程序:#includemsp430g2553.h#defineucharunsignedchar#defineuintunsignedint#defineRS_HIGHP2OUT|=BIT0#defineRS_LOWP2OUT&=~BIT0#defineRW_HIGHP2OUT|=BIT1#defineRW_LOWP2OUT&=~BIT1#defineE_HIGHP2OUT|=BIT2#defineE_LOWP2OUT&=~BIT2#defineBUSY_OUTP1DIR|=BIT7#defineBUSY_INP1DIR&=~BIT7#defineBUSY_DATAP1IN&BIT7ucharData1[16]={Thegainis:0db};ucharData2[16]={Thegainis:10db};ucharData3[16]={Thegainis:20db};ucharData4[16]={Thegainis:30db};ucharData5[16]={Thegainis:40db};ucharData6[16]={chengkongFIR};voidDelayMS(uintms){uinti;while(ms--){for(i=0;i800;i++);}}voidLcdBusy(void){RS_LOW;RW_HIGH;E_HIGH;_NOP();_NOP();BUSY_IN;while(BUSY_DATA);BUSY_OUT;E_LOW;}voidWriteCommand(ucharCommand){LcdBusy();RS_LOW;RW_LOW;E_HIGH;_NOP();_NOP();P1OUT=Command;_NOP();_NOP();E_LOW;}voidWriteData(ucharData){LcdBusy();RS_HIGH;RW_LOW;E_HIGH;_NOP();_NOP();P1OUT=Data;_NOP();_NOP();E_LOW;}voidLcdInit(void){WriteCommand(0x38);DelayMS(5);WriteCommand(0x0c);DelayMS(5);WriteCommand(0x06);DelayMS(5);WriteCommand(0x01);DelayMS(5);}voidInitPort(void){P1SEL=0x00;P1DIR=0xFF;P2DIR=0x07;}voiddisplay_xy(unsignedcharx,unsignedchary){if(y==0x01){x=x+0x40+0x80;}else{x=x+0x80;}WriteCommand(x);}voidDisp1Char(ucharx,uchary,uchardata){display_xy(x,y);WriteData(data);}voidIoinit(void);inti;intmain(void){intdata1,data2,data3,data4,data5;WDTCTL=WDTPW+WDTHOLD;InitPort();LcdInit();P2DIR&=~BIT3;P2REN|=BIT3;P2DIR&=~BIT4;P2REN|=BIT4;P2DIR&=~BIT5;P2REN|=BIT5;P2DIR&=~BIT6;P2REN|=BIT6;P2DIR&=~BIT7;P2REN|=BIT7;while(1){data1=P2IN&BIT3;data2=P2IN&BIT4;data3=P2IN&BIT5;data4=P2IN&BIT6;data5=P2IN&BIT7;if(data1==0){WriteCommand(0x80);for(i=0;i16;i++)WriteData(Data3[i]);DelayMS(50);}if(data2==0){WriteC