搜索
bottom↓
12
返回列表 发新帖
楼主: machao

如何实现一个最便宜的WAVE播放器------方案征询与讨论

[复制链接]

出0入0汤圆

发表于 2010-9-28 19:03:48 | 显示全部楼层
向马老师学习!

出0入85汤圆

发表于 2010-9-28 19:15:21 | 显示全部楼层
回复【100楼】machao
-----------------------------------------------------------------------

楼的图,只给出了一个简单的LPF,主要是考虑器件可速度的影响

-----------------------------------------------------------------------

呵呵,马老师应该是还没有完整地阅读13楼的文章吧?这个滤波器设计我觉得很巧哦。。。

其实马老师说的我也明白,因为我自己就用过不下10种方法做过PWM DAC,而且在这方面探索已经有多年了(现在正打算做一个3MHz的PWM功放,也许还会用硬件再做一个Tripath 的Digital Power Processing功放,不过载频会提高到数MHz,而不是TA2024的不到1MHz)

但是有些原则是不会变的,即一个如果连理论都能够证明是是错误的DD,怎么能指望实际能得出正确的结果呢?您说是吗?

如果是一个16位的DA,那么至少理论上这65536个取值,每一个输出的结果都是独立、唯一和准确的。

但17楼的例子,在我们已经忽略了电阻误差的情况下,仍然能够证明至少有254个点输出的电压是绝对不正确的,即两路PWM输出的占空比相同的情况下(除了0%和100%,即256种取值减去两个特例,剩下254个。。)

你觉得这样还能算是16位DA吗?

呵呵,不是我想抬杠,我只是觉得做技术这样的理论分析都能证明有错的DD,我是绝不会用到实际中的。。。

出0入0汤圆

 楼主| 发表于 2010-9-28 19:34:16 | 显示全部楼层
回复【103楼】roseason
回复【100楼】machao  
-----------------------------------------------------------------------
楼的图,只给出了一个简单的lpf,主要是考虑器件可速度的影响
-----------------------------------------------------------------------
呵呵,马老师应该是还没有完整地阅读13楼的文章吧?这个滤波器设计我觉得很巧哦。。。
其实马老师说的我也明白,因为我自己就用过不下10种方法做过pwm dac,而且在这方面探索已经有多年了(现在正打算做一个3mhz的pwm功放,也许还会用硬件再做一个tripath 的digital power processing功放,不过载频会提高到数mhz,而不是ta2024的不到1mhz)
但是有些原则是不会变的,......
-----------------------------------------------------------------------

抱歉,我把你与【43楼】的ifree64搞混了。我的帖子主要是回答【43楼】ifree64,以及他后面总是问的PWM做DAC是否有理论基础的问题而做的解释。

你的问题与他不同,是如何将2个8位PWM 组合,作为16位的DAC使用的设计问题。

出0入12汤圆

发表于 2010-9-28 19:40:35 | 显示全部楼层

(原文件名:au.JPG)

出0入0汤圆

 楼主| 发表于 2010-9-28 19:47:40 | 显示全部楼层
楼上,能解释一下你下面右图是什么意思?横坐标是什么,纵坐标又代表什么?以及等于12位的具体含义吗?

出0入0汤圆

发表于 2010-9-28 19:54:34 | 显示全部楼层
DF INSIDE?

出0入12汤圆

发表于 2010-9-28 19:55:16 | 显示全部楼层
回复【106楼】machao  
-----------------------------------------------------------------------

好的,
横坐标是8位A/u率数据,经过{8位PWM->滤波....}之后的信号-------真实反映(线性的 对应)存储在单片机中的数据(8位的);
纵坐标是经过?电路还原成原声的信号;
约等于12位,是说,耳朵听起来像12位音质,(实际上是有差别的---小信号细腻,大信号粗糙),一般人耳朵听不出来(比如.我).

出0入0汤圆

发表于 2010-9-28 19:58:25 | 显示全部楼层
machao,我觉得用PIC32那个例子已经可以说明问题了,所以DA部分应该没太大问题了。

不过PWM的精度问题和R2R网络比,那个精度可以更高些呢?

出5入8汤圆

发表于 2010-9-28 20:14:37 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-9-28 20:48:08 | 显示全部楼层
回复【108楼】kv2004
回复【106楼】machao   
-----------------------------------------------------------------------
好的,
横坐标是8位a/u率数据,经过{8位pwm->滤波....}之后的信号-------真实反映(线性的 对应)存储在单片机中的数据(8位的);
纵坐标是经过?电路还原成原声的信号;
约等于12位,是说,耳朵听起来像12位音质,(实际上是有差别的---小信号细腻,大信号粗糙),一般人耳朵听不出来(比如.我).
-----------------------------------------------------------------------

不知道是我理解错误,还是你概念上有误。我给出一个简要的解释。

首先必要的条件是,你的采样数据本身就应该是通过A/U率的ADC获得的,如果是用线形ADC得到的数据,用A/U率的DAC是没有任何作用的,反而失真更严重。

如果你的数据本身是A/U率抽样数据,那么类似R-2R的电路就能实现A/U的DAC,只是各个位的电阻值(即权重)需要根据A/U计算,符合A/U率对应的每一个位的权。当然,此时就不能叫R-2R,R-2R是按8位线型DAC的权值得到的。

A/U率有专门的ADC和DAC芯片,比线形ADC/DAC要贵。主要应用与电话等语言数字通信(采用8位)时中使用。现在的MP3播放器大都采用线形ADC/DAC,16位bit,小信号也足够细腻了。

出0入0汤圆

发表于 2010-9-28 21:20:25 | 显示全部楼层
【105楼】 kv2004 提及到的PWM数据,当然是经A/u律变换压缩后的数据,由于A/u律变换过程中采用了折线斜率进行变换,并不是平滑的曲线,所以解压缩时也必需是分段的折线来扩张。纯硬件电路很难过到这要求,要么线路很复杂。这种情况用MCU处理或FPGA处理更合适。

出0入12汤圆

发表于 2010-9-28 21:39:51 | 显示全部楼层
大于12位采样录音->{CoolEdit/Goldwave/自编程序 等 转换->A率}-> 存储 ->单片机 ->不加任何特殊处理的DAC ->电路(?)->驱动->耳机

.

出0入0汤圆

 楼主| 发表于 2010-9-28 21:45:54 | 显示全部楼层
回复【112楼】cowboy
【105楼】 kv2004 提及到的pwm数据,当然是经a/u律变换压缩后的数据,由于a/u律变换过程中采用了折线斜率进行变换,并不是平滑的曲线,所以解压缩时也必需是分段的折线来扩张。纯硬件电路很难过到这要求,要么线路很复杂。这种情况用mcu处理或fpga处理更合适。
-----------------------------------------------------------------------

a/u律ADC没有压缩,还是做ADC采样,不存在解压缩的问题,你用MCU或FPGA处理什么?将A/U律数据转换成线型数据,再通过线型DAC输出?

ADC/DAC不存在什么压缩问题,压缩是后续的问题,不要把问题混在一起。

理论上的A/U率ADC采样过程中,输入模拟电压与ADC数据输出值的关系,就是平滑的曲线。线型ADC输入模拟电压与ADC数据输出值的关系是45度直线。你所说的“平滑曲线”是指什么?

关键还是在于了解A/U律ADC的真正含义!

出0入12汤圆

发表于 2010-9-28 21:49:54 | 显示全部楼层
虽然经过几段折线,但是毕竟只有256个状态,用电路做个曲线,小信号放的小些;大信号更大些,也应该能做到接近吧.而且两个参数不大一致的电路板,放出音来,一般人耳朵也不一定听的很准吧.
比PWM+电阻网络的好处是,1 数值小的输入一定能得到数值小的输出,2 信号连续,而PWM+电阻网络不一定能做好这两点吧.----其实也许是1点问题,就是电阻网络最小值和PWM最大值的比较的大小和比例问题.
---
改错字

出0入0汤圆

发表于 2010-9-28 22:00:38 | 显示全部楼层
可能是我表达不清了,我说的压缩并不是通常数据上的压缩,是指声音的动态度压缩,而解压准确一点表达是扩张。A/u律的压缩据我所知是用13段或15段折线把12位数据变换成8位数据。我对G711音频压缩标准也是一知半解,用词不当闹笑话了:(

出0入85汤圆

发表于 2010-9-28 22:20:10 | 显示全部楼层
回复【104楼】machao
-----------------------------------------------------------------------

呵呵。没事,原来是误会:)

出0入618汤圆

发表于 2010-9-28 22:23:43 | 显示全部楼层
如果A/u-Law采样的数据要用LPCM输出或反之,才需要MCU处理。

出0入0汤圆

发表于 2010-9-28 22:40:06 | 显示全部楼层
虽然经过几段折线,但是毕竟只有256个状态,用电路做个曲线,小信号放的小些;大信号更大些,也应该能做到接近吧.而且两个参数不大一致的电路板,放出音来,一般人耳朵也不一定听的很准吧.


↑请问这个有什么意义? 既然是M0去做,那么直读直出就好了,还要做处理那M051那里处理得过来? 现在又不是要压缩数据节约空间,根本就不需要这种处理。


比PWM+电阻网络的好处是,1 数值小的输入一定能得到数值小的输出,2 信号连续,而PWM+电阻网络不一定能做好这两点吧.
----其实也许是1点问题,就是电阻网络最小值和PWM最大值的比较的大小和比例问题.



↑完全没有问题,R2R网络做高8bit还是可以做的蛮高精度的,再加上8bitPWM生成低8位。问题是异类的两者如何同步,如果是2个同类分别处理高低8位就不会有太大问题。

出0入12汤圆

发表于 2010-9-28 23:14:01 | 显示全部楼层
回复【119楼】90999  张耀扬
-----------------------------------------------------------------------

我[113]楼已经说过了,不做任何特殊处理-8位的
我想:PWM+电阻网络应该还是有点问题的:
市面上便宜的电阻都是10%的.电阻不会很准.
那么PWM部分线性和电阻网络部分不一定能配合好.
-----------------
另:
以前试验过A率PCM用查表法,得到10位,8K(8.192M晶震),还有8位,22.0xxK,和48K,(12M晶振).音乐格式都是用COOLEDIT转的.好像感觉是用22.xxxK 8位,放音乐就足够好听了,但是不能放说话音,说话音的话,48K 8位采样率,也没有11.0xxK 16位的好听.--有些场合的语音,放出来噪音大.而那个8k 10位的因为采样低,好像也不好听.
还有COOLEDIT 把16位转成8位时,有一个转换选项,加入一定噪音,目的估计还是提升8位的效果,好像试过很多组合,没有一个能同时适应音乐和说话--都不太满意.

出0入0汤圆

发表于 2010-9-28 23:36:43 | 显示全部楼层
回复【17楼】gzhuli 咕唧霖
回复【16楼】roseason  
-----------------------------------------------------------------------
两个8位pwm叠加可以得到16位精度的,这里有篇文章讲怎么用2个8位pwm实现16位dac:点击此处下载  (原文件名:93004di.pdf)  


文章截图 (原文件名:1.png)
-----------------------------------------------------------------------

看了下英文的解释,还是没弄懂下面问题,请教一下
1: R4 R5 R7 C8 加入这部分电路,为什么稳定时间就会减小呢?
2: R1 是如何减少反向器内阻影响的.

出0入0汤圆

 楼主| 发表于 2010-9-29 00:18:35 | 显示全部楼层
总结以下A/U律是问题。

首先,对于数字语音(不是音乐)采用线型8位ADC采样+DAC还原,人们还是感到不能满足(这也就是我本贴提出做16位的播放器原因之一)。

那么为什么不使用12位或更高的16位呢?1。通道太窄。2。有些浪费。因此在语音通信中一个采样点的数据还是采用8位,但不是使用线型ADC,而是对数型的A/U律ADC。

对数型ADC就是对采样点的幅值的离散,不是将256点均匀间隔分布,而是越小信号的地方,分布的间隔越密,越大信号的地方,分布间隔越大。这个是符合人耳的听力另一个特点(与频率无关的分辨律特性)。当人们在安静的背景下,能听到一根针掉在地上,而在嘈杂的环境中,声音强度差一倍,我们并不能区别的出。所以声音的响度通常是用分贝做单位,它实际就是将声音强度(幅值)对数化的表示。

A/U律实际是采用损失大信号的准确度来弥补和增加小信号的不失真。

早期,都是通过比较贵的,专用的8位A/U律芯片做编解码器实现。后来DSP芯片出来,人们开始用DSP来做处理。

用专用的8位A/U律芯片做编解码器实现比较简单,数据本身就是8位,省下的就是传输和保存了。

用DSP处理的方法,通常是先采用12位或更高16位的线型ADC对信号采样(8K),然后在DSP中对这个采样信号再进行A/U律的转换,转换采用与对数曲线近似的13段折线,将12bit值转换成8bit值,这个转换包含了2个意义:1、数据压缩(12bit变成8bit);2、压限(压制大信号变化幅度)。这个数据压缩实际就是让大信号失真大些换来的。只不过人耳不容易察觉到而已。

现在再看回放:
1。将8位的A/U律数据在DSP中做反变换,回到12bit的值,然后用普通12位的DAC放出。
2。使用8位的A/U律解码器,当然这个解码器要有扩展的功能,用于弥补压限的失真。

这些DD只是在数字语音通信中使用,而在其它数字音频中通常是不用的。因为16位的ADC和DAC效果已经远远好于8位的A/U律了,而且不需要繁复的变换,电路上也容易实现。

出0入0汤圆

发表于 2010-9-29 08:11:28 | 显示全部楼层
用PWM实现CD级的音频输出在业界是以很成熟的方案了。
SAMSUNG在几年前就推出商用及的蕊片。PIC32也有PWM输出音频的应用。
不多说请看图:



(原文件名:1.JPG)


(原文件名:2.JPG)


(原文件名:3.JPG)


(原文件名:4.JPG)

出0入85汤圆

发表于 2010-9-29 08:40:29 | 显示全部楼层
楼上的显然对PWM了解的还不多。。

支持24bit 96KHz Sampling Rates的输入,和能还原24bit 96KHz Sampling Rates的信号完全不是一回事

TI的TAS5088A也一样号称支持24bit 192KHz Sampling Rates的IIS输入,但是它的PWM载频只有384KHz。。

想用384KHz的PWM载频去还原24bit 192KHz Sampling Rates的音频信号。。简直是天方夜谭。。。

出0入0汤圆

发表于 2010-9-29 08:57:26 | 显示全部楼层
回复【124楼】roseason  
楼上的显然对pwm了解的还不多。。

支持24bit 96khz sampling rates的输入,和能还原24bit 96khz sampling rates的信号完全不是一回事

ti的tas5088a也一样号称支持24bit 192khz sampling rates的iis输入,但是它的pwm载频只有384khz。。

想用384khz的pwm载频去还原24bit 192khz sampling rates的音频信号。。简直是天方夜谭。。。

-----------------------------------------------------------------------


还原15-16bit的音频信号还是可以的。450KHZ以上的载频明显会导致芯片成本上升。

出0入0汤圆

发表于 2010-9-29 09:46:20 | 显示全部楼层
回复【124楼】 roseason
-------------------------
请问是那只眼看到我有说“支持24bit 96KHz Sampling Rates的输入,和能还原24bit 96KHz Sampling Rates的信号完全是一回事 ”

我是只回复【122楼】==》(这也就是我本贴提出做16位的播放器原因之一)。

出0入618汤圆

发表于 2010-9-29 10:01:40 | 显示全部楼层
回复【123楼】piccode
-----------------------------------------------------------------------

Sigma Delta调制和这里说的PWM调制完全是两回事。

出0入0汤圆

发表于 2010-9-29 10:03:53 | 显示全部楼层
设计一个WAVE播放器,能流畅的播放44.1khz,16位,双通道CD音质的WAV文件。播放的WAV文件在DS/MMC卡上(挑战MP3播放器)。  
基本要求为:
1。MCU通过SPI口读取DS/MMC卡上的文件
2。核心系统成本最优化,只需要一片MCU,和SD卡座(LPF、功放,卡,电源、按键、LED指示等不计成本,这些DD任何播放器都需要),采用PWM方式实现D/A转换,不需要外接D/A电路,成本控制在8元左右。
---------------------------------------------------------------
就成本来说,用PWM比DAC有绝对的优势,并且也能输出“CD 级”音质输出。放44.1khz,16位,双通道CD音质搂主方案可行。

出0入0汤圆

发表于 2010-9-29 12:16:53 | 显示全部楼层
mark~

出0入0汤圆

发表于 2010-9-29 14:18:41 | 显示全部楼层
前面有网友说两个PWM占空比相同时得到的输出不是需要的结果,下面是我的分析,
如果可将PWM输出等效为DAC的话,那么不存在前面说的问题,我分析错了吗?

(原文件名:IMG_1820.jpg)

修改:
但V1=V2时,又确实有Vo=(255V1+V2)/256=v1=v2的结果。
又改:
哦,错了,我们需要的是 Vo = (256*D1+D2)/65536 Vref,而上面是Vo=(255*D1+D2)/65536 Vref

出0入0汤圆

发表于 2010-9-29 14:40:01 | 显示全部楼层
既然上面的分析已经找到错在哪里了。那么在后面用一个加法电路,得到一个

Vo2=Vo+1/256*V1

的信号是否就理论上解决了问题?

出0入618汤圆

发表于 2010-9-29 14:48:55 | 显示全部楼层
回复【130楼】ifree64
如果可将pwm输出等效为dac的话,那么不存在前面说的问题,我分析错了吗?
-----------------------------------------------------------------------

问题是不能将PWM输出等效为DAC,只有经过低通后才能等效为DAC,然而上面提到的理论都是在低通前合成的。
假设前提否定了,后面的推算就全部不成立了。

实际上,V1/V2只有0或Vref两个值,是通过占空比来实现0-Vref之间细分,所以出现一个问题就是V1 = V2时,两个电阻并联,Vo还是等于V1或V2,而不是V1 + 1/256 V2。

不过,节点的电流是可以并联合成的,将你的等式中的V换成I,就成立了。所以两个PWM用比例电阻合成更高精度,还需要一个I-V变换电路。

出0入0汤圆

发表于 2010-9-29 15:22:45 | 显示全部楼层
回复【132楼】gzhuli 咕唧霖
-----------------------------------------------------------------------

我后面发现问题所在了,即便是DAC,用那两个电阻也得不到正确的结果。
因为我们需要的是Vo = VREF * (256*D1+D2)/65536 , 而上面电路的到的结果是
Vo = VREF * (255*D1+D2)/65536而且,通过改变R1、R2的比例也是无法得到需要
的结果的,所以不是在V1=V2时不行,而是所有的V1、V2得到的都不是需要的结果。

我分析中将PWM等效为DAC没有提到滤波是为了简化问题,因为我觉得这个问题在本质上
是如何将两个8位DAC叠加得到一个16位DAC的问题。

出0入0汤圆

发表于 2010-9-29 16:04:34 | 显示全部楼层
回复【130楼】ifree64  
前面有网友说两个pwm占空比相同时得到的输出不是需要的结果,下面是我的分析,
如果可将pwm输出等效为dac的话,那么不存在前面说的问题,我分析错了吗?

 (原文件名:img_1820.jpg) 

修改:
但v1=v2时,又确实有vo=(255v1+v2)/256=v1=v2的结果。
又改:
哦,错了,我们需要的是 vo = (256*d1+d2)/65536 vref,而上面是vo=(255*d1+d2)/65536 vref
-----------------------------------------------------------------------

哥们你 R1=255R2 ?  


vo = vref*(256*d1+d2)/(2^16) ←正确

最开始我已经在24楼说过了,看来大家都只关注LZ的发言了,那我就划水了.........

出0入0汤圆

发表于 2010-9-29 17:27:38 | 显示全部楼层
回复【134楼】90999  张耀扬
-----------------------------------------------------------------------
哥们你 r1=255r2 ?  

-----------------------------------------------------------------------

事实上,设 R2 = xR1,有
Vo = (xD1+D2)/((1+x)256)*Vref
如果要凑分母,x取255,要凑分子x取256,但不管如何都得不到正确的结果。


其实我们想要的不过就是 Vo=V1+V2/256这样一个结果,用一个加法电路不就行了吗?

出0入0汤圆

发表于 2010-9-29 19:55:10 | 显示全部楼层
Vo = (xD1+D2)/((1+x)256)

   = Vref * (xD1+D2) / (256+256x) <-没错啊


2^8 = 256 != 255 !

问题是你为什么要取 x取255 ?

出0入0汤圆

发表于 2010-9-29 21:33:32 | 显示全部楼层
x取255,则分母是 (1+x)*256=(1+255)*256=2^16

出0入0汤圆

发表于 2010-10-11 17:24:52 | 显示全部楼层
http://bbs.mydigit.cn/read.php?tid=193645&page=1
数码之家好像有个比较简单的,用51做的

出0入0汤圆

 楼主| 发表于 2010-10-11 19:43:58 | 显示全部楼层
这个方案不能实现放16位的WAV文件。

出0入0汤圆

发表于 2010-11-13 19:09:26 | 显示全部楼层
回复【27楼】roseason
回复【24楼】90999 张耀扬  
-----------------------------------------------------------------------  
呵呵,楼上可以假设,高8位寄存器和低8位寄存器的值都是8f,即16位的8f8f,这时候的输出应为(8f8f/ffff)*5vref=32639/65536*5=2.4901v  
但是此时电路的输出却是2.5v(不是“约等于”哦。。),这个你做何解释呢?
-----------------------------------------------------------------------

我觉得这里这个问题的来源是关于PWM的满幅度输出是不是100%,即0x00到0xff输出的占空比是多少。一般0x00,都是输出0%,而0xff呢,是255/256还是100%?
即0xff的输出是[100%]还是[255/256],如果是100%则不存在这个问题,因为PWM无法输出精确的50%,0x7f对应的不是精确的50%,而是127/255。
如果0xff的输出是[255/256],那么0x8080对应的才是50% ,而0xffff对应的最大值也不是100%,而是稍微小于100%,即不是5V

出0入0汤圆

发表于 2010-11-13 21:02:10 | 显示全部楼层
赞成马老师的观点,用PWM作为DAC,本身成本低,还容易实现直接数字功放级,效率也比较高。

出0入0汤圆

发表于 2010-11-20 13:19:56 | 显示全部楼层
mark下

出0入0汤圆

发表于 2010-11-20 13:41:17 | 显示全部楼层
回复【140楼】sharpufo  风生水起月皎白


我觉得这里这个问题的来源是关于PWM的满幅度输出是不是100%,即0x00到0xff输出的占空比是多少。一般0x00,都是输出0%,而0xff呢,是255/256还是100%?
即0xff的输出是[100%]还是[255/256],如果是100%则不存在这个问题,因为PWM无法输出精确的50%,0x7f对应的不是精确的50%,而是127/255。
如果0xff的输出是[255/256],那么0x8080对应的才是50% ,而0xffff对应的最大值也不是100%,而是稍微小于100%,即不是5V
-----------------------------------------------------------------------

不知道你们为什么取分母是255。0-255一共256个,那么0= 0%,128=50%,255=99%。有0为何还需要100%? 100%-0% = 1。
当有2个PWM的时候,A负责高八位,B负责低八位,这就可以了。

出0入309汤圆

发表于 2010-11-20 14:18:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-24 17:14:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-24 18:03:01 | 显示全部楼层
不做实际产品的人根本不知道性价比的重要



3块钱IC, OTP,  42M DSP 内核, DAC双通道,带  DAC—PWM AMP,直推喇叭



(原文件名:H61.JPG)

出0入0汤圆

发表于 2010-11-24 19:57:28 | 显示全部楼层
留个名先

出0入0汤圆

发表于 2010-12-1 11:07:03 | 显示全部楼层
站位

出0入0汤圆

发表于 2010-12-1 12:23:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-1 12:46:35 | 显示全部楼层
好东西,记号一个。

出0入0汤圆

发表于 2010-12-1 13:47:32 | 显示全部楼层
不错的东东,mark一下。

出0入0汤圆

 楼主| 发表于 2010-12-1 17:17:31 | 显示全部楼层
回复【146楼】icecoli
不做实际产品的人根本不知道性价比的重要
3块钱ic, otp,  42m dsp 内核, dac双通道,带  dac—pwm amp,直推喇叭


(原文件名:h61.jpg)
引用图片

-----------------------------------------------------------------------

这块芯片我用过,已经有几个产品上用了。不过只是“用”,没有从低层开发,是二次开发的使用。国内有N家小公司靠这片芯片吃饭,但是做的东西不怎样,根本没有发挥此芯片的真正的性能,语音质量不行。

这个芯片有2路16位的DAC的确不错,可是使用上有以下的不足:

1。由于芯片的储存量不是“海量”,所以必须使用压缩格式的WAVE文件,才能保证所谓40秒、80秒的存储量。以下就是由这个关键点造成的。

2。国内的开发人员,实际对压缩和解压的算法并没有深入的研究,算法的实现通常有问题。
3。要在PC上对WAV文件做压缩处理,然后再写到芯片,而且是一次性的。这对于需要更换语音的应用就不方便了。更换语音就以为者原来的系统扔掉。
4。芯片在放语音于前需要做“解压”工作,这个对这块芯片实际是很难做好的,当采样频率比较高,比如22K以上,解压的时间已经跟不上放音的需要了。而22K只是广播级的语音质量
5。合成器只能放点标准的MIDI音乐,PC上做的扩展的midi音乐,在它上面是不能放的。另外人的声音、歌曲等MINI是做不出的,只能做些音乐。

    由于以上几点,尽管这块芯片便宜,但是输出的音质和音乐效果有限,所以只能在什么玩具、电饭锅等低挡应用中使用。稍微高挡的应用(比如公交车车上的报站器---既能报站,还能放各种广告、背静音乐、音频数据需要方便的更换)就不适合了。

    您没有看我LZ位的要求:是达到 44.1k 16位的音质。单靠这块芯片有点危险。

    另外的可能性是使用这块芯片读SD卡,利用它本身的2路16位DAC,是可以做到LZ位的要求的,但要考虑软件空间是否能放下文件系统,以及R芯片内RAM的大小。但我没有找到国内提供开发工具的代理。【146楼】icecoli,你能提供点信息,或提供开发的工具和资料,我可以购买一套玩玩。

出0入0汤圆

发表于 2010-12-9 18:37:05 | 显示全部楼层
mark

一直以为pwm和sigma delta是一回事 1bit dac

出0入0汤圆

 楼主| 发表于 2010-12-29 02:35:20 | 显示全部楼层
本方案已经比较完美的实现了,见http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4476051&bbs_page_no=1&bbs_id=1003

出0入0汤圆

发表于 2010-12-29 08:24:13 | 显示全部楼层
好贴

出0入0汤圆

发表于 2011-2-16 22:34:07 | 显示全部楼层
呵呵,不错,正在用STM8来做。

出0入0汤圆

发表于 2011-6-18 21:11:41 | 显示全部楼层
马克之

出0入0汤圆

发表于 2011-7-16 15:19:42 | 显示全部楼层
强帖,顶起

出0入0汤圆

发表于 2011-7-16 22:26:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-16 23:11:03 | 显示全部楼层
mark..

出0入0汤圆

发表于 2011-8-3 11:01:23 | 显示全部楼层
已经实现了SD卡上FAT文件系播放BMP图片的功能,下个目标是放WAV音乐,但一直在考虑的问题是怎么保证数据不断流,因为我试过将SD卡读写和文件系统做最大的优化读一个扇区也要花1.38ms,这样怎么保证44.1k 8-bit 的速率?

出0入0汤圆

发表于 2011-8-3 11:24:09 | 显示全部楼层
回复【161楼】cocotan_2009
已经实现了sd卡上fat文件系播放bmp图片的功能,下个目标是放wav音乐,但一直在考虑的问题是怎么保证数据不断流,因为我试过将sd卡读写和文件系统做最大的优化读一个扇区也要花1.38ms,这样怎么保证44.1k 8-bit 的速率?
-----------------------------------------------------------------------

如果是8b/44.1k, 2通道的wav, 保证不断流, 播放速率要大于44.1*8*2/8=88.2B/ms, 读一个扇区要1.38ms, 即读文件速度是512B/1.38ms=371B/ms, 读文件速度大于播放速率, 够了. 播放16b/44.1k, 2通道的wav也完全没问题.

出0入0汤圆

发表于 2011-8-3 12:02:08 | 显示全部楼层
我这段时间也在琢磨这个PWM变DA的方法,关注一下

出0入0汤圆

发表于 2011-8-3 12:10:13 | 显示全部楼层
mark~

出0入0汤圆

发表于 2011-8-3 12:29:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-3 12:38:25 | 显示全部楼层
o

出0入0汤圆

发表于 2011-8-5 17:40:28 | 显示全部楼层
回复【162楼】cheungman
-----------------------------------------------------------------------
谢谢你的指正,我今天做出来了,音质还不错。开始想法有误,我一直以为要读完一个扇区512B再去播放,放完了再去读,这样计算的话中间要停1.38ms肯定不行。当时也考虑过开辟一段FIFO一边读一边放,利用中断来更新PWM数据,但又担心中断会冲乱SD卡的操作时序,以为SD卡在读扇区的时候不能被打断。呵呵!!!其实这是错误,的因为和SD卡连结的SPI总线是工作在主机模式下,也就是说在读的过程中被打断了也没关系,进入中断程序后SPI的CLK也是停止的,等忙完了中断回到原来的位置继续读并不能受引响。不过现在我只是播放8BIT 22K的WAV文件,我试了44K但效果差不多,我想主要是PWM的基频有限,20M主频/256=78K左右,基频还不到44K的两倍。再说1.38ms是只读一个扇的时间,不包括文件系所花费的时间。

出0入0汤圆

发表于 2011-9-2 23:52:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-11 08:56:50 | 显示全部楼层
回复【167楼】cocotan_2009
-----------------------------------------------------------------------

512b是MP3

出0入0汤圆

发表于 2011-12-4 14:45:04 | 显示全部楼层
学习!

出0入0汤圆

发表于 2011-12-24 09:12:14 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2012-1-5 11:58:06 | 显示全部楼层
mark

出0入21汤圆

发表于 2012-1-5 12:34:06 | 显示全部楼层
mark,以后再来

出0入0汤圆

发表于 2012-1-5 19:13:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-25 14:27:19 | 显示全部楼层
回复【楼主位】machao
-----------------------------------------------------------------------
马老师请教您个问题,您写的这段话我不太理解重复3-4次这样输出的电压是不是比例不对了啊?

代码充分发挥AVR的性能,尽量提高PWM波的频率(8000000/256
= 31.25KHz),采用将一个数字音频采样点重复3-4次(多次PWM产生同一个音频点)的方

出0入0汤圆

发表于 2012-2-4 11:06:15 | 显示全部楼层
看看我的插卡音箱,我告诉你用3元成本实现的方法。

出0入0汤圆

发表于 2012-2-18 11:47:18 | 显示全部楼层
回复【楼主位】machao
-----------------------------------------------------------------------

马老师:
我尝试用adc 对声卡输出音频8位采样再用pwm回放但是噪声较大(PWM 播放片内8位wav数据没有噪声),请问应该对输入做怎样的处理。

出0入0汤圆

发表于 2012-2-22 00:19:47 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2012-10-19 06:00:01 | 显示全部楼层
machao 发表于 2010-9-27 01:02
回复【43楼】ifree64
回复【4楼】machao   
如果用16位的pwm实现44k的da,那么定时器时钟要达到2884m!

谢谢,这份英文资料很有用

出0入0汤圆

 楼主| 发表于 2012-10-19 21:09:26 | 显示全部楼层
32位MCU的价格和性能越来越好,可惜真正会玩的,并且是玩的好的朋友越来越少。悲哀!

出0入0汤圆

发表于 2012-12-12 16:57:44 | 显示全部楼层
膜拜学习了,pwm&da

出0入0汤圆

发表于 2013-6-17 10:30:32 | 显示全部楼层
单声道还行,两个声道就更麻烦了。

出0入0汤圆

发表于 2013-7-4 08:37:07 | 显示全部楼层
学习了!

出0入0汤圆

 楼主| 发表于 2013-7-6 00:18:28 | 显示全部楼层
sqmm 发表于 2013-6-17 10:30
单声道还行,两个声道就更麻烦了。

AVR的话,M128肯定可以实现。51架构的MCU,STC,10月推出的芯片也可以实现。STM32、M051肯定可以。
基本条件为:有4路8位PWM输出,带SPI硬件接口。系统时钟工作在44100*256 = 11.2896M。SPI的时钟在5M以上。

出0入0汤圆

发表于 2014-5-7 07:00:16 来自手机 | 显示全部楼层
好帖                                    

出0入0汤圆

发表于 2014-5-7 08:29:06 | 显示全部楼层
mark.......

出0入0汤圆

发表于 2015-8-9 23:32:33 | 显示全部楼层

膜拜学习了,pwm&da

出0入0汤圆

发表于 2015-8-12 01:03:26 | 显示全部楼层
这个要mark

出0入0汤圆

发表于 2018-5-25 12:01:01 | 显示全部楼层
谢谢!留着怀疑,回去研究一下。。。

出0入0汤圆

发表于 2019-4-12 12:00:38 | 显示全部楼层
又是一座古坟贴
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 14:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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