基于Si4684与PIC18LF25K50打造USB控制DAB+/FM数字收音机

基于Si4684与PIC18LF25K50打造USB控制DAB+/FM数字收音机 1. 项目概述打造一台带幻灯片功能的USB控制DAB/FM数字收音机几年前我捣鼓出了一个基于Silicon Labs Si4703芯片的USB FM调谐棒玩得不亦乐乎。去年DAB数字广播信号终于覆盖了我所在的区域这让我那颗爱折腾的心又躁动了起来。于是我决定升级我的“玩具”打造一台集成了DAB和FM接收功能并且能通过USB控制、甚至显示广播幻灯片SlideShow的数字收音机。这个项目的核心是围绕Skyworks的Si4684数字广播接收芯片和Microchip的PIC18LF25K50微控制器展开的。最终我不仅做出了原型还把它塞进了标准的Hammond USB外壳里做成了两个不同版本的即插即用“收音机棒”。如果你对射频RF电路、嵌入式系统以及如何将数字广播的丰富数据比如节目附带图片利用起来感兴趣那么这个从头到尾的实战记录或许能给你带来不少启发。2. 核心芯片选型与硬件架构解析2.1 主控与射频接收芯片为什么是Si4684和PIC18LF25K50整个项目的硬件核心是两块芯片负责“听”的Si4684和负责“想”与“控”的PIC18LF25K50。Si4684芯片是Skyworks原Silicon Labs广播产品线推出的一款高性能DAB/DAB/FM/AM接收器芯片。我选择它主要基于几个关键考量全格式支持它原生支持DAB、DAB和FM这意味着用一个硬件平台就能覆盖新旧广播制式无需为FM和DAB准备两套接收前端大大简化了设计。高集成度这颗芯片内部集成了射频低噪声放大器LNA、混频器、中频滤波、模数转换器ADC以及完整的数字信号处理器DSP。对于DAB它直接输出解码后的数字音频流对于FM它输出数字化的I/Q信号或解调后的音频数据。这种高集成度极大地降低了外围电路的复杂性我们不需要再操心繁琐的中周调谐、鉴频器等模拟电路设计。数据服务支持DAB广播不仅能传声音还能传输节目关联数据PAD其中就包括SlideShow幻灯片图像。Si4684的固件提供了相应的API来接收和解析这些数据这是实现本项目“幻灯片”功能的基础。PIC18LF25K50微控制器来自Microchip。选择这款MCU的原因如下USB功能集成它内置了全速USB 2.0控制器可以轻松实现将设备配置成一个人机接口设备HID或自定义的USB设备。这让我们可以通过USB线直接由电脑供电和控制无需额外的电源和复杂的通信接口如串口转USB芯片。充足的资源具有32KB Flash、2KB RAM以及足够的I/O引脚来连接Si4684通过SPI和中断、OLED显示屏SPI或I2C和音频数字接口芯片。其性能足以流畅地处理芯片间通信、解析数据包并响应主机电脑的指令。开发便利性Microchip的MPLAB X IDE和PICKit编程器生态成熟资料丰富便于开发和调试。注意在原型验证阶段你也可以使用更常见的PIC18F2550或PIC18F4550它们同样内置USB。但请注意引脚定义和某些特性可能不同需要调整电路和代码且无法直接兼容我最终设计的PCB。2.2 硬件平台搭建从评估板到自定义PCB我的硬件开发路径是分步进行的第一阶段快速验证我首先使用了AVIT Research的DAB Shield板。这块板子已经集成了Si4684芯片及其所有必要的外围电路如晶体振荡器、电源滤波并预烧录了官方的固件。它通常通过Arduino兼容的接口暴露SPI、I2C和控制引脚。在这个阶段我将DAB Shield与一块PIC18LF25K50最小系统板或PIC18F4550开发板在面包板上连接起来主要验证Si4684的驱动、基本接收功能以及USB通信是否可行。这是降低初期风险的关键一步。第二阶段定制化PCB设计验证通过后我便开始设计自己的PCB目的是集成所有功能并缩小体积以装入USB外壳。我的PCB设计包含了以下模块MCU最小系统围绕PIC18LF25K50包括晶振、复位电路、USB接口Micro-B或Type-C、去耦电容。Si4684电路参考其数据手册和AVIT Shield的布局精心设计了射频输入匹配网络。对于FM/DAB天线输入是共用的通过芯片内部开关切换。天线接口最终通过一个3.5mm耳机座实现具体见下文“成品版本”。显示接口预留了一个标准的4线SPI接口CS, DC, CLK, MOSI和电源引脚用于连接常见的0.96或1.3英寸OLED模块驱动芯片为SSD1306/SSD1309/SH1106。这些模块功耗低、显示效果好非常适合显示电台频率、节目信息以及SlideShow图片。音频输出升级数字输出我增加了Texas Instruments DIT4096芯片。这是一款S/PDIF数字音频发射器。我将它配置为硬件模式通过引脚设置固定为消费级格式、24位深度和主模式由其提供位时钟和主时钟。Si4684解出的I2S数字音频流直接输入DIT4096后者将其编码为S/PDIF信号通过一个RCA接口或同轴接口输出可以连接到高端DAC或数字功放获得最纯净的数字音质。模拟输出Si4684本身有模拟音频输出但驱动能力较弱。在最终版中我采用了更专业的方案。第三阶段成品优化与两个版本为了做出真正可用的“U盘式”收音机我设计了两个版本的最终PCB并装入了Hammond的金属USB外壳中。版本一FM DAB Stick LE (简化版)这个版本的设计灵感来源于Skyworks的一份应用笔记。它只有一个3.5mm耳机座这个座子身兼两职既是音频输出口也是FM/DAB天线。其原理是利用音频线的屏蔽层作为单极天线。这种设计极其简洁节省空间和成本。但它的效果依赖于环境如果周围射频信号强且音频线摆放位置合适效果不错否则接收可能不稳定。版本二FM DAB Stick Analog Optical (模拟/光学版)这是功能更全、性能更强的版本。它有两个3.5mm耳机座天线接口专用于连接外接天线。你可以接一根简单的80cm长导线或者像“Bingfu”这类有源/无源FM/DAB车载天线接收灵敏度大幅提升尤其能改善FM波段的接收效果。音频输出接口这个接口通过一个模拟开关可以输出模拟音频或光学数字音频TOSLINK。为了实现高质量的模拟输出我选用了Maxim Integrated现属ADI的MAX9722B立体声耳机放大器芯片。为什么是MAX9722B首先它是一款高性能、低噪声的耳机放大器输出功率足以驱动耳机但其输出电平也完美匹配标准线路输入Line In可以直接接音响。其次也是它的一大亮点它采用DirectDrive®架构无需输出端的直流隔直电容DC-Blocking Capacitors。传统耳机放大电路需要在输出端串联大电容来隔离芯片输出的直流偏置电压但这些电容会劣化低频响应特别是100Hz以下。去掉这些电容后低频表现更加饱满、真实。实操心得PCB布局的射频要点在设计包含Si4684的PCB时射频部分的布局布线至关重要。我的经验是1) 为Si4684的射频输入引脚FM/DAB_ANT到天线插座之间设计一个标准的π型匹配网络电感电容并预留多个焊盘以便调试时更换元件值。2) 该匹配网络走线尽可能短且直下方铺地屏蔽。3) 芯片的电源去耦电容通常是一个10uF钽电容加一个100nF陶瓷电容必须尽可能靠近电源引脚放置。4. 将整个射频部分用一个完整的接地铜箔包围起来与其他数字电路如MCU、SPI线适当隔离。3. 固件、驱动与上位机软件开发详解3.1 微控制器PIC固件USB HID通信与芯片控制枢纽PIC18LF25K50的固件是整个设备的“大脑”它主要完成以下几项任务USB HID设备配置我将设备配置为USB HID类。这样做最大的好处是免驱。在Windows、macOS、Linux等主流操作系统上HID设备可以被系统立即识别无需安装额外的底层驱动程序。我们通过自定义的HID报告Report来定义数据传输格式。通常我会定义几个报告一个从主机到设备的“控制报告”用于发送调台、音量等指令一个从设备到主机的“状态报告”用于回传频率、信号强度、RDS/DAB数据等。Si4684驱动通过SPI总线与Si4684通信。这包括初始化上电后通过SPI加载Si4684的固件firmware到其内部RAM。关于固件获取Skyworks的芯片固件通常需要与其签订协议或通过授权分销商获得用于产品开发。对于个人爱好者学习和评估有时可以从芯片供应商或相关开发板社区找到用于非商业目的的方案。这里需要你根据自身情况去探索合法获取途径。命令交互实现Si4684 API命令的封装如TUNE_FREQ(调频)、DIGITAL_SERVICE_LIST(获取DAB服务列表)、START_DIGITAL_SERVICE(开始播放DAB服务)、GET_DIGITAL_SERVICE_DATA(获取服务数据如SlideShow)等。中断处理Si4684会通过一个GPIO引脚向MCU发出中断通知“有新的RDS数据包”或“DAB数据包就绪”。MCU需及时响应读取数据。OLED显示驱动通过SPI驱动OLED屏幕实时显示当前模式FM/DAB、频率、电台名称、节目信息等。当收到SlideShow图片数据时还需要解码并显示JPEG或特定的位图格式DAB SlideShow通常使用一种压缩的位图格式。音频路由控制控制音频输出路径模拟/光学切换以及通过Si4684或MAX9722B通过I2C或GPIO调节音量。开发工具链我使用Microchip的MPLAB X IDE进行代码编写和编译使用PICKit 3或更新的编程器/调试器通过ICSP接口将固件烧录到PIC单片机中。MPLAB X IPE (Integrated Programming Environment) 是一个独立的烧录工具也很方便。3.2 上位机应用程序Windows用VB2017打造控制中心设备端准备好后需要一个电脑端的软件来控制它并展示SlideShow。我选择使用Visual Basic 2017进行开发原因是我对VB语法熟悉且其快速构建GUI的能力很强。通信层由于设备是USB HID在Windows上可以通过hid.dll提供的API进行通信。我编写了一个封装类用于发现设备、打开设备、发送和接收HID报告。为了方便其他开发者我将这个通信模块和主要的API调用封装成了一个DLL动态链接库。用户只需要安装这个DLL通常通过注册或放在程序目录我的上位机程序或其他人编写的程序就可以方便地调用函数来控制收音机棒。功能实现扫描与调谐发送指令让设备扫描FM波段或DAB波段并列表显示所有找到的电台。控制面板提供播放/停止、上一台/下一台、音量调节、静音等按钮。信息显示显示当前电台的详细信息如FM的RDS电台名称、节目类型、实时时钟DAB的Service Label、节目类型等。SlideShow展示这是亮点功能。程序会实时接收从设备传回的DAB SlideShow数据包进行解析可能需要处理分片和重组然后将图片解码显示在软件窗口的一个特定区域。我还会实现一个简单的图片缓存和历史浏览功能。日志与调试为了帮助开发者我的应用程序会生成详细的注释日志文件。日志记录了所有发送和接收的USB HID报告、Si4684命令/响应、以及数据解析的关键步骤。通过分析这些日志开发者可以深入理解通信协议从而修改我的软件或从头创建自己的控制程序。3.3 软件架构总结与数据流整个系统的数据流是这样的用户在上位机软件点击“扫描FM”。软件通过HID DLL发送自定义的“扫描命令报告”到USB设备。PIC固件收到报告解析后通过SPI向Si4684发送FM_SEEK_START命令。Si4684开始扫描找到电台后通过中断通知PIC。PIC读取频率和信号强度通过HID“状态报告”回传给上位机。上位机软件更新电台列表。用户双击一个DAB电台。软件发送“播放DAB服务”命令。PIC控制Si4684切换至该服务并开始接收音频流和数据流。音频流通过I2S送至DIT4096数字输出和Si4684内部DAC模拟输出。DAB数据流中的SlideShow数据包被Si4684解析出来通过SPI传给PIC。PIC将图片数据通过HID报告可能需要分包发送给上位机。上位机软件重组并解码图片显示在窗口中。同时PIC也将电台文本信息显示在OLED屏幕上。4. 组装、调试与实测问题排查4.1 物料准备与焊接装配这是一个需要细心和动手能力的环节。你需要准备PCB制板使用Sprint Layout 6.0或其他EDA软件如KiCad, Altium Designer打开或重新绘制我的PCB文件然后发给PCB制板厂打样。建议第一次选择沉金工艺焊接体验更好。元器件采购根据BOM清单采购所有芯片Si4684, PIC18LF25K50, DIT4096, MAX9722B、阻容感元件、晶体、连接器USB座、3.5mm座等。Si4684和MAX9722B可能需要从授权分销商处购买。焊接这是一个挑战尤其是Si4684这类QFN封装底部有散热焊盘的芯片。你需要热风枪和烙铁用热风枪焊接QFN芯片用烙铁焊接其他元件。焊锡膏和助焊剂对于QFN芯片先在PCB焊盘上涂抹少量焊锡膏对准芯片后用热风枪均匀加热直至焊膏熔化回流。显微镜或放大镜检查QFN芯片四周引脚和中间焊盘的焊接是否良好有无桥接或虚焊。稳手正如原文幽默提到的“A firm hand”手工焊接精密元件确实需要稳定的手法。如果条件允许使用回流焊炉是最佳选择。4.2 上电调试与常见问题排查组装完成后不要急于接天线和音箱按以下步骤调试第一步电源与基础检查用万用表测量所有电源网络如3.3V, 1.8V等对地电阻确保无短路。连接USB到电脑检查设备是否被识别为“USB输入设备”或未知设备。如果完全没反应检查USB数据线、USB座焊接、MCU的电源和晶振。第二步PIC固件烧录与测试使用PICKit3连接PCB上的ICSP接口通常为VPP, VDD, GND, PGD, PGC。在MPLAB X IPE中选择正确的器件型号PIC18LF25K50载入编译好的.hex文件并编程。编程成功后重新插拔USB。此时如果固件中USB初始化成功设备管理器应能正确识别为一个HID设备。第三步Si4684初始化与通信测试在PIC固件中编写一段简单的测试代码初始化SPI然后尝试读取Si4684的芯片IDPart Number。这是一个验证SPI硬件连接和Si4684是否正常工作的基本命令。通过调试器如PICKit3的调试模式或通过USB回传日志到上位机查看读取的芯片ID是否正确。如果失败检查SPI四根线SCLK, MOSI, MISO, CS的连接和焊接。Si4684的电源和复位信号。Si4684的固件加载是否正确需要先将固件二进制文件作为数组存储在PIC代码中然后通过SPI写入Si4684的指定内存地址。第四步射频接收调试这是最棘手的部分。问题通常表现为“收不到台”或“信号很差”。天线匹配网络这是关键中的关键。π型匹配网络L-C-L中电感和电容的值需要根据实际PCB的寄生参数和天线特性进行优化。我最初的值是参考数据手册的典型应用电路。如果效果不好你需要使用矢量网络分析仪VNA测量天线端口的S11参数回波损耗调整匹配网络的元件值使在目标频率如98MHz FM中心频率处的S11最小如-10dB。这是最专业的方法。没有VNA的替代方法准备几个不同值的电感和电容如1nH到100nH的电感1pF到10pF的电容进行替换试验。这是一个试错过程需要耐心。可以先用一个已知信号强的电台进行测试。天线本身对于“LE”版本尝试使用不同长度、不同摆放方式的音频线。对于“Analog Optical”版本确保外接天线连接牢固并尝试将天线伸展开或靠近窗户。电源噪声射频电路对电源噪声非常敏感。确保为Si4684供电的LDO或开关电源纹波足够小。在电源引脚附近并联多个不同容值的去耦电容如10uF, 1uF, 100nF, 10nF。第五步音频输出调试无声检查音频功放MAX9722B的使能引脚是否被正确拉高。用示波器探测Si4684的音频输出引脚或I2S数据线看是否有信号波形。如果I2S无信号检查Si4684的音频输出配置。检查3.5mm耳机座是否焊接良好音频通路上的电阻电容是否正确。数字输出S/PDIF无锁确保DIT4096的配置引脚如HW/SW, M0, M1电平设置正确已配置为所需模式如消费级、24位、主模式。用示波器测量S/PDIF输出端应能看到一个幅值约0.5Vpp的数字化波形。连接到解码器确认解码器能识别到S/PDIF信号并锁定。噪音大模拟部分检查地线布局模拟地AGND和数字地DGND是否在一点正确连接。确保MAX9722B的输入走线远离数字信号线如SPI, USB。数字部分确保I2S的位时钟BCLK和主时钟MCLK信号质量良好无过冲或振铃。4.3 实测性能与版本选择建议经过反复调试两个版本的表现如下FM DAB Stick LE (简化版)在市中心信号强的区域FM和DAB接收效果都令人满意。音频线作为天线的方案在桌面环境下足够使用且极其简洁。但在信号边缘区域、室内深处或音频线较短/缠绕时FM接收会变得不稳定DAB可能无法锁定。SlideShow图片的接收和显示速度取决于数据广播的带宽通常会有几秒的延迟。FM DAB Stick Analog Optical (模拟/光学版)这是性能王者。外接天线带来了质的飞跃FM接收灵敏度高背景噪音小。DAB锁台迅速稳定。MAX9722B驱动的模拟输出音质干净有力低频饱满。光学输出连接家用音响系统提供了最纯净的数字音源。SlideShow功能运行流畅。如何选择如果你身处广播信号覆盖良好的城市区域追求极简设计不需要连接高端音响系统且主要使用耳机或电脑音箱收听那么FM DAB Stick LE是完全够用且优雅的选择。如果你对接收稳定性有高要求居住地信号一般希望连接家庭影院或Hi-Fi系统获得最佳音质或者需要光纤输入到某些设备那么FM DAB Stick Analog Optical多出的成本和复杂度是绝对值得的。它提供了接近专业接收设备的体验。5. 项目总结与未来可能的扩展这个项目从一块芯片的数据手册开始到最终握在手里两个即插即用的精致硬件整个过程充满了挑战和乐趣。它不仅仅是一个收音机更是一个融合了射频设计、嵌入式编程、USB通信和桌面应用开发的综合性实践。我个人最深刻的体会是射频电路的成功90%取决于布局布线和电源设计。原理图正确只是第一步PCB上每一毫米的走线、每一个过孔的位置、每一处电源的滤波都可能成为影响性能的关键。耐心调试天线匹配网络是让设备“活”起来的关键一步。在软件层面将复杂的Si4684 API封装成简洁的USB HID命令并提供一个稳定的DLL接口使得上层应用开发变得轻松。记录详细的日志文件这个习惯在排查通信协议问题时救了我无数次。关于固件这是一个需要开发者自己根据项目目标和与芯片供应商的关系去解决的环节。它提醒我们在开源硬件和软件的世界里有时核心的“知识产权”仍存在边界尊重规则并寻找合法的解决途径是项目的一部分。这个项目还有很大的扩展空间平台扩展目前上位机是Windows程序理论上可以开发macOS或Linux版本因为USB HID是跨平台的。功能增强可以增加录音功能录制音频流到电脑或者开发一个网络流媒体服务器功能让收音机棒接收的音频可以通过网络在家庭内多房间播放。显示升级可以尝试使用彩色OLED或小尺寸LCD来显示更丰富的SlideShow图片和频谱信息。外壳与集成可以设计3D打印的外壳将其与一个小音箱集成做成一个完整的桌面互联网收音机/蓝牙音箱可以增加蓝牙模块。最后硬件制作永远是一个“动手”的过程。准备好你的烙铁、放大镜还有一颗面对“烟花”短路烧芯片也能坦然处之的心享受从无到有创造一件电子产品的成就感吧。希望我的这些经验和踩过的坑能为你点亮前行的路。