小型测试系统设计及软件无线电的OFDM解调模块的设计与实现_第1页
小型测试系统设计及软件无线电的OFDM解调模块的设计与实现_第2页
小型测试系统设计及软件无线电的OFDM解调模块的设计与实现_第3页
小型测试系统设计及软件无线电的OFDM解调模块的设计与实现_第4页
小型测试系统设计及软件无线电的OFDM解调模块的设计与实现_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

目录设计目的.............................................3设计要求.............................................3仪器设备.............................................3四、硬件线路图及主要芯片说明.............................3系统所使用的开发板上的区域.................................3系统硬件电路图...........................................3系统所用主要芯片说明......................................43.1STC89C52RC芯片介绍...................................43.2ULN2003A芯片介绍.....................................43.3LCD1602液晶介绍......................................4系统工作原理.........................................5步进电机介绍.............................................52.控制原理基本框图..........................................5程序框图..............................................6程序清单..............................................7设计体会.............................................12参考文献.............................................12一、设计目的通过具体小型测试系统设计,实践单片机系统设计及调试的全过程,以加深对单片机内部结构、功能和指令系统的理解,并进一步学习单片机开发系统的应用及一些外围芯片的接口和编程方法,初步掌握单片机系统的硬、软件设计技术及调试技巧。了解步进电机的构造、驱动、工作原理以及步进电机的一些指标术语,掌握步进电机的转动控制方式和调速方法。加深对单片机开发试验仪各部分功能的了解与使用,方便对以后的设计进行开发、编程与调试。熟练C语言以及函数、中断的使用。二、设计要求1)电机转速可以平稳控制2)通过键盘可以选择电机的转动方式3)通过键盘可以设置电机的转速4)显示器可以显示步进电机的运行状况主要仪器设备设备数量单片机开发板一套步进电机一台按键四个ULN2003A驱动芯片一片LCD1602一片STC89C52RC一片硬件线路图及主要芯片说明1.系统所使用的开发板上的区域步进电机实验区上面有一个四相步进电机及其驱动芯片,用户可以在上面进行步进电机控制的相关实验。步进电机将电脉冲信号转变为角位移或线位移实现电机转动。键盘实验区的按键控制步进电机的启动/停止,正/反转,加/减速,本设计采用单键控制启停、单键控制正反转以及两个按键分别控制加减速。用STC89C52RC单片机实现控制整个步进电机系统的启动/停止,正/反转,加/减速以及驱动LCD1602显示步进电机的运行状况。2.系统硬件电路图步进电机运动系统的硬件电路图(用Proteus绘制)如下图所示:3.系统所用主要芯片说明3.1STC89C52RC芯片介绍STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。3.2ULN2003A芯片介绍本设计采用ULN2003A作为步进电机的驱动芯片,ULN2003A电路具有以下特点:●电流增益高(大于1000)●带负载能力强(输出电流大于500mA)●温度范围宽(-40℃—85℃)●工作电压高(大于50V)3.3LCD1602液晶介绍1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

五、系统工作原理1.步进电机介绍步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机是一种感应电机,它的工作原理是利用电子电路将直流电变成分时供电的多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的多相时序控制器。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A...),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-...),八拍(A-AB-B-BC-C-CD-D-DA-A...);当通电时序相反时,转向相反。本设计采用的通电方式是八拍。2.控制原理基本框图步进电机控制原理的基本框图如下:键盘实验区通过按键控制键盘实验区通过按键控制P3.2、P3.3通过按键控制P3.4、P3.5STC89C52RC信号处理控制步进电机实验区P3.2、P3.3控制启/停、正/反转P0口与P2口控制液晶显示LCD1602P1口低四位控制电机的转动P3.4、P3.5控制电机加/减速 其中P3.2、P3.3为外部中断,本设计采用下降沿触发方式,通过改变用m和n的值来控制电机的启动/停止,正/反转;P3.4、P3.5为定时/计数器中断,本设计采用计数方式,并工作于方式2,将TH0、TL0、TH1、TL1都设为0xff,这样和外部中断是一样的功能,通过改变脉冲之间的延迟时间T来控制电机的加/减速;P0口用以控制液晶指令与数据的传输,P2.5、P2.6、P2.7连接液晶的三个控制接口从而实现对液晶的控制。程序框图开始系统以及LCD初始化Nm==0 YY n==0 N 正转 反转 T0中断 T1中断 Y Y 减速 加速 结束 程序清单#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitRS=P2^6;sbitRW=P2^5;sbitEN=P2^7;voidDelayMS(uintms){ uchari; while(ms--)for(i=0;i<120;i++);}ucharBusy_Check(){ ucharLCD_Status; RS=0; RW=1; EN=1; DelayMS(1); LCD_Status=P0; EN=0; returnLCD_Status;}voidWrite_LCD_Command(ucharcmd){ while((Busy_Check()&0x80)==0x80); RS=0; RW=0; EN=0; P0=cmd;EN=1;DelayMS(1);EN=0;}voidWrite_LCD_Data(uchardat){ while((Busy_Check()&0x80)==0x80); RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;}voidInitialize_LCD(){ Write_LCD_Command(0x38);DelayMS(1); Write_LCD_Command(0x01);DelayMS(1); Write_LCD_Command(0x06);DelayMS(1); Write_LCD_Command(0x0c);DelayMS(1); }voidShowString(ucharx,uchary,ucharz,uchar*str){ uchari=0; if(y==0)Write_LCD_Command(0x80|x); if(y==1)Write_LCD_Command(0xc0|x); for(i=0;i<z;i++) { Write_LCD_Data(str[i]); }} for(i=0;i<z;i++) { Write_LCD_Data(str[i]); }}LCD_Data(str[i]); }}#include<reg51.h>#include<string.h>#defineucharunsignedchar#defineuintunsignedintvoidInitialize_LCD();voidShowString(uchar,uchar,uchar,uchar*);sbitK1=P3^2;sbitK2=P3^3;sbitK3=P3^4;sbitK4=P3^5;uintSp;floatT=45;bitm=1,n=1;ucharLCD_DSP[]={"00.0r/min"};ucharLCD_DSP1[]={"up"};ucharLCD_DSP2[]={"down"};ucharLCD_DSP3[]={"<<"};ucharLCD_DSP4[]={">>"};ucharcodeFFW[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//八拍正转ucharcodeREV[]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//八拍反转voiddelay(uintt){uchari;while(t--)for(i=0;i<80;i++); }voidmotor_ffw() //正转{uchari,j;for(j=0;j<2;j++){for(i=0;i<8;i++){ P1=FFW[i];delay(T); //调节转速 } if(m==1)break; } }voidmotor_rev() //反转{uchari,j;for(j=0;j<2;j++){for(i=0;i<8;i++){ P1=REV[i]; delay(T); //调节转速 } if(m==1)break; } }voidFormat_speed(uchard,uchar*a) //速度转换为数字字符{a[0]=d+'0';}voidmain(){TMOD=0x66; TH0=TL0=0xff; TH1=TL1=0xff; TR0=1; TR1=1;IT0=1;IT1=1;IE=0x8f;Initialize_LCD();while(1) { if(m==0) { if(n==0) { ShowString(9,1,2,LCD_DSP3); motor_ffw(); } else { ShowString(9,1,2,LCD_DSP4); motor_rev(); } Sp=(uint)(9000/T);}else{P1=0xf9;Sp=0; ShowString(9,1,2,""); }Format_speed(Sp/100,LCD_DSP);Format_speed(Sp%100/10,LCD_DSP+1);Format_speed(Sp%10,LCD_DSP+3);ShowString(3,0,10,LCD_DSP);}}voidEX_INT0()interrupt0{m=~m;}voidTimer0()interrupt1{if(T<15)T=T+0.2;elseif(T<20)T=T+0.5;elseif(T<30)T=T+1;elseif(T<40)T=T+2;elseif(T<50)T=T+3;elseif(T<100)T=T+6;elseif(T<150)T=T+18;elseif(T<200)T=T+25;elseT=200;ShowString(2,1,4,LCD_DSP2);delay(400);ShowString(2,1,4,"");}voidEX_INT1()interrupt2{n=~n;}voidTimer1()interrupt3{if(T>150)T=T-25;elseif(T>100)T=T-18;elseif(T>50)T=T-6;elseif(T>40)T=T-3;elseif(T>30)T=T-2;elseif(T>20)T=T-1;elseif(T>15)T=T-0.5;elseif(T>11)T=T-0.2;elseT=11;ShowString(2,1,4,LCD_DSP1);delay(400);ShowString(2,1,4,"");}八、设计体会通过此次课程设计,首先,我更加扎实的掌握了有关单片机的控制、LCD1602液晶显示、C语言编程等方面的知识以及步进电机原理、控制、驱动方面的知识;其次,我进一步懂得了如何对一个课程设计进行整体规划和实行。在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查,终于找出了原因所在,但也暴露出了我前期在这方面的知识欠缺。实践出真知,通过Proteus的仿真,外加开发板调试,使得设计的过程更加顺畅,也使我掌握的知识不再是纸上谈兵。参考文献[1]徐煜明.《C51单片机及应用系统设计》.电子工业出版社[2]彭伟.《单片机C语言程序设计实训100例——基于8051+Proteus仿真》.电子工业出版社[3]郭天祥.《51单片机C语言教程——入门、提高、开发、拓展全攻略》.电子工业出版社[4]张齐.《单片机与应用系统设计——基于C51的8051+Proteus仿真实验与解题指导》.电子工业出版社基于软件无线电的OFDM解调模块的设计与实现摘要:针对IEEE802.11a标准中OFDM调制解调原理,结合软件无线电的思想,采用高效率的SystemGenerator软件,对OFDM部分的解调模块进行设计与实现。设计中采用16QAM对数据符号进行调制,可以有效地降低系统误码率。仿真结果表明,本文设计的OFDM解调模块具有较高的可靠性。关键词:软件无线电;OFDM解调;SystemGeneratorTheOFDMdemodulationdesignandimplementationbasedonsoftwareratiomoduleAbstract:InviewoftheIEEE802.11astandardforOFDMmodulationanddemodulationprinciple,togetherwiththeideaofSofeware-Defined-Radio(SDR),somepartsofOFDMdemodulationmoduleispresentbyusingtheSystemGeneratortoolundertheMatlab/Simulinkcircumstance.Itisjusttomakeclear,withsomeemphasisaboutthedesignmethodsandsimulationofthenormalization,FFTdemodulationand16QAMdemodulationmodules.ThesimulationresultsshowthatthesedemodulationmodulescandemodulatetheOFDMsignalcorrectly.Keywordwords:Software-Defined-Ratio;OFDM;demodulation

1引言软件无线电的基本思想是以一个通用的、标准化、模块化的硬件平台为依托,通过软件编程来实现无线电台的各种功能,从基于硬件、面向用途的电台设计方法中解放出来[1]。软件无线电强调体系结构的开放性和全面可编程性,通过软件更新改变硬件配置结构,实现新的功能。OFDM技术作为一种高效的信道接入方式,能够有效地对抗了由于多径效应造成的频率选择性衰落,同时通过串/并变换把频率选择性信道转换成并行的正交子信道,提供了较高的频谱利用率,成为广大学者的研究热点[2]。目前OFDM技术已经被广泛应用于广播式的音频、视频领域和民用通信系统,比如非对称的数字用户环路(ADSL)、ETSI标准的数字音频广播(DAB)、数字视频广播(DVB)、高清晰度电视(HDTV)、无线局域网(WLAN)等。结合软件无线电的思想,采用XILINX公司的SystemGenerator这一高性能DSP系统的快速建模和实现工具,在Matlab/Simulink环境下,对OFDM解调的部分模块进行系统建模仿真。软件无线电中OFDM的调制解调原理及系统框图2.1IEEE802.11a中OFDM的调制解调原理OFDM的基本原理就是把一个高速的数据流分配到并行的速率较低的相互正交的若干子信道中传输,通过各子载波进行调制,然后在独立的子信道上进行传输。由于每个子信道的频率特性可以近似看作是平坦的,每个信道就可以认为是无符号间干扰的理想信道,接收端可以可靠的解调信号。同时在OFDM符号中插入保护间隔保证了子信道的正交性,消除了OFDM符号间的干扰。对于含有N个子载波的OFDM系统,在一个符号持续时间T内,从开始采用复等效基带信号表示OFDM为:(1)式中,表示第k个子载波上传输的经过调制后的信号。对于一个周期内的基带信号,令式(1)中,忽略矩形函数,并对信号以的速率进行采样,即令,可得(2)式(2)与IDFT运算的表达式一致,说明OFDM复等效基带信号可以用离散傅立叶反变换(IDFT)的方法来实现。同样,在接受端,恢复原始数据符号的处理就可以通过对进行反变换,即DFT,得到(3)在OFDM的调制和解调FILENAME基于软件无线电的OFDM解调模块的设计与实现最终版.doc中可以通过IDFT和DFT来代替,FFT/IFFT是实现DFT/IDFT快速算法。在OFDM系统的具体实现中,通常采用更加快捷方便的快速傅立叶变换(FFT/IFFT)来降低运算复杂度。2.2OFDM的系统框图基于软件无线电架构的OFDM系统模型框图如图1所示,可分为发射端,和接收端。图1软件无线电架构的OFDM系统在发送端,首先将串行输入的数据进行16QAM星座图映射,再根据系统的传输帧格式进行导频插入、补零成帧等处理过程,得到了数域数据。然后通过64点的IFFT变换,完成多载波调制,使得信号能够在子载波上并行传输。变换后的信号经串并转换,加入循环前缀,构成一个完整的OFDM数据帧,经过上变频发射到信道中传输。在接收端,把接收到的信号先进行下变频,进行OFDM解调。OFDM解调即把信号送到同步/定时模块,经过同步算法,估计出帧时点和频率偏移,并删去循环前缀。然后经64点FFT变换后,利用信号中的插入导频进行信道估计。最后,FFT的输出包括了64个映射值,所有这些值被逆映射为二进制数据输出。仿真模型设计SystemGenerator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。并且可以生成HDL文件,或者网表,在ISE中进行调用,或者直接生成比特流下载文件。SystemGenerator能够加快DSP系统的开发进度,缩短整个设计周期,本文即是使用SystemGenerator来设计OFDM的调制解调系统的。采用SystemGenerator设计的OFDM调制解调系统如图2所示:图2OFDM调制解调系统幅度归一化模块在SystemGenerator中,由于FFT解调模块中使用的FFTv3_2模块要求的输入数据格式为Fix_n_n-1,比如Fix_8_7、FIX_24_23,所以需要在FFT解调模块前做一个归一化模块,使输入数据符合FFTv3_21的要求。FFT解调模块FFT解调主要使用SystemGenerator提供的FFTv3_2模块,该模块支持的器件有Virtex-4、Virtex-2、Virtex-2Pro和Spartan-3,它为离散傅立叶变换(DFT)提供了一种有效的算法。当fwd_inv端口输入为1时,FFTv3_2进行离散傅立叶变换,当fwd_inv端口输入为0时,FFTv3_2则进行离散傅立叶反变换。信号fwd_inv必须是布尔型数据。OFDM解调模块如图3所示。图3FFT解调模块对OFDM调制解调系统进行仿真,仿真结果结果如图4。在16QAM映射、IFFT调制、FFT解调模块后面加上星座图模块进行观察,由仿真结果可以看出,FFT解调模块把看起来杂乱无章的OFDM载波星座图恢复成基本有序的16QAM星座图,与发射端的16QAM映射星座图基本一致。图4(a)16QAM映射星座图图4(b)OFDM载波星座图图4(c)FFT解调星座图16QAM逆映射模块发射端的16QAM调制方式采用格雷码方式的调制星座图如图5所示,其映射规则如表1:图516QAM映射星座图表116QAM映射规则量值I(a1a2)/Q(b1b2310

温馨提示

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

评论

0/150

提交评论