3. 调试8027使其发出单音FM信号
本文中所有例子中我们都仅给MSI001使用天线,因为QN8027离得很近,发射端不需要使用天线
本程序中操作的管脚如下描述:
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寄存器
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_I2C2_Init();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//tim2开启pwm,输出24Mhz
QN8027_WriteOneByte(0x00, 0x31); //向寄存器0x00写入值0x31
HAL_Delay(100); //延时100ms
qn8027_read_byte = QN8027_ReadOneByte(0x00); //读取寄存器0x00的值
while (1)
{
}
}
添加QN8027驱动代码
#include "qn8027/qn8027.h"
I2C_HandleTypeDef *qn8027 = &hi2c2;
//初始化QN8027寄存器,设为98.5M输出
uint8_t qn8027_98_5M_reg_tbl[][2]=
{
0x00, 0x31,
0x01, 0xC2,
0x02, 0xB9,
0x03, 0x80,
0x04, 0xB2,
0x10, 0x32,
0x11, 0x81,
};
//在QN8027指定地址读出一个数据
//WriteAddr :写入数据的目的地址
//DataToWrite:要写入的数据
uint8_t QN8027_ReadOneByte(uint8_t ReadAddr)
{
uint8_t temp=0;
HAL_I2C_Mem_Read(qn8027,QN8027_READ,ReadAddr,1,&temp,1,20);
return temp;
}
//在QN8027指定地址写入一个数据
//WriteAddr :写入数据的目的地址
//DataToWrite:要写入的数据
HAL_StatusTypeDef QN8027_WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite)
{
HAL_StatusTypeDef errorcode = HAL_OK;
errorcode = HAL_I2C_Mem_Write(qn8027,QN8027_WRITE,WriteAddr,1,&DataToWrite,1,20);
return errorcode;
}
//Qn8027初始化,初始化成98.5M,改变寄存器参数配置不同频率
HAL_StatusTypeDef Qn8027_Init(void)
{
uint32_t i=0;
HAL_StatusTypeDef errorcode = HAL_OK;
//设置:输出98.5M
for(i=0;i< (sizeof(qn8027_98_5M_reg_tbl)/2);i++)
{
errorcode = QN8027_WriteOneByte(qn8027_98_5M_reg_tbl[i][0],qn8027_98_5M_reg_tbl[i][1]);
}
return errorcode;
}
5. PWM测试输出
如果有条件,可以使用示波器测试QN8027_REFCLK管脚,观测有无24M的波形。
6. Qn8027读写测试
在keil中用debug单步调试,先向寄存器0x00写入值0x31,再读取寄存器0x00的值,通过Watch窗口观察变量qn8027_read_byte值为0X31.说明I2C读写正确。
如果读出的值和写入的值一致,说明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开发板连接。
程序中操作的管脚如下描述:
-
DAC输出1kHz正弦波
STM32H750开发板输出1kHz的正弦波,通过Timer6产生25k频率的触发事件,DAC配置为外部timer6触发中断。正弦波表长度为25字长,每次timer6触发事件发送,在中断服务程序中一直循环发送波表。
也可以使用TIMER事件触发DMA输出波形方法,可以回顾基础实验“实验二十八 DAC应用定时器触发实现DMA输出波形”。
DAC驱动设计
定时器触发DAC做DMA数据传输的实现思路 实现思路框图如下:
-
QN8027设置输出频率为98.5MHZ
在qn8027.c文件中,添加如下代码,配置qn8027寄存器如下,第一行是寄存器地址,第二行是写入寄存器值。(下表对应98.5M的频点)。寄存器取值参考前面调试文档。
I2C配置和操作在前一小节已经讲解,可以回顾前一小节查看。
-
编写代码
在main中使能PWM输出,初始化正弦波码表,开启TIM6和DAC。初始化qn8027频率为98.5M.在TIM6_DAC_IRQHandler中断中更新DAC值。
-
1khz正弦波输出测试
用示波器测量DAC输出(PA4管脚),和经过滤波后波形。CH1(黄色)是DAC发出的1Khz正弦波,CH2(蓝色)是经过硬件滤波后qn8027输入管脚的波形。
测试点如下图(滤波前波形测量R45下侧,滤波后波形测量R8左右都行):
-
98.5MHz FM信号测试
配置好QN8027后,1KHz的正弦波单音就被调制在98.5MHz上,用FM收音机调到98.5MHz频点上就可以听到这个1KHz的“嘟”声。 注意:如果当地98.5MHz上有电台,可以换一个空白的频点,避开已有的电台。
成品收音机的功能是已知的,用已知来调试未知,是调试的基本思路。
除了使用成品收音机来验证98.5M上FM调制的1KHz信号之外,我们也可以用m302的频谱仪来验证,因为m302的带宽有50MHz,输入的100MHz信号虽然有衰减,但是在频域上还是能看见的。
这里涉及到欠采样理论。欠采样理论不在这里讲解,以图示来说明。
以98M的频点为例,用100M采样。信号是周期连续波,采样脉冲是δ函数。采样过程就相当于时域相乘,对应频域卷积。就是把信号的正负频谱进行搬移。图中画出0附近的几个搬移,-200M,-100M,0,100M,200M。为了看清楚,每对之间的高度画的不一样,便于区分。可以看到,在100M位置的搬移上,-98M落在2M位置。
同样的,如果以10M采样率采样,经过多个奈奎斯特域的翻折,98M的信号也会落到2M位置上。
选择打开FFT功能
选择5M带宽(采样率10MSPS),可以看到混叠到1.5MHz的FM信号和4MHz上的时钟信号。如下图。
暂停后将频率轴展宽到1.4M - 1.6M,可以清晰看到混叠到1.5MHz的FM信号:
从实验过程可以看到,欠采样会出现频谱翻折,谐波翻折,混频翻折,会有多个频谱线。所以实际中如果要利用欠采样来采样高频信号,需要添加滤波器。这里只是利用了欠采样来查看QN8027是否发出了设置的频点。
使用成品收音机或者使用频谱仪,确认QN8027发出正确的单音FM信号后,我们就可以使用这个“已知的单音FM信号”来调试MSi001了。单音比直接收电台的音频更简单直观的看到MSi001的采集、解调和滤波各个步骤的波形,并和已知正确波形进行对比。
-
寄存器
+关注
关注
31文章
5311浏览量
119995 -
数码管
+关注
关注
32文章
1874浏览量
90936 -
PWM波
+关注
关注
0文章
99浏览量
16838 -
预分频器
+关注
关注
0文章
18浏览量
8116 -
STM32H750
+关注
关注
1文章
16浏览量
1730
发布评论请先 登录
相关推荐
评论