guanxihui 发表于 2011-5-6 18:21:15

STM32通过PWM模拟DAC输出16位,44.1KHz的声音,定时频率44.1K,PWM频率282.35K,低通滤波及

STM32通过PWM模拟DAC输出16位,44.1KHz的声音,定时频率44.1K,PWM频率282.35K,低通滤波及功放该怎么做?在网上看到很多人用音频DAC+功放+低通滤波做,这个低通滤波跟PWM的低通滤波是不是一样?目前已调好文件系统,PWM及定时中断,直接接耳机可听到声音,但噪音实在太大,无任何实用意义。我希望能做成便携式,用锂电池供电,耳机收听,音质不用很好,达到MP3的水平就可以。
另外再请教下,PWM频率跟定时频率及WAV的采样率有什么关系,我的理解是44.1KHz的采样率,即定时频率也应该是44.1KHz,那么PWM的频率应该多少才合适?我改变PWM的频率只会影响声音音量的大小,其他的好像没多大影响。
参考马老师的简易的WAVE播放器的设计与实现一文,里面有“把这些数据让单片机以 8K 速率通过 DAC 输出,就可以得到还原的模拟音频信号了。”
还有“这里采用 PWM 方式实现 DAC的转换,由于 PWM 的频率为8KHz,因此PWM 的输出信号中包含许多大于 8K的高频信号成分(噪声)。”
搞不懂是定时频率8K,还是PWM频率8K。我对音响一晓不通,请高手指教。

guanxihui 发表于 2011-5-7 09:21:31

唉,没人回复,为了更好地提问题,做个简单的调查,路过的朋友们,你是属于以下哪种情况?
1:这种简单的问题,不屑于回答,自己查书去
2:同问,我也想知道
3:我不是高手,还是让高手回答吧
4:对这问题没研究,不发表意见
5:对这方面问题没兴趣
6:不明白想问什么问题,请说清楚一点
7:我上来查资料的,很忙,没时间回复

gx_huang 发表于 2011-5-7 10:13:07

普通的DAC是44.1KHz输出一个值。
如果用PWM模拟,起码要乘16吧?PWM输出要加滤波才能作为DAC使用。
不过我用8KHz的PWM输出DTMF信号,后面加4KHz的低通滤波器,也可以用。
作为音响,要求肯定要高才可以。

也可以参考D类放大器,内部的PWM开关频率也是接近MHz级别的。

htjgdw 发表于 2011-5-7 10:24:05

别费这功夫了,如果你用的是STM32F103ZET6可以直接接一个I2S接口的audio codec做音频输出,设好回放频率,把数据发过去就可以了

wshtyr 发表于 2011-5-7 10:59:44

如果是DAC,数据更新频率设成44.1kHz就行了;如果是用PWM,区别就大了。

要16位精度,就有65536个数值,PWM就要65536级,从0/65535到65535/65535。这就意味着在1/44100秒内,定时器至少要输出一次完整的65536级的PWM,那么定时器计数速率要达到1/((1/44100)/65536))=44.1k*65536=2890.1376MHz,STM32是无法达到的。

如果只要8位精度,定时器计数速率就只要44.1k*256=11.2896MHz,STM32可以轻松达到。

最好的方法是使用STM32的DAC。

以上仅供参考。

youz 发表于 2011-5-11 09:29:57

用PWM我理解是定时频率44.1k ,PWM频率高于44.1kHz*2

以前用51做过一个类似的 最高双声道24kHz音频 8位PWM输出 音质和一般收音机差不多

ldhavr 发表于 2013-11-28 14:29:43

guanxihui 发表于 2011-5-7 09:21
唉,没人回复,为了更好地提问题,做个简单的调查,路过的朋友们,你是属于以下哪种情况?
1:这种简单的问 ...

请教如何用用stm8
的PWM输出DTMF信号

jansion1 发表于 2014-8-17 18:25:53

guanxihui 发表于 2011-5-7 09:21
唉,没人回复,为了更好地提问题,做个简单的调查,路过的朋友们,你是属于以下哪种情况?
1:这种简单的问 ...

您好师兄 请问你做DTMF时输出的770的频率其幅值能达到多大? 请问您做过亚音吗? 我是新人 现在在用PWM模拟dac做亚音 由于亚音频率太低了,低通之后输出来的波形幅值很小只有100mv而且示波器还分辨不出频率大小。请问您用pwm做过亚音吗? 做亚音跟做DTMF原理是不是不一样。比如我要发一个67Hz的亚音。我的TIM1的ARR = 255,占空比可变。我用timer7去控制采样频率(每隔多长时间送一个点)这样我的定时为1/(67 * 512)(因为我有512个点为一个周期)。是这样发的吗?由于项目紧急 请您点拨一下 谢谢!

jansion1 发表于 2014-8-17 18:26:25

ldhavr 发表于 2013-11-28 14:29
请教如何用用stm8
的PWM输出DTMF信号

您好师兄 请问你做DTMF时输出的770的频率其幅值能达到多大? 请问您做过亚音吗? 我是新人 现在在用PWM模拟dac做亚音 由于亚音频率太低了,低通之后输出来的波形幅值很小只有100mv而且示波器还分辨不出频率大小。请问您用pwm做过亚音吗? 做亚音跟做DTMF原理是不是不一样。比如我要发一个67Hz的亚音。我的TIM1的ARR = 255,占空比可变。我用timer7去控制采样频率(每隔多长时间送一个点)这样我的定时为1/(67 * 512)(因为我有512个点为一个周期)。是这样发的吗?由于项目紧急 请您点拨一下 谢谢!

zxd08 发表于 2014-11-7 11:17:01

STM32最高是72M的频率,72M/256=281.25K,72M/65536=1.09所以STM32只能做8位的PWM语音
页: [1]
查看完整版本: STM32通过PWM模拟DAC输出16位,44.1KHz的声音,定时频率44.1K,PWM频率282.35K,低通滤波及