写数据到控制寄存器
单片机传送数据到AD9833的时序如图4所示。FSYNC引脚是使能引脚,电平触发方式,低电平有效。进行串行数据传输时,FSYNC引脚必须置低。需要注意的是,在FSYNC开始变为低前(即将开始写数据时),SCLK必须为高电平。
图4 单元机传送数据到AD9833的时序图
单片机写16位数据到AD9833时,高位在前,低位在后。用软件模拟时钟信号和片选信号。传送数据的程序如下:
SCLK=1;
FSYNC=1;
Delay(100);
FSYNC=0;
for(i=0;i<16;i++)
{ SDATA=datas&0x8000;
SCLK=0;
Delay(50) ;
SCLK=1;
datas=datas<<1;
}
Delay(50);
FSYNC=1;
SCLK=0;
输出波形
在示波器上观测FSK调制信号,可看到频率为7230Hz的正弦信号输出,实际输出频率为7.22985kHz。
接收信号处理
接收处理过程
由于声波传感器输出的是模拟信号,因此在进行ADC采样之前必须进行信号的预滤波处理。考虑到最大限度降低信号纹波的要求和滤波器的通带滤波特性,本设计中采用Butterworth型滤波器。
经过调理后的传感器信号还不能立即被单片机采样。这是因为,传感器输出信号的范围是-5V~+5V,而单片机ADC模块的输入电压范围是0V~2.5V,所以调理后的传感器信号必须经过电压转换电路,由精密电压芯片AD780为单片机提供2.5V标准的ADC参考信号。
程序设计
上位机应用程序是运用MATLAB的类(Serial)和m语言开发,辅以MATLAB的GUIDE工具箱,程序开发相对简单。SoC的程序应用C语言编制。下位机MCU接收到上位PC机的下发命令后,通过串口中断程序转入相应的子程序,执行相应操作,最后返回一个握手信号作为状态标志,确认命令是否被正确执行。
帧同步识别
同步过程实际上就是寻找最大相关峰的过程。
先确定一个门限GATE,只有当乘累加的值大于GATE以后才开始比较相关峰。GATE必须设定的意义有两条:
(1)减少不必要的比较次数,提高程序执行效率;
(2)将随机噪声和lfm信号乘累加得出的伪最大相关峰滤掉。
出现大于门限GATE乘累加值时,预示着真实的lfm信号可能到来。找到相关峰值所在的位置,就可以知道信息码的起始位。