使用STM32调试FMSDR模块及解调FM电台(3)

2023-08-08  

3. 调试8027使其发出单音FM信号

3.1 输出24Mhz和验证I2C接口


1. 硬件连接

将FM_SDR板卡和STM32H750开发板连接。

本文中所有例子中我们都仅给MSI001使用天线,因为QN8027离得很近,发射端不需要使用天线


本程序中操作的管脚如下描述:

pYYBAGNHxSeAW6rAAABbcGtd_0s636.png

2. PWM输出24MHz

QN8027芯片需要输入24MHz的时钟作为参考信号,在这里通过STM32H750的TIMER2产生24M的方波,提供给QN8027作为输入参考信号。

PWM信号的关键参数是频率和占空比,我们分别看一下如何设定TIM2来确定输出PWM的频率和占空比:

PWM的输出频率=计数器计数频率/(计数器的计数上限+1),计数器计数频率在上图中是CK_CNT,它由时钟和触发控制模块输出的CK_PSC经过PSC分频器得到,因此我们在初始化TIM1的时候选择时钟源为CK_INT,预分频器比为1(寄存器中写入为0),这样我们的CK_CNT是240MHz;而计数器的计数上限就是自动重载寄存器APR的值,设定为9;

PWM的占空比,由比较寄存器(CCR1-4的值)和计数器计数上限(APR的值)决定,设定CCR1为4的话,PWM1的占空比即为(4+1)/(9+1)= 50%。

具体TIMER输出PWM方法介绍,可以回顾基础实验“实验六TIM1输出PWM”:

3. 硬件IIC接口配置

芯片的控制接口是I2C协议,要使芯片正常工作,首先I2C接口的操作要正常。这里利用QN8027的I2C支持可读可写,写入0x00寄存器一个值,再读出来。如果读出和写入的一致,说明I2C操作正常,芯片可以被控。这样进行后续调试才有初步把握。

需要配置STM32H750的硬件I2C,然后发出控制字操作8027芯片,确认板卡和芯片正常工作。I2C工作速度设为100K.

也可以使用GPIO模拟I2C时序,可以回顾基础实验“实验十五 矩阵键盘和数码管显示—模拟IIC”。

4. 编写代码

在main中使能PWM输出,和读写QN8027寄存器

pYYBAGNHxUOAFqP3AACEIMt-yU4204.png

添加QN8027驱动代码

pYYBAGNHxWeAEEx6AAExuj22k3k629.pngpoYBAGNHxW6AXcn9AACH0QPBQKI211.png

5. PWM测试输出

如果有条件,可以使用示波器测试QN8027_REFCLK管脚,观测有无24M的波形。

6. Qn8027读写测试

在keil中用debug单步调试,先向寄存器0x00写入值0x31,再读取寄存器0x00的值,通过Watch窗口观察变量qn8027_read_byte值为0X31.说明I2C读写正确。

pYYBAGNHxYSALr8HAAD7gxpGj-8646.png

如果读出的值和写入的值一致,说明I2C时序和8027硬件都没有问题。那么我们就可以继续下一步配置。

注意,I2C时序写入这一步看上去虽然简单,却是最经常出问题的步骤。如果遇到8027没有反应,建议用如下方法排查:

电源测试:8027供电是否正常;

IO通断测试:使用IO输出高低电平,通过测量确定PCB焊接正确,且插对了孔位;

I2C时序测试:确定I2C的上拉电阻正确,使用示波器或逻辑分析仪捕获发出的I2C时序,判断是否I2C配置寄存器有错误;FPGA写的I2C程序,则要特别留意是否有代码bug。

8027如果没有应答,观察是否有虚焊等情况(开发板发货前经过测试,基本上可以排除电源和8027的焊接问题)。

3.2 将H750内部DAC输出的1KHz正弦波调制到98.5MHz

下面,我们将使用单片机的PA4管脚发出单音(正弦波),频率1KHz,峰峰值1600mVpp,直流偏置1.65V。接入FMSDR开发板的调制信号管脚DAC_L。单片机管脚PA15发出24MHz的PWM信号,提供芯片的参考时钟。通过I2C接口控制QN8027芯片。

1. 硬件连接

将FM_SDR板卡和STM32H750开发板连接。

程序中操作的管脚如下描述:

pYYBAGNHxaCAaVR5AAB0mCfwZCM482.png

2. DAC输出1kHz正弦波

STM32H750开发板输出1kHz的正弦波,通过Timer6产生25k频率的触发事件,DAC配置为外部timer6触发中断。正弦波表长度为25字长,每次timer6触发事件发送,在中断服务程序中一直循环发送波表。

也可以使用TIMER事件触发DMA输出波形方法,可以回顾基础实验“实验二十八 DAC应用定时器触发实现DMA输出波形”。

DAC驱动设计

定时器触发DAC做DMA数据传输的实现思路 实现思路框图如下:

poYBAGNHxb2ACB5OAACXG68dvhU835.png

3. QN8027设置输出频率为98.5MHZ

在qn8027.c文件中,添加如下代码,配置qn8027寄存器如下,第一行是寄存器地址,第二行是写入寄存器值。(下表对应98.5M的频点)。寄存器取值参考前面调试文档。

pYYBAGNHxdqABtsSAABFzZCbjRM737.png

I2C配置和操作在前一小节已经讲解,可以回顾前一小节查看。

4. 编写代码

在main中使能PWM输出,初始化正弦波码表,开启TIM6和DAC。初始化qn8027频率为98.5M.在TIM6_DAC_IRQHandler中断中更新DAC值。

pYYBAGNHxgeAI73jAAFYP1aBspI813.png

5. 1khz正弦波输出测试

用示波器测量DAC输出(PA4管脚),和经过滤波后波形。CH1(黄色)是DAC发出的1Khz正弦波,CH2(蓝色)是经过硬件滤波后qn8027输入管脚的波形。

poYBAGNHxheALW8KAAD-kLv8V0A545.png

测试点如下图(滤波前波形测量R45下侧,滤波后波形测量R8左右都行):

pYYBAGNHxjCAW40nAAIFcWl6kjs562.png

6. 98.5MHz FM信号测试

配置好QN8027后,1KHz的正弦波单音就被调制在98.5MHz上,用FM收音机调到98.5MHz频点上就可以听到这个1KHz的“嘟”声。 注意:如果当地98.5MHz上有电台,可以换一个空白的频点,避开已有的电台。

成品收音机的功能是已知的,用已知来调试未知,是调试的基本思路。

除了使用成品收音机来验证98.5M上FM调制的1KHz信号之外,我们也可以用m302的频谱仪来验证,因为m302的带宽有50MHz,输入的100MHz信号虽然有衰减,但是在频域上还是能看见的。

这里涉及到欠采样理论。欠采样理论不在这里讲解,以图示来说明。

poYBAGNHxlyAUIUyAABDDxjAhGU937.png

以98M的频点为例,用100M采样。信号是周期连续波,采样脉冲是δ函数。采样过程就相当于时域相乘,对应频域卷积。就是把信号的正负频谱进行搬移。图中画出0附近的几个搬移,-200M,-100M,0,100M,200M。为了看清楚,每对之间的高度画的不一样,便于区分。可以看到,在100M位置的搬移上,-98M落在2M位置。

同样的,如果以10M采样率采样,经过多个奈奎斯特域的翻折,98M的信号也会落到2M位置上。

我们将AIN1连接到FM输出端口,开启FFT功能:

pYYBAGNHxm6AAaIQAABpypxxpQA508.png

选择5M带宽(采样率10MSPS),可以看到混叠到1.5MHz的FM信号和4MHz上的时钟信号。如下图。

poYBAGNHxoCAJ_5fAAHshU01Lc4447.png

从实验过程可以看到,欠采样会出现频谱翻折,谐波翻折,混频翻折,会有多个频谱线。所以实际中如果要利用欠采样来采样高频信号,需要添加滤波器。这里只是利用了欠采样来查看QN8027是否发出了设置的频点。


使用成品收音机或者使用频谱仪,确认QN8027发出正确的单音FM信号后,我们就可以使用这个“已知的单音FM信号”来调试MSi001了。单音比直接收电台的音频更简单直观的看到MSi001的采集、解调和滤波各个步骤的波形,并和已知正确波形进行对比。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。