使用attiny85的pwm播放音频

问题描述 投票:0回答:3

我试图了解如何在attiny85上从头开始实现音频播放。目标是从代表以固定间隔采样的音频信号强度的数组中播放短声(猫叫,所以我希望它保持可识别性)。

据我了解,信号强度线性映射到模拟音频信号的电压。据我所知,声卡是数模转换器,但attiny85可能没有。

我很好奇是否可以使用 pwm 来播放声音。由于 pwm 通过改变信号交替高低相位的占空比来改变平均电压,因此很可能会导致音频质量下降。根据 google 的说法,Wav 采样率可以在 1 HZ 和 4.3 GHz 之间变化。 Attiny85 具有频率高达 8MHz 的内部时钟(我希望它的 pwm 发生器是相同的)。

考虑重新配置计时器和 pwm 设置以及数组中的循环,我可以可靠播放的音频的最大采样率是多少?我应该尝试用 pwm 来做到这一点,还是有更好的选择?

audio microcontroller pwm
3个回答
1
投票

给定 8 MHz 的系统时钟,您可以使用 PWM 生成单声道(单通道)音频。

考虑 1000 个时钟的 PWM 周期,为您提供大约 10 位分辨率。那么采样率将为 8000 Hz,这将为您提供某种低保真音频。

如果将信号分辨率降低到 8 位,您将获得 8 MHz / 28 = 31.25 kHz 采样率。这接近高保真音响。

将采样输出与 PWM 发生器同步,并使用适当的模拟滤波器。


很多年前,我构建了一个采样率为 8 kHz 和 8 位样本的数字门铃。它播放的声音质量与电话一样好。该微控制器是 8051 的衍生产品,它使用 R-2R 梯形作为 DAC。


1
投票

可以通过使用 50% PWM 信号并改变频率来生成简单正弦波。考虑到扬声器的一些过滤效果,它会模仿单音音频信号。

制作更高级的音调(自然声音所需的)很快就会变得更加复杂,信号的占空比也可以用来欺骗人耳听到谐波。查看 arduino 函数 tone() 以获得一些灵感。

将小扬声器连接到Arduino时要小心,最好在Arduino和扬声器之间放置晶体管/缓冲器/小型放大器。


0
投票

我尝试使用 Arduino Uno 使用 Attiny85 生成音乐一年多,但没有成功。 Instructables 网站有一张播放音乐的贺卡,我可以告诉你 &其他人尝试制作贺卡但没有成功。我确实看到它是用 PIC 微控制器 8 针浸入编程完成的,然后仅使用 3.7v 电池和 8 欧姆扬声器和微芯片 pic 的 8 针浸入单独运行,所以这是可能的。

© www.soinside.com 2019 - 2024. All rights reserved.