C语言sopc蜂鸣器按键弹奏中音,五邑大学sopc实验报告:基于自定义PWM的乐曲演奏实验.doc...

五邑大学sopc实验报告:基于自定义PWM的乐曲演奏实验.doc

成绩 指导教师 日期张歆奕 2015-6-29实验三基于自定义 PWM 的乐曲演奏实验二、实验要求1、理解 PWM 设计原理2、设计 PWM 自定义组件3、利用 SOPC Builder 构建乐曲演奏电路的微处理器系统4、构建硬件设计电路5、编写乐曲 C 语言程序6、用 niosII 软件下载程序,调试 3、实验原理1、PWM 的基本原理PWM 即脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有ON,要么完全无OFF。电压或电流源是以一种通ON或断OFF的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。 多数负载无论是电感性负载还是电容性负载需要的调制频率高于 10Hz,通常调制频率为 1kHz 到 200kHz 之间。2、乐曲演奏原理用 niosII 软件控制组件,实现 PWM 控制蜂鸣器的输入信号的频率,改变蜂鸣 器鸣叫的音的长短、响度等。3、乐曲演奏电路的微处理器系统微处理系统如图 1 所示NiosllLLRAMAVALON_MMCYCLONEIIDE2_70蜂鸣器 图 1 乐曲演奏电路的微处理器系统 四、实验过程 1、用 HDL 设计带 avalon slave 接口的 PWM 控制器PWM 自定义组件的设计,如下1)clkPWM 输入时钟;2)resetPWM 复位信号;3)chipselect PWM 使能信号;4)addressPWM 寄存器地址信号;5)writePWM 写信号;6)writedata PWM 写数据;7)read PWM 读信号;8)byteenable字节使能信号;9)readdata PWM 读出数据;10) PWM_outPWM 输出信号。程序如下module mypwmclk,reset_n,chipselect,address,write,writedata,read,readdata,byteenable,pwm_out; clk; reset_n; chipselect; write; read;310 writedata;output310 readdata;30 byteenable;10 address;output pwm_out;reg310 clock_divide_reg;PWM 输出一个周期中包含的时钟周期数PWMLLJtag Uart sysidLLreg310 duty_cycle_reg;reg control_reg;reg clock_divide_reg_selected;reg duty_cycle_reg_selected;reg control_reg_selected;reg310 pwm_counter;PWM 计数值reg310 readdata;reg pwm_out;wire pwm_enable;address decodealwaysaddressbeginclock_divide_reg_selected0;duty_cycle_reg_selected0;control_reg_selected0;caseaddress0clock_divide_reg_selected1;1duty_cycle_reg_selected1;2control_reg_selected1;defaultbeginclock_divide_reg_selected0;duty_cycle_reg_selected0;control_reg_selected0;endendcaseend写 PWM 输出周期的时钟数寄存器alwaysposedge clk or negedge reset_nbeginifreset_nbeginclock_divide_reg0;endelse beginifwrite ifbyteenable1 clock_divide_reg158writedata158;ifbyteenable2 clock_divide_reg2316writedata2316;ifbyteenable3 clock_divide_reg3124writedata3124;endendend写 PWM 周期占空比寄存器alwaysposedge clk or negedge reset_nbeginifreset_nbeginduty_cycle_reg0;endelse beginifwrite ifbyteenable1 duty_cycle_reg158writedata158;ifbyteenable2 duty_cycle_reg2316writedata2316;ifbyteenable3 duty_cycle_reg3124writedata3124;endendendalwaysposedge clk or negedge reset_n写控制寄存器beginifreset_nbegincontrol_reg0;endelse beginifwrite endendend读寄存器alwaysaddress or read or duty_cycle_reg or control_reg or clock_divide_regbeginifread 当 PWM 计数值大于或等于 PWM 输出一个周期中包含的时钟周期数时,计数值为 0else pwm_counterpwm_counter1;endelse pwm_counter0;endendalwaysposedge clk or negedge reset_nbeginifreset_n pwm_out1b0;else beginifpwm_enablebeginifpwm_counter 头文件define f 1000000define rhythm 5000000define ff f*50define _1 rhythm*4define _1d rhythm*6define _2 rhythm*2define _2d rhythm*3define _4 rhythm*1define _4d rhythm*3/2define _8 rhythm*1/2define _8d rhythm*3/4define _16 rhythm*1/4define _16d rhythm*3/8define _32 rhythm*1/8 定义音长define _1do ff/131/2define _1dor ff/139/2define _1re ff/147/2define _1rer ff/155/2define _1mi ff/165/2define _1fa ff/175/2define _1far ff/185/2define _1sol ff/196/2define _1solr ff/207/2define _1la ff/220/2define _1lar ff/233/2define _1si ff/247/2 宏定义低音define _do ff/262/2define _dor ff/277/2define _re ff/294/2define _rer ff/311/2define _mi ff/330/2define _fa ff/349/2define _far ff/370/2define _sol ff/392/2define _solr ff/416/2define _la ff/440/2define _lar ff/466/2define _si ff/492/2 宏定义中音define _do1 ff/523/2define _do1r ff/554/2define _re1 ff/579/2define _re1r ff/740/2define _mi1 ff/651/2define _fa1 ff/695/2define _fa1r ff/740/2define _sol1 ff/784/2define _sol1r ff/830/2define _la1 ff/880/2define _la1r ff/932/2define _si1 ff/983/2 宏定义高音define song_size 50 定义曲长define mutetone tone3 定义弱音define loudtone tone2 定义强音int little_starsong_size3_do,_4,loud_do, 1_do,_4,mute_do, 1_sol,_4,mute_sol, 5_sol,_4,mute_sol, 5_la,_4,mute_la, 6_la,_4,mute_la, 6_sol,_2,mute_sol, 5_fa,_4,loud_fa, 4_fa,_4,mute_fa, 4_mi,_4,mute_mi, 3_1mi,_8,mute_1mi, 3_1mi,_8,mute_1mi, 3_re,_4,mute_re, 2_re,_4,mute_re, 2_do,_2,loud_do, 1_sol,_4,loud_sol, 5_sol,_4,mute_sol, 5_fa,_4,mute_fa, 4_fa,_4,mute_fa, 4_mi,_4,mute_mi, 3_mi,_4,mute_mi, 3_re,_2,mute_re, 2_sol,_4,mute_sol, 5_sol,_4,mute_sol, 5_fa,_4,loud_fa, 4_fa,_4,mute_fa, 4_mi,_4,mute_mi, 3_mi,_4,mute_mi, 3_re,_2,mute_re, 2_do,_4,loud_do, 1_do,_4,mute_do, 1_sol,_4,mute_sol, 5_sol,_4,mute_sol, 5_la,_4,mute_la, 6_la,_4,mute_la, 6_sol,_2,mute_sol, 5_fa,_4,mute_fa, 4_fa,_4,mute_fa, 4_mi,_4,loud_mi, 3_1mi,_8,mute_1mi, 3_1mi,_8,mute_1mi, 3_re,_4,mute_re, 2_re,_4,mute_re, 2_do,_2,mute_do, 1;延时函数(延时时间为22*ius)void delayalt_u32 cnt 延时函数alt_u32 i 0;whilei cnti;int main 主函数int i;while1fori0;isong_size;iIOWRMYPWM_0_BASE,2,1; 打开 PWM 端口IOWRMYPWM_0_BASE,0, little_stari0; 读取声调IOWRMYPWM_0_BASE,1, little_stari2; 读取音强delay little_stari1; 延时音拍IOWRMYPWM_0_BASE,2,0; 关闭 PWM 输出端口delay500000;100msreturn 0; 六、思考题1、有源蜂鸣器和无源蜂鸣器的区别答蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种有源蜂鸣器内置振荡电路,直接加电源就可以正常发声,通常频率固定。 无源蜂鸣器则需要通过外部的正弦或方波信号驱动,直接加电源只能发出很轻微的振动声。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值