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

下載本文檔

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

文檔簡介

1、華中科技大學電子與信息工程系2011年TI杯電子設計大賽項目總結(jié)報告題 目:MSP430控制的基于DDS的波形發(fā)生器設計 組 長:何永天(提高0801班 U200814111) 組 員:李戀陽(提高0801班 U200812892) 袁 園(提高0802班 U200813900) 楊春風(電信0804班 U200812791)吳文彬(電信0806班 U200812863) 指導老師:陳林 日 期:2011.7.8目 錄1設計目標41.1基本功能41.2擴展功能42團隊組成53系統(tǒng)設計方案53.1幾種初步方案53.1.1方案一53.1.2方案二63.1.3方案的比較63.2器件選型73.2.1單

2、片機73.2.2數(shù)模轉(zhuǎn)換DAC73.2.3壓控增益放大器73.2.4運算放大器84系統(tǒng)硬件設計與實現(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)軟件設計與實現(xiàn)165.1總體設計框圖165.2初始化175.3DDS185.4LCD顯示195.5DAC215.6鍵盤226系統(tǒng)測試與結(jié)果266.1總體方案選擇266.1.1原方案266.1.2遇到的障礙:276.1.3改進方案:276.2硬件電路測試276.2.1VCA810壓控放大器276.

3、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目標完成情況337.2感想338參考文獻349附錄349.1電路圖349.2源碼清單35511. 設計目標設計并制作一個波形發(fā)生器,該波形發(fā)生器能產(chǎn)生正弦波、方波、三角波和由用戶編輯的特定波形,并根據(jù)用戶輸入選擇產(chǎn)生指定類型與參數(shù)的波形,同時在必要的輔助輸出顯示設備上顯示產(chǎn)生波形的類型與參數(shù)。1.1 基本功能l 具有產(chǎn)生正弦波、方波、三角波三種周期性波形的功能;l 輸出波形的頻

4、率范圍為100Hz-20KHz(非正弦波頻率按10次諧波計算);重復頻率可調(diào),頻率步進間隔100Hz。l 輸出波形幅度范圍0-5V(峰峰值),可按步進0.1V(峰峰值)調(diào)整。l 由外界按鍵輸入選擇產(chǎn)生波形的種類、頻率與峰峰值;l 界面顯示輸出波形的類型、重復頻率(周期)和幅度。1.2 擴展功能l 輸出波形頻率范圍擴展至100Hz-200KHz。l 用鍵盤或其它輸入裝置產(chǎn)生任意波形。l 增加穩(wěn)幅輸出功能,當負載變化時,輸出電壓幅度變化不大于±3%(負載電阻變化范圍:100)。l 可產(chǎn)生單次或多次(1000次以下)特定波形(如產(chǎn)生1個半周期三角波輸出)。l 具有掉電存儲功能,可存儲掉電前

5、用戶編輯的波形和設置。l 其它(如增加頻譜分析、失真度分析、頻率擴展大于200KHz、掃描輸出等功能)。2 團隊組成我們的工作分為以下模塊(詳細分工在個人報告中敘述)l 前期:收集資料、方案設計、器件選型 l 硬件部分:電路參數(shù)設計、proteus制圖及硬件仿真、各單級調(diào)試、PCB布線、通用版布線、電路焊接、排查焊接錯誤 l 軟件部分: LCD模塊、鍵盤掃描模塊、DDS模塊、調(diào)頻、掃頻、模塊間接口設計與實現(xiàn)、自選波形模塊(DA部分)、軟件聯(lián)調(diào)l 后期:硬件級聯(lián)調(diào)試、軟件聯(lián)調(diào)報告書寫、文檔排版、幻燈片演示、視頻制作、答辯展示3 系統(tǒng)設計方案3.1 幾種初步方案3.1.1 方案一由MSP43F14

6、9單片機產(chǎn)生三角波、正弦波和方波,并且控制波形之間的轉(zhuǎn)換,以及波信號的頻率和幅度。用LCD液晶顯示模塊顯示波形的種類和相關(guān)參數(shù)。單片機輸出數(shù)字信號,通過DAC進行數(shù)模轉(zhuǎn)換。采用低通濾波器濾除DAC轉(zhuǎn)換過程中形成的高頻小鋸齒波,運算放大器進行放大,電壓跟隨器穩(wěn)幅,最后送入示波器顯示信號。3.1.2 方案二用DDS(直接數(shù)字合成 Direct Digital Synthesis)芯片產(chǎn)生三角波、正弦波和方波,并用MSP430單片機送控制字給DDS以控制波形之間的轉(zhuǎn)換,以及波信號的頻率,通過TI公司的VCA810壓控放大器芯片進行調(diào)幅。然后通過濾波器濾除高頻噪聲,通過放大電路對信號進行放大,之后通過

7、緩沖對信號進行穩(wěn)幅,最后送入示波器顯示信號,用單片機產(chǎn)生任意波形和其他擴展功能。3.1.3 方案的比較方案一的基本思路是用單片機發(fā)出指令輸出相應的數(shù)字量,然后通過DA產(chǎn)生要求的模擬量,但是存在一個致命的問題,那就是本次的頻率基本要求為100Hz-20KHz,擴展要求是100-200KHz,但是通常的MSP430系列單片機的晶振一般為8M左右,指令周期是機器周期,可達1/8ms,所以對生成方波來說還可以,而要合成三角波或正弦波則存在很多問題,程序?qū)崿F(xiàn)難度很大,所以我們最終放棄了這個方案。方案二的基本思路是走兩條路,使用DDS芯片產(chǎn)生三種基本波形,用單片機實現(xiàn)任意波形以及控制和顯示等功能,容易對功

8、能進行擴充,且外圍電路簡單,系統(tǒng)可靠性較高,編程實現(xiàn)較為簡單,整個系統(tǒng)成本較低,我們最終選擇了這個方案。信號初步產(chǎn)生之后都要經(jīng)過濾波、放大、緩沖輸出等電路,各個方案下的設計大同小異,主要還是需要穩(wěn)定可靠,帶寬很寬。3.2 器件選型3.2.1 單片機選用MSP430F5438單片機,因為在種類和數(shù)量繁多的單片機中,TI的MSP430系列頗具特色,并具有良好的性能。3.2.2 數(shù)模轉(zhuǎn)換DAC按照設計好的方案,擴展功能中的任選波形用DA來實現(xiàn),有2種方法:外接DAC0832或者自帶的DAC5571。l 自帶的DAC5571優(yōu)點:使用較簡單(因為有完整的test代碼和文檔,而且已經(jīng)集成在5438的開發(fā)

9、板上);缺點:速度上不去(因為5438自帶的操作DA用來產(chǎn)生任選波形的代碼要放在main中,但main函數(shù)比較龐大,影響了任選波形的頻率)l 外接DAC0832優(yōu)點:可以自己去設計DA的驅(qū)動函數(shù),產(chǎn)生的任選波形的頻率較高;缺點:設計和搭電路較復雜(0832的輸出端還要加運放來將電流輸出轉(zhuǎn)換成電壓輸出)我們選擇第一種自帶DA3.2.3 壓控增益放大器比較兩個選擇:VCA810和VCA822。具體來說,我們比較它們的增益帶寬積,輸出(驅(qū)動)電流,及我們對芯片的熟悉程度。最后決定選擇VCA810,利用DAC產(chǎn)生控制電壓改變放大器的增益??刂齐妷汉头糯笃髟鲆娉删€性,方便實現(xiàn)精確的增益控制。VCA810

10、的最小增益步進僅取決于 DAC 的位數(shù),可以實現(xiàn)增益微調(diào),為閉環(huán)改善放大器的性能提供方便。3.2.4 運算放大器主要考慮因素有增益帶寬積,輸出驅(qū)動電流(表明帶負載的能力),噪聲電壓,電路復雜程度,對芯片的熟悉程度和價格,對于常用的幾個比較結(jié)果如下:l OPA1632:增益帶寬積:180MHZ; 輸出驅(qū)動電流:150mAl OPA551:帶寬:3MHZ;,增益帶寬積:3MHZ; 輸出驅(qū)動電流:200mAl OPA552:帶寬:12MHZ,增益帶寬積:3MHZ; 輸出驅(qū)動電流:200mAl NE5532:小信號帶寬:10MHZ, 輸出驅(qū)動電流:60mAl THS4031:增益帶寬積:100MHZ,

11、 輸出驅(qū)動電流:90mAl THS4521:帶寬:145MHZ, 輸出驅(qū)動電流:100mAl uA741:增益帶寬積:1MHZ, 輸出驅(qū)動電流:25mAl 綜合考慮,opa1632各項性能比其他芯片要好很多,因此決定選用opa16324 系統(tǒng)硬件設計與實現(xiàn)4.1 系統(tǒng)框圖 由MSP430單片機通過3個SPI接口控制AD9833產(chǎn)生各種頻率的正弦波、三角波、方波,經(jīng)放大整形電路后輸出,并通過獨立的按鍵切換輸出的波形,也可改變頻率和幅度以及頻率和幅度變化的步進(通過軟硬件的配合)。通過TFT液晶模塊和獨立按鍵進行人機交互。系統(tǒng)上電后檢查啟動按鍵是否按下,當啟動按下被按下時,啟動各個模塊,與此同時檢

12、查被按下的按鍵值。當檢查到不同的按鍵被按下時,由MSP430通過SPI控制AD9833進行相應的改變。4.2 系統(tǒng)電路圖其中DDS模塊較為復雜,上圖只是外部接口。其詳細電路設計如下圖所示:4.3 器件清單l msp430f5438開發(fā)板(1個)l VCA810壓控增益放大器(1個)l OPA1632放大器(3個)l AD9833(1個)l UA741放大器(1個)l 電阻,電容,導線若干4.4 模塊分析4.4.1 DDS 1) AD9833介紹AD9833是ADI公司的一款低功耗的DDS器件,能夠輸出正弦波、三角波、方波。AD9833無需外接元件,輸出頻率和相位可通過軟件編程設置,易于調(diào)節(jié)。其

13、頻率寄存器為28位,主頻時鐘為25 MHz時,其精度為01 Hz;主頻時鐘為l MHz時精度可達0004 Hz.AD9833內(nèi)部有5個可編程寄存器:1個16位控制寄存器,用于設置器件_T作模式;2個28位頻率寄存器和2個12位相位寄存器,分別用于設置器件輸出正弦波的頻率和相位。它的SIN-ROM查詢表把輸入的地址相位信息映射成正弦波幅值的數(shù)字量信號,驅(qū)動DA轉(zhuǎn)換器輸出模擬量。輸出正弦波頻率為:fout=FREQREG(fMCLK/228)式中:FREQREG為頻率控制字,由頻率寄存器FREQOREG或FREQlREG的值給定,其范圍為0M<228-1 fMCLK為參考時鐘頻率。2) 從單

14、片機輸入控制字AD9833模塊有3根串行接口線,分別是FSYNC、SCLK和SDATA,與SPI、QSPI、MICROWIRE和DSP接口標準兼容,在串口時鐘SCLK的作用下,數(shù)據(jù)是以16位的方式加載到設備上,F(xiàn)SYNC引腳是使能引腳,電平觸發(fā)方式,低電平有效。進行串行數(shù)據(jù)傳輸時,F(xiàn)SYNC引腳置低,在16個SCLK的下降沿數(shù)據(jù)通過SDATA引腳被送到AD9833的輸入移位寄存器。因此,此處我們通過3個100的電阻進行限流,并將這3個引腳接到單片機MSP430F5438的P9.4、P9.3和P9.2腳,通過單片機來控制AD9833。下圖是SCI串行數(shù)據(jù)通信的時序圖:3) 從Vout的各種輸出O

15、PBITEN BitMODE BitDIV2 BitVOUT Pin00X正弦波01X三角波100DAC數(shù)據(jù)的MSB / 2 101DAC數(shù)據(jù)的MSB其中MSB/2和MSB對應為方波,且MSB/2為MSB頻率的一半。即正弦波,三角波,方波對應的頻率控制字分別為:0x2000,,0x2002,0x2028(MSB方波),0x2020(MSB/2方波)。4) 完整工作流程簡介l 雖然MSP430單片機具有硬件SPI總線功能,但是一次只能傳輸8位數(shù)據(jù)位,而AD9833在接收數(shù)據(jù)時是16位數(shù)據(jù)位,因此,需要用軟件模擬SPI總線;l AD9833在接收16位數(shù)據(jù)時是高位在前,低位在后;l 先發(fā)送控制寄存

16、器字然后發(fā)送想要的頻率字;l 發(fā)送數(shù)據(jù)前必須把FSYNC置成低電平,發(fā)送完以后把FSYNC置成高電平;l 當對AD9833初始化時,為了避免DAC產(chǎn)生虛假輸出,RESET必須置為1,直到配置完畢,需要輸出時才將RESET置為0。RESET為0后的89個MCLK時鐘周期就可在DAC的輸出端觀察到波形。l 在+5V的電源電壓下DDS的輸出峰峰值為:0.6V,但測試后發(fā)現(xiàn)三角波和正弦波的輸出峰峰值在0.68V左右,而方波的輸出峰峰值超過6V,這也成為后面處理的一個考慮的比較多的問題4.4.2 幅度控制1) 我們考慮了如下四種方案:i. 由數(shù)控電位器組成的電阻分壓網(wǎng)絡控制幅度。 ii. 采用峰值檢波器

17、獲得輸出端的電壓幅值,經(jīng)A/D采樣后得到輸出端當前的電壓幅值,然后就得到了輸出當前的電壓幅值,然后通過與預設的輸出幅值比較就可以知道輸出下降的情況。并由單片機控制放大器增加放大倍數(shù),直至輸出幅值調(diào)整到預期值。 iii. 采用一級D/A轉(zhuǎn)換實現(xiàn)。直接將DDFS產(chǎn)生的信號作為參考電壓輸入到D/A中,這樣D/A就成為一個數(shù)控可變增益放大器,通過改變D/A的轉(zhuǎn)換數(shù)據(jù)就可以控制輸出幅度。 iv. 數(shù)模轉(zhuǎn)換和幅度控制部分采用雙D/A技術(shù),由單片機控制,第一級D/A的輸出波形作為第二級D/A的基準電壓源,以此來控制信號發(fā)生器的輸出電壓幅度。最后經(jīng)分析和試驗,方案四電路簡單、通過軟件控制、可控性強,故采用這種

18、方案。2) VCA810介紹本實驗中,調(diào)幅部分我們選用TI公司的VCA810芯片,VCA810是一個寬帶、連續(xù)變化、電壓控制增益放大器。它提供了一個對差分輸入單端輸出轉(zhuǎn)換與高阻抗輸入用來改變增益控制的增益線性范圍為-40dB到+ 40dB在dB / V。供給電壓±5V、VCA810增益控制電壓在0V時為-40dB,在-2V為+ 40dB。增加地面控制電壓將衰減信號> 80dB。信號帶寬和壓擺率保持在整個增益調(diào)節(jié)范圍內(nèi)保持恒定。這40db/ V增益控制在±1.5db(最高誤差范圍±0.9db),讓應用程序在一個AGC增益控制電壓精確到作為接收信號強度指示器(R

19、SSI)的使用精度為±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倍,差不多

20、達到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介紹設計運算放大器時,我們考慮了許多不同型號的運放,功能各異,主要考慮增益帶寬積,輸出驅(qū)動電流(表明

21、帶負載的能力),噪聲電壓,(電路復雜程度,芯片熟悉程度,價格)等等。TI公司的OPA1632是音頻運算放大器,性能比較好。增益帶寬積為180MHZ,輸出驅(qū)動電流為150mA。可以工作在較高頻率下而不出現(xiàn)失真,且驅(qū)動能力較好。2) 功能實現(xiàn)該實驗中,我們主要用OPA1632設計放大電路和電壓跟隨器。放大電路主要分為同相比例放大器和反相比例放大器兩種。 反相比例放大器 同相比例放大器反相放大電路有如下特點:l 運放兩個輸入端電壓相等并等于0,故沒有共模輸入信號,這樣對運放的共模抑制比沒有特殊要求。l vN= vP,而vP=0,反相端N沒有真正接地,故稱虛地點。l 電路在深度負反饋條件下,電路的輸入

22、電阻為R1,輸出電阻近似為零。l 輸入輸出關(guān)系: Vo=-RfRlVs同相比例運算電路的特點如下:l 輸入電阻很高,輸出電阻很低。l 由于vN= vP= vS,電路不存在虛地,且運放存在共模輸入信號,因此要求運放有較高的共模抑制比。l 輸入輸出關(guān)系: Vo=(1+RfRl)Vs由于實際放大倍數(shù)比理論值低,所以我們設計Rf=100千歐,R1=5.1千歐,放大倍數(shù)約為21倍。4.4.4 自選波形實現(xiàn)自選波形有兩種不同的理解和方法:l 手動描波形,由硬件接收,然后描點顯示出來;l 寫好一組波形,存在flash內(nèi)部,通過按鍵選擇我們實現(xiàn)的是第二種,首先用MATLAB描出想要產(chǎn)生的任意波形,然后取出大量

23、的點寫入代碼中,將波形描繪出來。按照設計好的方案,擴展功能中的任選波形用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)點:可以自己去設計DA的驅(qū)動函數(shù),產(chǎn)生的任選波形的頻率較高;缺點:設計和搭電路較復雜(0832的輸出端還要加運放來將電流輸出轉(zhuǎn)換成電壓輸出)綜上考慮,我們選擇使用自帶的DAC處理。4.4.5 鍵

24、盤本實驗中,我們通過按鍵實現(xiàn)波形切換和調(diào)頻、調(diào)幅。通過開關(guān)實現(xiàn)波形的切換比較簡單只需通過輸出波形后不斷返回到檢測開關(guān)的子程序中,判斷是否有別的開關(guān)撥動,如果有別的開關(guān)撥動則執(zhí)行別的程序,否則輸出原來的波形,不過如果要能夠識別別的開關(guān)發(fā)生變化,必須將此開關(guān)關(guān)掉否則會識別不了別的鍵按下。當然開關(guān)的調(diào)頻和調(diào)幅的實現(xiàn)也一樣,不過首先先輸出一個波形,然后再檢測開關(guān)是否需要調(diào)頻或者調(diào)幅,如果需要則轉(zhuǎn)入到相應的程序中,最后再重新輸出波形。下面是我們設計的按鍵對應控制的功能:4.4.6 LCD顯示我們使用的是BW-DK5438開發(fā)板自帶的TFT液晶屏,用SPI的SCK端來驅(qū)動液晶的寫信號,當全屏刷新、區(qū)域填充

25、時,刷新速度可達10Mpps,因此可以流暢的運行。下圖是TFT液晶接口示意圖:5 系統(tǒng)軟件設計與實現(xiàn)5.1 總體設計框圖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;/當前檔位下頻率系數(shù)遞增 DDS輸出;LCD顯示; else i

26、f(Mode=3) /自選波形函數(shù) while(ReadKey() = 0xFF) /當無鍵盤按下時,執(zhí)行自選波形DAC循環(huán)輸出 自選波形DAC繪制; ScanKey();/掃描鍵盤5.3 DDS1) 功能介紹主要是對AD933進行SPI模擬與單片機進行連接,再根據(jù)按鍵輸入的數(shù)據(jù)分別轉(zhuǎn)換成正弦波、三角波和方波進行輸出的程序。其中轉(zhuǎn)換的格式固定,但是AD9833輸出頻率時是先低位后高位,區(qū)別于SPI模擬時單片機給AD9833數(shù)據(jù)時是先高位后低位。FSYNC為使能,低電平可傳數(shù)據(jù),剛開始必須為高電平,SCLK為時鐘,在下降沿對應數(shù)據(jù),SDATE為傳數(shù)據(jù)(頻率控制字),16位,但可能單片機輸出一次性

27、為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 (Freq

28、Coeff = 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 = (

29、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對應方波 break; case 1: /Mode=1對應三角波 output_triangle(freq_value); break;

30、 case 2: /Mode=2對應三角波 output_sinusoid(freq_value); break; default: output_sinusoid(0x00005000); 5.4 LCD顯示1) 功能介紹完成液晶初始化、顯示功能。由于TFT性能優(yōu)良、尺寸大,且開發(fā)板自帶TFT液晶驅(qū)動程序以及相應顯示函數(shù),則在編寫過程中,主要內(nèi)容是通過調(diào)用繪制函數(shù),將按鍵輸入的信息顯示在TFTLCD上,從而實現(xiàn)人機交互。在LCD上,我們設計了一個圖形化的顯示界面,它可以實時的反應波形狀態(tài)、頻率、幅值等等信息。下面是該界面的詳細說明,上面標示出了各元素的具體坐標:2) 核心代碼void Ini

31、tInterface(void) /初始化/清屏 Clear_LCD(Color_BK); TA0CCR1 = 220; DrawRectFill(0,0 ,240,320,WINDOW_BK_COLOR); / 繪制背景 DrawRectFill(0,0 ,240,30,STATUS_BK_COLOR); /標題欄 Color_BK = STATUS_BK_COLOR; Color = STATUS_COLOR; PutString24M(60,3,"波形發(fā)生器"); /標題字 DrawRectFill(20,60,205,30,WINDOW_COLOR); / 波形窗口

32、題 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

33、 = 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中繪制檔位提示符 ca

34、se 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",fre

35、q_f);/浮點型數(shù)據(jù)到字符串型轉(zhuǎn)換 DrawRectFill(90,140,70,30,WINDOW_BK_COLOR);/繪制背景覆蓋數(shù)據(jù),以防疊加至當前值 PutString24M(90,140,str);/繪制當前頻率值 if(FreqStep = 0)PutString24M(170,140," Hz");/通過判斷FreqStep取值,確定繪制的單位為“Hz”或“kHz” else PutString24M(170,140,"kHz");l void DrawVpp(void); 繪制峰峰值unsigned char str10;/用于存儲字

36、符型峰峰值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);/繪制當前峰峰值PutString24M(170,175,"V");/繪制單位 “V”5.5 DAC1) 功能介紹DAC在本次設計中完成兩個功能:一、通過改變輸入的數(shù)字信號,輸出自選波形;二、輸出壓控放大器參考電壓,從而改變放大器的增益。2) 核心代碼/初始化#define SD

37、A5571 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();/延遲/

38、核心功能實現(xiàn)if(Mode=3)/當自選波形模式while(ReadKey() = 0xFF)/當沒有鍵盤按下時 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列由鍵盤接口圖以及引腳

39、定義可以看出,P6端口的8條I/O端口線被分成4條行線P6.0P6.3和4條列線P6.4P6.7。按鍵的兩端分別接在行線和列線上,行線與列線的每個交界處均有一個按鍵。如果有按鍵被按下,則與之相連的行線與列線被接通。要想檢測是否有按鍵被按下,先使4條行線輸出低電平,讀列線P6.4P6.7。因為所有列線都經(jīng)上拉電阻接到VCC,如果沒有按鍵被按下,列線讀進來的都是高電平1;如果有按鍵被按下,則列線讀進來的電平應與行線輸出的一致,為低電平0.據(jù)此可以判斷是否有按鍵按下。對于行列掃描式鍵盤,常采用掃描的辦法識別鍵碼。如果4條行線沒有輸出低電平,那么就可以根據(jù)讀列線的值來判斷這一行是否有鍵被按下了。2)

40、核心代碼#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+KP

41、R3) ; _delay_cycles(20) / 鍵盤行輸出列輸入unsigned char ReadKey(void) unsigned char column,row,key;/分別表示行、列線讀取值、返回鍵值 unsigned char Key;/儲存鍵值對應的8位鍵盤掃描值,對應關(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

42、_OUT ;/鍵盤行輸出列輸入 column = KEY_PORT_IN&(KPC0+KPC1+KPC2+KPC3);/讀取P6并屏蔽低4位即列線值 ROW_IN_COL_OUT;/鍵盤列輸出行輸入 Key = row + column;/行列線值相加,則高低4位的不同取值可以表示不同的鍵值 _NOP(); switch(Key)/通過判斷鍵值做出對應的響應 case 0xE7: key=1; break; case 0xD7: key=2; break; /其他鍵值省略 default: key=0xFF; else key=0xFF;/若沒有鍵盤輸出,則返回鍵值0xFF KEY_P

43、ORT_DIR=0xFF;/鍵盤8個IO口均設置為輸出 KEY_PORT_OUT=0x00;/輸出低電平 return key;/返回邏輯鍵值下圖是8位鍵值與邏輯值對應關(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輸出修改后的波形

44、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

45、();/繪制修改后的頻率值dds();/dds輸出修改后的波形l 按鍵3:掃頻按鍵可使掃頻使能信號在0,1中切換,通過判斷是否為可以掃頻的三種基本波形,改變掃頻使能信號,在主函數(shù)中可以確定當前是否處于掃頻狀態(tài),實現(xiàn)掃頻功能。在LCD顯示的過程中,需要注意通過清屏消除“掃頻”字樣。/判斷是否處于三種基本波形模式下,若不是則無掃頻功能if(Mode=0|Mode=1|Mode=2) if (FreqScanEn = 0) /若掃頻使能為低FreqScanEn = 1;/通過按鍵,修改使能信號為高PutString24M(160,105,"-掃頻");/繪制掃頻模式至TFTels

46、e/若掃頻使能為高FreqScanEn = 0;/通過按鍵,修改使能信號為低/繪制底色,消除TFT顯示的掃頻字樣DrawRectFill(160,105,60,30,WINDOW_BK_COLOR);l 按鍵4、7:頻率增減按鍵可使頻率系數(shù)FreqCoeff在1-99中遞增或遞減,該數(shù)值表示在當前頻率檔位中,頻率步進的系數(shù),由于頻率步進設計為檔位的0.1倍,故當前頻率值的計算公式為:頻率值 = FreqCoeff *0.1*FreqStep由于FreqStep、FreqCoeff兩個全局變量可以唯一確定當前頻率值,輸出給LCD模塊可以在屏幕上可以正確顯示,并輸出正確控制字給DDS模塊。/當系數(shù)

47、小于99時,按鍵遞增 /當系數(shù)大于1時,按鍵遞減if( FreqCoeff < 99) FreqCoeff+; if( FreqCoeff > 1) FreqCoeff-;DrawFreq(); DrawFreq();dds(); dds();l 按鍵5、8:幅度細調(diào)由于峰峰值的改變是通過開發(fā)板自帶的DAC輸出控制電壓來改變壓控放大器的放大倍數(shù)來實現(xiàn),而8位DAC輸出電壓值由輸入8位數(shù)字值(voltage)控制,當按下“5”、“8”按鍵后,voltage以1為步進增減,即可以最小分辨率調(diào)節(jié)輸出波形的峰峰值。voltage+; voltage-;Write_DAC(voltage);

48、 Write_DAC(voltage);l 按鍵6、9:幅度粗調(diào)為了實現(xiàn)峰峰值以0.1V步進增減,設計步進按鈕。按鍵后全局變量Vpp相應變化,輸出給LCD顯示。讀取v151數(shù)組中相應輸出值,使DAC輸出正確的壓控電壓,達到幅度控制的目的。if(Vpp < 50) Vpp+; 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方波輸出電壓與三角波、正弦

49、波輸出電壓值有很大的區(qū)別,可以在讀取數(shù)組值時,判斷當前模式,進行對應的修改。修改后代碼: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)過濾波、放大、

50、穩(wěn)幅電路后,就可以輸出到示波器觀察。輸入采用4×4鍵盤中斷控制。這樣可以最大限度的避免占用CPU機時。輸出采用LED循環(huán)顯示頻率和幅度,以及用字符表示當前波形。下圖是原方案系統(tǒng)框圖:6.1.2 遇到的障礙:但是隨著工作的深入,我們遇到了很多障礙和預想不到的困難。比如LED顯示的效果并不好,特別是和LCD比較起來明顯很粗糙。所以我們決定改用LCD顯示。然而這樣又帶來了新的問題,149不能直接相連LCD去控制,它需要很復雜的外圍驅(qū)動電路和軟件控制。我們在經(jīng)過很長時間的嘗試之后還是沒能成功。再加上其他很多編程時遇到的細節(jié)問題,經(jīng)過討論決定使用430開發(fā)板。6.1.3 改進方案:考慮到上面的

51、問題,我們購買了一塊開發(fā)板,它使用的是比430F149更先進的核心芯片430F5438。工作原理是430產(chǎn)生DDS的控制字,讓后者輸出正弦波、三角波或是方波。波形經(jīng)過放大穩(wěn)幅后輸出。其實也可以直接通過查表法讓430產(chǎn)生各種波形,但430系列是以其低功耗見長,數(shù)MHz的主頻雖然并不低,但還不足以產(chǎn)生百kHz以上的正弦波形。為了達到盡可能高的輸出頻率,我們這樣做,而是僅僅把430用作控制用途。為了控制幅度,我們決定使用一個壓控調(diào)幅器件。用430輸出振幅相應的數(shù)字信號通過DA轉(zhuǎn)換為模擬信號,輸入到VCA中控制需要波形的幅度。6.2 硬件電路測試6.2.1 VCA810壓控放大器首先,在連接VCA810壓控放大器的時候,按照Datasheet上面的電路連接,如下圖:由于參考電壓Vc應為負,調(diào)試階段Vc的輸入我用的是-5V的電壓分壓??墒遣ㄐ螏缀鯖]有輸出,而且沒有任何改變放大倍數(shù)的跡象。這塊芯片的電路調(diào)了一整天,后來發(fā)現(xiàn)Rc不能連,因為會和我設計的分壓器并聯(lián),使得電壓非常低,去掉之后波形的沖擊消失。但是仍然不可調(diào)放大倍數(shù),后來將RL由并聯(lián)改成串聯(lián),串上一個100歐的電阻,結(jié)果輸出波形正常。Datasheet上的VCA810可調(diào)放大倍數(shù)范圍是1/100100,由于實際上芯片只有正負5V的電壓,而輸入的正弦波和三角波的幅度

溫馨提示

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

評論

0/150

提交評論