SI4835全波段收音机DIY:从芯片选型到STM32固件调试实战
2026/9/24 13:21:49 网站建设 项目流程

1. 为什么我选择SI4835来做一台全球波段收音机

1.1 从一堆收音机芯片里挑出SI4835的真实原因

做收音机DIY这件事,我前前后后折腾过不少方案。最早用分立元件搭过超外差,后来玩过TEA5767、RDA5807这类纯FM芯片,再往后接触了Si47xx系列。绕了一圈回来,最后把主力方案定在了SI4835这颗芯片上,原因很实在。

SI4835是Silicon Labs(芯科)推出的一款全波段数字收音机接收芯片,单芯片集成了从天线输入到音频输出的完整信号链。它支持FM、AM(中波)、SW(短波)和LW(长波),覆盖频率范围大致是:FM 64–108 MHz、AM 520–1710 kHz、SW 2.3–26.1 MHz、LW 153–279 kHz。也就是说,一颗芯片就能把调频广播、中波广播、短波国际广播全部收进来,这对DIY一台“全球波段收音机”来说,是天然契合的。

我选它主要看中三点。第一是集成度高,芯片内部集成了LNA、混频器、中频滤波、ADC/DAC、DSP解调、音频放大,外围只需要少量阻容和一颗晶振就能工作,省掉了传统超外差收音机里那一大堆中周、本振线圈和陶瓷滤波器,对DIY来说焊接和调试难度直线下降。第二是数字调谐,通过I2C总线控制,频率可以精确到1 kHz步进,不用再跟可变电容和拉线刻度盘较劲。第三是音质和灵敏度在同类里属于第一梯队,尤其是短波段的AGC和镜像抑制做得不错,实测在阳台拉一根5米长线天线,晚上能稳定收到不少国际短波台。

提示:SI4835和SI4834、SI4831属于同一家族,引脚和寄存器基本兼容,区别主要在支持的波段和封装。买芯片时注意认准后缀,别买成只支持FM的版本。

1.2 这台收音机到底能做什么,适合谁动手

先说清楚这台机器的定位。它不是要替代你家里的台式收音机,而是一个可玩性极高的DIY平台。做完之后你能得到:一台支持FM/AM/SW/LW四波段、带数字频率显示、可存储电台、音质干净的全波段接收机。你可以把它装进木盒、亚克力盒,甚至做成复古造型,摆在书桌上当个摆件兼实用工具。

适合动手的人分两类。一类是有一定焊接基础、玩过Arduino或STM32的电子爱好者,想从“点灯”进阶到“做一台真正能用的设备”;另一类是无线电爱好者,想低成本体验短波接收,又不想买成品机。如果你连电烙铁都没摸过,建议先拿洞洞板练几下手,再来做这个。

我自己的这台,主控用的是STM32F103C8T6,负责I2C控制SI4835、驱动OLED显示频率和波段、处理按键和旋转编码器。整个项目从画原理图到调试完成,断断续续花了大概两周的业余时间。下面我把完整思路和踩过的坑都摊开讲。

2. 系统架构与核心器件选型拆解

2.1 整体框图:信号链和控制链怎么分

一台收音机本质上分两条链:射频信号链控制交互链。信号链负责把空中的电磁波变成耳朵能听的声音,控制链负责告诉芯片“现在收哪个频率、哪个波段”。

信号链的走向是这样的:天线 → 阻抗匹配网络 → SI4835的FM/SW/AM输入引脚 → 芯片内部混频、解调 → 音频输出引脚 → 功放(可选)→ 喇叭或耳机。SI4835本身有音频输出能力,可以直接推耳机,但推喇叭功率不够,所以我后面加了一颗PAM8403小功放。

控制链是:STM32 → I2C(SDA/SCL)→ SI4835寄存器 → 设置频段、频率、音量、静音等。同时STM32读取旋转编码器和按键,把用户操作翻译成I2C命令,再把当前状态显示到OLED上。

两条链在SI4835这里交汇,芯片既是信号处理核心,也是被控制的对象。理解这一点,后面调试时就知道问题该往哪条链上找。

2.2 主控为什么用STM32F103而不是Arduino

很多人会问,控制一颗收音机芯片而已,Arduino Uno不够吗?够,但有几个现实问题。

第一是I2C时序稳定性。SI4835对I2C时序有一定要求,尤其在切换波段和写入频率时,如果时序抖动大,容易出现写不进去或者芯片返回错误。STM32F103的硬件I2C虽然早期有坑,但用CubeMX配置好时钟和上拉后,稳定性明显优于软件模拟I2C。第二是资源余量。我要驱动OLED、读编码器、处理按键消抖、还要留出后续加RDS解码或频谱显示的空间,F103的72MHz主频和丰富外设刚好够用。第三是成本。一块F103C8T6最小系统板现在也就十几块钱,比某些Arduino板还便宜。

如果你手头只有Arduino,也完全能做,用Wire库控制I2C即可,只是刷新OLED和响应编码器时可能会有点卡顿。我建议至少用Arduino Nano这个级别,别用太老的板子。

2.3 显示与交互:OLED加旋转编码器的组合

显示我选的是0.96寸I2C OLED(SSD1306),128×64分辨率。为什么不用LCD1602?因为OLED自发光、对比度高、体积小,显示频率数字和波段标识非常清晰,而且也是I2C接口,和SI4835共用一条总线,接线简单。

交互用旋转编码器+轻触按键。编码器负责调频率,顺时针加、逆时针减,按键负责切换波段或确认菜单。相比一堆独立按键,编码器操作更符合收音机的使用直觉。这里有个细节:编码器一定要选带机械定位的(每转一格有“咔哒”感),否则调台时会很难精确停在某个频率上。

2.4 电源与音频功放的选择

电源部分,整机用3.3V和5V双轨。STM32和SI4835用3.3V,OLED和功放用5V。我用一颗AMS1117-3.3从5V降压给数字部分,输入5V来自USB或锂电池升压。注意SI4835的供电要干净,模拟部分最好加LC滤波,否则短波段会有数字噪声干扰。

音频功放用PAM8403,D类,5V供电,能推3W小喇叭,效率高、发热小。如果只打算用耳机听,可以省掉功放,直接把SI4835的音频输出接3.5mm插座。我两种都留了,用跳线选择。

3. 硬件设计与关键电路实操要点

3.1 SI4835外围电路:少即是多,但每个元件都关键

SI4835的外围电路看起来很简单,但每个元件的位置和取值都有讲究。我按官方数据手册的典型应用电路来搭,重点说几个容易出问题的地方。

晶振:芯片需要一颗32.768 kHz晶振作为参考时钟。这颗晶振的负载电容要按规格选,一般是12.5pF或6pF,选错了会导致频率偏移或者起振困难。我一开始随手拿了一颗没标参数的,结果FM频段整体偏了约50kHz,换了匹配的晶振后恢复正常。

天线输入:FM和SW/AM的输入引脚是分开的。FM用耳机线或专用拉杆天线,SW/AM用长线天线或磁棒天线。这里要加阻抗匹配网络,通常是几颗电感和电容组成的LC网络。官方手册给了参考值,但实际要根据你的天线长度微调。我的做法是先按手册搭,然后用扫频仪看输入端的驻波,再微调电容值。

去耦电容:每个电源引脚旁边都要放0.1μF的陶瓷电容,越靠近引脚越好。模拟电源引脚还要加一颗10μF的钽电容。这些电容不是摆设,短波段对电源噪声极其敏感,少一颗就可能收到一片“沙沙”声。

音频输出耦合:音频输出要串一颗1μF到10μF的隔直电容,再接到功放或耳机座。容值影响低频响应,太小会感觉声音“薄”,太大又可能引入低频噪声。我用的是2.2μF,听感比较均衡。

3.2 I2C总线的上拉电阻与走线

I2C总线上挂了SI4835和OLED两个从设备,STM32是主设备。上拉电阻是必须的,一般用4.7kΩ接到3.3V。如果总线上设备多或者走线长,可以降到2.2kΩ增强驱动能力,但别低于1kΩ,否则功耗和上升沿都会有问题。

走线方面,SDA和SCL尽量平行等长,远离射频输入和音频输出线,避免串扰。我第一版PCB把I2C线走在了天线输入旁边,结果调台时OLED会随机闪烁,后来把I2C线改到板子另一侧就解决了。如果是洞洞板搭,用双绞线把SDA和SCL绞在一起,再单独走一根地线,效果也不错。

注意:SI4835的I2C地址是固定的,具体值查数据手册。如果总线上有地址冲突,OLED可以用地址跳线改到另一个地址。

3.3 波段切换的硬件处理

SI4835内部支持多波段,但天线输入路径不同。FM和AM/SW/LW的输入引脚是分开的,所以波段切换本质上是在切换天线。我的做法是用一颗模拟开关(比如CD4052或74HC4052)在STM32控制下切换天线输入,同时通过I2C告诉SI4835当前工作在哪个波段。

这里有个坑:切换波段的瞬间,如果天线开关和芯片寄存器设置不同步,会有短暂的“爆音”或“死寂”。解决办法是先静音芯片,再切天线,再设寄存器,最后取消静音,中间加几十毫秒延时。这个顺序我试了好几次才定下来,顺序错了体验很差。

3.4 PCB布局与接地经验

如果打PCB,建议双面板,底层完整铺地。射频部分和数字部分分区布局,模拟地和数字地单点连接。SI4835底部的散热焊盘要接地,既散热又提供参考地。

晶振尽量靠近芯片,走线短而直,下方不要走其他信号线。天线输入到芯片的走线要短,最好用50Ω阻抗线。音频输出走线远离射频和数字线,避免拾取噪声。

我用的是嘉立创打样,5×5cm双面板,成本很低。第一版有噪声问题,第二版调整布局后短波段底噪明显下降。洞洞板也能做,但短波段效果会打折扣,因为洞洞板的寄生参数不可控。

4. 固件开发:从I2C驱动到交互逻辑

4.1 CubeMX配置与I2C底层驱动

用STM32CubeMX配置工程,时钟树设到72MHz,I2C1开标准模式(100kHz)或快速模式(400kHz)。SI4835支持400kHz,用快速模式刷新更快。GPIO配置好编码器和按键的输入,OLED和SI4835共用I2C1。

生成代码后,先写一个I2C读写封装函数,因为SI4835的寄存器是16位地址+8位数据,需要按它的协议格式来。我封装了SI4835_WriteReg(uint16_t addr, uint8_t data)SI4835_ReadReg(uint16_t addr)两个函数,后面所有操作都基于它们。

调试I2C时,如果读不到数据,先用逻辑分析仪或示波器看SDA/SCL波形。常见问题是上拉电阻没接、地址写错、或者时序太快。我遇到过因为上拉电阻焊成了10kΩ导致上升沿太慢,换成4.7kΩ就好了。

4.2 SI4835初始化与波段频率设置

上电后要先给SI4835做初始化:复位、设置晶振类型、配置音频输出、设置去加重(FM用50μs或75μs,看地区)。这些寄存器值在数据手册里有推荐配置,照着写就行。

设置频率的核心是把目标频率换算成芯片需要的PLL参数。SI4835内部有PLL,你需要根据频段和参考时钟算出分频比。官方手册给了公式,我把它写成C函数:

// 以FM为例,假设参考时钟32.768kHz // 具体公式以数据手册为准,这里示意 uint16_t freq_to_pll(uint32_t freq_khz, uint8_t band) { // band: 0=FM, 1=AM, 2=SW, 3=LW // 根据band选择不同的分频系数 // 返回写入寄存器的值 }

实际写的时候要注意,不同波段的步进不一样:FM是10kHz或50kHz,AM是9kHz或10kHz,SW是5kHz。步进设错了,调台时会跳频或者收不到台。

4.3 旋转编码器读取与消抖

旋转编码器用外部中断+定时器消抖的方式读。编码器A、B两相接到两个GPIO,都开中断,在中断里判断相位差决定加减。但机械编码器抖动严重,直接读会一次转动加好几个数。

我的做法是:中断里只置标志,实际处理放在主循环,并且加10ms的软件消抖。具体是记录上次有效转动的时间,小于10ms的忽略。这样调台手感很顺,不会跳。按键同理,用20ms消抖。

实操心得:编码器如果用的是带按键的那种,按键和旋转共用引脚,要注意区分。我建议旋转和按键用独立的GPIO,省得逻辑复杂。

4.4 OLED显示与菜单逻辑

OLED用现成的SSD1306驱动库,显示内容分三层:顶部显示波段(FM/AM/SW/LW),中间大字显示频率,底部显示信号强度或音量。刷新率不用太高,10Hz足够,太高反而占CPU。

菜单逻辑我做得比较简单:短按编码器按键切换波段,长按进入设置(音量、步进、静音),旋转调频率或改设置值。状态机用switch-case实现,每个状态对应不同的按键处理。这样代码清晰,后续加功能也方便。

4.5 频率存储与断电记忆

收音机断电后要记住上次听的频率和波段,这需要掉电存储。STM32F103内部有Flash,可以划一页出来存参数。但Flash擦写次数有限(约1万次),不能频繁写。我的策略是:只在关机或切换波段时写一次,平时调频率只更新RAM。

如果不想动Flash,也可以外挂一颗24C02 EEPROM,I2C接口,和SI4835共用总线。EEPROM擦写次数高得多,适合频繁存储。我用的是内部Flash,因为省一颗芯片,而且实际使用中不会频繁开关机。

5. 调试实录:那些让我熬夜的坑

5.1 收不到台:从天线到寄存器的排查顺序

第一次上电,OLED显示正常,但喇叭里只有噪声,一个台都收不到。排查顺序是这样的:

先确认天线接对了。FM要用耳机线或拉杆天线,SW/AM要用长线。我一开始把长线接在了FM输入上,当然收不到短波。换到SW输入后,晚上能收到几个台了。

再确认寄存器写对了。用逻辑分析仪抓I2C,发现频率寄存器的值算错了,实际设到了FM频段之外。重新核对公式后解决。

最后确认静音寄存器。SI4835上电默认可能是静音状态,要显式取消静音。我漏了这一步,白白折腾了半天。

5.2 短波段噪声大:电源和布局的锅

短波段对噪声极其敏感。我的第一版用USB供电,短波段底噪很大,全是“嗡嗡”声和数字噪声。后来做了三件事:一是给模拟电源加LC滤波,二是把数字地和模拟地分开走,三是在SI4835电源脚旁边补了0.1μF和10μF电容。改完之后底噪明显下降,弱台也能听清了。

还有一个细节:OLED刷新时会产生噪声。因为OLED和SI4835共用I2C,刷新瞬间电流变化会耦合到电源。解决办法是给OLED单独加一颗LDO,或者在刷新时短暂静音。我选了前者,效果彻底。

5.3 调台跳频:编码器消抖没做好

前面提过,编码器抖动会导致一次转动跳好几个频率。我一开始用中断直接加减,结果调台像抽奖。后来改成中断置标志、主循环消抖处理,问题解决。消抖时间我试过5ms、10ms、20ms,最后定在10ms,手感最好。

另外,编码器的机械定位也很重要。我买过一批便宜的编码器,转动时没有清晰的“咔哒”感,调台很难精确。换了带定位的之后,体验完全不一样。

5.4 常见问题速查表

现象可能原因排查方法解决
完全无声静音未取消、功放没供电查静音寄存器、量功放电压取消静音、检查功放接线
只有噪声收不到台天线接错、频率算错确认天线波段、抓I2C数据换天线输入、重算PLL
短波段噪声大电源不干净、布局差示波器看电源纹波加LC滤波、分地
调台跳频编码器抖动观察转动时频率变化加消抖、换编码器
OLED闪烁I2C冲突、电源跌落抓I2C波形改地址、单独供电
频率偏移晶振负载电容不对对比实际频率换匹配晶振

5.5 几个让我印象深刻的实操心得

第一个心得:先让芯片出声,再优化。我一开始想把所有功能都做完美再上电,结果卡在某个寄存器上很久。后来改变策略,先用最小配置让SI4835出声,确认信号链通了,再逐步加显示、加交互。这样每步都有反馈,调试效率高很多。

第二个心得:数据手册要反复看。SI4835的寄存器很多,有些位的含义在正文和附录里说法不同。我遇到过一个音频配置位,正文说默认0,附录说默认1,实际测试发现附录是对的。所以手册要交叉验证,别只看一处。

第三个心得:天线决定上限。芯片再好,天线不行也白搭。我试过用一根20cm的短线收短波,效果很差;换成5米长线加一个简单的天调,同样的芯片,接收效果天差地别。所以别在芯片上死磕,先把你手头的天线搞好。

6. 外壳、扩展与后续玩法

6.1 外壳选择与装配

外壳我试过三种:塑料防水盒、亚克力板拼装、木质音箱盒。塑料盒最好加工,开孔用烙铁烫或者手钻都行,但屏蔽效果一般。亚克力好看,但需要激光切割,成本高。木质盒最有复古感,但要注意内部贴铜箔做屏蔽,否则短波段会受干扰。

我最后用的是木质盒+内部铜箔的方案。喇叭装在面板上,OLED和编码器开孔固定,天线用BNC座引出。整体看起来像一台小台式收音机,摆在桌上很顺眼。

6.2 可扩展的功能方向

这台机器做完之后,还有很多可以加的东西。比如RDS解码,FM广播里藏着电台名称和节目信息,SI4835支持RDS,加几行代码就能显示出来。再比如频谱显示,把信号强度做成柱状图或瀑布图,OLED就能当个小频谱仪用。还有自动搜台,扫描整个频段把有信号的频率存下来,一键切换。

如果想联网,可以加一颗ESP32做WiFi,把频率和信号强度上传到手机,或者做网络收音机的补充。不过那就偏离纯收音机的初衷了,看个人兴趣。

6.3 成本清单与采购建议

整个项目的物料成本大概如下(按单件算):

器件型号参考价
收音芯片SI483515-25元
主控STM32F103C8T6最小系统12-18元
显示0.96寸OLED8-12元
功放PAM8403模块3-5元
编码器带按键旋转编码器2-4元
晶振32.768kHz1-2元
阻容若干5-10元
PCB5×5cm双面5-10元
外壳喇叭等-20-40元

总计大概70-120元,比买一台成品全波段收音机便宜,而且过程本身就是乐趣。采购时注意SI4835别买到翻新片,尽量选正规渠道。晶振和编码器别贪便宜,这两个直接影响体验。

6.4 给新手的几点实在建议

如果你准备动手,我的建议是:先做FM,再做SW。FM电路最简单,天线用耳机线就行,容易出成果,能给你信心。SW涉及天线匹配和噪声控制,难度高一些,等FM调通了再上。

焊接时先焊矮的元件,比如电阻电容,再焊芯片和插座。SI4835如果是QFN封装,建议用热风枪或者找代焊,手工烙铁容易虚焊。我用的是SSOP封装的版本,手工焊难度低一些。

调试时准备一台成品收音机做对比。同一个频率,成品机能收到,你的收不到,说明是硬件或天线问题;成品机也收不到,可能是时段或传播条件问题。有个参照物,排查会快很多。

最后,别怕失败。我第一版PCB打回来,短波段完全不能用,第二版才调好。电子DIY就是这样,每次踩坑都是在积累经验。等你晚上拉上天线,从短波里听到几千公里外传来的声音时,那种成就感是买成品机给不了的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询