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

下载本文档

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

文档简介

基于数字相关的时栅信号处理设计一、设计原理与要求1.1设计原理时栅传感器是通过两路正交信号(正、余弦)激励传感器的空间正交的激励绕组,通过电磁感应输出包含角度信息的正弦信号。基本原理如下:时栅传感器 (角度为) 通过比较与的相位差,即可检测其角度信息。1.2设计要求设计一个测控系统,按键每按一次,角度变化5度。通过单片机模拟两路正交信号与,再对应乘上与,进行模拟时栅传感器,再通过加法电路进行信号相加,并通过AD采样将该信号再传递给单片机,再在程序中进行数字相关1的相关性分析,通过软件计算出角度,并将其显示在液晶屏上。激励频率400HZ(叠加噪声),带通滤波器中心频率为400HZ,带宽为100HZ。二、系统结构框图系统结构框图如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为=23,这样可以防止电路自激震荡,有利于电路性能的稳定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、 软件设计在软件中,除了大量的数据计算处理外,还会用到STM32芯片的外部中断、定时中断、内置DAC与ADC等功能。通过程序编写,就可以产生对信号的DAC输出,以及信号的ADC才回,并对采回的数据信号进行相关性计算,得出角度。 开始 程序流程图: 各功能模块初始化 定时器中断 外部中断 DAC输出信号 改变角度设置的值 ang_set ADC采集信号 改变角度设置的值 ang_set LCD显示 结束5、 实物制作及现象7、 测试与分析八、总结此次的课程设计让我们大体上对于数字信号的处理与分析有了进一步的了解,对于信号的硬件放大、滤波,以及软件方面的功能编写都有了明显的提升,通过自主的课程设计,更能让我们的动手实践能力得到显著的提升,同时培养我们对于实物制作的兴趣,在此次课程设计过后,相信我们能够继续学习理论知识并且提高自身的实践动手能力,实现综合素质的全面提高。九、参考文献1基于数字相关的弱信号检测方法的研究.李飞.华中科技大学2智能仪器设计基础/王祁主编.-北京:机械工业出版社,2009.12P77P803测控电路/张国熊主编.-4版,-北京:机械工业出版社,2011.1 P111P119,P127P128.4电子技术基础.模拟部分/康华光主编;-5版.-北京:高等教育出版社,2006.1 P425P4295ARM嵌入式系统基础教程/周立功主编.-2版.-北京:北京航空航天大学出版社,2008.9 P304P310附录程序记录如下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.h#include timer.hextern 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,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,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; while(1) a=0;b=0;rad=ang_set* 3.1415926 /180;sin_ang=sin(rad);cos_ang=cos(rad);for(i=0;i256;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;j256;j+)Sin_wt_ang_Sin_wtj=(ADC_Sin_wt_angj*3/16)*(DAC_Sin_wtj/16);for(k=0;k256;k+)Sin_wt_ang_Cos_wtk=(ADC_Sin_wt_angk*3/16)*(DAC_Cos_wtk/16);for(m=0;m256;m+) a=a+(Sin_wt_ang_Sin_wtm-5170)*JF_x;for(n=0;n90)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_set=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;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); /时钟使能/定时器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_TimeBaseInit(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_IRQChannelSubPriority = 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,DAC_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_Init(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_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_InitType.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位右对齐数据格式设置DAC值DAC_SetChannel2Data(DAC_Align_12b_R, 0); /12位右对齐数据格式设置DAC值adc.c #include adc.hvoid 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; /独立模式 ADC_InitStructure.ADC_ScanConvMode =DISABLE; /连续多通道模式 ADC_InitStructure.ADC_ContinuousConvMode =ENABLE; /连续转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /转换不受外界决定 ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right; /右对齐 ADC_InitSt

温馨提示

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

评论

0/150

提交评论