資源描述:
《五邑大學(xué)sopc實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、成繢指導(dǎo)教師U期張欲奕2015-6-29實(shí)驗(yàn)三:基于自定義PWM的樂(lè)曲演奏實(shí)驗(yàn)二、實(shí)驗(yàn)要求1、理解PWM設(shè)計(jì)原理2、設(shè)計(jì)PWM自定義組件3、利用SOPCBuilder構(gòu)建樂(lè)曲演奏電路的微處理器系統(tǒng)4、構(gòu)建硬件設(shè)計(jì)電路5、編寫樂(lè)曲C語(yǔ)言程序6、用niosll軟件下載程序,調(diào)試三、實(shí)驗(yàn)原理1、PWM的基本原理PWM即脈沖寬度調(diào)制,是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。脈沖寬度調(diào)制(PWM)是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具
2、體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),耍么完全無(wú)(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即是直流供電被加到負(fù)載上的時(shí)候,斷的吋候即是供電被斷開(kāi)的吋候。只要帶寬足夠,任何模擬值都可以使用PWM進(jìn)行編碼。多數(shù)負(fù)載(無(wú)論是電感性負(fù)載還是電容性負(fù)載)需要的調(diào)制頻率高于10Hz,通常調(diào)制頻率為1kHz到200kHz之間。2、樂(lè)曲演奏原理用niosll軟件控制組件,實(shí)現(xiàn)PWM控制蜂嗚器的輸入
3、信號(hào)的頻率,改變蜂鳴器鳴叫的咅的長(zhǎng)短、響度等。3、樂(lè)曲演奏電路的微處理器系統(tǒng)RAM微處理系統(tǒng)如圖1所示:NiosllAVALONMMPWMJtagUartsysidCYCLONEIIDE270IV-?鳴1■?蜂圖Z樂(lè)曲演奏電路的微處理器系統(tǒng)實(shí)驗(yàn)過(guò)程1、用HDL設(shè)計(jì)帶avalonslave接口的PWM控制器PWM自定義組件的設(shè)計(jì),如下:1)elk:PWM輸入時(shí)鐘;2)reset:PWM復(fù)位信號(hào);3)chipselect:PWM使能信號(hào);4)address:PWM寄存器地址信號(hào);5)write:PWM寫信號(hào);6
4、)writedata:PWM寫數(shù)據(jù);7)read:PWM讀信號(hào);8)byteenable:字節(jié)使能信號(hào);9)readdata:PWM讀出數(shù)據(jù);10)PWM_out:PWM輸出信號(hào)。程序如下:modulemypwm(clk,reset_n,chipselect,address,write,writedata,read,readdata,byteenable,pwm_out);inputelk;inputreset_n;inputchipselect;inputwrite;inputread;input[31:
5、0]writedata;output[31:0]readdata;input[3:0]byteenable;input[l:O]address;outputpwm_out;reg[31:0]clock_divide_reg;//PWM輸出一個(gè)周期屮包禽的吋鐘周期數(shù)reg[31:0]duty_cycle_reg;regcontrol_reg;regclock_divide_reg_selected;regduty_cyc1e_reg_seIected;regcontrol_reg_selected;reg
6、3
7、1:0
8、pwm_counter;//PWM計(jì)數(shù)值reg[31:0]readdata;regpwm_out;wirepwm_enable;//addressdecodealways@(address)beginclock_divide_reg_seIected=0;duty_cycle_reg_selected=O;control_reg_selected=0;case(address)O:clock_divide_reg_selected=l;1:duty_cycle_reg_selected=1;2:co
9、ntrol_reg_selected=l;default:beginclock_divide_reg_selected=0;duty_cyc!e_reg_seIected=O;control_reg_selected=0;endendcaseend//寫PWM輸出周期的吋鐘數(shù)寄存器always@(posedgeelkornegedgereset一n)beginif(!reset_n)beginclock_divide_reg=0;endelsebeginif(write&chipselect&clock_d
10、ivide_reg_selected)beginif(byteenable[O])clock_divide_reg[7:0]=writedata[7:0];if(byteenable[1])clock_divide_reg[15:8]=writedata[15:8];if(byteenable[2])clock_divide_reg[23:16]=writedata[23:16];if(byteenable[3]