(参考)基于stm32的fsk调制解调实验报告.doc

上传人:简****9 文档编号:95795732 上传时间:2019-08-22 格式:DOC 页数:23 大小:1.98MB
返回 下载 相关 举报
(参考)基于stm32的fsk调制解调实验报告.doc_第1页
第1页 / 共23页
(参考)基于stm32的fsk调制解调实验报告.doc_第2页
第2页 / 共23页
(参考)基于stm32的fsk调制解调实验报告.doc_第3页
第3页 / 共23页
(参考)基于stm32的fsk调制解调实验报告.doc_第4页
第4页 / 共23页
(参考)基于stm32的fsk调制解调实验报告.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《(参考)基于stm32的fsk调制解调实验报告.doc》由会员分享,可在线阅读,更多相关《(参考)基于stm32的fsk调制解调实验报告.doc(23页珍藏版)》请在金锄头文库上搜索。

1、基于STM32的FSK调制解调实验报告姓名: 学号:叶镇威 20133100167冯世杰 20133100029游锦锋 20133100112教师评语:1. 性能指标 基带信号:m序列,码率2000B 载波: FSK: f1=8000Hz, f2=4000Hz 输出正弦波采样点32个 FSK调制:输入基带信号,输出FSK正弦载波信号 FSK解调:输入FSK载波信号,输出基带信号2.基本原理:2.1.1FSK调制的基本原理用基带信号对高频载波的瞬时频率进行控制的调制方式叫做调频,在数字调制系统中则称为频移键控(FSK)。频移键控在数字通信中是使用较早的一种调制方式,这种方式实现起来比较容易,抗干

2、扰和抗衰落的性能也较强。其缺点是占用频带较宽,频带利用串不够高,因此,额移键控主要应用于低、中速数据的传输,以及衰落信道与频带较宽的信道。2.1.2 FSK信号的表达式和波形图频移键控是利用载波的频率变化来传递数字信息。在2FSK中,载波的频率随二进制基带信号在和两个频率点间变化。故其表达式为: 假设二进制序列s(t)为l01001时,则2FSK信号的波形如图2.1.2所示图2.1.2 2FSK信号的波形从图中可以看出,一个2FSK信号可以看成是两个不同载频的2ASK信号的叠加2.1.3 FSK调制方案:2FSK信号产生的方法主要有两种,一种可以采用模拟电路来实现(即直接调频法),另一种可以采

3、用键控法来实现。(1) 直接调频法原理所谓直接调频法,就是用数字基带信号去控制一个振荡器的某种参数而达到改变振荡频率的目的。如图2.1.3所示模 拟调 频 器图2.1.3 直接调频法原理框图(2)键控法原理该方法就是在二进制基带矩形脉冲序列的控制 下通过开关电路对两个不同的独立频率源进行选通,使其在每一个码元期间输出或两个载波之一。其原理如图1.2.2所示,它将产生二进制FSK信号。图中,数字信号控制两个独立振荡器。门电路(即开关电路)和按数字信号的变化规律通断。若门打开,则门关闭故输出为,反之则输出。这种方法的特点是转换速度快、波形好,而且频率稳定度可以做得很高。频率键控法还可以借助数字电路

4、来实现。以上两种FSK信号的调制方法的差异在于:由直接调频法产生的2FSK信号在相邻码元之间的相位是连续变化的。而键控法产生的2FSK信号,是由电子开关在两个独立的频率源之间转换形成,故相邻码元之间的相位不一定连续。f1门电路1门电路2相加倒相f2基带信号输入图2.1.4 键控法原理框图本系统采用的调制原理:(1).m序列生成原理:本次实验采用4级的m序列发生器来产生基带信号,具体产生的原理图如下: (2).STM32的DAC原理介绍:本次实验采用8位的DAC,通过改变这8位输入的值,控制输出电压的大小,从而实现输出电压值的正弦变化,只要取样足够的密,可以近似是正弦波输出,如下图:如下图所示2

5、2.1.1,VREF+是参考电压,这里采用3.3V的电压,也就是说输出正弦波的峰峰值为3.3V。DAC_OUTx是模拟信号的输出端,对应于硬件系统采用DAC1的PA4引脚作为输出端。从图中可以看出,DAC输出受DORx寄存器控制,实现DAC输出的控制。而我们这次实验采用12位右对齐模式,先要将数据写入DAC_DHR12Rx11:0位,然后通过使能触发传至寄存器DAC_DORx,具体时钟如图22.1.22.2 FSK解调原理:2.2.1、FSK解调方法有:包络检波、鉴频法、过零检测法、相干解调法,本设计采用相干解调法,其原理框图如下:输出低通滤波器相乘器带通滤波器w1 Cosw2tCosw1tF

6、SK解调原理框图定时脉冲抽样判决器低通滤波器相乘器带通滤波器w2 两个带通滤波器的作用同于包络检波,从带通滤波器输出的信号经过低通滤波器滤除掉二倍频信号,取出含有基带信号的低频信号,在脉冲信号到达时,抽样判决器对两个低频信号的抽样值、进行比较判决,还原出基带信号。2.2.2 过零检测法单位时间内信号经过零点的次数多少,可以用来衡量频率的高低。数字调频波的过零点数随不同载频而异,故检出过零点数可以得到关于频率的差异,这就是过零检测法的基本思想。过零检测法方框图及各点波形如图2.2.4所示。在图中,2FSK信号经限幅、微分、整流后形成与频率变化相对应的尖脉冲序列,这些尖脉冲的密集程度反映了信号的频

7、率高低,尖脉冲的个数就是信号过零点数。把这些尖脉冲变换成较宽的矩形脉冲,以增大其直流分量,该直流分量的大小和信号频率的高低成正比。然后经低通滤波器取出此直流分量,这样就完成了频率幅度变换,从而根据直流分量幅度上的区别还原出数字信号“1”和“0”。图2.2.3过零检测法方框图及各点波形图3. 具体设计思路与方案3.1 FSK调制部分:由STM32系统时钟分频,通过系统内部逻辑产生码率为2000B的m序列作为基带信号,如果输入为“0”则通过控制DAC输出频率为f1的载波信号,如果输入为“1”则通过控制DAC输出频率为f2的载波信号。基带信号的产生:建立一个数组m15,用于存储m序列作为基带信号。m

8、序列码率的控制:STM32的系统时钟是8MHz,而我们需要得到码率为2000B的数字信号。所以每个数字信号所包含时钟脉冲个数n:n=8MHz/2000*8Hz=500 (1B=8bits)即每隔500个时钟脉冲调用一次数组,产生一个基带信号。DAC的采样率的控制: 本次实验采用8位的DAC,所以范围是0255,也就是说将3.3V的电压分成256份,一个周期内可以产生512个采样点,完全符合实验要求的32个采样点。载波的频率控制:本次实验使用的STM32的系统时钟是8MHz,周期为T=1/8MHz。而为了得到f1=8000Hz,则周期1/f1=1/8000(s),一个周期有32个采样点,所以一个

9、采样点的时间t=1/f1*32(s),所以每个点之间的系统时钟脉冲数n=t/T=30,即30个时钟脉冲才发送一个采样点;同理为了得到载波f2=4000Hz,每个采样点对应的时钟脉冲间隔数目为60。输出电压的计算:因为本次实验DAC的参考电压是3.3V,所以DAC的输出电压是线性的从03.3V,在12位模式下DAC输出电压与Vref+以及DORx的计算公式如下:DACx输出电压=Vref*(DORx/4095)所以我们可以通过输入的12位数字信号确定输出信号的电压,通过新建一个12位的数组用于代表由03.3V的线性16个点(采样点为32个,半个周期16个采样点)所对应的12位数字信号,然后通过线

10、性改变这个数组所代表的数值的大小,逐个输出采样点。软件程序流程图:主要程序讲解:1. 开启PA口时钟,设置PA4为模拟输入STM32F103RCT6的DAC通道1在PA4上,所以,我们先要使能PORTA的时钟,然后设置PA4为模拟输入。DAC本身是输出,但是为什么端口要设置为模拟输入呢?因为一旦使能DACx通道之后,相应的GPIO引脚(PA4或者PA5)会自动与DAC的模拟输出相连,设置为输入,是为了避免额外的干扰。使能GPIOA时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/使能PROTA时钟设置PA1为模拟输入只需要设置初始化

11、参数即可:GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;/模拟输入2. 使能DAC1时钟。同其他外设一样,要想使用,必须首先开启相应的时钟。STM32的DAC模拟时钟是由APB1提供的,所以我们调用函数RCC_APB1PeriphClockCmd()设置DAC模块的时钟使能。RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);/使能DAC通道时钟3初始化DAC,设置DAC的工作模式。该部分市直全部通过DAC_CR设置实现,包括:DAC通道1使能、DAC通道1输出缓存关闭、不使用触发、不使用波形发生器等设置。

12、这里DMA初始化是通过函数DAC_Init完成的:void DAC_Init(uint32_tDAC_Channel,DAC_InitTypeDef*DAC_InitStruct)跟前面一样,首先我们来看看参数设置结构体类型DAC_InitTypeDef 的定义: typedef struct uint32_t DAC_Trigger; uint32_t DAC_WaveGeneration; uint32_t DAC_LFSRUnmask_TriangleAmplitude; uint32_t DAC_OutputBuffer; DAC_InitTypeDef;这个结构体的定义还是比较简单的

13、,只有四个成员变量,下面我们一一讲解。 第一个参数 DAC_Trigger 用来设置是否使用触发功能,前面已经讲解过这个的含义,这里我们不是用触发功能,所以值为 DAC_Trigger_None。 第二个参数 DAC_WaveGeneratio 用来设置是否使用波形发生,这里我们前面同样讲解过不使用。所以值为 DAC_WaveGeneration_None。 第三个参数 DAC_LFSRUnmask_TriangleAmplitude 用来设置屏蔽/幅值选择器,这个变量只在使用波形发生器的时候才有用,这里我们设置为 0 即可,值为 DAC_LFSRUnmask_Bit0。 第四个参数 DAC_

14、OutputBuffer 是用来设置输出缓存控制位,前面讲解过,我们不使用输出缓存,所以值为 DAC_OutputBuffer_Disable。到此四个参数设置完毕。看看我们的实例代码:DAC_InitTypeDef DAC_InitType; DAC_InitType.DAC_Trigger=DAC_Trigger_None; /不使用触发功能 TEN1=0 DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;/不使用波形发生 DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0; DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; /DAC1 输出缓存关闭DAC_Init(DAC_Channel_1,&DAC_InitType); /初始化 DAC 通道 14)使能 DAC转换通道 初始化 DAC 之后,理所当然要使能 DAC 转换通道,库函数方法是: DAC_Cmd(DAC_Channel_1, ENABLE); /使能 DAC1 5)设置 DAC的输出值。 通过前面 4 个步骤的设置,DAC 就可以开始工作了,我们使用 12 位右对齐数据格式,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号