RSSI:Received Signal StrengthIndicator,表明了接收机接收到的信号的强度。一般使用分贝(db)从0到-120db。RDA5807内部接收器中具有RSSI测量功能,通过软件读取该数值,来表征接收到的信号的强度。
RDA5807的RSSI信号响应有一定的时间,下面通过实际测试看到这个响应时间大约为0.5秒。
利用RDA5807可以对于某一地区的调频电台进行探测和扫描。
RDA5807的RSSI功能
RDA5807内部接收模块如下图所示。在模块的右下方,可以看到它具有/RBDS/RSSI模块。
RDA5807和RSSI相关的寄存器
根据RDA5807数据手册给出的信息。在读取的内部寄存器的0xB中,15:9数据位表示了RSSI数值。该数值表征了接收信号的强度,按照对数尺度来显示。数值越大,信号的强度越高。
读取RDA5807RSSI数据
使用外面的代码来读取RDA5807内部寄存器。由于RDA5807具有自动内部寄存器地址生成的功能。当开始一个读数据帧的时候,RDA5807内部的寄存器地址自动从0xA开始递增。
由于RDA5807内部的寄存器是16bit,所以要读到0xB寄存器的内容,需要从开始读寄存器开始,连续读取三个字节,才能够读到0xB寄存器的高八位内容。
下面代码显示了读取RDA5807内部四个字节的内容,然后返回其中第三个字节的内容。
void RDA5807I2CRead(uint8_t * pucData, int nLength) { HAL_I2C_Master_Receive(&hi2c1, RDA5807_I2C_ADD, pucData, nLength, 10); } unsigned char RDA5807ReadRSSL(void) { unsigned char ucData[4]; RDA5807I2CRead(ucData, 4); return ucData[2] >> 1; // 该数据位应该右移一位,所得到的就是RSSI的数值了。 }
代码中ucDatga[2]的高7位是RSSI,因此最后需要通过右移一位来获得RSSI数值。
扫描本地区的调频广播频道的电台强度
通过设置不同的FM接收频道,然后读取相应的RSSI,标准了本地区在FM广播段的电台的情况。
(1)设置完收音机的频率后,读取RSSI的变化情况 测试RDA5807的RSSI的响应变化速度。 下面分别测试设置频率为97.4MHz(北京音乐台)和101.4MHz(空闲频段),每隔2ms读取RSSI,连续读取256个数字显示的的强度曲线。
FM:97.4Mhz:北京音乐台
FM:101.4MHz:空闲频段。
前面的曲线显示,每当设置一次频率,RDA5807内部的RSSI都是从0开始测量,经过大约0.5秒之后,测量值大都稳定在恒定的数值。
所以通过设定频率扫描测量不同频率下的射频信号强度的时候,需要等到0.5秒钟之后再读取RSSI,才能够获得比较稳定的数值。
(2)通过外部信号源的变化,读取RSSI的变化情况
外部的射频信号源使用普通的数字合成信号发生器。DS345可以产生高达30Mhz的信号。通过使用它的方波信号,利用其三次谐波可以达到80~110Mhz范围内的射频信号。来检测RDA5807接受信息的情况。
下面是设置DS345输出扫频,扫频的范围是28.970Mhz~29.030Mhz。扫描的速度为1kHz, 扫描的波形呈现等腰三角形。这就模拟了一个使用三角波形进行调频的输出。
RDA5807的频道设置在87Mhz,在这个频率范围内,没有本地的调频电台。 使用示波器观察RDA5807的左右输出。输出波形如下图所示,基本上与调制信号是一致的。
信号源的频率从28Mhz变化到29Mhz。它的三次谐波从84Mhz,变化到87Mhz,RDA5807接收到的射频信号强度从29变化到55。变化曲线如下图所示:
信号的的频率从29Mhz增加到30MHz,它的三次谐波的频率从87Mhz变化到90Mhz。RDA5807接收到的射频信号的强度从55下降到30。数值变化去下如下图所示。
从前面的变化可以看到,信号的整个的变化过程大约持续了0.3秒左右。这表明了RDA5807测量RSSI的时间响应大约是0.3秒。
如果外部信号的强度变化速率大于0.3秒,在RDA5807的RSSI数值就会反应不了这么快速的变化。所获得的是信号强度变化的平均值。
(3)扫描80MHz~110MHz之间的调频广播信号强度
为了获得更加精细的扫描频谱的频率分辨率,将RDA5807的频率间隙设置为:25kHz。
相关的设置将会影响到寄存器03H的部分设置。见下面的表格:
相应的设置代码修改如下:
//------------------------------------------------------------------------------ #define RDA5807_TUNE_CONFIG_LENGTH 4 uint8_t RDA5807_tune_config[] = { 0xd0, 0x0d, // Register 2 0x00, 0x00, // Reigster 3 }; void RDA5807SetTuneConfig(uint16_t channel) { RDA5807_tune_config[2] = (uint8_t)(channel >> 2); // RDA5807_tune_config[3] = (uint8_t)(((channel & 0x3) << 6) | 0x10); RDA5807_tune_config[3] = (uint8_t)(((channel & 0x3) << 6) | 0x13); } void RDA5807SetChannel(float freq) { // g_nRDA5807Channel = (int)((freq - 87.0) * 10.0 + 0.5); g_nRDA5807Channel = (int)((freq - 87.0) * 40.0 + 0.5); RDA5807SetTuneConfig(g_nRDA5807Channel); RDA5807I2CWrite(RDA5807_tune_config, RDA5807_TUNE_CONFIG_LENGTH); }
根据前两部的实验结果可以知道RDA5807的RSSI信号的响应时间大于0.3秒,所以在扫描频率的时候,每设置一个新的频率,等待1秒之后,再读取RDA5807内部的RSSI的数值。
扫描频率范围从80MHz到110Mhz,每隔25kHz测量一次,总共1200个数据。下面的曲线是经过20分钟的扫描之后获得的北京地区星期五下午2点钟左右的各个调频广播信号的强度数据。
包括了总共22个FM电台的频谱,对于所有RSSI大于33的频率设定为一个电台,它们对应的频率如下:
编辑:hfy
-
接收机
+关注
关注
8文章
1179浏览量
53406 -
RF
+关注
关注
65文章
3042浏览量
166806 -
RSSI
+关注
关注
2文章
95浏览量
27702 -
RDA5807
+关注
关注
1文章
9浏览量
3887
发布评论请先 登录
相关推荐
评论