基于数字相关的时栅信号处理设计_第1页
基于数字相关的时栅信号处理设计_第2页
基于数字相关的时栅信号处理设计_第3页
基于数字相关的时栅信号处理设计_第4页
基于数字相关的时栅信号处理设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、基于数字相关的时栅信号处理设计一、设计原理与要求1.1设计原理时栅传感器是通过两路正交信号(正、余弦)激励传感器的空间正交的激励绕组,通过电磁感应输出包含角度信息的正弦信号。基本原理如下:时栅传感器 (角度为) 通过比较与的相位差,即可检测其角度信息。1.2设计要求设计一个测控系统,按键每按一次,角度变化5度。通过单片机模拟两路正交信号与,再对应乘上和,进行模拟时栅传感器,再通过加法电路进行信号相加,并通过AD采样将该信号再传递给单片机,再在程序中进行数字相关1的相关性分析,通过软件计算出角度,并将其显示在液晶屏上。激励频率400HZ(叠加噪声),带通滤波器中心频率为400HZ,带宽为100H

2、Z。二、系统结构框图系统结构框图如2.1所示。图2.1 系统结构框图3、 硬件电路设计3.1加法器电路加法器采用LM324芯片。将STM32芯片的DAC1双通道分别输出sinwt和coswt频率为400HZ的直流正弦波信号,通过加法器硬件电路后得到相加后的波形sin(wt+)。该路电路若有R2=R3,输入输出的关系是: (3-1)其中,取=2k,=1k,带入式(3-1)中,可得。则实现了输入信号和的相加,且增益为1。 3.2带通滤波器电路根据带通滤波器的设计要求可知,中心频率=400HZ,带宽为B=100HZ,则固有频率为,品质因素Q=4。本次带通滤波器设计采用压控电压二阶滤波器电路。取压控增

3、益3为=2<3,这样可以防止电路自激震荡,有利于电路性能的稳定4。同时取电压增益=1。因为带通滤波器的中心频率为800HZ,则电容和均取0.1,其他电阻参数计算如下: (3-2) 将、和带入式(3-2)中,可得:=200k,=2.85k,=5.627k。 3.2偏置放大电路由于通过带通滤波电路的信号有负电压,STM32芯片在没有负电压参考信号的情况下无法采集负电压值,因此设计偏置放大电路,用LM324做一个加法器,将带通滤波输出信号与一个直流1V的电压相加,将波形整体拉高,且运放放大倍数为1,从而实现STM32的正确AD采样。 3.3硬件电路图 4、 软件设计在软件中,除了大量的数据计算

4、处理外,还会用到STM32芯片的外部中断、定时中断、内置DAC和ADC等功能。通过程序编写,就可以产生对信号的DAC输出,以及信号的ADC才回,并对采回的数据信号进行相关性计算,得出角度。 开始 程序流程图: 各功能模块初始化 定时器中断 外部中断 DAC输出信号 改变角度设置的值 ang_set ADC采集信号 改变角度设置的值 ang_set LCD显示 结束5、 实物制作及现象7、 测试与分析八、总结此次的课程设计让我们大体上对于数字信号的处理与分析有了进一步的了解,对于信号的硬件放大、滤波,以及软件方面的功能编写都有了明显的提升,通过自主的课程设计,更能让我们的动手实践能力得到显著的提

5、升,同时培养我们对于实物制作的兴趣,在此次课程设计过后,相信我们能够继续学习理论知识并且提高自身的实践动手能力,实现综合素质的全面提高。九、参考文献1基于数字相关的弱信号检测方法的研究.李飞.华中科技大学2智能仪器设计基础/王祁主编.-北京:机械工业出版社,2009.12P77P803测控电路/张国熊主编.-4版,-北京:机械工业出版社,2011.1 P111P119,P127P128.4电子技术基础.模拟部分/康华光主编;-5版.-北京:高等教育出版社,2006.1 P425P4295ARM嵌入式系统基础教程/周立功主编.-2版.-北京:北京航空航天大学出版社,2008.9 P304P310

6、附录程序记录如下main.c#include "delay.h"#include "key.h"#include "sys.h"#include "lcd.h"#include "usart.h"#include "exti.h"#include "led.h"#include "dac.h"#include "adc.h"#include "math.h"#include "stdio

7、.h"#include "timer.h"extern u8 Flag1;extern u8 ang_set;u16 Sin_wt_ang_Sin_wt256;u16 Sin_wt_ang_Cos_wt256;u16 ADC_Sin_wt_ang256;u16 DAC_Sin_wt_Cos_ang256;u16 DAC_Cos_wt_Sin_ang256;u16 DAC_Sin_wt_ang256;u16 DAC_Sin_wt256= /11位 0x3FF,0x418,0x431,0x44A,0x463,0x47C,0x495,0x4AE,0x4C7,0x4DF,

8、0x4F8,0x510,0x528,0x540,0x558,0x56F, 0x587,0x59E,0x5B5,0x5CB,0x5E1,0x5F7,0x60D,0x623,0x638,0x64C,0x661,0x675,0x688,0x69C,0x6AE,0x6C1,(略);u16 DAC_Cos_wt256= /11位 0x7FE,0x7FE,0x7FD,0x7FC,0x7FA,0x7F7,0x7F3,0x7EF,0x7EB,0x7E6,0x7E0,0x7D9,0x7D2,0x7CB,0x7C3,0x7BA,(略); int main(void) u8 x=0; /字幕变色标志变量u16 i,

9、j,k,m,n;float rad;float sin_ang,cos_ang;float JF_x,a,b,c,d;char ang_get4;delay_init(); /延时函数初始化 NVIC_Configuration(); /设置NVIC中断分组2:2位抢占优先级,2位响应优先级LCD_Init();LED_Init();EXTIX_Init();Dac1_Init();/DAC初始化Adc_Init(); /ADC初始化TIM3_Int_Init(9,71);/10Khz的计数频率,计数到23为2.5msLCD_Clear(BLUE);JF_x=2*3.1515926/256;

10、while(1) a=0;b=0;rad=ang_set* 3.1415926 /180;sin_ang=sin(rad);cos_ang=cos(rad);for(i=0;i<256;i+)/DAC_Sin_wt_angi=DAC_Sin_wti*cos_ang+DAC_Cos_wti*sin_ang;DAC_Sin_wt_Cos_angi=DAC_Sin_wti*cos_ang;DAC_Cos_wt_Sin_angi=DAC_Cos_wti*sin_ang;for(j=0;j<256;j+)Sin_wt_ang_Sin_wtj=(ADC_Sin_wt_angj*3/16)*(D

11、AC_Sin_wtj/16);for(k=0;k<256;k+)Sin_wt_ang_Cos_wtk=(ADC_Sin_wt_angk*3/16)*(DAC_Cos_wtk/16);for(m=0;m<256;m+) a=a+(Sin_wt_ang_Sin_wtm-5170)*JF_x;for(n=0;n<256;n+) b=b+(Sin_wt_ang_Cos_wtn-5170)*JF_x;c=b/a;d=atan(c)*57.29578;sprintf(ang_get,"%2.1f",d);switch(x)case 0:LCD_ShowHZ(60,30

12、,BLACK,BLUE,"欢迎使用时栅信号处理系");break;case 1:LCD_ShowHZ(60,30,GREEN,BLUE,"欢迎使用时栅信号处理系");break;case 2:LCD_ShowHZ(60,30,MAGENTA,BLUE,"欢迎使用时栅信号处理系统"); LCD_ShowHZ(80,70,YELLOW,BLUE,"操作说明:");LCD_ShowHZ(80,90,YELLOW,BLUE,"按键1:角度增加5度");LCD_ShowHZ(80,110,YELLOW,B

13、LUE,"按键2:角度减少5度");LCD_ShowHZ(80,130,YELLOW,BLUE,"按键3:系统重启");LCD_ShowHZ(80,170,WHITE,BLUE,"设置角度: 度");LCD_ShowHZ(80,190,WHITE,BLUE,"实测角度: 度"); POINT_COLOR=WHITE;LCD_ShowNum(152,170,ang_set,4,16);LCD_ShowString(152,190,200,16,16,ang_get);POINT_COLOR=RED; LCD_Show

14、String(260,210,200,16,16,"2015.9");x+;if(x=3)x=0; exti.c#include "exti.h"#include "led.h"#include "key.h"#include "delay.h"#include "usart.h"u8 ang_set=30; /外部中断0服务程序void EXTIX_Init(void) EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDe

15、f NVIC_InitStructure; KEY_Init(); /按键端口初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);/使能复用功能时钟 /GPIOE.0 中断线以及中断初始化配置 下降沿触发 GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0;/KEY1 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitSt

16、ructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器 /GPIOC.13 中断线以及中断初始化配置 下降沿触发 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13); EXTI_InitStructure.EXTI_Line=EXTI_Line13;/KEY2 EXTI

17、_Init(&EXTI_InitStructure); /根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;/使能按键KEY1所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;/子优先级1 NVIC_InitStructure.NVIC_IRQChannelCm

18、d = ENABLE;/使能外部中断通道 NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;/使能按键KEY2所在的外部中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;/抢占优先级2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;/子优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENA

19、BLE;/使能外部中断通道 NVIC_Init(&NVIC_InitStructure); /外部中断0服务程序 void EXTI0_IRQHandler(void)delay_ms(10);/消抖if(KEY1=0) ang_set+=5;if(ang_set>90)ang_set=0;EXTI_ClearITPendingBit(EXTI_Line0); /清除LINE0上的中断标志位 /外部中断1服务程序void EXTI15_10_IRQHandler(void)delay_ms(10);/消抖if(KEY2=0) /按键KEY2ang_set-=5;if(ang_se

20、t=251)ang_set=90; EXTI_ClearITPendingBit(EXTI_Line13); /清除LINE2上的中断标志位 Timer.c#include "timer.h"#include "dac.h"#include "adc.h"#include "lcd.h"/通用定时器3中断初始化/这里时钟选择为APB1的2倍,而APB1为36M/arr:自动重装值。/psc:时钟预分频数/这里使用的是定时器3!u16 i;u8 Flag1=0;extern u16 ADC_Sin_wt_ang256

21、;extern u16 DAC_Sin_wt256;extern u16 DAC_Sin_wt_ang256;extern u16 DAC_Sin_wt_Cos_ang256;extern u16 DAC_Cos_wt_Sin_ang256;void TIM3_Int_Init(u16 arr,u16 psc) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /时钟使能/定时

22、器TIM3初始化TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /TIM向上计数模式TIM_TimeBase

23、Init(TIM3, &TIM_TimeBaseStructure); /根据指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); /使能指定的TIM3中断,允许更新中断/中断优先级NVIC设置NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; /TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriori

24、ty = 3; /从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /IRQ通道被使能NVIC_Init(&NVIC_InitStructure); /初始化NVIC寄存器TIM_Cmd(TIM3, ENABLE); /使能TIMx /定时器3中断服务程序void TIM3_IRQHandler(void) /TIM3中断 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) /检查TIM3更新中断发生与否DAC_SetChannel1Data(DAC_Align_12b_R,DA

25、C_Sin_wt_Cos_angi);DAC_SetChannel2Data(DAC_Align_12b_R,DAC_Cos_wt_Sin_angi);ADC_Sin_wt_angi=Get_Adc(ADC_Channel_1);i+;if(i=256)i=0;TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); /清除TIMx更新中断标志 dac.c#include "dac.h"#include "adc.h"#include "delay.h"/DAC通道1输出初始化void Dac1_Ini

26、t(void) GPIO_InitTypeDef GPIO_InitStructure;DAC_InitTypeDef DAC_InitType;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); /使能PORTA通道时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); /使能DAC通道时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed

27、_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA , &GPIO_InitStructure);DAC_InitType.DAC_Trigger=DAC_Trigger_None;/不使用触发功能 TEN1=0DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;/不使用波形发生DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;/屏蔽、幅值设置DAC_Init

28、Type.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;/DAC1输出缓存关闭 BOFF1=1 DAC_Init(DAC_Channel_1,&DAC_InitType); /初始化DAC通道1DAC_Init(DAC_Channel_2,&DAC_InitType); /初始化DAC通道2DAC_Cmd(DAC_Channel_1, ENABLE); /使能DAC通道1DAC_Cmd(DAC_Channel_2, ENABLE); /使能DAC通道2DAC_SetChannel1Data(DAC_Align_12b_R, 0); /12

29、位右对齐数据格式设置DAC值DAC_SetChannel2Data(DAC_Align_12b_R, 0); /12位右对齐数据格式设置DAC值adc.c #include "adc.h"void Adc_Init(void) ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN; GPIO_Init(GPIOC,&GPIO_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /独立

温馨提示

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

评论

0/150

提交评论