基于ESP32与TEA5767的复古FM收音机DIY:线性刻度盘与嵌入式系统设计

ESP32TEA5767FM收音机
于 2026-05-29 12:00:00 修改
·本内容遵循CC 4.0 BY-SA版权协议

1. 项目概述:打造一台复古与现代交融的FM收音机

作为一个常年泡在嵌入式开发里的玩家,我总对那些带有复古机械美学的电子产品情有独钟。这次,我想动手做一台FM收音机,它不仅要能收到清晰的电台,还得有一个能让我找回童年记忆的“灵魂”——一个会随着调谐旋钮平滑移动的线性频率刻度盘。这可不是简单的数字频率显示,而是模拟老式收音机那种指针在刻度上滑动的视觉效果。

为了实现这个想法,我选择了ESP32作为大脑。这家伙性能强悍,双核处理器和丰富的IO口,驱动屏幕和处理音频数据绰绰有余。收音的核心交给了经典的TEA5767模块,这是一个集成度很高的FM立体声接收芯片,通过I2C总线就能轻松控制,省去了复杂的射频电路设计。显示部分,我选用了一块2.8英寸的ILI9341 TFT屏,320x240的分辨率足够呈现细腻的图形界面。整个系统的交互就靠一个带按键的旋转编码器,转动调台,按下静音或执行其他功能,直觉又复古。

这个项目非常适合有一定Arduino或ESP32基础的爱好者。它不仅仅是一个“点亮屏幕、收到声音”的简单实验,而是涉及了I2C设备驱动、SPI屏幕图形绘制、旋转编码器去抖与计数、以及如何将硬件操作封装成美观的软件界面等多个嵌入式开发中的核心技能。通过完成它,你能系统地掌握如何让多个外设协同工作,并设计出具有良好用户体验的嵌入式产品原型。

2. 硬件系统设计与核心模块解析

2.1 主控与核心模块选型考量

选择ESP32 DevKit开发板作为主控,是基于多方面的权衡。首先,它提供了双核Xtensa处理器,这意味着我可以将UI刷新、编码器扫描等实时性要求高的任务放在一个核心,而将网络时间同步(NTP)或未来的网络电台流媒体解析等任务放在另一个核心,避免界面卡顿。其次,ESP32具备硬件I2C和SPI控制器,能高效、稳定地驱动TEA5767和ILI9341,解放CPU资源。最后,其丰富的GPIO、ADC以及内置的DAC(虽然本项目用了外部功放),为未来功能扩展(如添加蓝牙音频输入、电池电压检测)留下了充足空间。

TEA5767模块是FM收音机项目的“耳朵”。它是一个完整的FM立体声收音机芯片,内部集成了射频放大器、本振、混频器、中频滤波和立体声解码器。我们只需要通过I2C总线向其写入频率配置字,它就能自动完成搜台、锁台和音频输出。选择它,是因为其电路简单、编程接口清晰,且性能稳定,灵敏度足以满足日常收听需求。相比一些更简单的单芯片方案,TEA5767支持立体声输出和信号强度指示(RSSI),这对提升用户体验至关重要。

ILI9341 TFT显示屏则是项目的“脸面”。2.8英寸、320x240的分辨率是一个甜点尺寸,既能清晰显示复杂的图形界面,又不会过于耗电或昂贵。它通过SPI接口与ESP32通信,这种串行接口比并口节省大量IO。选择它,一方面是因为其驱动库(如TFT_eSPI)在Arduino社区非常成熟且高度可定制;另一方面,其刷新速率足以实现刻度盘平滑移动的动画效果,这是实现“复古感”的关键。

2.2 外围电路与交互设计

用户交互的核心是一个旋转编码器。我选择的是增量式编码器,它每转动一格会产生两个相位差90度的脉冲(A相和B相)。通过检测这两个脉冲的先后顺序,就能判断是顺时针还是逆时针旋转。编码器自带的按键则用作功能键,比如短按静音/取消静音,长按进入菜单或存储电台。为了消除机械触点抖动带来的误触发,必须在软件中实现消抖算法,通常采用状态机或延时检测的方式。

音频放大环节,我使用了PAM8304这类D类功放模块。D类功放效率极高(通常>90%),发热小,非常适合由电池供电的便携设备。TEA5767输出的音频信号幅度较小,直接驱动扬声器声音微弱且失真,因此需要功放进行放大。PAM8304模块通常只需要连接电源、地和音频输入输出线即可工作,非常方便。如果你对音质有更高要求,可以选择带有音调(低音/高音)调节功能的功放模块,或者在功放前端加入由运放构成的音频前置放大和滤波电路。

供电部分需要考虑灵活性。如果作为桌面设备,可以使用USB 5V供电。若想便携化,则需要接入单节锂离子电池(3.7V)并通过一个高效的DC-DC升压模块稳定到5V。同时,可以增加一个TP4056之类的充电管理模块,实现USB充电。ESP32的某些型号(如ESP32-S2)支持USB

最低 0.47元/天 开通会员,解锁全文
left
成为会员后, 你将解锁
right
benefits 下载资源随意下
benefits 优质VIP博文免费学
benefits 优质文库回答免费看
benefits 付费资源9折优惠