我目前正在在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
以及引用手册中的相关部分。
其中一个链接指出要播放音频,必须使用计时器中断。应该如何使用这些?是否有必要使用例如正弦函数来计算wave的值,然后将其与定时器中断结合起来以在每个中断标志之后定义占空比?
最终结果将是一个程序,该程序响应按钮的按下并播放声音。如果需要低通滤波器,则也将实现。
最佳答案
如果您使用PWM模拟DAC并输出任意音频(对于给定频率的简单且肮脏的音调,则不需要这种复杂性),则需要获取音频样本(PCM)并将其分别转换为相应的音频占空比。
合理的音频始于8KHz(POTS)的采样率。因此,对于每个样本(每1/8000秒),您都需要更改占空比。而且您希望这些更改是规则的,因为不规则会导致听觉失真。因此,您可以对计时器进行编程,以8KHz的速率生成中断,并在ISR中根据新的音频样本值更改占空比(此ISR必须从内存中读取样本,除非它们形成简单的模式并且可以在飞)。
当您以8KHz的速率更改占空比时,会以4KHz的频率生成一个周期波。这是很好听的。在模拟电路中对其进行很好的滤波而不影响您想要听到的声音可能不是一件容易的事(锋利的LPF滤波器比较棘手/昂贵,廉价的滤波器比较差)。取而代之的是,您可以将采样率提高到扬声器可以产生的两倍(或人耳可以听到的)或至少远高于您想要产生的最大频率(在后一种情况下,便宜的模拟滤波器可以帮助消除噪声)。不需要的周期性波,而对您想要听到的声音影响不大,这里不需要那么尖锐度)。
请注意,如果采样率高于音频文件的采样率,则需要适当的上采样器/采样率转换器。还要记住,提高采样率将提高CPU利用率(每秒调用ISR的次数更多,加上采样率转换,除非音频已预先转换)和功耗。
[我以前在PC的扬声器上完成过此操作,但是由于BIOS和芯片组使用的SMM / SMI,现在已经毁了。]
关于c - 产生带有PWM信号的音调给PIC32微 Controller 上的扬声器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33853714/