如下图所示22.1.1,VREF+是参考电压,这里采用3.3V的电压,也就是说输出正弦波的峰峰值为3.3V。DAC_OUTx是模拟信号的输出端,对应于硬件系统采用DAC1的PA4引脚作为输出端。
从图中可以看出,DAC输出受DORx寄存器控制,实现DAC输出的控制。而我们这次实验采用12位右对齐模式,先要将数据写入DAC_DHR12Rx[11:0]位,然后通过使能触发传至寄存器DAC_DORx,具体时钟如图22.1.2
2.2 FSK解调原理:
2.2.1、FSK解调方法有:包络检波、鉴频法、过零检测法、相干解调法,本设计采用相干解调法,其原理框图如下: e2FSK(t) 带通滤波器w1 相乘Cosw1t 带通滤波器w2 Cosw2低通滤波器 定时脉低通滤波器 输出 抽样判决 相乘FSK解调原理框两个带通滤波器的作用同于包络检波,从带通滤波器输出的信号经过低通滤波器滤除掉二倍频信号,取出含有基带信号的低频信号,在脉冲信号到达时,抽样判决器对两个低频信号的抽样值v1、v2进行比较判决,还原出基带信号。 2.2.2 过零检测法
单位时间内信号经过零点的次数多少,可以用来衡量频率的高低。数字调频波的过零点数随不同载频而异,故检出过零点数可以得到关于频率的差异,这就是过零检测法的基本思想。过零检测法方框图及各点波形如图2.2.4所示。在图中,2FSK信号经限幅、微分、整流后形成与频率变化相对应的尖脉冲序列,这些尖脉冲的密集程度反映了信号的频率高低,尖脉冲的个数就是信号过零点数。把这些尖脉冲变换成较宽的矩形脉冲,以增大其直流分量,该直流分量的大小和信号频率的高低成正比。然后经低通滤波器取出此直流分量,这样就完成了频率——幅度变换,从而根据直流分量幅度上的区别还原出数字信号“1”和“0”。
图2.2.3 过零检测法方框图及各点波形图
3. 具体设计思路与方案 3.1 FSK调制部分:
由STM32系统时钟分频,通过系统内部逻辑产生码率为2000B的m序列作为基带信号,如果输入为“0”则通过控制DAC输出频率为f1的载波信号,如果输入为“1”则通过控制DAC输出频率为f2的载波信号。
基带信号的产生:
建立一个数组m[15],用于存储m序列作为基带信号。 m序列码率的控制:
STM32的系统时钟是8MHz,而我们需要得到码率为2000B的数字信号。 所以每个数字信号所包含时钟脉冲个数n:
n=8MHz/2000*8Hz=500 (1B=8bits)
即每隔500个时钟脉冲调用一次数组,产生一个基带信号。 DAC的采样率的控制:
本次实验采用8位的DAC,所以范围是0~255,也就是说将3.3V的电压分成256份,一个周期内可以产生512个采样点,完全符合实验要求的32个采样点。 载波的频率控制:
本次实验使用的STM32的系统时钟是8MHz,周期为T=1/8MHz。而为了得到f1=8000Hz,则周期1/f1=1/8000(s),一个周期有32个采样点,所以一个采样点的时间t=1/f1*32(s),所以每个点之间的系统
时钟脉冲数n=t/T=30,即30个时钟脉冲才发送一个采样点; 同理为了得到载波f2=4000Hz,每个采样点对应的时钟脉冲间隔数目为60。
输出电压的计算:
因为本次实验DAC的参考电压是3.3V,所以DAC的输出电压是线性的从0~3.3V,在12位模式下DAC输出电压与Vref+以及DORx的计算公式如下:DACx输出电压=Vref*(DORx/4095)
所以我们可以通过输入的12位数字信号确定输出信号的电压,通过新建一个12位的数组用于代表由0~3.3V的线性16个点(采样点为32个,半个周期16个采样点)所对应的12位数字信号,然后通过线性改变这个数组所代表的数值的大小,逐个输出采样点。 软件程序流程图: