最近想整理一下割草机里面所设计到的小技术,先大体了解下它的整体框架,它以FPGA为核心,两个PIC对传感器的数据进行处理,然后通过串口发送给FPGA数据。在FPGA中,Nios处理器添加必要的中断,捕捉传感器信号,进行简单的防卫功能。
今天想对车子上的声音控制做一个总结,声音是通过PWM来控制的,PWM的频率能变化出不同的音调,音节的长短,可以通过定时器来控制,当选择好一个音节后,音节响的过程中是不占用处理器的。
软核部分:
1、在SOPC Builder中添加PWM,
这里我只是针对声音的控制,还有的模块添加没有说明,当一切都添加完后,对Nios处理器进行编译,我们就能得到最终的模块,如下图,
2、在SOPC Builder中添加定时器,
编译好后,在NIOS II IDE中的system.h中会生成如下内容:
他们对应先前添加的2个模块,在后面的代码中会用到他们的基地址PWM_SPEAKER_BASE和TIMER_2_MS_BASE。
软件部分:
下面首先是准备音乐的前期工作,定义好它的音调与音调长度(说的有点不专业啊- -!)
音调定义:
音调长度定义:
歌谱:
从网上找了2个家喻户晓的曲子,一首是欢乐颂,一首是茉莉花,根据感觉用上面的音调和音调长度谱了下面2首:
注:数组的结构是:一个音调和一个节拍相间隔,数字越大,节拍越短。
下面就是代码的主体部分,音乐的接口函数:
注:
第8行:变量Music_Replay是控制音乐循环播放的次数,默认是播放1遍;
第24~26行:对音调处理,然后通过PWM表现,初始并且使能它;
第29~34行:将定时器的时间设置成节拍的时间长度值,最后使能定时器。
对定时器的控制,先是初始化:
然后是定时器中断函数的编写:
注:
第6~10行是对播放次数的分析;下面的基本同于上面一个函数。
最后当然是测试音乐的效果了,
调用函数music(MUSIC_9_3);则播放欢乐颂;
调用函数music(MUSIC_9_4);则播放茉莉花;如果想循环播放3遍,则调用函数music(MUSIC_9_4|0x300);
(MUSIC_9_3、MUSIC_9_4是定义的宏,没写出)听起来效果还不错哦。这次就先写到这里吧,就当要写论文前的小练笔吧,写作水平还有待于提高啊。呵呵。