打印

第二篇 嵌入式系统硬件输出系统简介及播放实验(播放篇之...

[复制链接]
1506|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanzr21|  楼主 | 2017-3-23 23:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第二篇 嵌入式系统硬件输出系统简介及播放实验(播放篇之一)



前言
此章仅为最基本的播放原理介绍, 还有不少关於播放的内容由于篇幅与活动配套安排等原因没有包含在此, 所以在标题上加 播放篇之一, 后面的章节中也会有对这个话题的继续讨论.
1.基本的播放原理与硬件组成
从原理上讲,数字系统播放声音就是把声音的样本数据转换成人耳能感觉到的变化.上一章的**中我们已经体验过声音的数字形式.那么将这种数据如何转换为最终能感觉到的变化呢.理论上的功能Block如下:

图 音频播放的理论Block
这里依次说明.
1.   控制系统,负责控制生成数据或者读取数据(可能需要解压或其他操作),并将其交给下一级的DAC,一般来讲这个指的是MCU/DSP/CPU/FPGA这样的器件.
2.   数据即是音频数据,可以是控制系统即时生成的也可以是读取其它系统处理好的数据.一般而言,除了实验性质或者创作性质的系统,数据一般是其它系统生成存放在存储器中的数据.
3.   DAC负责把数字转换成模拟.这个DAC可以是内部DAC也可以是外部DAC.甚至可能是个假的DAC(数字口+低通滤波器).
4.   功率级将DAC的输出进行功率放大,功率级视乎后面的输出设备需求来决定其性质.可以是管子(FET,BJT,电子管),也可能是集成电路. 现代音频系统中集成电路放大器居多.如果后一级的负载足够小, 这一级可以省掉, 后面的实验会进一步详细解释.
5.   输出设备一般而言就是扬声器(音箱或者耳机中的扬声器).

相关帖子

沙发
zhanzr21|  楼主 | 2017-3-23 23:18 | 只看该作者
2.实际硬件原理分析 (硬件DAC直接输出)
这里给出我搭建的几个音频播放的硬件例子以助理解.
1.系统之一:Nucleo板子+有源音箱
首先来看看DAC+音箱形式.


图DAC+有源音箱形式
左边是一个ST的Nucleo开发板子,具体型号是STM32F722ZE. 但是绝大多数的类似板子都能替代. 音频信号通过芯片内部的DAC输出到音箱的输入级. 音箱须为有源音箱(带电源的就是有源音箱, 本文例子使用的就是网上买的几十块钱包邮的USB音箱, 如果是无源音箱, 需要另外增加功率分大级. 根据作者的经验, 你能找到的音箱绝大多数是有源音箱).我们看看连接的细节:
图 耳机接口细节这是个耳机接口座子+杜邦线改装出来的连接器, 左右两根线是左右声道信号, 当中那个是共地. 本文所讨论的音频系统除非另外说明都为单声道, 故此只会使用左右两通道中的之一加下面那根地线.大多数的MCU自带DAC为两个或以上的通道, 足够完成简单的立体声输出了. 为讨论简便, 先只用单声道做实验, 所以只会用到一个DAC输出. 这是Nucleo板上的连接, 一个DAC输出(PA5,DAC通道2), 一个地.
图DAC连接细节





使用特权

评论回复
板凳
zhanzr21|  楼主 | 2017-3-23 23:19 | 只看该作者
2.系统之二: Nucleo板子+耳机

图DAC+耳机形式
按照数据手册,ST的DAC是无法直接驱动耳机的.


图 F722数据手册中关于DAC的负载参数这里发扬(不怕烧坏板子烧坏耳机的)探索精神, 使用STM32F722的DAC直接驱动32 Ohm耳机, 经试验是可以进行播放的. 当然当做产品长时间运行这样是有点吊儿郎当的, 此处只是做实验. 如果你没有心理准备或者接受不了这种冒险行为, 请勿模仿!


使用特权

评论回复
地板
zhanzr21|  楼主 | 2017-3-23 23:21 | 只看该作者
3.系统之三: Nucleo板子+功放板+扬声器
这个系统应该是属于本章目前为止分析的最正统, 最教科书式的系统构造了.


图 DAC+功放板子+扬声器
DAC输出信号到功放板,功放板驱动扬声器. 其实这个系统跟第一个有音箱的系统在架构上是一模一样的. 只是把音箱拆开了开膛破肚, 把功放板与扬声器拿出来, 大家更容易看明白信号的走向流程. 图片中的功放板子是用的Adafruit做的一个板子, 作者自己打的板子将在后文中介绍.


图 D类音频功放板子这里补一句, 一般而言音频功放分为AB类和D类. 当然还有许多其他类以及变种,但是用得最多的就是AB类和D类. 两者的差别用一句话概括:AB类效果好,D类效率高.具体关于两种放大器的分析与仿真作者打算使用自制的板子再开一篇来讲. 这里先跳过去.至于扬声器,这里是作者从旧的笔记本上拆的,我想大家应该都能在家中找到这样的旧的扬声器吧. 扬声器上标的+-跟马达/无源蜂鸣器/灯丝灯抛一样, 只是个接线参考, 两极从电路原理上讲是对称的.
图 旧笔记本上拆的扬声器以上三个系统都是本人为了说明音频播放原理而搭建的简化型的系统. 这些系统便于说明原理, 也能够用作大家自己动手的参考.事实上实际的音频系统中很少直接使用处理器的ADC/DAC来播放音频, 而经常使用专用的Codecs来处理音频. 这些Codecs都是专门为音频应用优化过的ADC/DAC,有的还加入了运放电路,DSP处理模块等等. 在成本与性能上都大大优于处理器自带ADC/DAC. 本文在介绍基本原理时使用这些通用ADC/DAC, 在此之后将回到使用专用Codecs的更加主流的道路上来. 如果看过第一篇的读者, 应该会记得曾经介绍过的F769-Discovery板子上的音频系统,那就是使用的专用Codecs:WM8994. 作者也会做一些测试板子来配合文中的内容.



使用特权

评论回复
5
zhanzr21|  楼主 | 2017-3-23 23:25 | 只看该作者
阅读全文, 下载实验代码请到这个连接:
http://www.21ic.com/eva/audio/201703/711661.htm

使用特权

评论回复
6
shanan| | 2017-3-25 22:03 | 只看该作者
本帖最后由 shanan 于 2017-3-25 22:09 编辑

我来交功课了。
在STM32F103RCT6上实验通过。
主频72MHz,使用DAC1(PA04)输出音乐。
因为芯片容量为256K,音乐文件大小123111bytes,所以音乐烧写位置是0x0803FFFF-0x1E0E7= 0x08021F18.

使用特权

评论回复
评论
zhanzr21 2017-3-25 22:09 回复TA
不过发在这里也可以, 下期活动时, 再来 
zhanzr21 2017-3-25 22:08 回复TA
兄弟,你先去参加第一期的活动, 还没有结束, https://bbs.21ic.com/icview-1698510-1-1.html 第二期活动下周才上, 都有小小奖励的, 编辑忙大项目去了, 
7
WAMCNCN| | 2017-4-7 12:24 | 只看该作者
感谢楼主分享,学习学习。第一期没赶上,第二期刚看到,正好有活动的板子722,不熟悉啊,只好先更改了下采样率,使用介绍的工具截取了段音频,烧写开发板,嘿。虽然128K的存储小了点,只能播放几秒。+上功放,音质还是不错的。学习了并交了功课。

使用特权

评论回复
评论
zhanzr21 2017-4-7 15:08 回复TA
多谢支持! 
8
lianying168000| | 2017-5-20 18:08 | 只看该作者
看了全文,对“主系统跑216MHz, 使用定时器6作8KHz的更新中断, 那么Period设定为P = (216000000/2)/8000 = 13500”这里有点疑惑,我查了STM32F722ZE的手册,发现定时器6最高频率到54MHz,那么这里的计算就不是除以2了吧?是不是定时器这里弄错了呢?还有下文的125us是不是在这个公式计算的结果上加一个余量得出来的?还望指教,多谢了。

使用特权

评论回复
评论
zhanzr21 2017-5-21 00:34 回复TA
其实做个CubeMX的工程,很快就能弄清楚了 
zhanzr21 2017-5-21 00:33 回复TA
125us = 1 second / SampleRate 
zhanzr21 2017-5-21 00:33 回复TA
你看的哪个手册?哪一章节?可否贴出来? 我看的是http://www.st.com/resource/en/datasheet/stm32f722ze.pdf,第37页,Table 6,最后一列,interface最高54M,Timer最高108/216M 
9
lianying168000| | 2017-5-21 16:19 | 只看该作者
lianying168000 发表于 2017-5-20 18:08
看了全文,对“主系统跑216MHz, 使用定时器6作8KHz的更新中断, 那么Period设定为P = (216000000/2)/8000 =  ...

我也看的这个手册,看错地方了。我看的是Table-13,Table-13说TIM6属于APB1总线,然后2.12节又说APB1总线最高频率为54MHz,然后我就以为TIM6最高为54MHz了。多谢指教了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天都進步

91

主题

1013

帖子

34

粉丝