gpt4 book ai didi

c - 使用 PIC32 微 Controller 上的扬声器生成 PWM 信号音

转载 作者:行者123 更新时间:2023-11-30 17:08:02 24 4
gpt4 key购买 nike

我目前正在努力在 PIC32 器件上生成提示音。我找到的信息还不足以让我完全了解如何实现这一目标。据我了解,PWM 信号以指定的占空比和频率发送 1 和 0,这样就可以使某些物体以特定的速度旋转。但仅仅产生音调还不够。我主要关注以下两个链接来创建代码:

http://umassamherstm5.org/tech-tutorials/pic32-tutorials/pic32mx220-tutorials/pwm http://www.mikroe.com/chapters/view/54/chapter-6-output-compare-module/#ch6.4

还有引用手册中的相关部分。

其中一个链接指出,要播放音频,必须使用计时器中断。这些应该怎么用呢?是否有必要使用例如正弦函数来计算波形的值,然后将其与定时器中断结合起来以定义每个中断标志后的占空比?

最终结果将是一个响应按钮按下并播放声音的程序。如果需要低通滤波器,也将实现该滤波器。

最佳答案

如果您使用 PWM 来模拟 DAC 并输出任意音频(对于给定频率的简单而肮脏的音调,您不需要这种复杂性),您需要获取音频样本 (PCM) 并将它们分别转换进入各自的工作周期。

合理的音频始于 8KHz (POTS) 的采样率。因此,对于每个(每 1/8000 秒)样本,您都需要更改占空比。并且您希望这些变化是有规律的,因为不规则性会导致声音失真。因此,您可以对定时器进行编程,以 8KHz 速率生成中断,并在 ISR 中根据新的音频样本值更改占空比(此 ISR 必须从内存中读取样本,除非它们形成简单的模式并且可以在飞)。

当您以 8KHz 的速率更改占空比时,您会生成频率为 4KHz 的周期波。这很好听。在模拟电路中对其进行良好过滤而不影响您想听到的声音可能不是一件容易的事情(尖锐的 LPF 滤波器很棘手/昂贵,廉价的滤波器很差)。相反,您可以将采样率提高到扬声器可以产生的两倍以上(或人耳可以听到的频率),或者至少远高于您想要产生的最大频率(在后一种情况下,廉价的模拟滤波器可以帮助消除不需要的周期波对您想听到的声音没有太大影响,您在这里不需要太多的清晰度)。

请注意,如果采样率高于音频文件的采样率,您将需要合适的上采样器/采样率转换器。另请记住,提高采样率会提高 CPU 利用率(ISR 每秒调用更多次,加上采样率转换,除非您的音频已预先转换)和功耗。

[我之前曾在我的 PC 扬声器上做过此操作,但现在由于 BIOS 和芯片组使用的 SMM/SMI 而被毁了。]

关于c - 使用 PIC32 微 Controller 上的扬声器生成 PWM 信号音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com