因为搭上了人工智能的车,近一段时间来智能音箱很火。最著名的当属亚马逊的Echo,国内的后起之秀有灵动等等。类似的还有小米收音机,优听音箱之类。主要功能都是网络播放,大多数带有麦克风+语音识别。与AI结合紧密的就是语音助手了, 比如某些智能音箱能够听从用户这样的命令: 播放Beatles乐队的Let it be! 上述例子中小米音箱的麦克风目前没有在固件支持,但是潮流与趋势大致如此。作者本人也与另外一个21ic的网友合作DIY了一款。此篇讲述硬件的设计思路以及详情。设计的过程中用到了STM32CubeMX, 感觉很好用, 治理也介绍一下子这个工具如何辅助作者本人的硬件与软件设计过程, 希望对感兴趣的网友一点启发。后续的软件上的例子另外进行写作。
图 功能框图
考虑到要语音识别和音频软解码的需要, 核心要进行复杂的数字信号处理。这样核心可选DSP, 高频通用处理器或者FPGA。因为是自己搞DIY, 其实这里也没有很大的讲究。无非是用好的处理器就做复杂点, 反之就搞简单一点。考虑到购买容易,价格也较低的因素,选定STM32F4系列。小米收音机我也拆过, 用的是MTK的MT7688KN(MIPS24KEc内核)。这种片我们既难买,也不好搞编程, 算是可望不可求吧。
图 小米收音机主板
考虑到有大量数据存储(永久或暂时)的可能,外扩了RAM和Flash,外扩RAM选用SRAM,外扩Flah选择SD卡和SPI Flash。注:小米音箱上只有SPI Flash没有SD卡.
显然有播放音乐的需要,对音质还是比较在意,这里并不使用MCU内建的DAC,而是选择外置的I2S DAC。而语音输入就相对简单,内置ADC加外部MIC即可。通信方面,支持TCP/IP和USB是必不可少。
人机界面本来打算使用12864这样的液晶屏,后来觉得不是核心功能就能省就省,使用按钮和LED的组合即可(也考虑到还要做语音指令功能)。这样外观也比较好处理,例如这样摆放在桌面上的感觉(机顶盒):
图 设想图之一
但实际效果,可能更像这样,可以便携使用(耳放):
图 设想图之二
最终选定的主要芯片型号:
型号封装厂商功能主要规格
表 主要芯片一览
使用CubeMX辅助硬件设计
这里假定读者有一定的软硬件开发经验,顺便讲一下子使用工具来辅助STM32的软硬件设计过程。这要是按以前,有从8051转到AVR,然后从AVR转到富士通,又从富士通转到STM8的切身体会的话,估计得急死人。
笔者买过一块STM32F103的开发板来自学,用过STD库后,感觉太方便了。STD库是极大方面软件开发,而STM32CubeMX + HAL库则是把硬件开发和软硬件兼容都考虑进去了。在硬件都是从零开始设计的情况下,我们看看STM32CubeMX,是如何协助我们更好更快地完成任务。
STM32CubeMX的安装过程非常简单,这里就省略了。启动界面如下:
图 开始界面
点击新建工程,软件会联网检查更新,之后选择我们的407ZE,然后双击这一行:
图 选芯片具体型号
这样就进入芯片配置界面:
图 从功能出发配置引脚
我们在左边的窗口选择使能I2S3,这样相应的管脚就会被配置:
图 配置了I2S后相应引脚自动进行锁定
实际在PCB布线的时候,I2S3_SD和I2S3_CK走线不理想,这时候可以看看这两个管脚可不可以Remap,按住Ctrl,点击这两个管脚,可以看到Remap管脚在PB5:
图 引脚Remap需要手工完成
点击PB5,选择I2S3_SD,完成这个管脚的配置:
图 锁定引脚