RDA5807 FM收音机模块

RDA5807 FM收音机模块一 简介这是一个购自于淘宝网店的 RDA5807 调频接收模块 价格只有 3 块钱人民币

大家好,欢迎来到IT知识分享网。

RDA5807 FM收音机模块

一. 简介

  这是一个购自于淘宝网店的RDA5807调频接收模块,价格只有3块钱人民币。’

RDA5807 FM收音机模块
  RDA5807是一颗调频广播单芯片接收调谐芯片。只需要外部非常少的元器件,便可以组成一个完整的调频广播接收机。这款芯片工作电压范围2.7~3.3V。

RDA5807 FM收音机模块
  这个模块最早是在2018年3月份购买,一直没有能够进行实验。最早是为了能够用于智能车竞赛现场无线信标检测使用的模块。

RDA5807 FM收音机模块


  RDA5807 参考设计电路图如下。这是在RDA5807数据手册中给出的参考设计原理图。

RDA5807 FM收音机模块

二. 制作转接模块

  为了便于制作测试转接口,能够在面包板上进行实验。测试该模块的基本尺寸参数。

RDA5807 FM收音机模块

  如下是制作接口转接板,这样可以通过间距100mil(2.54mm)的排针放置在面包实验板上,方便使用单片机接口模块完成接口控制。

  针对芯片模块,转接板从左到右的定义分别是:

管脚 符号 定义
1 VDD 3.3V
2 NULL
3 NULL
4 SCLK I2C SCLK
5 SDIO I2C SDIO
6 GND GND
7 LOUT 左声道音频输出
8 ROUT 右声道音频输出
9 NULL
10 FMIN FMRF输入

  上述表格定义也是购置的RDA5807模块小板外部引脚的定义。

RDA5807 FM收音机模块

RDA5807 FM收音机模块
3.3V稳压芯片电路模块……

三、建立实验平台

1.搭建系统

在面包板上,分别加上3.3V电源模块;RDA5807模块,STM32F030单片机模块。将它们按照功能连接起来。

  1. 通过3.3V模块将面板板上的5V电源转换成3.3V,提供给3RDA5807;
  2. F030模块本身带有AS11173.3V模块,可以直接连接面包板上的5V电源;
  3. 将F030的I2C总线的SCL, SDA 分别连接到RDA5807MdeSCLK,SDIO;

RDA5807 FM收音机模块

2. 实验软件

  1. STM32F030实验电路板硬件

  AltiumDesign\Test\2020\GenretCntF103\SPIF030K8

RDA5807 FM收音机模块
  2. STM32F030软件

3. RDA5807 I2C总线

总线协议:

RDA5807 FM收音机模块

  RDA5807 I2C总线地址: 001000b + R/W bit。

  在RDA5807读写过程中,只需要使用I2C起始位,然后跟着读和写,然后在通过结束位停止即可。不需要输入读和写的寄存器的地址。因为在RDA5807芯片在读写过程中有着固定的起始地址:

RDA5807 各个寄存器定义

RDA5807 FM收音机模块

RDA5807 FM收音机模块

RDA5807 FM收音机模块

RDA5807 FM收音机模块

RDA5807 FM收音机模块

RDA5807 FM收音机模块

4. 软件编程

  由于在网络上给出的RDA5807 的数据手册实在太多的信息,但并没有给出具体的读写过程。下面的参考代码是从CircuitDigest网站中看到的相关的参考代码:

RDA5807 FM收音机模块

(1) RDA5807寄存器初始化参数
uint8_t boot_config[] = { 
     /* register 0x02 */ 0b, 0b00000011, /* register 0x03 */ 0b00000000, 0b00000000, /* register 0x04 */ 0b00001010, 0b00000000, /* register 0x05 */ 0b, 0b00001111, /* register 0x06 */ 0b00000000, 0b00000000, /* register 0x07 */ 0b0, 0b00000010, }; 
(2) 设置接收频道
uint8_t tune_config[] = { 
     /* register 0x02 */ 0b, 0b00000001, /* register 0x03 */ (channel >> 2), ((channel & 0b11) << 6 ) | 0b00010000 }; 
(3) 芯片上电后的初始化过程

  参见下面的Arduino代码。

void setup() { 
     Serial.begin(9600); pinMode(A0,INPUT); /* Conect to RDA5807M FM Tuner: */ Wire.begin(); Wire.beginTransmission(RDA5807M_ADDRESS); Wire.write(boot_config, BOOT_CONFIG_LEN); Wire.endTransmission(); Wire.beginTransmission(RDA5807M_ADDRESS); Wire.write(tune_config, TUNE_CONFIG_LEN); Wire.endTransmission(); } 

  相应的接收频道修改Arduino参考代码如下:

void myChangeChannel(int channel){ 
     /* void if nothing is returned else int */ tune_config[2] = (channel >> 2); tune_config[3] = ((channel & 0b11) << 6 ) | 0b00010000; Wire.begin(); Wire.beginTransmission(RDA5807M_ADDRESS); Wire.write(tune_config, TUNE_CONFIG_LEN); Wire.endTransmission(); } 

RDA5807 FM收音机模块

(4) STM32F030 工作代码

RDA5807 FM收音机模块

  下面是通过示波器看到的RDA5807接收到的北京地区97.4Mhz背景音乐台的音乐信号。

RDA5807 FM收音机模块

  RDA5807.H

/* ============================================================================== RDA5807.H: -- by Dr. ZhuoQing, 2020-01-30 Description: ============================================================================== */ #ifndef __RDA5807__ #define __RDA5807__ //------------------------------------------------------------------------------ #ifdef RDA5807_GLOBALS #define RDA5807_EXT #else #define RDA5807_EXT extern #endif // RDA5807_GLOBALS //------------------------------------------------------------------------------ //============================================================================== void RDA5807Init(void); //------------------------------------------------------------------------------ RDA5807_EXT uint16_t g_nRDA5807Channel; //------------------------------------------------------------------------------ void RDA5807Setup(void); void RDA5807I2CWrite(uint8_t * pucData, int nLength); void RDA5807SetChannel(float freq); //============================================================================== // END OF THE FILE : RDA5807.H //------------------------------------------------------------------------------ #endif // __RDA5807__ 

  RDA5807.C:C 文件。

/* ============================================================================== RDA5807.C: -- by Dr. ZhuoQing, 2020-01-30 ============================================================================== */ //------------------------------------------------------------------------------ #include "stm32f0xx_hal.h" #include "stm32f0xxa.h" #define RDA5807_GLOBALS 1 // Define the global variables #include "RDA5807.H" //------------------------------------------------------------------------------ #define RDA5807_BOOT_LENGTH 12 uint8_t RDA5807_boot_config[] = { 
     0xc1, 0x03, // Register 0x2 0x00, 0x00, // Register 0x3 0x0a, 0x00, // Register 0x4 0x88, 0x0f, // Register 0x5 0x00, 0x00, // Register 0x6 0x42, 0x02, // Register 0x7 }; //------------------------------------------------------------------------------ #define RDA5807_TUNE_CONFIG_LENGTH 4 uint8_t RDA5807_tune_config[] = { 
     0xc0, 0x01, // 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); } //------------------------------------------------------------------------------ void RDA5807Init(void) { 
     /* Assumin band starts at 87.0MHz(per setting below) * and channel spaceing of 100kHz(0.1Mhz)(per settings below) * then channel can be derive as floowins: * channel = (<desired freq in MHz> - 87.0) / 0.1 * * which is ave as: * <10x desired ferq in MHz> - 870 */ g_nRDA5807Channel = 6; RDA5807Setup(); } //------------------------------------------------------------------------------ extern I2C_HandleTypeDef hi2c1; void RDA5807I2CWrite(uint8_t * pucData, int nLength) { 
     HAL_I2C_Master_Transmit(&hi2c1, 0x20, pucData, nLength, 10); } //------------------------------------------------------------------------------ void RDA5807Setup(void) { 
     RDA5807I2CWrite(RDA5807_boot_config, RDA5807_BOOT_LENGTH); RDA5807SetTuneConfig(g_nRDA5807Channel); RDA5807I2CWrite(RDA5807_tune_config, RDA5807_TUNE_CONFIG_LENGTH); } void RDA5807SetChannel(float freq) { 
     g_nRDA5807Channel = (int)((freq - 87.0) * 10.0 + 0.5); RDA5807SetTuneConfig(g_nRDA5807Channel); RDA5807I2CWrite(RDA5807_tune_config, RDA5807_TUNE_CONFIG_LENGTH); } //============================================================================== // END OF THE FILE : RDA5807.C //------------------------------------------------------------------------------ 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124603.html

(0)
上一篇 2025-10-05 21:45
下一篇 2025-10-05 22:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信