数码之家

 找回密码
 立即注册
搜索
查看: 2264|回复: 20

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

[复制链接]
发表于 2023-11-20 17:08:36 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 银河小铁骑 于 2023-11-21 09:18 编辑

WAV播放程序使用说明
1、简介

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


2、输出滤波电路
输出PWM要经过低通滤波器获得光滑的模拟信号输出,请参考下图的
电路:3阶巴特沃斯低通滤波器。
0.jpg
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.4为MCU请求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就能自动识别到设备:
1.jpg
点击下载按钮,将程序下载到MCU中。


5、播放设置

此时STC ISP已能自动识别播放程序的CDC通信口,下图的“扫描”里显示的就是CDC串口。
点击“STC调试接口”,选择“播放Wave(P)”,见下图:
2.jpg

点击“打开Wave”,选择要播放的Wave文件。
3.jpg

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占用率会加大。
4.jpg

下面为参考的时间设置:
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寸迷宫式二单元书架箱安排上,将重低音开最大,听着圆润的歌声和直拍心口的重低音鼓,等待隔壁邻居来敲门!
5.jpg
6.jpg
7、展示图片
8.jpg

9.jpg



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

663.52 KB, 下载次数: 2, 下载积分: 家元 -55

打赏

参与人数 3家元 +58 收起 理由
x067 + 30
听雨亭 + 16
不长叶子的树 + 12

查看全部打赏

发表于 2023-11-20 17:48:16 | 显示全部楼层
哇,STC真的好牛逼好强大好厉害,不知道实现这样的功能对单片机有没有特殊的要求?比如用STM32实现起来容易吗?
回复 支持 反对

使用道具 举报

发表于 2023-11-20 20:25:30 | 显示全部楼层
看起来是高手才能这样 玩的。
回复 支持 反对

使用道具 举报

发表于 2023-11-21 10:28:19 | 显示全部楼层
GB GBA 卡带读写
atmega8515L stc8h8k64U stc32g12k128 同框图
结果是,avr晶振8M, stc用35M
串口读取速度没啥太大区别。。。
代码移植了一部分,都没啥动力继续搞了
gbx.jpg
gbx_flash.png
回复 支持 反对

使用道具 举报

发表于 2023-11-21 15:20:07 | 显示全部楼层
STC32G12K128 , USB-CDC实时传输音频,太酷啦!有时间用屠龙刀试一下
回复 支持 反对

使用道具 举报

发表于 2023-11-21 16:25:39 | 显示全部楼层
之前为了音质,专门买了4寸的书架箱,里面有分频器的那种。。后面用的数字功放,感觉吧,也就那样。。
回复 支持 反对

使用道具 举报

发表于 2023-11-21 16:40:57 | 显示全部楼层
这是个好东西啊~
回复 支持 反对

使用道具 举报

发表于 2023-11-22 09:28:46 | 显示全部楼层
高手,收藏学习
回复 支持 反对

使用道具 举报

发表于 2023-11-23 08:47:53 | 显示全部楼层
数字功放感觉差点味道
回复 支持 反对

使用道具 举报

发表于 2023-11-23 10:46:17 | 显示全部楼层
谢谢楼主,学习中
回复 支持 反对

使用道具 举报

发表于 2023-11-23 17:13:09 | 显示全部楼层
这套茶桌感觉还不错哦,茶道友人
回复 支持 反对

使用道具 举报

发表于 2023-11-26 15:56:14 | 显示全部楼层
firseve 发表于 2023-11-21 10:28
GB GBA 卡带读写
atmega8515L stc8h8k64U stc32g12k128 同框图
结果是,avr晶振8M, stc用35M

这玩意儿可以搞一搞……
回复 支持 反对

使用道具 举报

发表于 2023-11-26 16:20:47 | 显示全部楼层
pwm能直接驱动mos推动喇叭吗
回复 支持 反对

使用道具 举报

发表于 2023-11-27 13:39:35 | 显示全部楼层
很好,很强大,不错。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-27 17:13:41 | 显示全部楼层
tomyluo 发表于 2023-11-26 16:20
pwm能直接驱动mos推动喇叭吗

可以参考附件的原理图
回复 支持 反对

使用道具 举报

发表于 2023-11-27 20:16:38 | 显示全部楼层
高人啊,这都可以。
回复 支持 反对

使用道具 举报

发表于 2023-11-28 00:06:36 来自手机浏览器 | 显示全部楼层
感觉没什么实用价值,不然搞一个stc版jlinkob或者usb blaster?
回复 支持 反对

使用道具 举报

发表于 2023-11-28 06:41:11 来自手机浏览器 | 显示全部楼层
8寸迷宫式二单元书架箱在哪买的?
回复 支持 反对

使用道具 举报

发表于 2024-3-17 13:49:37 | 显示全部楼层
能加入usb音频功能吗?作为声卡使用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 17:33 , Processed in 0.187200 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表