查看:
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)
四、材料清单(BOM列表) 列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。 如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。
五、软件部分的描述(选填) 如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。 收音机程序流程图: 收音机源代码(不含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}, };
收音机按键说明: 六、作品演示 请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。 视频将分为两部分,第一部分主要介绍收音机的使用和组装,第二部分主要介绍发射机的使用,敬请留意。
没有收音机,没有频谱仪,怎么办?这时候可以用RTL-SDR来解决:
七、总结 例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。 后记-1 Shanan 广州 感谢主办方提供这么好的平台,让大家展示自我,看到了很多有趣的设计和点子,令人跃跃欲试,最后祝活动圆满结束!
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
立创工程小陈
6
主题
548
回复 |
发表于2018-05-10 09:17:04
|
只看该作者
2#
立创商城电子制作节(审核专员)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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#
是否用分立元器件做收音机,就跟做功放一样,是用全分立,还是前置用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#
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
條碼設備
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盘点机.
|
|