DSP技術(shù)與應(yīng)用實(shí)驗(yàn)報(bào)告.docx_第1頁(yè)
DSP技術(shù)與應(yīng)用實(shí)驗(yàn)報(bào)告.docx_第2頁(yè)
DSP技術(shù)與應(yīng)用實(shí)驗(yàn)報(bào)告.docx_第3頁(yè)
DSP技術(shù)與應(yīng)用實(shí)驗(yàn)報(bào)告.docx_第4頁(yè)
DSP技術(shù)與應(yīng)用實(shí)驗(yàn)報(bào)告.docx_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

DSP實(shí)驗(yàn)報(bào)告姓 名: 年 級(jí): 專 業(yè): 學(xué) 號(hào): 任課教師: 目 錄實(shí)驗(yàn)一、CCS入門(mén)實(shí)驗(yàn)實(shí)驗(yàn)二、編寫(xiě)一個(gè)以C語(yǔ)言為基礎(chǔ)的DSP程序?qū)嶒?yàn)三、異步串口通信實(shí)驗(yàn)四、A/D及D/A轉(zhuǎn)換實(shí)驗(yàn)五、PID算法控制實(shí)驗(yàn)實(shí)驗(yàn)六、快速傅里葉變換(FFT)算法實(shí)驗(yàn)一、CCS入門(mén)實(shí)驗(yàn)實(shí)驗(yàn)課程: DSP實(shí)驗(yàn) 實(shí)驗(yàn)題目: CCS入門(mén)實(shí)驗(yàn) 實(shí)驗(yàn)日期: 2013年 12 月 3 日 姓名: 學(xué)號(hào): Project/new;輸入:volume,按Finish;Project/add files to project;查找范圍:C:CCStudio_v3.3tutorialdsk2812volume1;文件類(lèi)型:all files;分別添加:Volume.c、Load.asm、Vectors.asm、Volume.cmd;在C:CCStudio_v3.3C2000cgtoolslib中添加:rts2800_ml.lib;將C:CCStudio_v3.3tutorialdsk2812volume1 volume.h復(fù)制到:C:CCStudio_v3.3C2000cgtoolsinclude文件夾中;Project/rebuild all;File/load program;打開(kāi)C:CCStudio_v3.3MyProjectsvolumeDebugvolume.out;鼠標(biāo)雙擊:volume.c,找到dataIO(),右擊,運(yùn)行toggle software breakpoint;File/data,查找范圍:C:CCStudio_v3.3tutorialdsk2812volume1;文件類(lèi)型:all files,打開(kāi):sina.dat,輸入:0x8000、0x2000;View/memory,0x8000;View/graph/timefrequency;如下圖波形:頻譜 實(shí)驗(yàn)二、編寫(xiě)一個(gè)以C語(yǔ)言為基礎(chǔ)的DSP程序?qū)嶒?yàn)課程: DSP實(shí)驗(yàn) 實(shí)驗(yàn)題目: 編寫(xiě)一個(gè)以C語(yǔ)言為基礎(chǔ)的DSP程序 實(shí)驗(yàn)日期: 2013年 12 月 3 日 姓名: 學(xué)號(hào): 一實(shí)驗(yàn)?zāi)康?1學(xué)習(xí)用標(biāo)準(zhǔn)C語(yǔ)言編制程序;了解常用的C語(yǔ)言程序設(shè)計(jì)方法和組成部分。 2學(xué)習(xí)編制連接命令文件,并用來(lái)控制代碼的連接。 3學(xué)會(huì)建立和改變map文件,以及利用它觀察DSP內(nèi)存使用情況的方法。 4熟悉使用軟件仿真方式調(diào)試程序。 二實(shí)驗(yàn)原理 1 標(biāo)準(zhǔn)C語(yǔ)言程序 CCS支持使用標(biāo)準(zhǔn)C語(yǔ)言開(kāi)發(fā)DSP應(yīng)用程序。當(dāng)使用標(biāo)準(zhǔn)C語(yǔ)言編制的程序時(shí),其源 程序文件名的后綴應(yīng)為.c(如:volume.c)。 CCS在編譯標(biāo)準(zhǔn)C語(yǔ)言程序時(shí),首先將其編譯成相應(yīng)匯編語(yǔ)言程序,再進(jìn)一步編譯成目 標(biāo)DSP的可執(zhí)行代碼。最后生成的是coff格式的可下載到DSP中運(yùn)行的文件,其文件名后 綴為.out。 由于使用C語(yǔ)言編制程序,其中調(diào)用的標(biāo)準(zhǔn)C的庫(kù)函數(shù)由專門(mén)的庫(kù)提供,在編譯連接時(shí) 編譯系統(tǒng)還負(fù)責(zé)構(gòu)建C運(yùn)行環(huán)境。所以用戶工程中需要注明使用C的支持庫(kù)。 2 命令文件的作用 命令文件(文件名后綴為cmd)為鏈接程序提供程序和數(shù)據(jù)在具體DSP硬件中的位置分配 信息。通過(guò)編制命令文件,我們可以將某些特定的數(shù)據(jù)或程序按照我們的意圖放置在DSP 所管理的內(nèi)存中。命令文件也為鏈接程序提供了DSP外擴(kuò)存儲(chǔ)器的描述。在程序中使用CMD 文件描述硬件存儲(chǔ)區(qū),可以只說(shuō)明使用部分,但只要是說(shuō)明的,必須和硬件匹配,也就是只 要說(shuō)明的存儲(chǔ)區(qū)必須是存在的和可用的。 3 內(nèi)存映射(map)文件的作用 一般地,我們?cè)O(shè)計(jì)、開(kāi)發(fā)的DSP程序在調(diào)試好后,要固化到系統(tǒng)的ROM中。為了更 精確地使用ROM空間,我們就需要知道程序的大小和位置,通過(guò)建立目標(biāo)程序的map文件可以了解DSP代碼的確切信息。當(dāng)需要更改程序和數(shù)據(jù)的大小和位置時(shí),就要適當(dāng)修改cmd文件和源程序,再重新生成map文件來(lái)觀察結(jié)果。另外,通過(guò)觀察map文件,可以掌握DSP存儲(chǔ)器的使用和利用情況,以便進(jìn)行存儲(chǔ)器方面的優(yōu)化工作。4程序設(shè)計(jì)要求程序框圖(圖2-1):三實(shí)驗(yàn)設(shè)備 PC兼容機(jī)一臺(tái),操作系統(tǒng)為Windows2000(或Windows98,WindowsXP,以下默認(rèn)為Windows2000),安裝Code Composer Studio 2.0軟件。四實(shí)驗(yàn)內(nèi)容與步驟1實(shí)驗(yàn)準(zhǔn)備 設(shè)置軟件仿真模式,參看:本書(shū)第一部分、四、1。2建立新的工程文件 (1)啟動(dòng) Code Composer Studio 2.21。 (2)進(jìn)行以下設(shè)置3編輯輸入源程序 (1)C語(yǔ)言程序 -先新建源程序窗口: -輸入源程序:int x,y,z;main()x=1; y=2;while ( 1 )z=x+y;-保存源程序?yàn)镃Program.c:(2)連接命令文件-如同第(1)步操作,建立空的源程序窗口。-輸入連接命令文件內(nèi)容:-lrts55x.libMEMORYDARAM:O=0x100,l=0x7f00DARAM2:O=0x8000,l=0x8000SECTIONS .text:DARAM .bss:DARAM .stack:DARAM .cinit:DARAM -如同第(1)步操作,將文件存為:C:ICETEK-F2812-A-EDUlabDSP281x_examplesLab0102-CProgram CProgram.cmd(3)將上述編譯的源程序加入工程 CProgram.pjt。5編譯源文件、下載可執(zhí)行程序(1)單擊菜單“Project”、“Rebuild All”。(2)執(zhí)行 FileLoad Program,在隨后打開(kāi)的對(duì)話框中選擇剛剛建立的C:ICETEK-F2812-EDULabLab0102-CProgramdebugCProgram.out 文件。完成后,系統(tǒng)自動(dòng)打開(kāi)一個(gè)反匯編窗口“Disassembly”,并在其中指示程序的入口地址為“_c_int00”。6打開(kāi)觀察窗口開(kāi)啟 CPU 寄存器觀察窗口:?jiǎn)螕舨藛?View-Registers-Core。7觀察程序運(yùn)行結(jié)果這時(shí),在“Disassembly”代表程序運(yùn)行位置的綠色箭頭指向程序的入口地址,程序?qū)拇碎_(kāi)始執(zhí)行。(1)選擇菜單中 Debug-Go Main,CCS 自動(dòng)打開(kāi) CProgram.c,程序會(huì)停在用戶主程序入口 main 上,這從反匯編窗口和 CProgram.c 窗口中的指示箭頭位置可以看出。(2)在內(nèi)存觀察窗口中觀察變量的值:選擇“View”菜單中“Memory”項(xiàng),在“Memroy Window Options”窗口中的“Adress”項(xiàng)中輸入&x,單擊“OK”完成設(shè)置;“Memory”窗口中 x 的當(dāng)前取值顯示在第 1 個(gè)地址的后。(3)將變量 x、y、z 分別加入觀察窗口:在源程序中雙擊變量名,再單擊鼠標(biāo)右鍵,選擇“Add to Watch Window”。這時(shí),這 3個(gè)變量還未作初始化。(4)單步運(yùn)行 2 次,在觀察窗中觀察到變量 x、y 被賦值。變化的值被顯示成紅色。同時(shí)在“Memory”窗口中也能觀察到 x 和 y 值的改變。(5)再單步運(yùn)行,可觀察到 z 的值被計(jì)算出來(lái)。雙擊觀察窗口中變量 x、y 在“Value”欄中的取值并修改成其他取值,單步運(yùn)行后觀察結(jié)果。(6)雙擊觀察窗口中變量 x、y 在“Value”欄中的取值,并修改成 0;選擇菜單Debug-Restart,返回程序起點(diǎn)。(7)重新單步運(yùn)行程序8內(nèi)存映像文件(1)選擇菜單 Project-Build Options,啟動(dòng)“Build Options”工程設(shè)置對(duì)話框。(2)單擊“Linker”屬性頁(yè),在“Map Filename”項(xiàng)中觀察生成的 map 文件名和路徑。(3)單擊“取消”退出。9對(duì)照觀察 map 文件和 cmd 文件的內(nèi)容(1)選擇菜單 File-Open,將找到C:ICETEK-F2812-A-EDUlabDSP281x_examplesLab0102-CProgram Debug 目錄,將文件類(lèi)型改為“Memory Map Files”,選擇 CProgram.map 文件、打開(kāi)。打開(kāi) CProgram.cmd 文件。(3)程序的入口地址:map 文件中“ENTRY POINT SYMBOL”中說(shuō)明了程序入口地址(_c_int00)。 (4)內(nèi)存使用情況:-map 文件中“MEMORY CONFIGURATION”標(biāo)明了程序占用 RAM 的使用情況,共占用 aaH 個(gè)存儲(chǔ)單元。-觀察 map 文件中的“SECTION ALLOCATION MAP”段,可以看出 CProgram.obj 的入口地址為 0x3e801e,這也是 main 函數(shù)的入口地址。-用戶堆棧段從 400H 開(kāi)始,程序運(yùn)行到 main 函數(shù)中后,變量 x、y、z 均開(kāi)設(shè)在棧中。-還能看出程序運(yùn)行都需要調(diào)用 rts2800.lib 中的哪些模塊。10改變內(nèi)存分配修改 cmd 文件中的PAGE 0 : PROG(R) : origin = 0x3E8000, length = 0x10000 改為PAGE 0 : PROG(R) : origin = 0x3E9000, length = 0x10000 重新編譯工程,觀察 map 文件中有何變化。11退出 CCS 實(shí)驗(yàn)三、異步串口通信實(shí)驗(yàn)課程: DSP實(shí)驗(yàn) 實(shí)驗(yàn)題目: 異步串口通信 實(shí)驗(yàn)日期: 2013年 12 月 12 日 姓名: 學(xué)號(hào): 一、實(shí)驗(yàn)?zāi)康?、熟悉2812 內(nèi)部具有兩個(gè)相同的 SCI 模塊,SCIA 和 SCIB。2、通過(guò)學(xué)習(xí)串口通訊實(shí)驗(yàn),理解DSP的傳口與PC之間是怎樣進(jìn)行交互的。5、學(xué)會(huì)C語(yǔ)言中斷程序設(shè)計(jì),以及運(yùn)用中斷程序控制程序流程。二、實(shí)驗(yàn)要求1、做到獨(dú)立建立CCS開(kāi)發(fā)環(huán)境2、以使用DSP內(nèi)部的事件管理器為例,學(xué)會(huì)編譯程序調(diào)試、仿真、下載程序;三、實(shí)驗(yàn)設(shè)備計(jì)算機(jī),串行通信數(shù)據(jù)線、DSP2812實(shí)驗(yàn)箱(包括USB仿真器+2812系統(tǒng)板+相關(guān)連線及電源)。四、實(shí)驗(yàn)原理、方法1、SCI模塊2812 內(nèi)部具有兩個(gè)相同的 SCI 模塊,SCIA 和 SCIB,每一個(gè) SCI 模塊都各有一個(gè)接收器和發(fā)送器。SCI的接收器和發(fā)送器各具有一個(gè)16 級(jí)深度的FIFO(First in fist out 先入先出)隊(duì)列,它們還都有自己獨(dú)立的使能位和中斷位,可以在半雙工通信中進(jìn)行獨(dú)立的操作,或者在全雙工通信中同時(shí)進(jìn)行操作。根據(jù)信息的傳送方向,串行通信可以分為單工、半雙工和全雙工三種,其各自的定義如下圖所示。圖1 串行通信的三種方式首先,我們從圖2可以看到,SCI 模塊具有兩個(gè)引腳,SCITXDA和 SCIRXDA,分別實(shí)現(xiàn)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的功能,這兩個(gè)引腳對(duì)應(yīng)于 GPIOF 模塊的第 4 和第 5 位,在編程初始化的時(shí)候,需要將 GPIOFMUX 寄存器的第 4和第 5位置為1,才能使得這兩個(gè)引腳具有發(fā)送和接收的功能,否則就是普通的I/O 引腳。 外部晶振通過(guò) PLL 模塊產(chǎn)生了 CPU 的系統(tǒng)時(shí)鐘 SYSCLKOUT,然后 SYSCLKOUT 經(jīng)過(guò)低速預(yù)定標(biāo)器之后輸出低速時(shí)鐘LSPCLK供給SCI。要保證 SCI 的正常運(yùn)行,系統(tǒng)控制模塊下必須使能 SCI 的時(shí)鐘,也就是在系統(tǒng)初始化函數(shù)中需要將外設(shè)時(shí)鐘控制寄存器PCLKCR的SCIAENCLK位置1。 從圖 2,我們可以清楚的看到 SCIA 可以產(chǎn)生兩個(gè)中斷,SCIRXINTA 和 SCITXINTA,即發(fā)送中斷和接收中斷。 圖2 SCIA的CPU接口SCI模塊的其他一些特點(diǎn)見(jiàn)下面的表格:2、SCI模塊發(fā)送和接受數(shù)據(jù)的原理SCI模塊的工作原理如圖3所示,之所以 SCI能工作于全雙工模式,是因?yàn)樗歇?dú)立的數(shù)據(jù)發(fā)送器和數(shù)據(jù)接收器,這樣能夠保證SCI既能夠同時(shí)進(jìn)行,也能夠獨(dú)立進(jìn)行發(fā)送和接收的操作。 SCI 發(fā)送數(shù)據(jù)的過(guò)程如下:如圖 3 右半部分所示,在FIFO 功能使能的情況下,首先,發(fā)送數(shù)據(jù)緩沖寄存器 SCITXBUF 從 TX FIFO中獲取由CPU 加載的需要發(fā)送的數(shù)據(jù),然后 SCITXBUF 將數(shù)據(jù)傳輸給發(fā)送移位寄存器 TXSHF,如果 SCI的發(fā)送功能使能,TXSHF則將接收到的數(shù)據(jù)逐位逐位的移到SCITXD引腳上。 SCI 接收數(shù)據(jù)的過(guò)程如下:如圖 3 的左半部分所示,首先,接收移位寄存器 RXSHF 逐位逐位的接收來(lái)自于 SCIRXD 引腳的數(shù)據(jù),如果 SCI 的接收功能使能,RXSHF 將這些數(shù)據(jù)傳輸給接收緩沖寄存器 SCIRXBUF,CPU就能從 SCIRXBUF讀取外部發(fā)送來(lái)的數(shù)據(jù)。當(dāng)然,如果FIFO功能使能的話,SCIRXBUF會(huì)將數(shù)據(jù)加載到RX FIFO的隊(duì)列中,CPU再?gòu)?FIFO的隊(duì)列讀取數(shù)據(jù)。3、SCI的數(shù)據(jù)格式在 SCI中,通信協(xié)議體現(xiàn)在SCI的數(shù)據(jù)格式上。通常將 SCI的數(shù)據(jù)格式稱之為可編程的數(shù)據(jù)格式,原因就是可以通過(guò) SCI 的通信控制寄存器 SCICCR 來(lái)進(jìn)行設(shè)置,規(guī)定通信過(guò)程中所使用的數(shù)據(jù)格式。SCI 使用的是 NRZ的數(shù)據(jù)格式,NRZ數(shù)據(jù)格式包括了如下表所示的內(nèi)容:序號(hào)內(nèi)容11 個(gè)起始位218 個(gè)數(shù)據(jù)位31 個(gè)奇/偶/非極性位412 個(gè)結(jié)束位5在地址位模式下,有1個(gè)用于區(qū)別數(shù)據(jù)或者地址的特殊位(僅用于多處理器通信)從上面的表中我們可以看到,真正的數(shù)據(jù)內(nèi)容是18 位,1個(gè)字符的長(zhǎng)度。我們通常將帶有格式信息的每一個(gè)數(shù)據(jù)字符叫做一幀,在通信中常常是以幀為單位的。前面已經(jīng)介紹過(guò),SCI 有空閑線模式和地址位模式,而在平常使用的時(shí)候,我們一般都是兩個(gè)處理器之間的通信,例如2812和 PC 機(jī)或者2812和 2812之間通信,這時(shí)候,我們更適合使用空閑線模式,而地址位模式一般用于多處理器之間的通信。在空閑線模式下,SCI發(fā)送或者接收一幀的數(shù)據(jù)格式如圖4所示,其中 LSB是數(shù)據(jù)的最低位,MSB 是數(shù)據(jù)的最高位。具體的定義如圖 4 所示的這些數(shù)據(jù)格式的寄存器是通信控制寄存器 SCICCR,其內(nèi)容如圖 5 所示。使用 SCICCR 進(jìn)行數(shù)據(jù)格式編程如表2所示。4、SCI的波特率前面我們知道了 SCI 在通信時(shí)采用的數(shù)據(jù)格式的問(wèn)題,那么 SCI 是以什么樣的速度去發(fā)送這些數(shù)據(jù)的呢?這個(gè)速度就是由波特率來(lái)決定的。所謂的波特率就是指每秒所能發(fā)送的位數(shù)。2812 的每個(gè) SCI都具有兩個(gè) 8 位的波特率寄存器,SCIHBAUD 和 SCILBAUD,通過(guò)編程,可以實(shí)現(xiàn)達(dá)到 64K 不同的速率。波特率的計(jì)算公式如下所示:其中 BRR=波特率選擇寄存器中的值,從十進(jìn)制轉(zhuǎn)換成十六進(jìn)制后,高8 位賦值給 SCIHBAUD,低 8位賦值給 SCILBAUD。 值得注意的是,式1 所示的波特率公式僅僅適用于1BRR65535,當(dāng)BRR=0時(shí),波特率如下:我們舉例來(lái)進(jìn)行說(shuō)明。例如外部晶振位 30M,經(jīng)過(guò) PLL 之后 SYSCLKOUT 為 150MHz,然后,當(dāng)?shù)退兕A(yù)定標(biāo)器LOSPCP的值為2的時(shí)候, SYSCLKOUT經(jīng)過(guò)低速預(yù)定標(biāo)器之后產(chǎn)生低速外設(shè)時(shí)鐘LSPCLK為37.5MHz,也就是說(shuō) SCI 的時(shí)鐘為 37.5MHz。如果我們需要 SCI 的波特率為 19200,則將 LSPCLK 和波特率的數(shù)值代入式 1,便可得到:BRR=243.14,由于寄存器都是正整數(shù),所以省略掉小數(shù)后可以得到 BRR=243。將 243 轉(zhuǎn)換成16 進(jìn)制是0xF3,因此 SCIHBAUD的值為0,SCIHBAUD的值為0XF3。由于省略了小數(shù),將會(huì)產(chǎn)生0.06%的誤差。當(dāng) LSPCLK 為37.5M時(shí),對(duì)于 SCI常見(jiàn)的波特率,其寄存器的值如下表所示:在進(jìn)行通信的時(shí)候,雙方都必須以相同的數(shù)據(jù)格式和波特率進(jìn)行通信,否則通信會(huì)失敗。例如 2812和 PC 機(jī)上的串口調(diào)試軟件進(jìn)行通信時(shí),2812 采用了什么樣的數(shù)據(jù)格式和波特率,那么串口調(diào)試軟件也需要設(shè)定成相同的數(shù)據(jù)格式和波特率,反之也一樣,這是 SCI 通信不成功最簡(jiǎn)單,然而大家常常會(huì)忽略的問(wèn)題。5、實(shí)驗(yàn)要求: 編寫(xiě)程序,打開(kāi)串口調(diào)試工具,波特率設(shè)置在19200,數(shù)據(jù)位8,停止位1,其他無(wú),然后輸入一串?dāng)?shù)據(jù),發(fā)送給DSP,DSP也將收到的數(shù)據(jù)原樣回發(fā)給上位機(jī).五、實(shí)驗(yàn)內(nèi)容1實(shí)驗(yàn)準(zhǔn)備(1)連接USB-UART數(shù)據(jù)線,USB端接計(jì)算機(jī)的USB,串行數(shù)據(jù)口接DSP的串口。(2)當(dāng)計(jì)算機(jī)發(fā)現(xiàn)新設(shè)備時(shí),安裝USB驅(qū)動(dòng)CH341SER;(3)打開(kāi)計(jì)算機(jī)的設(shè)備管理器,查看端口,記下USB-SERIAL CH340(COM?),串口號(hào)COM后面的數(shù)字;(4)設(shè)置串口調(diào)試助手的通訊設(shè)置,和DSP程序中設(shè)置的要一致。2、按上次實(shí)驗(yàn)的方法連接實(shí)驗(yàn)設(shè)備;打開(kāi)DSP電路板電源;3啟動(dòng)CCS2.2選擇菜單DebugReset CPU;4打開(kāi)工程文件;5、編寫(xiě)主程序main.c;6編譯程序;7、運(yùn)行程序,觀察結(jié)果。通過(guò)CCS中FileLoad Program 裝載Debug文件夾中的.out文件;Debug-GO Main;Debug-RUN(快捷鍵 F5)全速運(yùn)行;8退出CCS。六、預(yù)習(xí)要求1了解DSP串行通信的原理。2波特率的計(jì)算及配置。七、思考:寫(xiě)出本實(shí)驗(yàn)中所設(shè)置的預(yù)定標(biāo)系數(shù),并寫(xiě)出計(jì)算波特率的過(guò)程。附程序:#include DSP28_Device.hunsigned int Sci_VarRx100;unsigned int i,j;unsigned int Send_Flag;void main(void)InitSysCtrl(); /初始化系統(tǒng)DINT; /關(guān)中斷IER = 0x0000;IFR = 0x0000;InitPieCtrl(); /初始化PIE中斷InitPieVectTable(); /初始化PIE中斷矢量表 InitSci(); /初始化SCIA寄存器 for(i = 0; i 100; i+) Sci_VarRxi = 0; i = 0; j = 0; Send_Flag = 0; #if SCIA_INT /*設(shè)置中斷服務(wù)程序入口地址*/EALLOW;/ This is needed to write to EALLOW protected registersPieVectTable.TXAINT = &SCITXINTA_ISR;PieVectTable.RXAINT = &SCIRXINTA_ISR;EDIS; / This is needed to disable write to EALLOW protected registers/*開(kāi)中斷*/IER |= M_INT9;#endifEINT; / Enable Global interrupt INTMERTM;/ Enable Global realtime interrupt DBGM for(;)if(SciaTx_Ready() = 1) & (Send_Flag = 1)SciaRegs.SCITXBUF = Sci_VarRxi;Send_Flag = 0;i+;if(i = j)i = 0;j = 0;#if !SCIA_INTif(SciaRx_Ready() = 1)Sci_VarRxj = SciaRegs.SCIRXBUF.all;Send_Flag = 1;j+;if(j = 100)j = 0;#endif 實(shí)驗(yàn)四、A/D及D/A轉(zhuǎn)換實(shí)驗(yàn)課程: DSP實(shí)驗(yàn) 實(shí)驗(yàn)題目: A/D及D/A轉(zhuǎn)換 實(shí)驗(yàn)日期: 2013年 12 月 19 日 姓名: 學(xué)號(hào): 2 一、 實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)熟悉F28335A的定時(shí)器;2掌握F28335A片內(nèi)AD的控制方法;3了解數(shù)模轉(zhuǎn)換的基本操作; 4了解ICETEKF28335-A評(píng)估板擴(kuò)展數(shù)模轉(zhuǎn)換方式;5掌握數(shù)模轉(zhuǎn)換程序設(shè)計(jì)方法。二、 實(shí)驗(yàn)設(shè)備計(jì)算機(jī),示波器,ICETEK-F28335-A實(shí)驗(yàn)箱(或ICETEK仿真器+ICETEKF28335-A系統(tǒng)板+相關(guān)連線及電源)。三、 實(shí)驗(yàn)程序#include DSP2833x_Device.h / DSP2833x Headerfile Include File#include DSP2833x_Examples.h / DSP2833x Examples Include File/ Determine when the shift to right justify the data takes place/ Only one of these should be defined as 1./ The other two should be defined as 0.#define POST_SHIFT 0 / Shift results after the entire sample table is full#define INLINE_SHIFT 1 / Shift results as the data is taken from the results regsiter#define NO_SHIFT 0 / Do not shift the results/ ADC start parameters#if (CPU_FRQ_150MHZ) / Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#endif#define ADC_CKPS 0x0 / ADC module clock = HSPCLK/1= 25.5MHz/(1) = 25.0 MHz#define ADC_SHCLK 0x1 / S/H width in ADC module periods = 2 ADC cycle#define AVG 1000 / Average sample limit#define ZOFFSET 0x00 / Average Zero offset#define BUF_SIZE 1024 / Sample buffer size/ Global variable for this exampleUint16 SampleTableBUF_SIZE;Uint16 SampleTable1BUF_SIZE;Uint16 AD064;main() Uint16 i; Uint16 j,k; Uint16 array_index; Uint16 array_index1;/ Step 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl();/ Specific clock setting for this example: EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK;/ HSPCLK = SYSCLKOUT/ADC_MODCLK EDIS;/ Step 2. Initialize GPIO:/ This example function is found in the DSP2833x_Gpio.c file and/ illustrates how to set the GPIO to its default state./ InitGpio(); / Skipped for this example/ Enable the pin GPIO34 as output EALLOW; GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; / GPIO pin GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; / Output pin EDIS;/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state./ The default state is all PIE interrupts disabled and flags/ are cleared./ This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt/ Service Routines (ISR)./ This will populate the entire table, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP2833x_DefaultIsr.c./ This function is found in DSP2833x_PieVect.c. InitPieVectTable();/ Step 4. Initialize all the Device Peripherals:/ This function is found in DSP2833x_InitPeripherals.c/ InitPeripherals(); / Not required for this example InitAdc(); / For this example, init the ADC/ Specific ADC setup for this example: AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; / Sequential mode: Sample rate = 1/(2+ACQ_PS)*ADC clock in ns / = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT) / = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT) / If Simultaneous mode enabled: Sample rate = 1/(3+ACQ_PS)*ADC clock in ns AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; / 1 Cascaded mode AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; AdcRegs.ADCTRL1.bit.CONT_RUN = 1; / Setup continuous run AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1; / Enable Sequencer override feature AdcRegs.ADCCHSELSEQ1.all = 0x10; / Initialize all ADC channel selects to A0 AdcRegs.ADCCHSELSEQ2.all = 0x0; AdcRegs.ADCCHSELSEQ3.all = 0x0; AdcRegs.ADCCHSELSEQ4.all = 0x0; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x1; / convert and store in 8 results registers/ Step 5. User specific code, enable interrupts:/ Clear SampleTable for (i=0; iBUF_SIZE; i+) SampleTablei = 0; SampleTable1i = 0; for(i=0;i64;i+) AD0i=0;/ Start SEQ1 AdcRegs.ADCTRL2.all = 0x2000; for(;) array_index = 0; array_index1 = 0; for (i=0; i4); SampleTable1array_index1+= ( (AdcRegs.ADCRESULT1)4); for(j=0;j100;j+) k+; for (i=0; i4); SampleTable1i = (SampleTable1i) 4); GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; / Break point 四、實(shí)驗(yàn)結(jié)果 實(shí)驗(yàn)五、PID算法控制實(shí)驗(yàn)實(shí)驗(yàn)課程: DSP實(shí)驗(yàn) 實(shí)驗(yàn)題目: PID算法控制實(shí)驗(yàn) 實(shí)驗(yàn)日期: 2013年 12 月 19 日 姓名: 學(xué)號(hào): 一實(shí)驗(yàn)?zāi)康?掌握PID算法的原理和方法;2熟悉PID算法的特性;離散化公式:注:各符號(hào)含義如下u(t); 控制器的輸出值。e(t); 控制器輸入與設(shè)定值之間的誤差。Kp; 比例系數(shù)。Ti; 積分時(shí)間常數(shù)。Td; 微分時(shí)間常數(shù)。T; 調(diào)節(jié)周期。對(duì)于增量式算法,可以選擇的功能有:(1) 濾波的選擇可以對(duì)輸入加一個(gè)前置濾波器,使得進(jìn)入控制算法的給定值不突變,而是有一定慣性延遲的緩變量。(2) 系統(tǒng)的動(dòng)態(tài)過(guò)程加速在增量式算法中,比例項(xiàng)與積分項(xiàng)的符號(hào)有以下關(guān)系:如果被控量繼續(xù)偏離給定值,則這兩項(xiàng)符號(hào)相同,而當(dāng)被控量向給定值方向變化時(shí),則這兩項(xiàng)的符號(hào)相反。由于這一性質(zhì),當(dāng)被控量接近給定值的時(shí)候,反號(hào)的比例作用阻礙了積分作用,因而避免了積分超調(diào)以及隨之帶來(lái)的振蕩,這顯然是有利于控制的。但如果被控量遠(yuǎn)未接近給定值,僅剛開(kāi)始向給定值變化時(shí),由于比例和積分反向,將會(huì)減慢控制過(guò)程。為了加快開(kāi)始的動(dòng)態(tài)過(guò)程,我們可以設(shè)定一個(gè)偏差范圍v,當(dāng)偏差|e(t)|= 時(shí),則不管比例作用為正或?yàn)樨?fù),都使它向有利于接近給定值的方向調(diào)整,即取其值為|e(t)-e(t-1)|,其符號(hào)與積分項(xiàng)一致。利用這樣的算法,可以加快控制的動(dòng)態(tài)過(guò)程。(3) PID增量算法的飽和作用及其抑制在PID增量算法中,由于執(zhí)行元件本身是機(jī)械或物理的積分儲(chǔ)存單元,如果給定值發(fā)生突變時(shí),由算法的比例部分和微分部分計(jì)算出的控制增量可能比較大,如果該值超過(guò)了執(zhí)行元件所允許的最大限度,那么實(shí)際上執(zhí)行的控制增量將時(shí)受到限制時(shí)的值,多余的部分將丟失,將使系統(tǒng)的動(dòng)態(tài)過(guò)程變長(zhǎng),因此,需要采取一定的措施改善這種情況。糾正這種缺陷的方法是采用積累補(bǔ)償法,當(dāng)超出執(zhí)行機(jī)構(gòu)的執(zhí)行能力時(shí),將其多余部分積累起來(lái),而一旦可能時(shí),再補(bǔ)充執(zhí)行。PID位置算法離散公式:對(duì)于位置式算法,可以選擇的功能有:a、濾波:同上為一階慣性濾波b、飽和作用抑制: #include DSP2833x_Device.h / DSP2833x Headerfile Include File#include DSP2833x_Examples.h / DSP2833x Examples Include File#include ctr.h#include PID.h#include scancode.h/ Prototype statements for functions found within this errupt void cpu_timer0_isr(void);#define LEDS *(int *)0x180000#define port8000 (*(unsigned int *)0x208000)#define port8001 (*(unsigned int *)0x208001)#define port8002 (*(unsigned int *)0x208002)#define port8003 (*(unsigned int *)0x208003)#define port8004 (*(unsigned int *)0x208004)#define port8007 (*(unsigned int *)0x208007)void Gpio_select(void);void Gpio_PortB(void);void Gpio_PortA(void);void ShowParameters();void LCDPutString(unsigned int *pData,int x,int y,unsigned int nCharNumber,unsigned color);void PIDControl(int rk,int yk);char ConvertScanToChar(unsigned char cScanCode);void Delay(unsigned int nTime);/ 延時(shí)子程序Uint16 var1 = 0;Uint16 var2 = 0;Uint16 var3 = 0;Uint16 test_count = 0;Uint16 Test_flag = 0;Uint16 Test_var = 0;Uint16 Test_status32;int i=0,nnn;unsigned int nCount,nCount1,nCount2,nCount3,nJSSpeed,uWork,uN;unsigned int uLBD;float a=0.6f,b=0.2f,c=0.1f,duk;int ek,ek1,ek2,tz;int nInput;int nSSS,pwm;int md,wc;unsigned int nScreenBuffer1024;#define CTRGR *(int *)0x208000#define CTRLCDCMDR *(int *)0x208001#define CTRKEY *(int *)0x208001#define CTRLCDCR *(int *)0x208002#define CTRCLKEY *(int *)0x208002#define CTRLCDLCR *(int *)0x208003#define CTRLCDRCR *(int *)0x208004#define CTRLA *(int *)0x208005#define CTRLR *(int *)0x208007void main(void) unsigned int uPort8000;unsigned int nScanCode;unsigned char cKey;int speed100,sp,lj;float ljh;char strInput4;int i,w1,w2,w3;uLBD=nnn=0;nCount=nCount1=nCount2=nCount3=nJSSpeed=0;for ( sp=0;sp100;sp+ )speedsp=0;sp=nSSS=nCount=nCount1=nCount2=nJSSpeed=0; cKey=0; nInput=tz=wc=0;ek=ek1=ek2=0;for ( uWork=0;uWork4;uWork+ )strInputuWork=0;uN=100; md=41; pwm=50; InitSysCtrl(); DINT; InitPieCtrl(); InitXintf16Gpio();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; InitPieVectTable()

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論