0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino RDA5807 FM接收器的FM调频广播电路

电子设计 来源:一板网 作者:风筝 2020-11-30 16:37 次阅读

几乎每个人都使用手机收听音乐、新闻、播客等。但是不久以前,我们都依靠当地的FM广播电台来获取最新的新闻和歌曲,这些广播电台逐渐失去了知名度,但是在互联网出现紧急情况时处于关闭状态时,收音机在将信息传输到用户方面扮演着重要角色。无线电信号始终存在于空中(由电台广播),我们所需要的只是一个FM接收器电路,以捕获这些无线电信号并将其转换为音频信号。

在本篇文章中,我们将制作一个Arduino FM接收器。我们将基于Arduino使用RDA5807 FM接收器IC并对它进行编程,以便播放任何可由用户使用电位计进行调谐的FM广播电台。我们还将使用音频放大器和电路来控制Arduino FM收音机的输出音量,听起来有趣吗?让我们开始吧。

FM调频广播的工作原理

无线电台将电信号转换为无线电信号,并且这些信号在通过天线传输之前必须进行调制。可以调制信号的方法有两种,即AM和FM。顾名思义,调幅(AM)在发送信号之前先对幅度进行调制,而在调频(FM)中,信号的频率要在通过天线发送之前进行调制。在无线电台,它们使用调频来调制信号,然后发送数据。现在,我们需要制作的是一个可以调谐到特定频率的接收器,接收这些信号,然后再将这些电信号转换为音频信号。我们将在本文中使用RDA5807 FM接收器模块,从而简化了电路。

所需组件

● Arduino Nano开发板

● RDA5807接收器

● 音频放大器

● 连接线

● 100K电位器

● 面包板

RDA5807接收器

RDA5807是具有完全集成的合成器的单芯片FM立体声无线电调谐器模块。该模块支持全球范围内的50 – 115MHz频带、音量控制和静音,可编程去加重(50 / 75us),接收信号强度指示器和SN​​R,32.768KHz晶体振荡器,数字自动增益控制等。下图显示了RDA5807M调谐器的框图。

它具有数字低中频架构,并集成了一个低噪声放大器(LNA),该放大器支持FM广播频段(50至115 MHz)、可编程增益控制(PGA)、高分辨率模数转换器和高保真数模转换器DAC)。限幅器可防止过载,并限制相邻通道产生的互调产物的数量。 PGA放大混频器输出信号,然后用ADC数字化。 DSP内核管理通道选择、FM解调、立体声MPX解码器和输出音频信号。该IC的RDA5807引脚排列图如下。

该模块工作在1.8 – 3.3V的电源。当进入静止状态并选择了控制接口时,模块会在VIO上电时进行复位,并且还支持通过触发02H地址的0到1中的bit1进行软复位。该模块使用I2C通信MCU进行通信,并且连接以启动条件、命令字节和数据字节开始。 RDA5807具有13个16位寄存器,每个寄存器执行特定功能。寄存器地址以00H开头,该地址分配给芯片ID,以0FH结尾。在所有13个寄存器中,有些位保留,而有些则是R / W。每个寄存器根据分配给它们的位执行诸如改变音量、改变通道等任务。

将模块连接到电路时,由于模块引脚是焊盘形式,我们无法直接使用该模块。因此,我使用一块洞洞板和一些插针,将模块的每个引脚焊接到插针上,如下图所示。

音频放大器

音频放大器是一种电子设备,可将低功率电子音频信号放大到足以驱动扬声器或耳机的电平。我们使用LM386构建了一个简单的音频放大器,其电路如下所示。

Arduino FM接收器电路图

我们使用了两个电位器来调节FM频段和控制音频放大器的音量。要更改音量,您可以改变电位器,电位器连接在LM386的1至8号引脚之间,也可以改变电位器,其连接在LM386的3号引脚之间。下图显示了Arduino FM收音机的完整电路图。

我在放大器上做的一些微小改动。我没有在放大器中使用两个电位器,而是仅使用一个。我用电阻互换了用来改变增益的电位器。因此,现在我们的项目有两个电位器,一个用于调节,另一个用于改变音量。用于调节通道的电位器与Arduino nano连接。电位器的中心引脚连接到Arduino nano的A0引脚,其余两个引脚中的一个连接到5V,另一个连接到GND。另一个电位器用于控制收音机的音量,并按上图所示进行连接。

Arduino的引脚A4和A5连接到RDA5807M的SDA和SCL引脚。请记住,接收器模块只能在3.3V电压下工作。因此,将Nano的3v3引脚连接到接收器模块的VCC引脚。建立连接后,设置如下所示

Arduino FM收音机代码说明

该代码将初始化接收器模块,然后以预设频率设置频道。当nano在A0引脚上读取的值发生变化(通过改变电位器)时,频率也会发生变化,从而改变通道。完整的代码在页面末尾给出。

我们在程序开始时添加与RDA5807通信所需的wire库。然后,定义变量“channel”,设置频道。每当收音机启动时,它都会自动调谐到该频道。

#include

uint16_t channel = 187;

接下来,我们将字节加载到RDA5807 IC上的每个寄存器以设置我们的初始配置。然后,我们复位接收器。

uint8_t boot_config[] = {

/* register 0x02 */

0b11000001,

0b00000011,

/* register 0x03 */

0b00000000,

0b00000000,

/* register 0x04 */

0b00001010,

0b00000000,

/* register 0x05 */

0b10001000,

0b00001111,

/* register 0x06 */

0b00000000,

0b00000000,

/* register 0x07 */

0b01000010,

0b00000010,

};

复位设备后,我们可以调谐设备。要调整频道,我们只需要编程前4个字节。这部分代码会将频道更改为所需的频率。首先在I2C中,我们开始传输,写入或读取数据,然后结束传输。在该接收器IC中,我们无需指定地址,因为数据表清楚地表明I2C接口具有固定的起始寄存器,即用于写入操作的0x02h和用于读取操作的0x0Ah。

uint8_t tune_config[] = {

/* register 0x02 */

0b11000000,

0b00000001,

/* register 0x03 */

(channel >> 2),

((channel & 0b11) << 6 ) | 0b00010000

};

在setup函数中,我们初始化引导配置,然后通过将调整配置字节写入RDA5807M来调整至通道。

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();

}

当使用电位器调谐到某个频率时,我遇到了一个问题。 A0引脚读取的值不是恒定的。噪声与所需的值成比例。我使用了一个连接在A0和GND之间的0.1uF陶瓷电容器,尽管该噪声已降至最低,但仍未达到所需的水平。因此,我必须对代码进行一些更改。首先,我记下了受噪声影响的读数。我发现噪声的最大值是10。因此,我以这样的方式编写程序,即只有在同一引脚的新值和旧值之间的差大于10时,它才会考虑新值。然后调谐到所需的频道。

void loop()

{

int channel1 =187 ,avg=0, newA;

static int oldA = 0;

int result = 0;

newA = analogRead(A0);

if ((newA - oldA) > 10 || (oldA - newA) > 10){

Serial.println(newA);

if(newA!= oldA){

channel = channel1+(newA/10);

myChangeChannel(channel);

oldA=newA;

}

}

}//loop end

以下函数用于设置tune_config数组的字节,然后使用I2C协议将数据发送到RDA5807M。

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();

}

Arduino FM收音机的工作过程

当模块上电时,我们的代码会复位RDA5807-M并将其设置为所需用户的通道(注意:该频率被视为将增加频率的基准频率)。通过更改电位器(连接到A0),Arduino Nano读取的值会更改。如果新值和旧值之间的差大于10,我们的代码将考虑该新值。根据新值与旧值之间的变化来更改通道。增大或减小音量取决于连接在引脚3和GND之间的电位器。

电路搭建和代码编写完成后,您将拥有自己的FM收音机。希望您喜欢本篇文章并学到一些有用的东西。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 音频放大器
    +关注

    关注

    38

    文章

    833

    浏览量

    52538
  • 无线电台
    +关注

    关注

    1

    文章

    26

    浏览量

    13584
  • 无线电信号
    +关注

    关注

    1

    文章

    48

    浏览量

    12703
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184826
收藏 人收藏

    评论

    相关推荐

    RDA5807的RSSI信号响应RF强度测试

    RSSI:Received Signal StrengthIndicator,表明了接收接收到的信号的强度。一般使用分贝(db)从0到-120db。RDA5807内部接收器中具有RS
    的头像 发表于 11-25 15:01 5092次阅读

    基于RDA5807调频收音模块案例

    ,排针在最下面,从左到右的功能分别是: 在新的功能模块上增加了3.3V的稳压芯片:A1117-3.3V,I2C总线的上拉电阻:10k \Omega。 : 将RDA5807焊接在转接板上。需要在顶部的天线部分增加一个长度为10厘米的软线作为RF接收天线。 测试实验 硬件 将
    的头像 发表于 11-25 15:13 1w次阅读
    基于<b class='flag-5'>RDA5807</b>的<b class='flag-5'>调频</b>收音模块案例

    FM RDA5807模块做一个简单的收音机收不到信号是什么原因?

    `最近在用RDA5807模块做一个简单的收音机 感觉是收不到信号 不能排除是线路问题还是天线选择的问题。实物图上 黄色的天线端子没有使用(没有找到合适的天线)`
    发表于 08-12 18:04

    基于Arduino-Nano的数字FM接收器

    描述带有 Arduino 的数字 FM 接收器FM 发射/接收器是任何电子爱好者最喜欢的
    发表于 06-20 07:57

    基于树莓派pico的FM接收器

    描述Pico 收音机是一个简单的基于树莓派 pico 的 FM 接收器,它使用 rda5807m 调谐到 FM 频道。可以通过在 SMA 连接
    发表于 07-08 07:56

    用于Arduino Uno的Fm无线电屏蔽

    描述FM 无线电盾牌 ARDUINO UNO用于 Arduino Uno 的 Fm 无线电屏蔽。便于使用。简单便宜的 Rda5807
    发表于 08-26 07:19

    基于RDA5807的收音机

    本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺
    发表于 03-21 14:14 66次下载

    RDA5807系列FM收音芯片C语言程序参考代码资料免费下载

    本文档的主要内容详细介绍的是RDA5807系列FM收音芯片C语言程序参考代码资料免费下载。
    发表于 10-08 08:00 82次下载
    <b class='flag-5'>RDA5807</b>系列<b class='flag-5'>FM</b>收音芯片C语言程序参考代码资料免费下载

    RDA5807系列参考代码的详细资料免费下载

    本文档的主要内容详细介绍的是RDA5807系列参考代码的详细资料免费下载。1、此代码为RDA FM系列产品的参考代码,已通过读ID的方式兼容RDA5807P、
    发表于 02-11 08:00 121次下载
    <b class='flag-5'>RDA5807</b>系列参考代码的详细资料免费下载

    使用RDA5807制作收音机的Arduino代码免费下载

    本文档的主要内容详细介绍的是使用RDA5807制作收音机的Arduino代码免费下载。
    发表于 01-17 17:35 65次下载
    使用<b class='flag-5'>RDA5807</b>制作收音机的<b class='flag-5'>Arduino</b>代码免费下载

    带有Arduino的数字FM接收器

    电子发烧友网站提供《带有Arduino的数字FM接收器.zip》资料免费下载
    发表于 07-19 11:31 4次下载
    带有<b class='flag-5'>Arduino</b>的数字<b class='flag-5'>FM</b><b class='flag-5'>接收器</b>

    使用RDA5807构建一个Arduino FM收音机

    在本教程中,我们将构建一个Arduino FM 接收器,并将其添加到我们的项目库中。我们将使用带有 ArduinoRDA5807
    发表于 08-19 14:50 1.5w次阅读
    使用<b class='flag-5'>RDA5807</b>构建一个<b class='flag-5'>Arduino</b> <b class='flag-5'>FM</b>收音机

    基于RDA5807M的FM收音机

    该项目是个通过触摸按钮控制的收音机, RDA5807M 和 arduino nano 使 FM 收音机功能齐全。
    发表于 12-07 10:30 24次下载

    基于RDA5807的迷你立体声收音机

    该项目是一个带有 RDA5807 的易于构建和使用的立体声 RDS FM 接收器,即收音机。
    发表于 12-07 11:18 24次下载

    基于ArduinoFM调频收音机

    方案介绍这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY。在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块
    发表于 12-26 16:21 14次下载