请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 747|回复: 2

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

[复制链接]

该用户从未签到

45

主题

2856

回帖

6420

积分

超级版主

积分
6420
发表于 2023-11-25 19:06:53 | 显示全部楼层 |阅读模式
51开源 180MHz-PWM-仿USB声卡播放立体声音乐@STC32G12K128
===USB-CDC实时传输音频
HSPWM-仿USB声卡WAVE播放程序使用说明
1、简介
建议用户直接下载"Objects"里的"audio-play.hex"测试. 下载时选择主频30MHZ
本例程无需按键,类似于USB声卡,用STC-ISP里的“播放Wave”界面直接打PCM文件播放。
WAV播放器使用STC32G12K128运行,MCU内部ROSC工作于30MHzPLL180MHzPWM时钟,
同时6分频得到30MHzCPU做系统时钟。

两路HSPWM工作时钟为180MHzPWM周期为4097,输出PWM频率大约为44KHz(CD采样率44.1KHz相近),占空比为12位。
本播放程序支持以下WAV文件的播放,由STC-ISP的“播放WAVE”界面通过CDC串口下传数据流:
支持PCMADPCMA-Law
支持16位无压缩(CD音轨)WINDOWS PCM格式,单声道或双声道采样率最高支持44.1KHz
支持IMA-ADPCM格式,单通道或双通道采样率最高支持44.1KHz
支持A-law(A)格式,单通道或双通道采样率最高支持44.1KHz
语音解码算法可能看似跟网上的有差异,但算法实际是一样的,我只是将其简化操作而已。各种算法可以网搜相关知识,但不在本文讨论之列。

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

3、使用“屠龙刀三”核心板验证
本程序使用STC公司的“屠龙刀三”核心板验证,用户可以自行修改到自己的系统上。
与“屠龙刀三”核心板的连接:
将上述的P1.0P1.4VCCGND连接到核心板的对应焊盘即可,最好断开板上R107R108
两个0欧姆电阻,避免其电路影响PWM信号。
P2.7为每个采样解码时间指示(高电平时间),用示波器观察。
P2.0为播放指示灯,正在播放时输出低驱动LED亮。
P2.1CDC接收数据包指示,每收到一包(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就能自动识别到设备:
截图202311251904099815.jpg
点击下载按钮,将程序下载到MCU中。
5、播放设置

此时STC ISP已能自动识别播放程序的CDC通信口,下图的“扫描”里显示的就是CDC串口。
截图202311251904526054.jpg
点击“STC调试接口”,选择“播放Wave(P)”,见下图:
截图202311251905145807.jpg
点击“打开Wave”,选择要播放的Wave文件。
Wave文件信息里会显示文件的重要信息:
    文件格式,目前只支持:1-PCM6-A law17-IMA ADPCM3种类型。
    通道数:1表示单声道,2表示立体声。
    采样率:每秒的采样数。
    采样位数:就是一个采样点的位数,用户不用关心。
    数据大小:即声音的字节数。
设置数据发送模式里的“每个数据包的大小(字节)”为1024
勾选“第一包数据发送WAVE文件信息”
选择“连续自动发送”。
“数据包之间的延时(ms)”根据播放的文件类型和采样率设置,或者均设置为0
PCM  采样率    包间延时时间     数据率
    44.1KHz       0ms         176.4KB/S
     32KHz     1ms2ms       128KB/S
     16KHz     4ms5ms        64KB/S

ADPCM 采样率    包间延时时间     数据率
    44.1KHz       5ms          44.1KB/S
     32KHz       10ms           32KB/S
     16KHz       10ms           16KB/S

A law 采样率    包间延时时间     数据率
    44.1KHz    2ms3ms     88.2KB/S
     32KHz     4ms5ms      64KB/S
     16KHz       10ms         32KB/S
点击“发送Wave数据”,发出的第一个包为14字节的文件信息,大端模式,字节安排如下:
   Byte0Byte1WAV类型,0x0001-->PCM0x0006-->A Law0x0011-->IMA ADPCM
    Byte2:声道数,1(单声道)或2(立体声)。
   Byte3:采样位数,用户不用理会。
   Byte4~Byte7:采样率,Hz
   Byte8~Byte11:数据长度(字节数)。
   Byte12~Byte13BLOCK长度(ADPCM使用)

后面发送的都是音频数据包,程序根据文件格式进行处理后送去PWM播放出声音。
截图202311251905453497.jpg

31-HSPWMA-仿USB声卡播放立体声音乐-CDC实时传输音频流-180MHz.rar (578.08 KB, 下载次数: 47)


回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2023-12-30 00:51
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    0

    主题

    44

    回帖

    138

    积分

    注册会员

    积分
    138
    发表于 2023-12-12 10:18:30 来自手机 | 显示全部楼层
    👍
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 51 天

    [LV.5]常住居民I

    4

    主题

    73

    回帖

    388

    积分

    中级会员

    积分
    388
    发表于 2024-3-31 19:14:07 | 显示全部楼层
     
    经常看看,偶尔玩玩——不过都是简单的,难的我也不会呀
     
    回复 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-21 09:51 , Processed in 0.066049 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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