格式:PDF ? 页数:27页 ? 上传日期: 20:24:15 ? 浏览次数:140 ? ? 2500积分 ? ? 用稻壳阅读器打开
全文阅读已结束如果下载本文需要使用
格式:PDF ? 页数:94页 ? 上传日期: 10:13:31 ? 浏览次数:13 ? ? 100积分 ? ? 用稻壳阅读器打开
全文阅读已结束如果下载本文需要使用
PWM除了可驱动电机外还可以设置鈈同频率以模拟不同音阶的音符输出,实际测试发现声音还是蛮动听的,不过常见的有源蜂鸣器可不行(红牛开发板自带)需要专门采购无源蜂鸣器,这二者的区别是有源蜂鸣器通电就响而无源蜂鸣器需要输入一定频率的信号才能发声。
我们采用Timer3作为PWM的输出源我们計数固定为为36,占空比也固定为1/2通过分频系数来设定相对应的PWM输出频率。
底层代码如下由于官方无PWM驱动模板,如下函数由我自行定义
音符频率对应表如下,根据这个我们通过PWM就可以输出不同音阶的音符:
"#"表示半音,用于上升或下降半个音,乘以二就提升该声音一个八喥音阶减半则降一个八度。
考虑到IO的驱动能力所以添加一个NPN三极管作为放大输出(实际测试,效果不太明显和直接驱动差别不大),原理图如下:
相关的实际器件有如下几种:
实际的物理接线图如下:
(直接连接和三极管放大连接)
为了便于应用程序访问我封装了┅个Music库,相关声明如下:
Play(uint addr, uint size)函数是播放WAV文件用的不过目前我还没有调试成功,等成功了在进行相关说明
我们以实际的例子,来说明Play(ushort[] buff)和Sound的使用我们编写一个最简单的曲子,就是两只老虎其简谱如下:
数据成对出现,第一个是音符第二是节拍的长度。
好了让我们播放┅下,播放代码如下很简单,就一句
再来看看Sound函数的使用,参数很简单第一个是发声频率,第二个是持续时间示例如下:
OK,有兴趣并且对谱子有研究的网友,可以多编码一些好听的曲子记得到时候一定与我们分享一下。