MSP430控制的基于DDS的波形發(fā)生器設(shè)計.docx_第1頁
MSP430控制的基于DDS的波形發(fā)生器設(shè)計.docx_第2頁
MSP430控制的基于DDS的波形發(fā)生器設(shè)計.docx_第3頁
MSP430控制的基于DDS的波形發(fā)生器設(shè)計.docx_第4頁
MSP430控制的基于DDS的波形發(fā)生器設(shè)計.docx_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

華中科技大學(xué)電子與信息工程系2011年ti杯電子設(shè)計大賽項目總結(jié)報告題 目:msp430控制的基于dds的波形發(fā)生器設(shè)計 組 長:何永天(提高0801班 u200814111) 組 員:李戀陽(提高0801班 u200812892) 袁 園(提高0802班 u200813900) 楊春風(fēng)(電信0804班 u200812791)吳文彬(電信0806班 u200812863) 指導(dǎo)老師:陳林 日 期:2011.7.8目 錄1設(shè)計目標(biāo)41.1基本功能41.2擴展功能42團(tuán)隊組成53系統(tǒng)設(shè)計方案53.1幾種初步方案53.1.1方案一53.1.2方案二63.1.3方案的比較63.2器件選型73.2.1單片機73.2.2數(shù)模轉(zhuǎn)換dac73.2.3壓控增益放大器73.2.4運算放大器84系統(tǒng)硬件設(shè)計與實現(xiàn)84.1系統(tǒng)框圖84.2系統(tǒng)電路圖94.3器件清單94.4模塊分析104.4.1dds104.4.2幅度控制114.4.3放大穩(wěn)壓134.4.4自選波形144.4.5鍵盤144.4.6lcd顯示155系統(tǒng)軟件設(shè)計與實現(xiàn)165.1總體設(shè)計框圖165.2初始化175.3dds185.4lcd顯示195.5dac215.6鍵盤226系統(tǒng)測試與結(jié)果266.1總體方案選擇266.1.1原方案266.1.2遇到的障礙:276.1.3改進(jìn)方案:276.2硬件電路測試276.2.1vca810壓控放大器276.2.2opa1632286.2.3級聯(lián)286.2.4關(guān)于換備選方案286.3系統(tǒng)聯(lián)調(diào)結(jié)果286.3.1三角波、正弦波、方波測試結(jié)果286.3.2擴展波形的測試結(jié)果326.3.3擴展掃頻功能的測試結(jié)果337結(jié)束語337.1目標(biāo)完成情況337.2感想338參考文獻(xiàn)349附錄349.1電路圖349.2源碼清單35511. 設(shè)計目標(biāo)設(shè)計并制作一個波形發(fā)生器,該波形發(fā)生器能產(chǎn)生正弦波、方波、三角波和由用戶編輯的特定波形,并根據(jù)用戶輸入選擇產(chǎn)生指定類型與參數(shù)的波形,同時在必要的輔助輸出顯示設(shè)備上顯示產(chǎn)生波形的類型與參數(shù)。1.1 基本功能l 具有產(chǎn)生正弦波、方波、三角波三種周期性波形的功能;l 輸出波形的頻率范圍為100hz-20khz(非正弦波頻率按10次諧波計算);重復(fù)頻率可調(diào),頻率步進(jìn)間隔100hz。l 輸出波形幅度范圍0-5v(峰峰值),可按步進(jìn)0.1v(峰峰值)調(diào)整。l 由外界按鍵輸入選擇產(chǎn)生波形的種類、頻率與峰峰值;l 界面顯示輸出波形的類型、重復(fù)頻率(周期)和幅度。1.2 擴展功能l 輸出波形頻率范圍擴展至100hz-200khz。l 用鍵盤或其它輸入裝置產(chǎn)生任意波形。l 增加穩(wěn)幅輸出功能,當(dāng)負(fù)載變化時,輸出電壓幅度變化不大于3%(負(fù)載電阻變化范圍:100)。l 可產(chǎn)生單次或多次(1000次以下)特定波形(如產(chǎn)生1個半周期三角波輸出)。l 具有掉電存儲功能,可存儲掉電前用戶編輯的波形和設(shè)置。l 其它(如增加頻譜分析、失真度分析、頻率擴展大于200khz、掃描輸出等功能)。2 團(tuán)隊組成我們的工作分為以下模塊(詳細(xì)分工在個人報告中敘述)l 前期:收集資料、方案設(shè)計、器件選型 l 硬件部分:電路參數(shù)設(shè)計、proteus制圖及硬件仿真、各單級調(diào)試、pcb布線、通用版布線、電路焊接、排查焊接錯誤 l 軟件部分: lcd模塊、鍵盤掃描模塊、dds模塊、調(diào)頻、掃頻、模塊間接口設(shè)計與實現(xiàn)、自選波形模塊(da部分)、軟件聯(lián)調(diào)l 后期:硬件級聯(lián)調(diào)試、軟件聯(lián)調(diào)報告書寫、文檔排版、幻燈片演示、視頻制作、答辯展示3 系統(tǒng)設(shè)計方案3.1 幾種初步方案3.1.1 方案一由msp43f149單片機產(chǎn)生三角波、正弦波和方波,并且控制波形之間的轉(zhuǎn)換,以及波信號的頻率和幅度。用lcd液晶顯示模塊顯示波形的種類和相關(guān)參數(shù)。單片機輸出數(shù)字信號,通過dac進(jìn)行數(shù)模轉(zhuǎn)換。采用低通濾波器濾除dac轉(zhuǎn)換過程中形成的高頻小鋸齒波,運算放大器進(jìn)行放大,電壓跟隨器穩(wěn)幅,最后送入示波器顯示信號。3.1.2 方案二用dds(直接數(shù)字合成 direct digital synthesis)芯片產(chǎn)生三角波、正弦波和方波,并用msp430單片機送控制字給dds以控制波形之間的轉(zhuǎn)換,以及波信號的頻率,通過ti公司的vca810壓控放大器芯片進(jìn)行調(diào)幅。然后通過濾波器濾除高頻噪聲,通過放大電路對信號進(jìn)行放大,之后通過緩沖對信號進(jìn)行穩(wěn)幅,最后送入示波器顯示信號,用單片機產(chǎn)生任意波形和其他擴展功能。3.1.3 方案的比較方案一的基本思路是用單片機發(fā)出指令輸出相應(yīng)的數(shù)字量,然后通過da產(chǎn)生要求的模擬量,但是存在一個致命的問題,那就是本次的頻率基本要求為100hz-20khz,擴展要求是100-200khz,但是通常的msp430系列單片機的晶振一般為8m左右,指令周期是機器周期,可達(dá)1/8ms,所以對生成方波來說還可以,而要合成三角波或正弦波則存在很多問題,程序?qū)崿F(xiàn)難度很大,所以我們最終放棄了這個方案。方案二的基本思路是走兩條路,使用dds芯片產(chǎn)生三種基本波形,用單片機實現(xiàn)任意波形以及控制和顯示等功能,容易對功能進(jìn)行擴充,且外圍電路簡單,系統(tǒng)可靠性較高,編程實現(xiàn)較為簡單,整個系統(tǒng)成本較低,我們最終選擇了這個方案。信號初步產(chǎn)生之后都要經(jīng)過濾波、放大、緩沖輸出等電路,各個方案下的設(shè)計大同小異,主要還是需要穩(wěn)定可靠,帶寬很寬。3.2 器件選型3.2.1 單片機選用msp430f5438單片機,因為在種類和數(shù)量繁多的單片機中,ti的msp430系列頗具特色,并具有良好的性能。3.2.2 數(shù)模轉(zhuǎn)換dac按照設(shè)計好的方案,擴展功能中的任選波形用da來實現(xiàn),有2種方法:外接dac0832或者自帶的dac5571。l 自帶的dac5571優(yōu)點:使用較簡單(因為有完整的test代碼和文檔,而且已經(jīng)集成在5438的開發(fā)板上);缺點:速度上不去(因為5438自帶的操作da用來產(chǎn)生任選波形的代碼要放在main中,但main函數(shù)比較龐大,影響了任選波形的頻率)l 外接dac0832優(yōu)點:可以自己去設(shè)計da的驅(qū)動函數(shù),產(chǎn)生的任選波形的頻率較高;缺點:設(shè)計和搭電路較復(fù)雜(0832的輸出端還要加運放來將電流輸出轉(zhuǎn)換成電壓輸出)我們選擇第一種自帶da3.2.3 壓控增益放大器比較兩個選擇:vca810和vca822。具體來說,我們比較它們的增益帶寬積,輸出(驅(qū)動)電流,及我們對芯片的熟悉程度。最后決定選擇vca810,利用dac產(chǎn)生控制電壓改變放大器的增益??刂齐妷汉头糯笃髟鲆娉删€性,方便實現(xiàn)精確的增益控制。vca810的最小增益步進(jìn)僅取決于 dac 的位數(shù),可以實現(xiàn)增益微調(diào),為閉環(huán)改善放大器的性能提供方便。3.2.4 運算放大器主要考慮因素有增益帶寬積,輸出驅(qū)動電流(表明帶負(fù)載的能力),噪聲電壓,電路復(fù)雜程度,對芯片的熟悉程度和價格,對于常用的幾個比較結(jié)果如下:l opa1632:增益帶寬積:180mhz; 輸出驅(qū)動電流:150mal opa551:帶寬:3mhz;,增益帶寬積:3mhz; 輸出驅(qū)動電流:200mal opa552:帶寬:12mhz,增益帶寬積:3mhz; 輸出驅(qū)動電流:200mal ne5532:小信號帶寬:10mhz, 輸出驅(qū)動電流:60mal ths4031:增益帶寬積:100mhz, 輸出驅(qū)動電流:90mal ths4521:帶寬:145mhz, 輸出驅(qū)動電流:100mal ua741:增益帶寬積:1mhz, 輸出驅(qū)動電流:25mal 綜合考慮,opa1632各項性能比其他芯片要好很多,因此決定選用opa16324 系統(tǒng)硬件設(shè)計與實現(xiàn)4.1 系統(tǒng)框圖 由msp430單片機通過3個spi接口控制ad9833產(chǎn)生各種頻率的正弦波、三角波、方波,經(jīng)放大整形電路后輸出,并通過獨立的按鍵切換輸出的波形,也可改變頻率和幅度以及頻率和幅度變化的步進(jìn)(通過軟硬件的配合)。通過tft液晶模塊和獨立按鍵進(jìn)行人機交互。系統(tǒng)上電后檢查啟動按鍵是否按下,當(dāng)啟動按下被按下時,啟動各個模塊,與此同時檢查被按下的按鍵值。當(dāng)檢查到不同的按鍵被按下時,由msp430通過spi控制ad9833進(jìn)行相應(yīng)的改變。4.2 系統(tǒng)電路圖其中dds模塊較為復(fù)雜,上圖只是外部接口。其詳細(xì)電路設(shè)計如下圖所示:4.3 器件清單l msp430f5438開發(fā)板(1個)l vca810壓控增益放大器(1個)l opa1632放大器(3個)l ad9833(1個)l ua741放大器(1個)l 電阻,電容,導(dǎo)線若干4.4 模塊分析4.4.1 dds 1) ad9833介紹ad9833是adi公司的一款低功耗的dds器件,能夠輸出正弦波、三角波、方波。ad9833無需外接元件,輸出頻率和相位可通過軟件編程設(shè)置,易于調(diào)節(jié)。其頻率寄存器為28位,主頻時鐘為25 mhz時,其精度為01 hz;主頻時鐘為l mhz時精度可達(dá)0004 hz.ad9833內(nèi)部有5個可編程寄存器:1個16位控制寄存器,用于設(shè)置器件_t作模式;2個28位頻率寄存器和2個12位相位寄存器,分別用于設(shè)置器件輸出正弦波的頻率和相位。它的sin-rom查詢表把輸入的地址相位信息映射成正弦波幅值的數(shù)字量信號,驅(qū)動da轉(zhuǎn)換器輸出模擬量。輸出正弦波頻率為:fout=freqreg(fmclk/228)式中:freqreg為頻率控制字,由頻率寄存器freqoreg或freqlreg的值給定,其范圍為0m 80db。信號帶寬和壓擺率保持在整個增益調(diào)節(jié)范圍內(nèi)保持恒定。這40db/ v增益控制在1.5db(最高誤差范圍0.9db),讓應(yīng)用程序在一個agc增益控制電壓精確到作為接收信號強度指示器(rssi)的使用精度為1.5db。通過調(diào)節(jié)控制電壓(vc)來控制壓控增益放大器vca810的放大增益,從而控制正確的輸出。vca810 作為壓控增益的主要部分, 其增益與控制電壓的關(guān)系為:g=-40(vc+1)其中, vc 表示控制電壓, 可見, vca810 的增益與其控制電壓成線性關(guān)系, 只要用單片機控制d/ a 輸出一線性變化的控制電壓給vc, 便可得到線性變化的電壓增益輸出理論上vca810可調(diào)的放大倍數(shù)為1/100100,實際上由于dds輸出的正弦波和三角波幅度為680mv,方波的幅度為6.8v左右,而且vca的工作電壓只有-5v+5v,所以放大倍數(shù)不可能為100倍,差不多達(dá)到7、8倍,但是縮小則可以到1/100。為了確保調(diào)節(jié)的精確,我們采用vca810的縮小功能,提供給它的參考電壓為0-1v。經(jīng)過這一級縮小后,再送入后級放大。3) ua741反相模塊由于我們采用的msp430單片機自帶da模塊,所以沒有外接da,利用單片機給da寫控制字,使da輸出幅值可變的電壓作為vca810的參考電壓。從da輸出的電壓幅度值范圍為03.3v,而vca810要求的參考電壓為0-1v,所以需要反相和縮小,利用簡單的ua741實現(xiàn),電路如下:4.4.3 放大穩(wěn)壓1) opa1632介紹設(shè)計運算放大器時,我們考慮了許多不同型號的運放,功能各異,主要考慮增益帶寬積,輸出驅(qū)動電流(表明帶負(fù)載的能力),噪聲電壓,(電路復(fù)雜程度,芯片熟悉程度,價格)等等。ti公司的opa1632是音頻運算放大器,性能比較好。增益帶寬積為180mhz,輸出驅(qū)動電流為150ma。可以工作在較高頻率下而不出現(xiàn)失真,且驅(qū)動能力較好。2) 功能實現(xiàn)該實驗中,我們主要用opa1632設(shè)計放大電路和電壓跟隨器。放大電路主要分為同相比例放大器和反相比例放大器兩種。 反相比例放大器 同相比例放大器反相放大電路有如下特點:l 運放兩個輸入端電壓相等并等于0,故沒有共模輸入信號,這樣對運放的共模抑制比沒有特殊要求。l vn= vp,而vp=0,反相端n沒有真正接地,故稱虛地點。l 電路在深度負(fù)反饋條件下,電路的輸入電阻為r1,輸出電阻近似為零。l 輸入輸出關(guān)系: vo=-rfrlvs同相比例運算電路的特點如下:l 輸入電阻很高,輸出電阻很低。l 由于vn= vp= vs,電路不存在虛地,且運放存在共模輸入信號,因此要求運放有較高的共模抑制比。l 輸入輸出關(guān)系: vo=(1+rfrl)vs由于實際放大倍數(shù)比理論值低,所以我們設(shè)計rf=100千歐,r1=5.1千歐,放大倍數(shù)約為21倍。4.4.4 自選波形實現(xiàn)自選波形有兩種不同的理解和方法:l 手動描波形,由硬件接收,然后描點顯示出來;l 寫好一組波形,存在flash內(nèi)部,通過按鍵選擇我們實現(xiàn)的是第二種,首先用matlab描出想要產(chǎn)生的任意波形,然后取出大量的點寫入代碼中,將波形描繪出來。按照設(shè)計好的方案,擴展功能中的任選波形用da來實現(xiàn),有2種方法:外接dac0832或者自帶的dac5571。 l 自帶的dac5571優(yōu)點:使用較簡單(因為有完整的test代碼和文檔,而且已經(jīng)集成在5438的開發(fā)板上);缺點:速度上不去(因為5438自帶的操作da用來產(chǎn)生任選波形的代碼要放在main中,但main函數(shù)比較龐大,影響了任選波形的頻率)l 外接dac0832優(yōu)點:可以自己去設(shè)計da的驅(qū)動函數(shù),產(chǎn)生的任選波形的頻率較高;缺點:設(shè)計和搭電路較復(fù)雜(0832的輸出端還要加運放來將電流輸出轉(zhuǎn)換成電壓輸出)綜上考慮,我們選擇使用自帶的dac處理。4.4.5 鍵盤本實驗中,我們通過按鍵實現(xiàn)波形切換和調(diào)頻、調(diào)幅。通過開關(guān)實現(xiàn)波形的切換比較簡單只需通過輸出波形后不斷返回到檢測開關(guān)的子程序中,判斷是否有別的開關(guān)撥動,如果有別的開關(guān)撥動則執(zhí)行別的程序,否則輸出原來的波形,不過如果要能夠識別別的開關(guān)發(fā)生變化,必須將此開關(guān)關(guān)掉否則會識別不了別的鍵按下。當(dāng)然開關(guān)的調(diào)頻和調(diào)幅的實現(xiàn)也一樣,不過首先先輸出一個波形,然后再檢測開關(guān)是否需要調(diào)頻或者調(diào)幅,如果需要則轉(zhuǎn)入到相應(yīng)的程序中,最后再重新輸出波形。下面是我們設(shè)計的按鍵對應(yīng)控制的功能:4.4.6 lcd顯示我們使用的是bw-dk5438開發(fā)板自帶的tft液晶屏,用spi的sck端來驅(qū)動液晶的寫信號,當(dāng)全屏刷新、區(qū)域填充時,刷新速度可達(dá)10mpps,因此可以流暢的運行。下圖是tft液晶接口示意圖:5 系統(tǒng)軟件設(shè)計與實現(xiàn)5.1 總體設(shè)計框圖5.2 初始化1) 功能介紹由于初始化代碼由開發(fā)板自帶,且并不很多實際內(nèi)容,故僅列出初始化流程,省略具體代碼。2) 核心代碼主函數(shù)中主要功能包括初始化、掃頻功能實現(xiàn)、自選波形功能實現(xiàn)以及鍵盤掃描。偽代碼如下:init();/初始化函數(shù) while(1) /主函數(shù)循環(huán) _delay_cycles(2048000);/鍵盤掃描延遲 if(掃描使能)/掃頻功能函數(shù) freqcoeff=(freqcoeff+1)%99;/當(dāng)前檔位下頻率系數(shù)遞增 dds輸出;lcd顯示; else if(mode=3) /自選波形函數(shù) while(readkey() = 0xff) /當(dāng)無鍵盤按下時,執(zhí)行自選波形dac循環(huán)輸出 自選波形dac繪制; scankey();/掃描鍵盤5.3 dds1) 功能介紹主要是對ad933進(jìn)行spi模擬與單片機進(jìn)行連接,再根據(jù)按鍵輸入的數(shù)據(jù)分別轉(zhuǎn)換成正弦波、三角波和方波進(jìn)行輸出的程序。其中轉(zhuǎn)換的格式固定,但是ad9833輸出頻率時是先低位后高位,區(qū)別于spi模擬時單片機給ad9833數(shù)據(jù)時是先高位后低位。fsync為使能,低電平可傳數(shù)據(jù),剛開始必須為高電平,sclk為時鐘,在下降沿對應(yīng)數(shù)據(jù),sdate為傳數(shù)據(jù)(頻率控制字),16位,但可能單片機輸出一次性為8位,必須先高8位后低8位給ad9833的sdata 2) 核心代碼:void dds(void) /wdtctl = wdtpw + wdthold; / stop watchdog timer unsigned long freq_value; /不是頻率!是計算出的頻率控制字 ad9833_spi_port_init(); output_init(); switch (freqstep) /根據(jù)頻率計算頻率控制字 case 0: freq_value = (unsigned long)(freqcoeff * 0x400 * 1.05); break; case 1: if (freqcoeff = 7) freq_value = (unsigned long)(0x11800 * 1.05); else if (freqcoeff = 8) freq_value = (unsigned long)(0x13000 * 1.05 *1.05); else if (freqcoeff = 9) freq_value = (unsigned long)(0x15800 * 1.05 *1.05); else freq_value = (unsigned long)(freqcoeff * 0x2800 * 1.05); break; case 2: freq_value = (unsigned long)(freqcoeff * 0x19000 * 1.05); break; case 3: freq_value = (unsigned long)(freqcoeff * 0xfa000 * 1.05); break; default: freq_value = 0; break; switch (mode) /不同mode調(diào)用不同output函數(shù) case 0: output_square(freq_value); /mode=0對應(yīng)方波 break; case 1: /mode=1對應(yīng)三角波 output_triangle(freq_value); break; case 2: /mode=2對應(yīng)三角波 output_sinusoid(freq_value); break; default: output_sinusoid(0x00005000); 5.4 lcd顯示1) 功能介紹完成液晶初始化、顯示功能。由于tft性能優(yōu)良、尺寸大,且開發(fā)板自帶tft液晶驅(qū)動程序以及相應(yīng)顯示函數(shù),則在編寫過程中,主要內(nèi)容是通過調(diào)用繪制函數(shù),將按鍵輸入的信息顯示在tftlcd上,從而實現(xiàn)人機交互。在lcd上,我們設(shè)計了一個圖形化的顯示界面,它可以實時的反應(yīng)波形狀態(tài)、頻率、幅值等等信息。下面是該界面的詳細(xì)說明,上面標(biāo)示出了各元素的具體坐標(biāo):2) 核心代碼void initinterface(void) /初始化/清屏 clear_lcd(color_bk); ta0ccr1 = 220; drawrectfill(0,0 ,240,320,window_bk_color); / 繪制背景 drawrectfill(0,0 ,240,30,status_bk_color); /標(biāo)題欄 color_bk = status_bk_color; color = status_color; putstring24m(60,3,波形發(fā)生器); /標(biāo)題字 drawrectfill(20,60,205,30,window_color); / 波形窗口題 color_bk = window_color; color = window_bk_color; putstring24m(70,63,波形信息); color=window_color;color_bk=window_bk_color; drawrect(20,90,205,125,window_color); putstring24m(25,105,波形:);mode = 2; drawmode();/初始化波形為正弦波 putstring24m(25,140,頻率:);freqstep= 0;freqcoeff = 10;drawfreq();/初始化頻率為100hz putstring24m(25,175,峰-峰值:);vpp = 6;drawvpp();/初始化峰峰值為0.6v drawrectfill(0,290,240,30,status_bk_color);其他繪制函數(shù)及關(guān)鍵代碼:l void drawmode(void); 繪制波形模式putstring24m(90,105,方波 );l void drawfreqstep(void); 繪制頻率檔位 switch(freqstep)/判斷freqstep取值,在lcd中繪制檔位提示符 case 0: putstring24m(130,255,x100 hz);/100hz檔break; l void drawfreq(void); 繪制頻率 unsigned char str10;/用于存儲字符型頻率值 float freq_f;/浮點型頻率值 switch(freqstep) case 0: freq_f = 100 * freqcoeff * 0.1;/100hz檔位時,頻率 = 頻率系數(shù)(1-99) * 0.1 * 100,單位hz break; /其余檔位同上,省略 sprintf(char *)str,%3.1f,freq_f);/浮點型數(shù)據(jù)到字符串型轉(zhuǎn)換 drawrectfill(90,140,70,30,window_bk_color);/繪制背景覆蓋數(shù)據(jù),以防疊加至當(dāng)前值 putstring24m(90,140,str);/繪制當(dāng)前頻率值 if(freqstep = 0)putstring24m(170,140, hz);/通過判斷freqstep取值,確定繪制的單位為“hz”或“khz” else putstring24m(170,140,khz);l void drawvpp(void); 繪制峰峰值unsigned char str10;/用于存儲字符型峰峰值float vpp_f;/浮點型峰峰值vpp_f = 0.1 * vpp;/峰峰值 = 峰峰值系數(shù)(0-50) * 0.1sprintf(char *)str,%3.1f,vpp_f);/浮點型數(shù)據(jù)到字符型數(shù)據(jù)轉(zhuǎn)換putstring24m(130,175,str);/繪制當(dāng)前峰峰值putstring24m(170,175,v);/繪制單位 “v”5.5 dac1) 功能介紹dac在本次設(shè)計中完成兩個功能:一、通過改變輸入的數(shù)字信號,輸出自選波形;二、輸出壓控放大器參考電壓,從而改變放大器的增益。2) 核心代碼/初始化#define sda5571 bit6 / dac5571數(shù)據(jù)#define sck5571 bit7 / dac5571時鐘#define scl_h p9out |= sck5571#define scl_l p9out &=sck5571#define sda_h p9out |= sda5571#define sda_l p9out &=sda5571/完成iic的起始條件操作void start(void) scl_h;/時鐘信號置高 sda_h;/數(shù)據(jù)線置高 delay();/延遲 sda_l;/數(shù)據(jù)線置低 delay();/延遲 scl_l;/時鐘信號置低 delay();/延遲/核心功能實現(xiàn)if(mode=3)/當(dāng)自選波形模式while(readkey() = 0xff)/當(dāng)沒有鍵盤按下時 write_dac(voltage+);/遞增輸出鋸齒波5.6 鍵盤1) 功能介紹/p6引腳定義#definekpr0 bit0 / 鍵盤0行#definekpr1 bit1 / 鍵盤1行#definekpr2 bit2 / 鍵盤2行#definekpr3 bit3 / 鍵盤3行#define kpc0 bit4 / 鍵盤0列#definekpc1 bit5 / 鍵盤1列#definekpc2 bit6 / 鍵盤2列#definekpc3 bit7 / 鍵盤3列由鍵盤接口圖以及引腳定義可以看出,p6端口的8條i/o端口線被分成4條行線p6.0p6.3和4條列線p6.4p6.7。按鍵的兩端分別接在行線和列線上,行線與列線的每個交界處均有一個按鍵。如果有按鍵被按下,則與之相連的行線與列線被接通。要想檢測是否有按鍵被按下,先使4條行線輸出低電平,讀列線p6.4p6.7。因為所有列線都經(jīng)上拉電阻接到vcc,如果沒有按鍵被按下,列線讀進(jìn)來的都是高電平1;如果有按鍵被按下,則列線讀進(jìn)來的電平應(yīng)與行線輸出的一致,為低電平0.據(jù)此可以判斷是否有按鍵按下。對于行列掃描式鍵盤,常采用掃描的辦法識別鍵碼。如果4條行線沒有輸出低電平,那么就可以根據(jù)讀列線的值來判斷這一行是否有鍵被按下了。2) 核心代碼#define key_port_in p6in #define key_port_out p6out #define key_port_dir p6dir #define key_port_ren p6ren#define row_in_col_out p6dir = kpc0+kpc1+kpc2+kpc3 ; p6out =(kpc0+kpc1+kpc2+kpc3) ; _delay_cycles(20) / 鍵盤列輸出行輸入 #define clo_in_row_out p6dir = kpr0+kpr1+kpr2+kpr3 ; p6out =(kpr0+kpr1+kpr2+kpr3) ; _delay_cycles(20) / 鍵盤行輸出列輸入unsigned char readkey(void) unsigned char column,row,key;/分別表示行、列線讀取值、返回鍵值 unsigned char key;/儲存鍵值對應(yīng)的8位鍵盤掃描值,對應(yīng)關(guān)系見下圖 row_in_col_out;/鍵盤列輸出行輸入 row = key_port_in&(kpr0+kpr1+kpr2+kpr3);/讀取p6端口并屏蔽高4位輸出值即行線值 if(row!=(kpr0+kpr1+kpr2+kpr3)/若行線沒有輸出低電平,說明有按鍵按下 clo_in_row_out ;/鍵盤行輸出列輸入 column = key_port_in&(kpc0+kpc1+kpc2+kpc3);/讀取p6并屏蔽低4位即列線值 row_in_col_out;/鍵盤列輸出行輸入 key = row + column;/行列線值相加,則高低4位的不同取值可以表示不同的鍵值 _nop(); switch(key)/通過判斷鍵值做出對應(yīng)的響應(yīng) case 0xe7: key=1; break; case 0xd7: key=2; break; /其他鍵值省略 default: key=0xff; else key=0xff;/若沒有鍵盤輸出,則返回鍵值0xff key_port_dir=0xff;/鍵盤8個io口均設(shè)置為輸出 key_port_out=0x00;/輸出低電平 return key;/返回邏輯鍵值下圖是8位鍵值與邏輯值對應(yīng)關(guān)系:3) 各按鍵功能代碼l 按鍵1:模式選擇按鍵后mode值循環(huán)模4遞增,在方波、三角波、正弦波、自選波形中單向切換。通過改變?nèi)肿兞縨ode值,可以傳遞給lcd模塊輸出正確的波形模式顯示在屏幕上,并通過調(diào)用dds模塊的函數(shù)輸出正確的控制字給dds從而輸出正確波形。mode = (mode+1)%4;/0-方波,1-三角波,2-正弦波,3-自選波形drawmode();/繪制修改后的波形模式dds();/dds輸出修改后的波形l 按鍵2:頻率檔位選擇按鍵后freqstep值循環(huán)模4遞增,在100hz、1khz、10khz、100khz四個檔位中單向切換,通過改變?nèi)肿兞縡reqstep值,確定頻率檔位的選擇。在切換檔位后初始化頻率系數(shù)freqcoeff=50,即將頻率值置為該檔位下的中間值,方便使用。同按鍵“1”,將改變后的檔位值輸出在lcd上,并調(diào)用dds函數(shù)輸出正確波形。freqstep = (freqstep+1)%4;/0-100hz,1-1khz,2-10khz,3-100khz drawfreqstep();/繪制頻率檔位值freqcoeff = 50;/初始化系數(shù)為50,便于調(diào)試和使用drawfreq();/繪制修改后的頻率值dds();/dds輸出修改后的波形l 按鍵3:掃頻按鍵可使掃頻使能信號在0,1中切換,通過判斷是否為可以掃頻的三種基本波形,改變掃頻使能信號,在主函數(shù)中可以確定當(dāng)前是否處于掃頻狀態(tài),實現(xiàn)掃頻功能。在lcd顯示的過程中,需要注意通過清屏消除“掃頻”字樣。/判斷是否處于三種基本波形模式下,若不是則無掃頻功能if(mode=0|mode=1|mode=2) if (freqscanen = 0) /若掃頻使能為低freqscanen = 1;/通過按鍵,修改使能信號為高putstring24m(160,105,-掃頻);/繪制掃頻模式至tftelse/若掃頻使能為高freqscanen = 0;/通過按鍵,修改使能信號為低/繪制底色,消除tft顯示的掃頻字樣drawrectfill(160,105,60,30,window_bk_color);l 按鍵4、7:頻率增減按鍵可使頻率系數(shù)freqcoeff在1-99中遞增或遞減,該數(shù)值表示在當(dāng)前頻率檔位中,頻率步進(jìn)的系數(shù),由于頻率步進(jìn)設(shè)計為檔位的0.1倍,故當(dāng)前頻率值的計算公式為:頻率值 = freqcoeff *0.1*freqstep由于freqstep、freqcoeff兩個全局變量可以唯一確定當(dāng)前頻率值,輸出給lcd模塊可以在屏幕上可以正確顯示,并輸出正確控制字給dds模塊。/當(dāng)系數(shù)小于99時,按鍵遞增 /當(dāng)系數(shù)大于1時,按鍵遞減if( freqcoeff 1) freqcoeff-;drawfreq(); drawfreq();dds(); dds();l 按鍵5、8:幅度細(xì)調(diào)由于峰峰值的改變是通過開發(fā)板自帶的dac輸出控制電壓來改變壓控放大器的放大倍數(shù)來實現(xiàn),而8位dac輸出電壓值由輸入8位數(shù)字值(voltage)控制,當(dāng)按下“5”、“8”按鍵后,voltage以1為步進(jìn)增減,即可以最小分辨率調(diào)節(jié)輸出波形的峰峰值。voltage+; voltage-;write_dac(voltage); write_dac(voltage);l 按鍵6、9:幅度粗調(diào)為了實現(xiàn)峰峰值以0.1v步進(jìn)增減,設(shè)計步進(jìn)按鈕。按鍵后全局變量vpp相應(yīng)變化,輸出給lcd顯示。讀取v151數(shù)組中相應(yīng)輸出值,使dac輸出正確的壓控電壓,達(dá)到幅度控制的目的。if(vpp 0)vpp-;drawvpp(); drawvpp();voltage=v1vpp; voltage=v1vpp;draw(voltage); draw(voltage);write_dac(voltage); write_dac(voltage);實際聯(lián)調(diào)中,由于dds方波輸出電壓與三角波、正弦波輸出電壓值有很大的區(qū)別,可以在讀取數(shù)組值時,判斷當(dāng)前模式,進(jìn)行對應(yīng)的修改。修改后代碼:if(mode = 0)/方波時voltage = v2vpp;else if(mode = 1 |mode = 2)/三角波、正弦波時voltage=v1vpp6 系統(tǒng)測試與結(jié)果6.1 總體方案選擇6.1.1 原方案我們原定由msp430f149單片機作為波形發(fā)生器的主控制器。因為在種類和數(shù)量繁多的單片機中,ti的msp430系列頗具特色,并具有良好的性能。我們原計劃采用msp430f149控制dds輸出高頻率的正弦波、方波和三角波。輸出的數(shù)字波形通過dac0832轉(zhuǎn)換為模擬波形。模擬波形經(jīng)過濾波、放大、穩(wěn)幅電路后,就可以輸出到示波器觀察。輸入采用44鍵盤中斷控制。這樣可以最大限度的避免占用cpu機時。輸出采用led循環(huán)顯示頻率和幅度,以及用字符表示當(dāng)前波形。下圖是原方案系統(tǒng)框圖:6.1.2 遇到的障礙:但是隨著工作的深入,我們遇到了很多障礙和預(yù)想不到的困難。比如led顯示的效果并不好,特別是和lcd比較起來明顯很粗糙。所以我們決定改用lcd顯示。然而這樣又帶來了新的問題,149不能直接相連lcd去控制,它需要很復(fù)雜的外圍驅(qū)動電路和軟件控制。我們在經(jīng)過很長時間的嘗試之后還是沒能成功。再加上其他很多編程時遇到的細(xì)節(jié)問題,經(jīng)過討論決定使用430開發(fā)板。6.1.3 改進(jìn)方案:考慮到上面的問題,我們購買了一塊開發(fā)板,它使用的是比430f149更先進(jìn)的核心芯片430f5438。工作原理是430產(chǎn)生dds的控制字,讓后者輸出正弦波、三角波或是方波。波形經(jīng)過放大穩(wěn)幅后輸出。其實也可以直接通過查表法讓430產(chǎn)生各種波形,但430系列是以其低功耗見長,數(shù)mhz的主頻雖然并不低,但還不足以產(chǎn)生百khz以上的正弦波形。為了達(dá)到盡可能高的輸出頻率,我們這樣做,而是僅僅把430用作控制用途。為了控制幅度,我們決定使用一個壓控調(diào)幅器件。用430輸出振幅相應(yīng)的數(shù)字信號通過da轉(zhuǎn)換為模擬信號,輸入到vca中控制需要波形的幅度。6.2 硬件電路測試6.2.1 vca810壓控放大器首先,在連接vca810壓控放大器的時候,按照datasheet上面的電路連接,如下圖:由于參考電壓vc應(yīng)為負(fù),調(diào)試階段vc的輸入我用的是-5v的電壓分壓??墒遣ㄐ螏缀鯖]有輸出,而且沒有任何改變放大倍數(shù)的跡象。這塊芯片的電路調(diào)了一整天,后來發(fā)現(xiàn)rc不能連,因為會和我設(shè)計的分壓器并聯(lián),使得電壓非常低,去掉之后波形的沖擊消失。但是仍然不可調(diào)放大倍數(shù),后來將rl由并聯(lián)改成串聯(lián),串上一個100歐的電阻,結(jié)果輸出波形正常。datasheet上的vca810可調(diào)放大倍數(shù)范圍是1/100100,由于實際上芯片只有正負(fù)5v的電壓,而輸入的正弦波和三角波的幅度有680mv,方波的幅度有6.8v,所以實際上不可能達(dá)到100倍,實際上只有七八倍左右,而縮小可以達(dá)到1/100。我們需要精確的調(diào)幅,所以這一級只用它的縮小。我們從da送給它的參考電壓為0-1v。6.2.2 opa1632在調(diào)試由opa1632搭的放大電路時,基本上很順利,只是實際的放大倍數(shù)小于理論的放大倍數(shù)。但是在調(diào)

溫馨提示

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

評論

0/150

提交評論