DIY之乐:基于PIC32的以太网音箱设计案例,硬件框图、器件选型、数据结构、软件流程
来自输入电压,从而在可能的最宽的动态输出范围。DAC7512采用了上电复位电路,确保DAC输出上保持在0V直到有一个有效的写操作在设备上。DAC7512包含省电特性,在串行接口访问时,也可以降低电流消耗器件到50nA。正常模式工作的低功耗正好适用于便携式电池供电设备。在5V电压供电时,功率消耗为从0.7mW减少到掉电模式的1μW。
DAC7512可用于 SOT23-6 封装和MSOP-8封装。
图4 DAC7512引脚视图
3.3 PIC3 Starter Board PIM Adapter
以太网音箱中需要用到数模转换,但PIC32 Ethernet Starter Kit中并未有DA和相应的音频输出接口。因此需要使用到一块转接板,然后接插上本次设计中所用的DA输出电路。其实物图如图5所示。
图5 PIC3 Starter Board PIM Adapter
3.4硬件设计
图6描述了三块电路板的连线图,DAC7512的SYNC、SCLK和DIN连接上了PIC32 Ethernet Starter Kit电路板上U1的引脚40、引脚39和引脚50,通过J2连上了MCU PIC32MX795F512L的SPI3的 SS3A、SCK3A和SDO3A。
图6连接图
图7是DA驱动电路图。
图7以太网音箱DA电路驱动图
3.5硬件实物图
从图7中可以看出,左侧为PIC32EthernetStarterKIT实物图,右侧为扩展的EMW-380-C模块。
图8以太网音箱实物图
4软件设计
本系统的整个设计包括以太网音响终端设备软件设计和PC服务器软件设计。以太网音响终端设备实现了UDP数据通信,MP3软解码和DAC 驱动。而PC服务器软件实现了对MP3文件的初步分析,分析提取MP3帧;通过TCP/IP的socket,以MP3帧为最小单位,按每秒26耗描匀速发送给以太网音响终端设备。
4.1PC服务器软件设计
4.1.1通信数据结构设计
PC服务器利用非连接UDP和以太网音响终端设备通信,因此在应用上传输的数据大小不宜超过数据链路层上的最大数据单元。因为,如果超过数据链路层的上最大数据单元,会造成数据在数据链路层上被拆分,而且由于数据在UDP上的不可靠性,会导致由于整批数据中的一个分段丢失导致了整个数据错误,因此应用上传输的最大数据大小应小于数据链路层上的最大数据单元。
| |
|
上面就是发送的数据结构。usDataHeader是数据包头部分,其高4为该数据的类型:0x1表示该数据的为MP3帧,0x03表示该数据为MP3最后一帧;第27位到第20位为数据序号;第19位到第16位为保留字段;低16位为MP3帧数据大小。ucDataBuffer为MP3数据帧。
4.1.2应用程序界面设计
图9展示了PC程序的主界面,其分别有服务器设置,设置IP地址、端口和音频文件。音频属性中显示了选中音频的相关信息。以太网音响信息,会显示终端设备的IP地址和它的端口号。播放控制和现实中现实了播放间隔和相应的数据包长度,并且可以控制是否发送数据和停止。
图9 PC程序界面
4.1.3应用程序设计
PC服务器可以配置绑定本机网卡地址和端口号。然后选择MP3音频节目,等待以太网终端设备发起数据请求。当收到终端设备发来的连接请求时,将其IP地址和发送数据的端口号记录下来,作为向终端设备发送数据的地址并将该信息现实到PC程序的界面上。
图10PC服务器主程序
图11PC服务器等待请求线程
图12PC服务器发送数据定时器中断
PC服务器在开启时候会运行主界面程序(其流程图如图9所示)和接收终端设备请求线程(其流程图如图10所示)。当用户播放数据之后,程序会运行定时器终端程序,定时发送MP3数据帧。
4.2以太网终端设备软件设计
4.1.1缓冲区数据结构设计
下面是一个数据单元的结构体。ucIndex为数据包序号;uiHeader该数据类型;uiSize为解码的数据个数,数据单位为字节;ucBuffer为MP3解码后的PCM码流;fiInfo为针砭信息。解码后的最大的数据长度为2304,因此将ucBuffer定义最大长度为2400。
考虑到网络的传输的可能出现一些抖动、PC软件定时器的误差和需要给MP3解码预留时间,因此需要在终端设备中缓冲一定的数据量。又由于,MP3音频要实时播放因此不需要缓冲太大的数据量。
在本次设计中,在终端设备里将上面的数据结构定义为20个缓冲区。当数据缓冲解码到数据缓冲区个数的一半时,开始播放PCM码流。
4.1.2以太网终端设备软件设计
以太网终端设备模块有三个分别是EthernetSpeaker.c、EthernetSpeakerPlayer.c和MP3Api.c。EthernetSpeaker.c的功能是负责网络通讯模块,EthernetSpeakerPlayer.c是DA驱动模块,MP3Api.c中包含MP3库载入初始化,和MP3解码函数。
图13以太网音响终端设备程序流程图
图13描述了以太网终端设备程序流程图,通
DIY PIC32 以太网音箱 哈夫曼解码 反量化 相关文章:
- DIY小设计:智能闹钟的简单软硬件实现(04-14)
- DIY智能家居之多功能一体化触屏遥控器的设计实现(04-14)
- DIY智能家居:基于AVR的智能节能插排的系统解决方案(04-16)
- DIY你的电子玩具:网络音乐电台,给你系统解决方案、软硬件设计实现(04-16)
- DIY机器人:神通广大的核辐射探测机器人设计方案,完整流程框图(05-04)
- DIY智能家庭营养专家系统解决方案,我的健康我做主(04-19)