写在前面
这个的项目算是我个人的一个从小就有的小想法,拜托,自己做出个能听各种广播的收音机超酷的好不好,特别是当它只有巴掌大小。得益于现在电子集成技术的发展,个人DIY一个小收音机不再是什么难事,于是找了段时间做出了这个作品。最后实现出的效果也很不错,能搜到十几个台,音质也非常不错,能听音乐广播电台。在这过程中认识了一位志同道合的朋友,在项目启动和完成的过程中给了我很多鼓励和灵感。在此特别感谢Lancen
初步构思
- 既然是收音机,就需要能接收并解调FM或AM广播信号,市面上有很多成熟的解决方案(不会真有人用分立元件搭吧 ,手动狗头)
- 初步设想是选用集成式收音机芯片,如SI4735或者RDA5820之类的。它们一般是SPI协议控制,所以需要相应的STM32主控来控制
- 收音机的天线选用拉杆天线,SMA接口,方便板载。信号增益能力也不错。
- 当然也还需要一个功放芯片和喇叭,将解调后的声音信号输出。
- 还需要几个按钮来换台或者调节音量,以及一块屏幕显示当前的频道和音量。
- 最后是必不可少的电池供电和电源管理
选型与设计
这一节我会从系统的每个部件的所要满足的条件出发,环环相扣,完成每一个器件的选型。
收音机芯片SI4735
当年市面上有很多集成收音机芯片,现在随着网络收音机和移动多媒体的流行,实体收音机逐渐式微。
不过也留下了一些诸如SI47XX,GS1299,RDA5820,CXA1691之类的经久不衰的芯片。
收音机芯片的参数主要看的是搜台能力(能否尽可能多的搜到台),灵敏度(决定信号质量),波段(不同的国家和地图使用的波段不同),种类(AM,FM,SW)
我这里使用的是SI4735,支持的波段很多,收音质量好,快速搜台,FM双声道播放,自动增益控制等(其实还能收SSB,但是需要一些特殊的方法)
主控STM32G431
这个没啥好说的,手头上有啥用啥,其实用G431有些浪费,主频170MHz,ADC和DAC齐全,在这里可以用L051或者G070,更低功耗,也能满足它的要求,毕竟只是个SPI通信和按键的处理。
功放芯片TC8002D
只需要驱动个小喇叭,对音质和功率没什么需求,所以不需要太好的功放芯片。
所以选用了国产的TC8002D,是对TI的LM3471的复刻,电路图简单,只需要很少的外围器件就能工作。
功放电路图,控制R20/R15的比值,就能控制音量的大小,比值越大的话音量越大。
A=2*(R20/R15),一般选择输入阻抗R15为20K,通过控制R20的大小来控制音量
拉杆天线
一般的拉杆天线就好,控制好长度,接头为SMA头,便于于板子连接
其他
按键:为了追求稍微好一点的手感,我使用了硅胶按键。
触摸屏:屏幕驱动ST7735(内置),触摸功能需要加上XTP2046
锂电池充电:TP4056,经典方案,具体参考我之前的博客
控制板PCB
原理图绘制
原理图参考网上的资料,主要是SI4735以及触摸屏的外围电路,照着Datasheet画就行了,其他的都非常简单
PCB绘制
注意信号通路,如SMA天线到芯片这一段要尽量短,以及芯片输出的解调信号到功放的这一段要做好保护。
晶振要靠近管脚且大致等长。有些一看就是大电流的的线路要加粗,比如功放的输出。
去耦电容靠近芯片脚。
焊接与组装
第一次尝试下SMT订单,让嘉立创帮忙贴好阻容。免去了自己焊接那么多电阻电容,只需要焊接一些比较贵的芯片和接插件。安装也很简单,只需要焊接上SMA座,然后把拉杆天线接上去。以及焊好电池、喇叭就好
致命问题:
这个板子我画了两版,第一版好好的,一次焊接,下载成功。第二版加上了触摸屏和优化了一些布局,但是不知道为什么,第二版就是无法直接在Keil里下载,即使在Debug显示了芯片序号。点击下载后显示的错误是Could stop Cortex-M device。我调试了很久,把芯片吹了又焊,很长时间都找不出原因(感谢Lancen一直在旁边看着这一切迷惑操作)。我在调试的时候灵机一动,按住了单片机的Reset,再点击下载,竟然直接就下载成功了。
后来思考了一下,可能是Reset管脚与GND管脚短接了或者boot0未正常接地,前者是很有可能因为用热风枪对着复位按键附近吹了过久造成了击穿。后者可能是因为出厂时禁用了Sys-Debug,于是无法通过STLink下载。而按下Reset相当于拉高了boot0连接到的GND电压,使得boot0拉高,进入了从内部存储器启动的模式,此时就可以通过STlink下载。
代码编写
- SI4735的驱动没啥好讲的,都是通过SPI驱动的