论坛» 嵌入式开发» 国产MCU

51开源180MHz-PWM-播放立体声音乐@STC32G12K128,USB-CDC实时传输音频

菜鸟
2023-12-16 09:40 1楼
51 开源180MHz-PWM-播放立体声音乐@STC32G12K128, USB-CDC实时传输音频

WAV播放程序使用说明

详情可见: 51开源 180MHz-PWM-仿USB声卡播放立体声音乐@STC32G12K128, USB-CDC实时传输音频 - 51 发烧友,UAC,极致音频,大国工匠,艺术人生,乐林漫步 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


1、简介


建议用户直接下载"Objects"里的"audio-play.hex"测试.下载时选择主频30MHz WAV播放器使用STC32G12K128运行,MCU内部HIRC工作于30MHzPLL180MHzPWM时钟, 6分频30MHzCPU-系统时钟。 两路HS-PWM工作时钟为180MHzPWM周期为4097,输出PWM频率大约为44KHz(CD采样率44.1KHz相近),占空比为12位。 本播放程序支持以下WAV文件的播放,由【STC-ISP|调试接口|播放WAVE】界面通过 USB-CDC 虚拟串口/就是串口下传音频数据: 支持PCMADPCMA-Law 支持16位无压缩(CD音轨)WINDOWS PCM格式,单声道或双声道采样率最高支持44.1KHz 支持IMA-ADPCM格式,单通道或双通道采样率最高支持44.1KHz 支持A-law(A)格式,单通道或双通道采样率最高支持44.1KHz 语音解码算法可能看似跟网上的有差异,但算法实际是一样的,我只是将其简化操作而已。各种算法可以网搜相关知识,但不在本文讨论之列。

2、输出滤波电路


输出PWM要经过低通滤波器获得光滑的模拟信号输出,请参考下图的电路:3阶巴特沃斯低通滤波器。

PWMA1P--P1.0 左声道,PWMA3P--P1.4 右声道。 左右声道完全一致,以左声道为例,PWM 信号经过R1 R2 分压适当衰减后与C1 组成第一阶RC 低通滤波,将变化陡峭的PWM 的高频谐波滤除,再送到运放组成的二阶低通滤波电路滤波输出,就得到模拟信号,经过C4 隔直后得到交流信号,从3.5mm 的立体声插座输出。用户可以用SPWM 输出一个1000Hz 正弦波来评估其性能。 上图参数为对应16KHz 采样的输出,转折频率为不超过采样频率的一半即可。 要改成别的采样频率,则按比例改变电容即可,电阻不变。 注意:图中零件不是随便取的,是经过精心计算的,无源一阶低通、有源二阶低通的截止频率和 Q 值都不同,两者串联才能得到最终的输出响应。 模拟滤波器相关的知识不在本文讨论范畴,用户可以自行复习模拟电子技术基础的相关章节。


3、使用“屠龙刀三”核心板验证


本程序使用STC 公司的“屠龙刀三”核心板验证,用户可以自行修改到自己的系统上。 与“屠龙刀三”核心板的连接: 将上述的P1.0 P1.4 VCC GND 连接到核心板的对应焊盘即可,最好断开板上R107 R108 两个0 欧姆电阻,避免其电路影响PWM 信号。 板上的P3.2 按键为播放键,P3.3 按键为停止键。P2.7 为每个采样解码时间指示(高电平时间),用示波器观察。P2.0 为播放指示灯,正在播放时输出低驱动LED 亮。P2.1 CDC 接收数据包指示,每收到一包(64 字节)就取反一次,下传数据一块为1024 字节,分16 个包传输。

P2.4MCU请求PC传输数据的提示,从请求开始P2.4输出高电平,之后收到第一包数据(64字节)输出低电平,用示波器观察。


4、下载程序


下载程序和CDC 通信均使用板上TYPE-C 接口实现。打开STC-ISP V6.92G 或更高版本。 打开程序文件,即打开"Objects" 里的"audio-play.hex" 文件。


USB TYPE-C 延长线将“屠龙刀三”核心板与PC 连接,持续按下P3.2 按键,短按OFF 键释放,1 秒后释放P3.2 按键,STC ISP 就能自动识别到设备:


点击下载按钮,将程序下载到MCU 中。


5、播放设置


此时STC ISP 已能自动识别播放程序的CDC 通信口,下图的“扫描”里显示的就是CDC 串口。

点击“STC调试接口”,选择“播放Wave(P)”,见下图:


点击“打开Wave ”,选择要播放的Wave 文件。Wave 文件信息里会显示文件的重要信息: 文件格式,目前只支持:1-PCM 6-A law 17-IMA ADPCM 3 种类型。 通道数:1 表示单声道,2 表示立体声。 采样率:不用解释。 采样位数:就是一个采样点的位数,用户不用关心。 数据大小:即声音的字节数。 设置数据发送模式里的“每个数据包的大小(字节)”为1024 勾选“第一包数据发送WAVE 文件信息” 选择“应答式发送”。 点击“发送Wave 数据”。


之后,按一下板上的P3.2 键开始播放,MCU 请求的第一个数据包为14 字节的上述文件信息,大端模式。Byte0 Byte1 WAV 类型,0x0001-->PCM 0x0006-->A Law 0x0011-->IMA ADPCM Byte2 :声道数,1 (单声道)或2 (立体声)。Byte3 :采样位数,用户不用理会。Byte4~Byte7 :采样率,Hz Byte8~Byte11 :数据长度(字节数)。Byte12~Byte13 BLOCK 长度(ADPCM 使用) 后面请求发送的都是音频数据包,程序根据文件格式进行处理后送去PWM 播放出声音。 输出的声音要接功放和音箱才能听到传真度不错的音乐,使用32KHz 44.1KHz 的采样格式,普通音响将难以分辨其与320Kbps 码率的MP3 的音质有啥差别。


6、通信查询速度适配


文件格式不同,采样率不同,就有不同的数据率,数据率越高,对通信的速度要求就越高。但是通信速度高,PC CPU 占用率就高,这必须要平衡一下。


点击串口助手“更多设设置”,在“响应接收时间(查询周期)”的输入框中,根据数据率输入合适的值,时间短通信速度快,但电脑PC 占用率会加大。

下面为参考的时间设置:PCM 采样率 响应接收时间 数据率44.1KHz 0ms 176.4KB/S 32KHz 1ms 2ms 128KB/S 16KHz 4ms 5ms 64KB/S


ADPCM 采样率 响应接收时间 数据率44.1KHz 5ms 44.1KB/S 32KHz 10ms 32KB/S 16KHz 10ms 16KB/S


A law 采样率 响应接收时间 数据率44.1KHz 2ms 3ms 88.2KB/S 32KHz 4ms 5ms 64KB/S 16KHz 10ms 32KB/S



最后,将HIFI 功放打开,8 寸迷宫式二单元书架箱安排上,将重低音开最大,听着圆润的歌声和直拍心口的重低音鼓,等待隔壁邻居来敲门!

30A-HSPWMA-播放立体声音乐-CDC实时传输音频流-180MHz.rar



专家
2023-11-22 09:15 2楼

厉害了,功能越来越强大!

院士
2023-11-22 10:56 3楼

学习了,谢谢分享。

工程师
2023-11-23 06:31 4楼

动手能力是真的强

专家
2023-11-24 08:10 5楼

不错啊,看看

高工
2023-11-24 08:39 6楼

非常详细,跟着学习了

工程师
2023-11-25 08:54 7楼

感谢楼主分享,不错

菜鸟
2023-11-27 13:52 8楼

厉害

高工
2023-12-02 19:39 9楼

现在51单片机可以跑到30MHz了啊

菜鸟
2023-12-03 17:01 10楼

厉害

共15条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]