查看: 7324  |  回复: 8
参赛作品《掌中宝FM收音机》
绍楠Shanan
2
主题
5
回复
发表于2018-05-09 21:08:36 | 只看该作者
1# 电梯直达

【报名阶段需要填写的内容】


1. 参赛者姓名(必填项):阮韶南, 湛宗儒 

    硬件设计————————--阮韶南

    MCU程序设计——————--阮韶南

    硬件测试DEMO程序————阮韶南

    ESP32网络收音机程序———湛宗儒

2. 单位或学校名称(选填项):--


3. 当前职务或职称(选填项):--


4. 参赛作品的名字(必填项):掌中宝FM收音机


5. 简要陈述您的idea和作品(必填项):

    我第一次DIY的作品是一台4管中波收音机,电路图来自父亲给我的《少年晶体管收音机》。那个暑假,父亲给了我一台MF-30,一把偶尔会漏电的烙铁,还有焊锡,松香,电线和他收藏的2SAxx,2SBxx锗管等等。然后教我用笔和尺子画电路图,把画好的电路图粘在木板上,然后按着电路图在木板上用裸铜线穿线,最后把元器件焊接上。就是用这么土的办法,做出来的板子大概有A4纸那么大,在当时的条件下,却把布线和原理图结合在一起了。上电后,它工作了,真的能收到不知道在哪里的电台。从此,我对收音机有着特别的情感。

    以前,夜深人静的时候,听听电台,听听万峰,听听涂磊,很有意思的主持人们,电话听众们和他们的故事。除了节目,电台总是有各种各样的音乐,记得有一次,听到一首特别喜欢的歌曲,却不知道歌名,还跑去网吧找了。

    已经好久没有认认真真听电台节目了,偶尔在车上听,在路上听。而现在的收音机,多数情况下是嵌入到其他设备里,专门购置一台的情况很少。对于我来说,比起买一台,还不如自己做吧。自己做的成本不会比买的少,这是DIYer的共识,但我们并不关心。DIY可以是一种生活方式,也可以是分享,也可以是传承。这次我就做一个普普通通的收音机,收音机本身不是最重要的,重要的是过程和方法,分享和传承。我把东西做好,把这个方法分享出去,让更多的人更好的DIY,把东西做得更好。

    这个收音机的体积要尽量小,方便携带。电路要简单,一方面为了可靠,另一方面是为了降低成本(物料和时间)。外形要做得漂漂亮亮,要拿得出手。当然,性能也要过得去才行。

    =============================================================================================================================================================

    2018-06-19 收音机做得差不多了,正如之前的设想,是简单实用的东西,并没有在趣味性和创新性上着力。为了弥补这两方面的不足,提高产品竞争力,决定增加一个配套设备:网络电台的FM发射机,发射机能够从互联网获取网络电台的音频信号,然后通过FM发射出去。这样与收音机组成一个系统,让普通的FM收音机也能享受到丰富优质的网络电台的资源。


6. 拟用到的立创商城在售物料(必填项):

    1.处理器及微控制器 / GD32F130F4P6 编号:C77701

    2.音频放大器 / TPA6132A2RTER 编号:C69901

    3.无线收发芯片 / RDA5820NS 编号:C167244

    4.WIFI模块 / ESP32-WROVER 编号:C129145

    5.音频放大器 / HT4832 编号:C130779

   6.处理器及微控制器 / MM32L051NT 编号:C212245

7. 拟用到的非立创商城物料或其它补充(必填项):

    1. si4702 FM接收器

    2. 锂电池

    3. 耳机插座PJ-342

    4. 拨动开关SK12D07VG3 3MM柄高

8. 拟用到的EDA工具软件名称(必填项):

    1. AltiumDesigner

    2. MDK

    3. ESP-IDF,ESP-ADF

【作品正式发表(报名成功后进入设计阶段)需要填写的内容】


一、作品简介

例如,可以包括但不局限于以下内容:

1.作品的整机外观图片或焊接组装好的PCBA图片;

2.作品的研究背景、目的和功能、市场应用前景;

3.作品在创新性、趣味性、实用性甚至公益性方面,有哪些亮点可体现?

    起初这个作品只是一个收音机】

    这个作品的特点是小而美,长宽仅5x5cm,可以一手掌握。从SCH和PCB设计之时,就考虑到使用方式和外观,便有了如下的外观设计:

 

       










  以亚克力板材加工构成的外壳,侧面透明,绿色面板和黄色按钮的搭配,突出了年轻的活力感。带有四个按钮开关,LED显示窗口,一个3.5mm耳机插孔,一个拨动开关和一个USB Micro充电口。

  依据电路硬件调整,新的外观如下:

  实物图:

   长宽高:50x50x14mm(不含突出部分),质量33g(含150mAH电池)。

   收音机的四个按键可以完成搜台,换台,存台和音量调节等操作,一个三色LED用于指示电量和操作反馈。




    后来这个作品增加了一个FM发射器,组成了一个简单的系统】

 

  FM发射器外形效果图: 

 

    实物图:



    长宽高:98X77X14mm(不含突出部分),质量76.8g

    发射机具有四个电容触摸按键,两个三色LED,四位数码管显示,有三个3.5mm音频插座,其中黑色插座是外接FM天线,粉红色插座是立体声音频输入,浅绿色插座是立体声音频输出,MicroUSB插座用于设备供电和USB转UART通信,可用于ESP32下载程序。


二、系统构架图

用流程图或思维导图等形式,描述您的作品的组成构架,即方案图。


    收音机的硬件方案如下:

      

    收音机的核心部件有三个:芯科的FM接收芯片Si4702,嘉兴禾润的免输出电容耳机放大器HT4832(或者德州仪器的TPA6132A2RTER),还有灵动微电子的低功耗Cortex-M0单片机MM32L051NT。Si4702负责接收FM信号并解调还原为音频信号,再通过耳机放大器输出到耳机。单片机负责处理用户交互和Si4702的寄存器设置,Si4702在初始化后可以独立运行,单片机此时可以进入低功耗状态。FM天线是利用耳机的地线来实现。


    发射机的硬件方案如下:

     

    网络发射器的核心部件有三个:乐鑫的WiFi+BT+BLE模块ESP32-WROVER,锐迪科的FM收发器RDA5820NS和兆易创新的低成本少管脚的Coretex-M3单片机GD32F130F4P6。ESP32具有高性能和丰富外设,可以完全取代这里的单片机和触摸芯片。这里是考虑到MCU的调试便捷和ASIC性能可靠,而保留两者。单片机在这里充当外设管理器和人机界面。ESP32则作为网络处理器使用。ESP32将从SD卡或者互联网获取音频数据,然后通过I2S发送到RDA5820NS,RDA5820NS再把信号进行FM调制发射。RDA5820NS非常灵活,它还可以作为FM接收机或者是ADC或者Coder来使用,这样设备还能用作其他用途,例如把本地的FM电台转发到网络。这里FM天线是单独引出,不与耳机共用。


三、硬件部分的描述

1.附上原理图&PCB实物图的图片或者源文件(官方建议大家尽量用源文件上传),如果是图片,请确保图片是清晰可辨的;

2.用文字把该作品的实现原理、系统的工作过程大致讲解一下。

3.注明所用到的EDA工具软件名称并附上设计链接。

  收音机的第一版PCB如下,在此调通了基本程序。这个版本属于原理样机,MCU采用GD32F130F4P6,而Si4702则选用模块。Bug:1.缺少I2C上拉电阻;2.Si4702模块的位置不当,耳机作为天线使用的效果很差,因此外接一根软导线做天线。除此之外,该Si4702模块设计并不合理,IO没有全部引出,有些功能无法使用。

     

     

    ===================================================================================================================

    收音机的第二版PCB如下,考虑到锂电池的安装,在PCB上挖空,导致布线面积减少,只好使用4层板。为了降低功耗,改用了MM32L051NT。为了降低成本,取消了LED导光柱,使用圆头直插LED。本想支持线控,但是没考虑到麦克风的偏置电流,GPIO的内置上拉是不足以提供该电流,留待下一版修正。

 

    网络收音机发射器的PCB实物如下。TM1620的信号线应该上拉到5V,这里错误地用了3.3V,所以有了下图的飞线。ESP32是带有电容触摸功能,但是限制较多,由于时间仓促,这里使用了专用的触摸芯片。

 

 

    结构如下。使用SketchUp草图大师作图。Altium Designer支持3D格式Step导出,但SU并不支持,只能以2D DWG作为中间格式,再在SU上重建模型。

 

 

    原理图:(PDF格式)掌中宝FM收音机原理图(当前版本,有bug) ESP32网络电台发射器(当前版本,有bug) 

  

  收音机PCB文件(AD格式) 

 

 

 发射机PCB文件(AD格式) 


四、材料清单(BOM列表)

列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。

如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。


Comment
Description
Footprint
Code
ESP32-WROVER
通用型 Wi-Fi+BT+BLE MCU 模组,带有 4 MB SPI flash 和 4 MB PSRAM, PCB 板载天线

C129145
RDA5820NS
SINGLE -CHIP  BROADCAST  FM TRANSCEIVER
QFN20-3x3
C167244
CH340C
USB 转串口芯片
SOP16N
C84681
BS814A-2
SPI 串口,4输入电容触摸按键
SOP127P600-8N
C81738
GD32F130F4P6
超值型、小体积的Cortex-M3 ARM芯片
LC-TSSOP-20

C77701

TM1620
LED驱动
SOIC-20_300mil
C19579
AMS1117-3.3
低压差线性稳压(LDO)
SOT-223

MM32L051NT
低功耗CM0核心 32位MCU QFN127P600-8N
C212245

TPA6132A2

HT4832 

免输出电容、双声道耳机功放
QFN50P300X300X80_HS-17N

C69901

C130779

Si4702/03-C19
BROADCAST FM RADIO TUNER FOR PORTABLE APPLICATIONS
QFN20-Si4702/03-C19

BL24C02P
I2C-Compatible Serial EEPROM
TSOT23-5
C190108
TP4054
电池电源管理
SOT-23-5
C32574
XC6206P332MR
低压差线性稳压(LDO)
SOT-23-3L
C5446


五、软件部分的描述(选填)

如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。

收音机程序流程图:

 点击查看大图

  收音机源代码(不含MDK工程配置文件,请自行建立工程) 文件一览:

\MINIFM
│
│  
├─BSP
│      at24c02.c
│      at24c02.h
│      keyscan.c
│      keyscan.h
│      led.c
│      led.h
│      memory.c
│      memory.h
│      powermanager.c
│      powermanager.h
│      radio.c
│      radio.h
│      SI4702.c
│      SI4702.h
│      
├─Device
│  ├─CMSIS
│  │  └─KEIL_CORE
│  │          arm_common_tables.h
│  │          arm_const_structs.h
│  │          arm_math.h
│  │          core_cm0.h
│  │          core_cm0plus.h
│  │          core_cm3.h
│  │          core_cm4.h
│  │          core_cm4_simd.h
│  │          core_cmFunc.h
│  │          core_cmInstr.h
│  │          core_sc000.h
│  │          core_sc300.h
│  │          
│  └─MM32L0xx
│      │  change list.txt
│      │  
│      ├─HAL_lib
│      │  │  MM32L0xx_lib_version.txt
│      │  │  
│      │  ├─inc
│      │  │      dtype.h
│      │  │      HAL_adc.h
│      │  │      HAL_bkp.h
│      │  │      HAL_can.h
│      │  │      HAL_comp.h
│      │  │      HAL_conf.h
│      │  │      HAL_dma.h
│      │  │      HAL_exti.h
│      │  │      HAL_flash.h
│      │  │      HAL_gpio.h
│      │  │      HAL_i2c.h
│      │  │      HAL_iwdg.h
│      │  │      HAL_misc.h
│      │  │      HAL_pwr.h
│      │  │      HAL_rcc.h
│      │  │      HAL_spi.h
│      │  │      HAL_syscfg.h
│      │  │      HAL_tim.h
│      │  │      HAL_uart.h
│      │  │      HAL_wwdg.h
│      │  │      
│      │  └─src
│      │          HAL_adc.c
│      │          HAL_bkp.c
│      │          HAL_can.c
│      │          HAL_comp.c
│      │          HAL_dma.c
│      │          HAL_exti.c
│      │          HAL_flash.c
│      │          HAL_gpio.c
│      │          HAL_i2c.c
│      │          HAL_iwdg.c
│      │          HAL_misc.c
│      │          HAL_pwr.c
│      │          HAL_rcc.c
│      │          HAL_spi.c
│      │          HAL_syscfg.c
│      │          HAL_tim.c
│      │          HAL_uart.c
│      │          HAL_wwdg.c
│      │          
│      ├─Include
│      │      HAL_device.h
│      │      MM32L0xx.h
│      │      
│      └─Source
│          │  system_MM32L0xx.c
│          │  
│          └─KEIL_StartAsm
│                  startup_MM32L0xx.s
│                  
├─Driver
│      adc.c
│      adc.h
│      comp.c
│      comp.h
│      i2c.c
│      i2c.h
│      interrupt_priority.h
│      timer.c
│      timer.h
│      
├─SYSTEM
│  ├─delay
│  │      delay.c
│  │      delay.h
│  │      
│  ├─sys
│  │      sys.c
│  │      sys.h
│  │      
│  └─uart
│          uart.c
│          uart.h
│          
└─USER
        main.c
        main.h
        mm32l0xx_it.c
        mm32l0xx_it.h

    

   main.c主程序关键部分:程序在三种状态跳转:休眠,输入,执行。开机后进入休眠状态,等待外部中断跳出休眠,退出休眠后检测用户输入,然后执行相应功能,执行完成后再次进入休眠。

 while(1)
{	
    switch(workstate)
    {
	case WORKSTATE_SLEEP:
	{
	    keyInitISR();
	    delay_deinit();
	    powmgr_mcu_sleep();
	    keyDeInitISR();
	    delay_init();
	    workstate = WORKSTATE_INPUT;
	}
	break;
			
	case WORKSTATE_INPUT:
	{
	    if(flag_1ms_dup){
	        flag_1ms_dup = false;
                idlecnt--;
		keyScanFSM();
		if(testKeyPress()){
                    idlecnt=AUTO_SLEEP_TIME;
		    clearKeyPress();
		    workstate = WORKSTATE_BUSY;
		}
				
		if(testKeyRelease()){
		    clearKeyRelease();
		}

                if(idlecnt==0){
                    workstate = WORKSTATE_SLEEP;
                }
	    }//if(flag_1ms)
							
	}
	break;	
			
	case WORKSTATE_BUSY:
	{
	    u8temp = keyPressProcess();
            if(PROCESS_DONE==u8temp){
                workstate = WORKSTATE_INPUT;
            }else if(PROCESS_ING==u8temp){
            //timeout
            }else{
            //error
            }
	}
	break;
      
      default:workstate = WORKSTATE_SLEEP;
    }//switch(workstate)
    ... ...
}//while(1)

   

   keyscan.c按键扫描关键部分:物理上只有4个按键,依据按键按下的时间长短和按键之间的组合,可以产生32种逻辑键值。将函数列表与逻辑键值建立映射,按键扫描获取键值后执行相应函数。

__I uint8_t keytab[32]={//逻辑键值
//single and multipressed key:short time 
		0,            	// 0000b : S1 S2 S3 S4 Bit Value
		KEY_VOLDN,      // 0001b
		KEY_VOLUP,      // 0010b
		KEY_MUTE,      // 0011b
	        KEY_CHANDN,    //0100b
	        0,		//0101b
		0,		//0110b
		0,		//0111b
		KEY_CHANUP,	//1000b
		0,		//1001b
		0,		//1010b
		0,		//1011b
		KEY_CHLOCK,	//1100b
		0,		//1101b
		0,		//1110b
		0, 		//1111b
//single and multipressed key:long time		
		0,            	// 0000b : S1 S2 S3 S4 Bit Value
		KEY_VOLDN,      // 0001b
		KEY_VOLUP,      // 0010b
		0,    		// 0011b
	        KEY_SEEKDN,	//0100b
	        0,		//0101b
		0,		//0110b
		0,		//0111b
		KEY_SEEKUP,	//1000b
		0,		//1001b
		0,		//1010b
		0,		//1011b
		KEY_CHSAVE,	 //1100b
		0,		//1101b
		0,		//1110b
		KEY_CLEAN,	//1111b
};

radio_ret (*keyfunclist[10])(void)={//执行函数列表
	radio_decVolume,
	radio_incVolume,
	radio_mute_toggle,
	radio_nextChannel,
	radio_previousChannel,
	radio_lockChannel,
	radio_seekDown,
	radio_seekUp,
	radio_channelSave,
	radio_cleanData,
};

#define KEY_VALID_NUM 10
__I uint8_t keyfuncmap[KEY_VALID_NUM][2]={//键值与函数映射
	{KEY_VOLDN,0},
	{KEY_VOLUP,1},
	{KEY_MUTE,2},
	{KEY_CHANDN,3},
	{KEY_CHANUP,4},
	{KEY_CHLOCK,5},
	{KEY_SEEKDN,6},
	{KEY_SEEKUP,7},
	{KEY_CHSAVE,8},
	{KEY_CLEAN,9},
};

      

    收音机按键说明:
    1和2是音量键,3和4是调台。
    短按1或2,音量加或减;1+2短按是静音;
    短按3或4,切换电台列表;3+4短按是锁定电台;
    长按3或4,是向上或向下搜索电台,3+4长按是保存当前电台,最多保存20个电台;1+2+3+4长按是清除记忆。


ESP32网络收音机程序.pdf 


六、作品演示

请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。

视频将分为两部分,第一部分主要介绍收音机的使用和组装,第二部分主要介绍发射机的使用,敬请留意。



没有收音机,没有频谱仪,怎么办?这时候可以用RTL-SDR来解决:

 

  


七、总结

例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。

后记-1 Shanan 广州
    去年是有打算参加活动的,可是那时工作太忙,无暇抽身。当时已经想好了参赛作品,但硬件做出来的时候,已经是活动结束后的几个月了。那是我和ZhanZR第一次合作的产物。今年本打算和ZhanZR带着这个作品参加,只可惜那时他很忙。于是,起初是我一个人报名。个人的精力有限,有鉴于过往的烂尾挖坑经验,这次选题,把完成度作为优先考虑的事情。为了实现高完成度,我选择了降低难度,同时也要避开工作内容,就有了现在一看就知道是干什么的题目。这样,收音机是用来保底的。在保证能够按时按质完成的前提下,才增加设计发射机的部分,这是选题加分的部分。这并不是一开始就计划好的,是在第一版PCB调通程序后,心血来潮增加的。接着在报名截止前的一周,ZhanZR问了我的情况,我建议他,我们组队再选一题。后来他没有选好题目,而我这边正好增加了发射机的部分,就拉他上车了。
    我的计划是做一个完整的东西,而不是特定功能的模块。在当前看来,是基本达到目的,虽然存在不合理的地方。收音机其实可以用更简单和更低成本的方案:使用8位MCU,节省功放和EEPROM,使用两层板等。现在舍近求远的方案,主要是给自己一点挑战。例如,选择SI4702,主要是因为在淘宝上没有参考代码。选择MM32,一是赞助商的产品,二是没用过。如果以后再设计一版低成本收音机,方案大概就是RDA5807+8051这样的组合。
    之前和ZhanZR合作的是一款基于STM32F407的网络收音机,但遗憾的是软件还没有实现。借此机会,我当了一次Github搬运工,拿来别人的基于ESP32的网络收音机代码,实现一个网络电台发射机。但ESP-IDF更新,为了WiFi和BLE共存,把WiFi的Throughput降低了,造成http连接的音频流断流了,目前还没调通,这样下去,只能用UDP进行流传输。把这个ESP32的网络收音机调通后,我打算把代码移植到STM32上,把去年的坑填了。

        感谢主办方提供这么好的平台,让大家展示自我,看到了很多有趣的设计和点子,令人跃跃欲试,最后祝活动圆满结束!

  


立创工程小陈
6
主题
548
回复
发表于2018-05-10 09:17:04   |  只看该作者
2#

恭喜您已经报名成功!

您现在就可以开始进行设计工作了,后期相关内容请在一楼编辑进行完善。

当前所有参赛选手分值统计表及活动详细介绍见:http://club.szlcsc.com/article/details_12591_1.html

同时,您设计的PCBA板或者模块也可以参与立创商城第二期PCB方案验证板活动(相当于“搭顺风车”),详情请看:http://club.szlcsc.com/article/details_11599_1.html


立创商城电子制作节(审核专员)
BeBetter
2
主题
57
回复
发表于2018-05-10 09:24:06   |  只看该作者
3#
做收音机的经历很美好,感谢分享。现在的收音机基本都是一块集成电路了,少了制作的乐趣,而用独立元件搭出收音机应会更能体会到DIY的乐趣。
立创小星
【官方工作人员】
4
主题
1178
回复
发表于2018-05-10 09:43:04   |  只看该作者
4#
温馨提示:报名成功后至6月20日前的任意时间打开链接:http://club.szlcsc.com/article/details_12591_1.html,无分组转发至朋友圈,并截图(朋友圈首页截图)回复在报名帖下方即可获得3分。【注:请保持微信朋友圈动态至评审结束(8月24日),供官方核查
绍楠Shanan
2
主题
5
回复
发表于2018-05-10 09:59:22   |  只看该作者
5#
BeBetter 发表于2018-05-10 09:24:06  3# 做收音机的经历很美好,感谢分享。现在的收音机基本都是一块集成电路了,少了制作的乐趣,而用独立元件搭出收音机应会更能体会到...

是否用分立元器件做收音机,就跟做功放一样,是用全分立,还是前置用OP,后置用分立,还是用厚膜电路,看自己的偏好和条件。

为了体积考虑,这里用了DSP收音机。如果做台式收音机,用分立元器件搭电路,可以更好的认识原理,也更折腾。

绍楠Shanan
2
主题
5
回复
发表于2018-05-10 13:07:04   |  只看该作者
6#

朋友圈传播: 

点击查看大图

立创小星
【官方工作人员】
4
主题
1178
回复
发表于2018-05-11 10:24:12   |  只看该作者
7#
恭喜您传播成功,获得3分。当前所有参赛选手分值统计表及活动详细介绍见:http://club.szlcsc.com/article/details_12591_1.html
立创小星
【官方工作人员】
4
主题
1178
回复
发表于2018-07-26 10:39:47   |  只看该作者
8#

记得上传视频哟,按要求上传即可获得10分。具体要求见下方↓


将拍摄好的作品录像上传到腾讯视频且标题为"第三届立创电子制作节参赛作品:《作品名》",并将腾讯视频链接更新到各自的参赛帖中,如标题长度受限可缩减标题,保留“第三届立创电子制作节”核心字眼即可。)

條碼設備
3
主题
163
回复
发表于2018-08-20 23:59:06   |  只看该作者
9#

2.网络收音机设计与流程

网络收音机顾名思义,就是从网络接收数据(一般为mp3数据),再解码,一边接收一边解码播放.少数情况下,电台那边也是有播音员直播,但很多电台目前也是自动化播放已经制作好的节目,其实跟传统电台类似.

 

随着硬件的演进,传统AM/FM/短波这样的电台已经越来越少.当然FM是个例外,因为在车载领域还有一些市场.不过市场的趋势就是数字替代传统,正如当初移动电话的演进一样.

 

从上述流程来看,硬件必须具备的功能:

1.网络连接,使用以太网显然不是最优方案,ESP32拥有wifi非常适合

2.有一定的计算能力,ESP32双核心,最高240MHz

3.外设要丰富,比如TF,I2S接口,这些ESP32都具备.


条码,二维码设备.有线,无线,蓝牙扫码枪,无线盘点机,WIFI盘点机,GPRS盘点机.

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部