程控滤波器设计报告_第1页
程控滤波器设计报告_第2页
程控滤波器设计报告_第3页
程控滤波器设计报告_第4页
程控滤波器设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、111100443 朱明贵 111100423 刘奕兰综合课程设计报告 程控滤波器指导老师:林旭班级:信通4班 姓名:朱明贵 学号:111100443 同组:刘奕兰 学号:1111004231、设计题目程控滤波器2、设计简介(1)、任务 设计并制作程控滤波器,其组成如图所示。放大器增益可设置;低通或高通滤波器通带、截止频率等参数可设置。图1程控滤波器组成框图(2)、要求1). 基本要求放大器输入正弦信号电压振幅为10mV,电压增益为40dB,增益10dB步进可调,通频带为100Hz40kHz,放大器输出电压无明显失真。滤波器可设置为低通滤波器,其-3dB截止频率fc在2kHz10kHz范围内可

2、调,调节的频率步进为2kHz,2fc处放大器与滤波器的总电压增益不大于30dB, RL=1kW。滤波器可设置为高通滤波器,其-3dB截止频率fc在2kHz10kHz范围内可调,调节的频率步进为2kHz,0.5fc处放大器与滤波器的总电压增益不大于30dB, RL=1kW。电压增益与截止频率的误差均不大于10%。有设置参数显示功能。2. 发挥部分放大器电压增益为60dB,输入信号电压振幅为10mV;增益10dB步进可调,电压增益误差不大于5%。3、方案论述(1)放大器方案论证与比较方案一:采用模拟开关和通用放大器实现。放大器采用反向比例放大的接法进行多级级联,通过用单片机控制模拟开关切换不同的反

3、馈电阻,从而达到放大倍数步进可调的要求。此方案电路结构比较简单,但电路原件数目庞大,控制复杂。方案二:采用可控增益放大器实现。用两块放大倍数为-10dB30dB的可控增益放大器AD603级联的方式实现-20dB60dB增益步进可调。满足基本部分和发挥部分要求,电路简单,易于控制,故选此方案。(2)滤波方案论证与比较方案一:采用基于FPGA的数字滤波器实现采用“A/D转换->FPGA/MCU处理->D/A”转换的方法进行数字滤波处理。数字滤波器具有灵活性好,精度高,截止特性好等优点。但是运算量大,需要大量处理器资源编程复杂。方案二:采用MAX262可编程滤波器实现MAX262是可编程

4、通用开关电容滤波集成电路,通过MCU编程控制高通、低通、带通、带阻的工作模式及中心频率和品质因数。此方法电路结构简单,但程序控制稍显复杂。方案三:采用LTC1068时钟控制滤波器实现LTC1068时钟可控多功能滤波器,可以用Linear公司提供的FilterCAD软件进行电路设计,可以得到高通、低通、带通、带阻不同工作模式,可以设计滤波器为巴特沃斯、契比雪夫、椭圆和自定义滤波器模型。由于设计电路方法简单,控制简单,故选此设计方案。(3)MCU控制方案论证与比较方案一:采用STC89C51系列单片机实现51系列单片机开发环境成熟,且易于上手。但是因为滤波信号要求精度比较高,51难以实现。方案二:

5、采用STM32系列单片机实现STM32同样具有成熟的开发环境,虽然相对51系列难度有所增加,但是STM32具有高精度,内置高速AD、DA转换,驱动TFT显示屏等功能。故选择此方案。4、系统设计系统级模块组成框图其中我主要是做设计,包括整体的系统构造思路、分模块的软硬件设计;队友主要是辅助,包括查找资料,帮忙查找电路错误。5、模块设计(1)放大器部分放大器部分主要由可变增益放大器AD603、通用放大器OP37、OP07和宽带低失真放大器OPA642组成。其电路原理图如图a和b所示AD603放大部分电路图放大部分总体电路图放大部分总体PCB图(2)滤波部分1)低通滤波器低通滤波器采用两级滤波模块组

6、成的四阶Butterworth低通接法。两级的品质因数分别为Q1=1.3066,Q2=0.5412,电路图如图a所示。幅频特性曲线如图b所示。a低通滤波器电路图b低通滤波器幅频特性2)高通滤波器高通滤波器采用两级滤波模块组成的四阶Butterworth高通接法。两级的品质因数分别为Q1=1.3066,Q2=0.5412,电路图如图a所示。幅频特性曲线如图b所示。a高通滤波器电路图b高通滤波器幅频特性6、系统测试(1)放大部分测试测试方法:放大器部分采用输入信号峰峰值为20mV的正弦信号,测试放大器模块的增益点从0dB60dB,输入信号的频率变化范围在100Hz40kHz的输出电压峰峰值。0.1

7、0.20.41102030400dB10dB20dB30dB40dB50dB60dB(2)低通滤波器测试使用信号发生器产生峰峰值为2V的稳定的正弦波信号接到滤波器的输入端,用单片机控制滤波器的截止频率在1kHz20kHz,调节信号发生器的输出频率,使得滤波器输出信号电压为通带内的0.707倍,记录可得实际fc值和2fc处放大器和滤波器的总增益值。并计算相对误差,测试结果如下图所示。FC设定值/KHz12345678910FC实测值/KHz相对误差%2fc处最大增益/dB FC设定值/KHz11121314151617181920FC实测值/KHz相对误差%2fc处最大增益/dB(3)高通滤波器

8、测试使用信号发生器产生峰峰值为2V的稳定的正弦波信号接到滤波器的输入端,用单片机控制滤波器的截止频率在1kHz20kHz,调节信号发生器的输出频率,使得滤波器输出信号电压为通带内的0.707倍,记录可得实际fc值和0.5fc处放大器和滤波器的总增益值。并计算相对误差,测试结果如下图所示。FC设定值/KHz12345678910FC实测值/KHz相对误差%2fc处最大增益/dB FC设定值/KHz11121314151617181920FC实测值/KHz相对误差%2fc处最大增益/dB6、测试结果及其分析 7、设计总结通过本题的具体设计,我们对程控滤波器的整体设计原理及所要用到各类芯片

9、有了一个系统的认识和掌握,可谓受益匪浅。当然在设计过程中,我们还发现一些问题和不足,比如在方案论证方面,对于多个可实现同一功能的方案我们犹豫不决。通过查阅大量资料及团队探讨,我们最终选择了最易实现的方案。参考文献1电子技术基础, 康华光等, 高等教育出版社 2数字信号处理, 张立材等, 北京邮电大学出版社 3十六为单片微处理器原理及应用, 张培仁等, 清华大学出社4电子系统设计, 俞承芳等, 复旦大学出版社 5MATLAB通信仿真及应用实力详解, 邓华等, 人民邮电

10、出版社 6凌阳单片机在大学生电子竞赛中的应用,凌阳科技大学计划,北京航空航天大学出版社 7Electronic Circuit Analysis and DesignDonald A.Neamen,Publishing House of Electronics Industry 附录一、 电路图原理图实物图二、 源程序放大控制部分#ifndef _DAC_H#define _DAC_H #include "sys.h" void Dac1_Init(voi

11、d);/回环模式初始化 void Dac1_Set_Vol(u16 vol);#endif#include "dac.h"#include "stm32f10x_dac.h"/DAC通道1输出初始化void Dac1_Init(void) GPIO_InitTypeDef GPIO_InitStructure;DAC_InitTypeDef DAC_InitType;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); /使能PORTA通道时钟 RCC_APB1PeriphClockCmd(RCC_

12、APB1Periph_DAC, ENABLE ); /使能DAC通道时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; / 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; /模拟输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_4);/PA.4 输出高DAC_InitType.DAC_Trigger=DAC_T

13、rigger_None;/不使用触发功能 TEN1=0DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;/不使用波形发生DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;/屏蔽、幅值设置DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;/DAC1输出缓存关闭 BOFF1=1 DAC_Init(DAC_Channel_1,&DAC_InitType); /初始化DAC通道1DAC_Cm

14、d(DAC_Channel_1, ENABLE); /使能DAC1 DAC_SetChannel1Data(DAC_Align_12b_R, 0); /12位右对齐数据格式设置DAC值/设置通道1输出电压/vol:03300,代表03.3Vvoid Dac1_Set_Vol(u16 vol)float temp=vol;temp/=1000;temp=temp*4096/3.3;DAC_SetChannel1Data(DAC_Align_12b_R,temp);/12位右对齐数据格式设置DAC值按键部分#ifndef _KEY_H#define _KEY_H #include "sy

15、s.h"/#define KEY0 PEin(4) /PE4/#define KEY1 PEin(3)/PE3 /#define KEY2 PEin(2)/PE2/#define KEY3 PAin(0)/PA0 WK_UP #define KEY1 GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_6)/读取按键1 左移 +#define KEY2 GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_3)/读取按键2 右移-#define KEY3 GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_4)/读取按键

16、3 “+”#define KEY4 GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_5)/读取按键4 “-”#define KEY5 GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_9)/读取按键5 RESET1#define KEY6 GPIO_ReadInputDataBit(GPIOG,GPIO_Pin_10)/读取按键6 RESET2/#define KEY_LEFT 1/#define KEY_RIGHT2/#define KEY_UP3/#define KEY_DOWN4void KEY_Init(void);/IO初始化u8 K

17、EY_Scan(u8); /按键扫描函数 #endif#include "key.h"#include "sys.h" #include "delay.h" /按键初始化函数void KEY_Init(void) /IO初始化 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG,ENABLE);/使能PORTG时钟/初始化KEY0->GPIOA.13,KEY1->GPIOA.15 上拉输入/GPIO_InitStr

18、ucture.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;/PE24/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /设置成上拉输入/ GPIO_Init(GPIOE, &GPIO_InitStructure);/初始化GPIOE2,3,4/初始化 ->GPIOG.2/3/4/5 上拉输入GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_9|GPIO_Pin_10;GPIO_In

19、itStructure.GPIO_Mode = GPIO_Mode_IPU; /PA0设置成输入,默认上拉 GPIO_Init(GPIOG, &GPIO_InitStructure);/初始化GPIOG.0/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /PB0设置成输入,默认上拉 /GPIO_Init(GPIOB, &GPIO_InitStructure);/初始化GPIOB.0 B.1 /按键处理函数/返回按键值/mode:0

20、,不支持连续按;1,支持连续按;/0,没有任何按键按下/1,KEY0按下/2,KEY1按下/3,KEY2按下 /4,KEY3按下 /注意此函数有响应优先级,KEY0>KEY1>KEY2>KEY3!u8 KEY_Scan(u8 mode) static u8 key_up=1;/按键按松开标志if(mode)key_up=1; /支持连按 if(KEY1=0|KEY2=0|KEY3=0|KEY4=0|KEY5=0|KEY6=0)/delay_ms(10);/去抖动 key_up=0;if(KEY1=0)delay_ms(10);/去抖动if(KEY1=0)while(!KEY1

21、);return 1; else if(KEY2=0)delay_ms(10);/去抖动if(KEY2=0)while(!KEY2);return 2;else if(KEY3=0)delay_ms(10);/去抖动if(KEY3=0)while(!KEY3);return 3;else if(KEY4=0)delay_ms(10);/去抖动if(KEY4=0)while(!KEY4);return 4; else if(KEY5=0)delay_ms(10);/去抖动if(KEY5=0)while(!KEY5);return 5;else if(KEY6=0)delay_ms(10);/去抖

22、动if(KEY6=0)while(!KEY6);return 6; else if(KEY1=1&&KEY2=1&&KEY3=1&&KEY4=1&&KEY5=1&&KEY6=1)key_up=1; return 0;/ 无按键按下CLK信号部分#include "sys.h" #define LED0 PGout(14)/ PG14#define LED1 PBout(5)/ PB0#define RESET_F PEout(5)/ PE5void LED_Init(void);/初始化 #en

23、dif#include "led.h"/初始化PB5和PE5为输出口.并使能这两个口的时钟 /LED IO初始化void LED_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitS

24、tructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; /LED1->E5 端口配置, 推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure); /推挽输出 ,IO口速度为50MHz GPIO_SetBits(GPIOE,GPIO_Pin_5); /PE.5 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; / 端口配

25、置, 推挽输出 LED0->b5 GPIO_Init(GPIOB, &GPIO_InitStructure); /推挽输出 ,IO口速度为50MHz GPIO_SetBits(GPIOB,GPIO_Pin_5); /PE.5 输出高 #ifndef _TIMER_H#define _TIMER_H#include "sys.h"void TIM3_Int_Init(u16 arr,u16 psc);void TIM3_PWM_Init(u16 arr,u16 psc);#endif#include "timer.h"#include &qu

26、ot;led.h"#include "usart.h"#include "stm32f10x_tim.h"/V1.1 20120904/1,增加TIM3_PWM_Init函数。/2,增加LED0_PWM_VAL宏定义,控制TIM3_CH2脉宽 / /通用定时器3中断初始化/这里时钟选择为APB1的2倍,而APB1为36M/arr:自动重装值。/psc:时钟预分频数/这里使用的是定时器3!void TIM3_Int_Init(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructur

27、e;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /时钟使能TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500msTIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; /

28、设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); /使能指定的TIM3中断,允许更新中断NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /T

29、IM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; /从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道被使能NVIC_Init(&NVIC_InitStructure); /根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_Cmd(TIM3, ENABLE); /使能TIMx外设 /定时器3中断服务

30、程序void TIM3_IRQHandler(void) /TIM3中断if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) /检查指定的TIM中断发生与否:TIM 中断源 TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); /清除TIMx的中断待处理位:TIM 中断源 LED1=!LED1;/TIM3 PWM部分初始化 /PWM输出初始化/arr:自动重装值/psc:时钟预分频数void TIM3_PWM_Init(u16 arr,u16 psc) GPIO_InitTypeDef GPIO_InitStr

31、ucture;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); /使能GPIO外设和AFIO复用功能模块时钟GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); /Timer3部分重映射 TIM3_CH2-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论