

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 集成運放參數(shù)測試儀——程序設(shè)計</p><p> 內(nèi)容摘要:該課題設(shè)計的運算放大器閉環(huán)參數(shù)測試系統(tǒng)是基于MSC-51單片機控制模塊,并且由LCD(Liquid Crystal Display)顯示模塊,鍵盤模塊,數(shù)據(jù)采集和轉(zhuǎn)換模塊,采用DDS芯片(AD9851)實現(xiàn)了40kHz~4MHz的掃頻輸出模塊等五部分組成。采用輔助運放測試方法,可對運放的輸入失調(diào)電壓、輸入失調(diào)電流、交流差模開環(huán)電壓
2、增益和交流共模抑制比以及單位增益帶寬進行測量。在軟件上,用C語言來編程實現(xiàn)。其要實現(xiàn)的功能包括:對來自TLC2543A/D轉(zhuǎn)換的數(shù)字信號進行接收、分析、計算和對結(jié)果的顯示;通過不同鍵值的接收、分析來控制對不同對象的測量,并在LCD上顯示對應的人機界面;對來自DDS的高頻信號源的頻率進行控制來實現(xiàn)對集成運放的帶寬參數(shù)的測試和顯示。而且具有自動量程轉(zhuǎn)換、自動測量功能和良好的人機交互性。</p><p> 關(guān)鍵詞:單
3、片機 C語言 DDS LCD 人機交互界面</p><p> The Instrument for testing the Parameters of Integrated Operation Amplifier</p><p> ——program design</p><p> Abstract:This system is designed based
4、on C51 microcontroller to measure the close loop parameters of the operation amplifier. The system conclude five modules: LCD (liquid crystal display) display module, keyboard module, data collection module, conversion m
5、odule, and the module of generating sweep sine-wave signal with frequency range from 40 kHz to 4 MHz, using the DDS chip of AD9851. The system can measure the input offset voltage、the input offset current、the open loop A
6、C differential mode v</p><p> Key Words:MCU CLanguage DDS LCD interface</p><p><b> 目 錄</b></p><p><b> 前言1</b></p><p> 一、系統(tǒng)原理框圖1</p
7、><p> 二、硬件單元電路設(shè)計與實現(xiàn)2</p><p> ?。ㄒ唬?、、、四個參數(shù)的測試電路2</p><p> ?。ǘ﹩挝辉鲆鎺挏y量電路3</p><p> ?。ㄈy試的信號源3</p><p> ?。ㄋ模┓宸逯禉z測電路的設(shè)計4</p><p> ?。ㄎ澹〢/D采樣電路
8、4</p><p> (六)掃頻信號源4</p><p> ?。ㄆ撸╂I盤接口電路5</p><p> (八)顯示接口電路5</p><p><b> 三、軟件設(shè)計6</b></p><p> ?。ㄒ唬┸浖δ茉O(shè)計6</p><p> ?。ǘ┫到y(tǒng)
9、軟件框圖和程序流程圖6</p><p> ?。ㄈ┸浖K設(shè)計7</p><p><b> 四、系統(tǒng)測試19</b></p><p> (一)程序調(diào)試方法19</p><p> ?。ǘ┸浖{(diào)試19</p><p> ?。ㄈ┞?lián)機調(diào)試20</p><p>
10、<b> 五、結(jié)束語20</b></p><p><b> 六、感謝詞20</b></p><p><b> 參考文獻20</b></p><p><b> 附錄一21</b></p><p><b> 附錄二22</b
11、></p><p><b> 附錄三36</b></p><p> ?。ㄒ唬㏕LC254336</p><p> (二)LCD液晶顯示器36</p><p><b> 附錄四38</b></p><p><b> 集成運放參數(shù)測試儀</b
12、></p><p><b> ——程序設(shè)計</b></p><p><b> 前言</b></p><p> 目前國內(nèi)外市場上各種型號的集成運放參數(shù)測試儀已經(jīng)相當多,而且普遍性都采用“輔助放大器的測量方法”,使測試儀的整個系統(tǒng)具有穩(wěn)定性好,精確度高,范圍大的特點,而且測試儀測試參數(shù)一般包括:正向最大輸出電壓+,
13、負向最大輸出電壓-,正向最大共模輸出電壓+,負向最大共模輸出電壓-,正轉(zhuǎn)換速率+ ,負轉(zhuǎn)換速率-,靜態(tài)工作電流,輸入失調(diào)電壓,共模抑制比,開環(huán)增益帶寬乘積BW,輸入失調(diào)電流,開環(huán)電壓增益,基極偏置電流等15項。</p><p> 但這種測試儀有一種共同的特點電路系統(tǒng)復雜,成本高,因此在某些應用領(lǐng)域中不能普遍使用。在此我們根據(jù)GB3442—86《半導體集成電路運算電壓放大器測試方法的基本原理》規(guī)定的測試方法來設(shè)計
14、,主要測試參數(shù)包括:輸入失調(diào)電壓,共模抑制比,開環(huán)增益寬帶乘積BW,輸入失調(diào)電流,開環(huán)電壓增益等5個,而且用MSC51系列單片機作為中央處理器,這樣大大降低了成本,并且具有顯示功能,使用方便,體積小,適合搬移,系統(tǒng)穩(wěn)定。</p><p> 在軟件方面,匯編語言是能直接控制單片機的底層語言,而且在控制硬件和位操作等方面表現(xiàn)很優(yōu)異,程序運行時效率也很高,但當用匯編語言來編制復雜的數(shù)學運算類型的程序時就顯得有些不方便
15、。而使用C51高級語言開發(fā)MSC51系列單片機比匯編語言優(yōu)越地多,如程序編寫直觀易懂、便于移植、便于修改和維護、便于進行模塊化程序設(shè)計、提高計算精度等。雖然高級語言在產(chǎn)生代碼方面會比較長些,而且運行速度相對來說會慢些但對于當今作為開發(fā)的計算機軟件來說優(yōu)化程序的編譯已經(jīng)不是問題。在次我們結(jié)合了該設(shè)計自身的特點和需要,綜合分析了以上的優(yōu)、缺點最后決定采用C語言來編程,實現(xiàn)這個課題的功能,從而也提高其使用性。該成品可方便用于小型實驗或個人實驗
16、室等場合。</p><p><b> 系統(tǒng)原理框圖</b></p><p> 該系統(tǒng)包括軟件和硬件兩個方面,程序被下載到單片機中,自動進行一系列測試工作,而且可以通過良好的人機界面對其進行選擇、控制。其整體系統(tǒng)原理框圖如圖1所示。</p><p><b> 圖1 系統(tǒng)原理框圖</b></p><p
17、> 硬件單元電路設(shè)計與實現(xiàn)</p><p> 、、、四個參數(shù)的測試電路</p><p> 按照GB3442—86《半導體集成電路運算(電壓)放大器測試方法的基本原理》規(guī)定的輔助直流測試法,可實現(xiàn)運算放大器直流參數(shù)的準確測量。該方案的測試原理如圖2所示。</p><p> 圖2 GB3442—86規(guī)定的運算放大器直流參數(shù)測試方法</p>
18、<p> 它是國標推薦的測試方法也是目前國際普遍采用的一種測試方法,具有穩(wěn)定性好、精度高、范圍大等特點,可測量各種集成運算放大器的輸入失調(diào)電壓、失調(diào)電流、共模抑制比、差模開環(huán)增益等參數(shù),測試方便,測量輸出的電壓范圍合適。而輔助運放對系統(tǒng)增益的穩(wěn)定性有很關(guān)鍵的作用,雖然也會引起自激,但可以通過一定的方法來抑制。</p><p> 測試這四個參數(shù)的電路可以集成在兩個電路里。首先可以將測試、這兩個參數(shù)的電
19、路通過繼電器做成一個電路系統(tǒng),如圖3所示。電容Cu是補償分布電容,用來抑制自激的發(fā)生,而Cu的值是通過實驗獲得的:先將數(shù)百皮法的瓷片電容接入電路選定位置,觀察自激信號的變化,直到取得使自激信號最小的電容值為止。然后將測試、這兩個參數(shù)的電路也集成一個電路系統(tǒng),如圖4所示。這樣通過兩個核心測量電路就可以完成所有參數(shù)測試,同時通過對繼電器的控制實現(xiàn)了測量的自動化,而且大大簡化了電路。</p><p> 圖3 輸入失調(diào)
20、電壓和輸入失調(diào)電流測試電路</p><p> 圖4 電壓增益和共模抑制比測試電路</p><p> 其測試電路和過程如下:</p><p> 當繼電器1、4分別腳接向3、6腳時,測得輔助運放的輸出電壓記為VL0 ,則有:</p><p> 當繼電器1、4分別腳接向2、5腳時,測得輔助運放的輸出電壓記為VL1,則有:</p>
21、;<p> ③、當把信號源輸出(電壓為VS)接到繼電器的第1腳時,測得輔助運放輸出電壓為VL0,則有</p><p> ④、當把信號源輸出(電壓為VS)接到繼電器的第4腳時,測得輔助運放輸出電壓為VL0,則有</p><p> 通過上述方法就可測得所要測試的四個參數(shù)。</p><p> 單位增益帶寬測量電路</p><p&g
22、t; 單位增益帶寬測量電路為一個反向比例放大器,從P1.3口輸入正弦信號的幅值,改變信號頻率,當P1.3口的輸入電壓幅值下降到3dB時的頻率即為單位增益帶寬。</p><p><b> 測試的信號源</b></p><p> 用文氏電橋電路實現(xiàn)產(chǎn)生4V、5Hz的正弦波。它是由RC振蕩電路構(gòu)成的低頻正弦信號發(fā)生器。通過調(diào)節(jié)電路中的電阻和電容值的大小,可以產(chǎn)生不同頻
23、率和幅度的正弦信號,而且信號比較純。該電路簡單、信號幅度穩(wěn)定,其穩(wěn)定度優(yōu)于1%。經(jīng)過仿真后發(fā)現(xiàn)該電路只能產(chǎn)生400KHz以內(nèi)的信號,但這個頻率范圍已經(jīng)滿足我們的要求。</p><p> 峰峰值檢測電路的設(shè)計</p><p><b> 圖5 峰值檢波圖</b></p><p> 該電路主要由一個二極管和兩個電容組成,用于檢測掃頻信號源的峰值
24、。實際測量表明,該峰值檢測電路在40kHz~4MHz具有很好的線性度。該電路如圖5所示。</p><p><b> A/D采樣電路</b></p><p> 為保證測量精度,該部分電路采用12位串行口——TLC2543。電路如圖6所示。</p><p> 圖6 A/D采樣電路圖</p><p><b>
25、 掃頻信號源</b></p><p> 采用直接數(shù)字頻率合成芯片(AD9851)來產(chǎn)生掃頻信號。它的頻率穩(wěn)定度完全由有源晶振的頻率穩(wěn)定度決定,具有較高的頻率輸出范圍,而且可以直接由單片機的輸出來控制頻率的大小。經(jīng)過輸出掃頻測試,DDS芯片可以在10秒內(nèi)連續(xù)、穩(wěn)定輸出頻率在40kHz-4MHz范圍內(nèi)連續(xù)變化的正弦波。其電路原理圖如圖7所示。</p><p> AD9851采用
26、并行送控制字的方式將頻率控制字送入芯片。頻率控制字FSW與最終合成的信號頻率之間的轉(zhuǎn)換公式為: </p><p> 若系統(tǒng)時鐘頻率為30MHz,則最大分辨率=30×106/232Hz=0.007Hz。遠超出本題1kHz分辯力的要求。</p><p><b> 圖7 掃頻信號源圖</b></p><p><
27、b> 鍵盤接口電路</b></p><p> 鍵盤的接收部分電路如圖8所示:</p><p> 圖8 鍵盤接收電路圖</p><p> 當有按鍵時就觸發(fā)外中斷0,再通過控制片選端(KEY_CS)來讀取當前按鍵的鍵值,這個信號是由74LS138實現(xiàn)的,其地址為C000H;鍵值的編輯則是采用一塊PLD芯片—GAL22V100和一個雙向選通芯片7
28、4LS245來實現(xiàn);數(shù)據(jù)的讀入和其他的數(shù)據(jù)一樣都是通過總線的方式,(74ALS245的輸出端B0到B7與單片機的P0口相連接)。鍵值的四位由低到高分別對應P0.0、P0.1、P0.2、P0.3。該鍵盤中各鍵的功能分配如下:</p><p> KEY0:屏幕復位,鍵值為0;</p><p> KEY1:進入?yún)?shù)測試界面,鍵值為1;</p><p> KEY2:進
29、入幅頻特性測試界面,鍵值為2。</p><p><b> 顯示接口電路</b></p><p> 采用MSC-G12864液晶顯示器。該液晶顯示器的管腳分配和管腳功能使用如表1所示,根據(jù)資料我們在硬件設(shè)計時將其管腳與單片機的連接如下:</p><p> 控制線:P2.3連CS2,P2.2連CS1,P2.1連R/W,P2.0連R/S,P2.
30、4連E;</p><p> 數(shù)據(jù)線:D0~D7分別與P0.0~P0.7相連接;</p><p> 因此液晶顯示器和單片機的接口電路連接如圖9所示。</p><p> 表1 液晶顯示器管腳分配</p><p><b> 圖9顯示接口電路圖</b></p>
31、;<p><b> 軟件設(shè)計</b></p><p><b> 軟件功能設(shè)計</b></p><p> 軟件系統(tǒng)以界面直觀、利于操作、便于維護和升級為基礎(chǔ)。而且為了增強系統(tǒng)的抗干擾性,還增加了軟件陷阱處理,防止軟件的“跑飛”。</p><p> 對于軟件功能的設(shè)計不僅僅是對程序的簡單設(shè)計,還包括對各電
32、路間接口的設(shè)計,接口設(shè)計描述的是軟件如何與外界系統(tǒng)進行通信,軟件內(nèi)部如何通信、以及軟件和軟件的使用人員之間如何通信等問題。一個接口意味著一個信息流(例如,數(shù)據(jù)或控制流等),因此,在這里的一個重點就是要實現(xiàn)如何更好的分配數(shù)據(jù)和控制流,從而實現(xiàn)整個功能。</p><p> 系統(tǒng)軟件框圖和程序流程圖</p><p> AT89C52是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8 位單片
33、機,片內(nèi)含8K bytes 的Flash ROM和256 bytes的SRAM。器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),與標準MCS-51指令系統(tǒng)及8052產(chǎn)品引腳兼容。本系統(tǒng)以單片機AT89C52為主控核心,系統(tǒng)軟件和硬件的接口框圖如圖10所示,程序流程圖如圖11所示。與單片機相連的接口電路還包括鍵盤接口電路,LCD接口電路,轉(zhuǎn)換模塊接口電路。</p><p> 圖10系統(tǒng)軟件和硬件的接口框圖&
34、lt;/p><p><b> 圖11程序流程圖</b></p><p><b> 軟件模塊設(shè)計</b></p><p> 軟件設(shè)計工作是建立在自頂而下和模塊化的設(shè)計方法之上的。這就是說,軟件應在邏輯上分割為實現(xiàn)特定功能部分的子程序,既程序編寫的模塊化,這樣無論在設(shè)計、編碼、還是以后的維護上都提供了很大的方便。在此我們根據(jù)
35、接口電路的需要可以把該程序分為六個模塊:主程序模塊、顯示模塊、鍵盤模塊、高頻輸出模塊、轉(zhuǎn)換模塊、數(shù)據(jù)處理模塊。雖然每個模塊之間都是利用數(shù)據(jù)的傳送將他們聯(lián)系起來,但在功能的實現(xiàn)上都是獨立的。</p><p><b> ?、?主程序模塊</b></p><p> 該模塊主要包括main()函數(shù)。</p><p> 在將程序進行模塊化時當然還要將
36、各個子程序聯(lián)系起來,在主程序里就是要實現(xiàn)它們之間邏輯關(guān)系的聯(lián)系,而且基于單片機自身的特點,主程序應該是一個死循環(huán)的過程,否則程序執(zhí)行完一次程序后就會跑飛,而不能實現(xiàn)整體功能,因而使整個系統(tǒng)處于癱瘓狀態(tài),此時只能通過重新斷電和通電才能使系統(tǒng)重新運行,即使這樣該系統(tǒng)還是會再次進入癱瘓狀態(tài)。因此只能利用死循環(huán)來解決這個問題,這也是對單片機編程的一種常用的方法。</p><p> 在主程序模塊中,主要實現(xiàn)的功能為:剛開
37、機時,對外圍設(shè)備進行初始化設(shè)置,然后顯示主界面,即歡迎界面;等待按鍵,通過按鍵標志來判斷是否要調(diào)用按鍵處理函數(shù)keycl()。在keycl()函數(shù)中包括對不同鍵值的判斷,并調(diào)用數(shù)據(jù)采集、分析、處理、顯示等函數(shù)。因此主函數(shù)的流程圖如圖12所示。該主函數(shù)處于一種死循環(huán)的狀態(tài)。</p><p> 圖12 主函數(shù)流程圖</p><p> 主函數(shù)的程序如下所示:</p><p
38、> /*********************************/</p><p> /* 主函數(shù) */</p><p> /********************************/</p><p> void main()</p><p><b> {&
39、lt;/b></p><p> unsigned char k,adbuf,dabuf,rambuf;</p><p> idata unsigned int *para=&ramaddr;</p><p> ad2543(0x0C); //預先將要讀取數(shù)據(jù)的通道數(shù)送入</p><p> dabu
40、f=0xff;</p><p> P3_4=1; //改變繼電器</p><p> INTlcd(); /* 調(diào)初始化函數(shù) */</p><p> CLEAR(); /* 調(diào)清屏函數(shù) */</p><p><b> EA=1;&
41、lt;/b></p><p><b> EX0=1;</b></p><p><b> IT0=1;</b></p><p><b> flag=0;</b></p><p> fw(); //復位</p><p
42、> while(1) //使程序處于死循環(huán)</p><p><b> {</b></p><p> if(flag==1) //當有按鍵按下時</p><p> keycl(); //調(diào)用鍵盤處理函數(shù)包括對數(shù)據(jù)采集、分析、計算</p><
43、;p><b> }</b></p><p><b> }</b></p><p> 其中INTlcd()函數(shù),CLEAR()函數(shù)和fw()函數(shù)將在附錄一里給出。</p><p><b> ?、?顯示模塊</b></p><p> 顯示模塊主要是負責跟液晶顯示器接口
44、的程序模塊,包括液晶的驅(qū)動程序和結(jié)果顯示程序。該模塊主要是由xianshi()函數(shù)組成,它的功能是將處理結(jié)果數(shù)據(jù)顯示在LCD上。流程圖如圖13所示。其中調(diào)用了寫中文函數(shù)whz(),寫西文函數(shù)wcode()。流程圖如圖14所示,以及兩個判忙函數(shù)BUSYM(),BUSYR(),兩個寫指令函數(shù)PR1(),PR4(),兩個寫數(shù)據(jù)函數(shù)PR2(),PR5(),該模塊在設(shè)計時主要考慮單片機和液晶之間的管腳連接,以及液晶自身的地址分配。在此我們參考了液
45、晶顯示器的使用手冊,分析了在硬件上單片機的管腳分配情況,因此單片機和液晶的接口電路如圖9。其地址控制說明如圖15所示,接口管腳電平說明如表2所示。</p><p> 圖13 顯示模塊流程圖 圖14寫中、西文函數(shù)流程圖</p><p> 圖15地址控制說明圖</p><p> 表2: LC
46、D管腳電平說明表</p><p> 由液晶顯示器的資料可知LCD是由兩片KS0108B組成,且在液晶顯示器上片選CS1,CS2都是高電平有效,E腳:芯片使能端,是高電平或下降沿到來時有效,即只有當它為高電平或下降沿來時才能進行讀、寫入數(shù)據(jù)或者寫指令操作,當該管腳為低電平時為忙狀態(tài),因此結(jié)合硬件電路的設(shè)計可得到液晶顯示器的地址分配為:</p><p> #define cwadd2 X
47、BYTE[0xb400] /*第二片寫狀態(tài)地址*/</p><p> #define cradd2 XBYTE[0xf600] /*第二片讀狀態(tài)地址*/</p><p> #define dwadd2 XBYTE[0xb500] /*第二片寫數(shù)據(jù)地址*/</p><p> #define cwadd1 XBYTE[0xb800]
48、/*第一片寫狀態(tài)地址*/</p><p> #define cradd1 XBYTE[0xfa00] /*第一片讀狀態(tài)地址*/</p><p> #define dwadd1 XBYTE[0xb900] /*第一片寫數(shù)據(jù)地址*/</p><p> #define display_on 0x3f; //開顯示</p>
49、<p> #define display_off 0x3e; //關(guān)顯示</p><p> #define para1 0x40; /*設(shè)置列地址*/</p><p> #define start_line0 0x0c0; /*開始顯示行為第0行*/</p><p> #define page
50、 0xb8 //設(shè)置頁地址</p><p> 在顯示數(shù)據(jù)之前一定要進行對液晶進行判忙工作,只有當液晶處于空閑狀態(tài)才能對液晶進行寫入操作,因此在開始對液晶進行寫入指令和數(shù)據(jù)之前要先調(diào)用兩個判忙函數(shù),一個是BUSYM()即對左片判忙,還有一個是BUSYR()即對右片進行判忙。而且只有當液晶是處于空閑和開狀態(tài)的時候,才能進行下一個操作,否則將在此進入死循環(huán)中。</p><
51、;p> 其中寫指令函數(shù)PR1(),PR4(),主要功能是設(shè)置液晶顯示器的地址;寫數(shù)據(jù)函數(shù)PR2(),PR5()是在地址設(shè)置后將要顯示的數(shù)據(jù)寫入到液晶顯示器中;寫中文函數(shù)whz()是顯示中文字符,寫西文函數(shù)wcode()是顯示西文字符。以下給出了xianshi()函數(shù)具體程序,其它的程序在附錄里給出,這里就不一一詳述。</p><p> /*********************************
52、*****/</p><p> /* 顯示結(jié)果 */</p><p> /**************************************/</p><p> void xianshi(void)</p><p><b> {float k;</b>
53、</p><p><b> int j;</b></p><p> unsigned char i,last,hang,lie;</p><p> for(i=64;i<=100;i+=6)</p><p> wcode(i,4,47);</p><p><b> j=4
54、;</b></p><p> //求出每一位數(shù),便于在LCD上顯示</p><p> for(i=0;i<5;i++)</p><p> {average[i]=(int)(average[i]*1000); //擴大1000倍,所以要顯示的數(shù)據(jù)有4位小數(shù)</p><p> average[i]=ave
55、rage[i]/10;</p><p> for(j=6;j>0;j--) //要顯示的數(shù)據(jù)共5位從最后一位開始顯示</p><p><b> {</b></p><p> k=average[i]-(int)average[i]; //獲得最后一位小數(shù)</p&g
56、t;<p> if (k<0.000000)</p><p> k=0.000000;</p><p> average[i]=(int)average[i];</p><p> last=k*10; // 將獲得的最后一個小數(shù)轉(zhuǎn)換為整數(shù),便于顯示</p><p> l
57、ie=64+j*7; //要顯示的數(shù)據(jù)的行、列</p><p><b> hang=7-i;</b></p><p> if (j==5) //要顯示的數(shù)據(jù)共5位,有四位小數(shù)</p><p> {wcode(lie,hang,46);
58、 //顯示小數(shù)點</p><p> lie=lie+5;</p><p><b> j--; }</b></p><p> wcode(lie,hang,last);</p><p> average[i]=average[i]/10; //求出下位數(shù)據(jù)</p><p>&l
59、t;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> ?、?鍵盤模塊</b></p><p> 該模塊主要包括中斷函數(shù)int1() interrupt 0和keycl()函數(shù)。 &l
60、t;/p><p> 為了使該系統(tǒng)更具人性化,在硬件上加入了三個按鍵,相應地在軟件上也離不開這個模塊。這三個按鍵分別用來在:初始界面,參數(shù)測試界面和增加功能的帶寬測試界面之間轉(zhuǎn)換。當有鍵按下,就會產(chǎn)生一個下降沿脈沖從而觸發(fā)中斷的發(fā)生。在中斷函數(shù)中調(diào)用一個延時程序?qū)崿F(xiàn)消抖,如果確定有按鍵按下則將中斷標志變量置1,即flag=1;在主程序中,通過對這個標志變量的查詢,來決定是否調(diào)用函數(shù)keycl()。在該函數(shù)中具體實現(xiàn)不
61、同按鍵要顯示的對應界面,并進行不同的操作。如果當前按下第一個鍵,則調(diào)用復位函數(shù)fw(),返回到初始的歡迎界面,顯示“歡迎使用”這四個字;如果按下的是第二個鍵,在液晶的頂部中間顯示要測試的四個參數(shù) 、、、然后調(diào)用參數(shù)測試函數(shù)ad2543()讀取不同通道的數(shù)據(jù),并通過對繼電器的控制來讀入相同通道中不同參數(shù)所需要的電壓值,然后調(diào)用sort()函數(shù)去掉采集的數(shù)據(jù)中的一個最大值和一個最小值,并將獲得的數(shù)據(jù)轉(zhuǎn)換為真實的電壓值,調(diào)用函數(shù)jisuan(
62、)將數(shù)據(jù)進行平均后再計算參數(shù)結(jié)果,最后調(diào)用函數(shù)xianshi()將處理完的結(jié)果顯示出來;如果按下的是第三個鍵,則顯示頻帶寬度界面,并調(diào)用函數(shù)highsource(</p><p> 圖16 鍵盤模塊程序流程</p><p> /*************************************/</p><p> /* 鍵盤中斷
63、 */</p><p> /*************************************/</p><p> void int1() interrupt 0 </p><p><b> {</b></p><p> delay(100);&l
64、t;/p><p> if (P3^2==0) //消抖</p><p> keyv=keyaddr;</p><p><b> flag=1;</b></p><p><b> }</b></p><p> /****
65、**********************************/</p><p> /* 按鍵處理函數(shù) */</p><p> /**************************************/</p><p> void keycl(void)</p><p><b
66、> {</b></p><p> unsigned char i,j,k;</p><p> flag=0; //清除按鍵標志</p><p> if (keyv==0) //當按下第一個鍵時</p><p> fw(
67、); //顯示主界面即復位</p><p> else if(keyv==1) //當按下第二個鍵時</p><p> {zdcs(); //調(diào)用顯示參數(shù)測試界面</p><p> k=0x0c;
68、//選擇通道0</p><p> for(i=0;i<5;i++) //需要5個數(shù)據(jù)</p><p> { //采集數(shù)據(jù)時要采集8組</p><p> for(j=0;j<8;j++)</p><p><b> {</b></
69、p><p> ad0[i][j]=ad2543(k);</p><p> delay(0x30); //在每次采集之間調(diào)用延時程序</p><p><b> }</b></p><p> delay(0x60); //在要選部通道之間延時</p><p> //
70、通過改變繼電器獲得所需的不同電壓</p><p> if(i==0) //獲得 vlO 當i=0時</p><p> jdq0=1; //當i=1時閉合開關(guān)獲得vli</p><p> if (i==1) </p><p> { //輸入時信號源當i=2時換通道獲得vlo 用來
71、計算avd</p><p><b> jdq0=0;</b></p><p><b> jdq1=0;</b></p><p><b> k=k+0x10;</b></p><p><b> }</b></p><p>
72、if (i==2) //i==3時獲得vlo 是用來計算dcmr</p><p><b> jdq1=1;</b></p><p> if (i==3) //更換通道 獲得信號源電壓</p><p><b> {</b></p><p><
73、b> jdq1=0;</b></p><p> k=k+0x10; //通道數(shù)加1</p><p> //因為輸入通道數(shù)時只有前面的四位數(shù)有效</p><p><b> }</b></p><p><b> }</b></p><p>
74、; sort(); //去掉一個最大值和一個最小值,并轉(zhuǎn)換為真實的電壓值</p><p> jisuan(); //將數(shù)據(jù)進行平均,后再進行計算參數(shù)結(jié)果</p><p> xianshi();} //顯示獲得的結(jié)果</p><p> else if(keyv==2)
75、</p><p> highsource(); //輸出高頻信號,頻率的分辨率為1KHz</p><p> flag=0; //清除按鍵標志</p><p><b> }</b></p><p><b> } </b><
76、;/p><p><b> 其中</b></p><p> jdq0,jdq1:繼電器通斷標志變量;</p><p> falg:按鍵標志變量,有鍵按下則為1,否則為0;</p><p> keyv:存放不同按鍵的鍵值;</p><p> ad0[i][j]:存放來自通道的電壓信號的數(shù)據(jù),id
77、ata unsigned int ad0[5][8]存放參數(shù)測試所需要的5組數(shù)據(jù),又把每個所需要的數(shù)據(jù)采集的8次,因此每組數(shù)據(jù)中包括8個數(shù)據(jù),這樣真正采集的數(shù)據(jù)應該是40個。</p><p><b> ?、?高頻輸出模塊</b></p><p> void highsource()函數(shù)是控制DDS產(chǎn)生正弦波的,產(chǎn)生的正弦波的分辨率為1KHz。以下是AD9851的部分
78、管腳功能說明:</p><p> 4–1,28—25(D0—D7):是8位的數(shù)據(jù)輸入口,其中D0(4腳)是低位,D7(25腳)是高位;</p><p> 5(PGND):接地端;</p><p> 6(PVCC):電源端;</p><p> 這兩個管腳都是當頻率取輸入數(shù)據(jù)的六倍時用的;</p><p> 7(
79、W_CLK):數(shù)字載入端,上升沿有效,由單片機控制,與P1.5相連; </p><p> 8(FQ_UD):頻率刷新端,上升沿有效,由單片機控制,與P1.6相連;</p><p> 9(REF_CLK):系統(tǒng)時鐘,是外部輸入,直接用10M晶振產(chǎn)生;</p><p> 10、19(AGND):模擬信號接地端;</p><p> 11、1
80、8(AVDD):模擬信號電源端;</p><p> 21(IOUT):輸出口,產(chǎn)生的信號源輸出口,必須接負載后再接入示波器;</p><p> 22(RESET):復位端,高電平時復位,當該管腳是低電平時處于正常工作,該管腳由單片機控制,與P1.7相連。</p><p> AD9851芯片具有輸入數(shù)字信號直接輸出對應頻率的正弦波的功能的芯片,有以上的管腳說明可
81、知,數(shù)據(jù)輸入端只有8個口即D0—D7,但AD9851允許輸入的數(shù)據(jù)范圍為40位,因此在程序中要用串并合用的方法,每次送入8位數(shù)據(jù),并送W_CLK端一個脈沖,使芯片接受送入的數(shù)據(jù),共送5次,先送入的為高電位,送完后將FQ_UD信號置1,使送入得數(shù)據(jù)有效,產(chǎn)生所需要頻率的正弦波。該模塊的程序流程如圖17所示。highsource()函數(shù)如下所示:</p><p> /************************
82、***********************/</p><p> /* 產(chǎn)生高頻信號 */</p><p> /***********************************************/</p><p> void highsource()</p><p&
83、gt;<b> {</b></p><p> unsigned char i, j;</p><p> idata unsigned long step;</p><p> idata unsigned long addr=0x22222222; //頻率的最大值約為4M</p><p> idata un
84、signed char zanc[5]={0x00,0x22,0x22,0x22,0x22};</p><p> unsigned char *p=&dacs; //高頻信號源地址</p><p> unsigned char *p1=&addr;</p><p> unsigned int k;</p>
85、<p> step=0x01000000; //頻率變化的步進值</p><p><b> fq_up=0;</b></p><p><b> w_clk=0;</b></p><p><b> reset=1;</b></p>
86、<p> j++; //延時作用</p><p><b> j++;</b></p><p><b> reset=0;</b></p><p> for(k=1;k<0x0f78;k++) //產(chǎn)生信號源,由
87、于指針之間不能直接付值所以用</p><p> //zanc變量作為它的中間變量</p><p><b> {</b></p><p><b> p=&dacs;</b></p><p><b> p1=&addr;</b></p><
88、;p> for(i=1;i<5;i++)</p><p><b> {</b></p><p> zanc[i]=*p1;</p><p><b> p1++;</b></p><p><b> }</b></p><p> fo
89、r(i=0;i<5;i++)</p><p><b> { </b></p><p> *p=zanc[i];</p><p> w_clk=1; //送頻率控制字,先高位,后低位</p><p><b> j++;</b></p><
90、p><b> j++;</b></p><p><b> w_clk=0;</b></p><p><b> }</b></p><p> fq_up=1; //產(chǎn)生一個上升沿</p><p><b> j+
91、+;</b></p><p><b> fq_up=0;</b></p><p> delay(100);</p><p> if (addr<step) </p><p> step=0x10000;</p><p> addr-=step;
92、 //改變頻率值</p><p><b> }</b></p><p><b> }</b></p><p> 圖17 高頻輸出模塊圖</p><p><b> ?、?轉(zhuǎn)換模塊</b></p><p> 該模塊主要包括ad2543
93、()函數(shù),主要實現(xiàn)采集通道中的數(shù)據(jù),并將模擬信號轉(zhuǎn)換為數(shù)字信號。</p><p> 從測試板輸出的信號仍然是模擬信號,而單片機只能對數(shù)字信號進行處理,因此對于單片機而言是不可能識別模擬信號的大小,只能判斷有無電壓的輸入,所以測試板中的信號通過峰峰值檢測后必須經(jīng)過A/D轉(zhuǎn)換才能和單片機相連,被程序讀入并做相應的處理。</p><p> 轉(zhuǎn)換模塊的程序主要是負責讀取來自TLC2543的數(shù)據(jù)
94、,該芯片有11路模擬信號輸入通道(AN0~AN10),兩個參考電壓輸入端(REF+,REF-)和5個控制管腳。其接口電路如圖6所示。它們的功能分別為:</p><p> AN0~AN10:11路模擬輸入通道</p><p> REF+:正參考電壓,輸入端</p><p> REF-:負參考電壓,輸入端,一般直接接地</p><p>
95、IOCLK:輸入輸出脈沖,當讀輸出數(shù)據(jù)時下降沿有效,當輸入地址時,上升沿有效,輸入端</p><p> DATA INPUT:地址選擇端,輸入當前要轉(zhuǎn)換的模擬信號的通道號,四位串行輸入,輸入端</p><p> DATA OUT:12位數(shù)字串行信號輸出口,輸出端
96、 </p><p> EOC:輸出結(jié)束標志,轉(zhuǎn)換結(jié)束后自動置1,輸出端</p><p> CS:片選信號,低電平有效,輸入口</p><p> 圖18 轉(zhuǎn)換模塊的程序流程圖</p><p> 轉(zhuǎn)換模塊的程序流程如圖18所示,其工作原理為:轉(zhuǎn)換輸出電平的量程大小為正負參考電壓之
97、差,輸入模擬信號的電壓范圍即為正負參考電壓的大小,一般REF+大小要小于或等于V+;當要開始A/D轉(zhuǎn)換時,先使該芯片有效,即使/CS信號端為低電平,連續(xù)輸入四個IOCLK,在IOCLK的上升沿處在DATA INPUT端口輸入要轉(zhuǎn)換的通道地址,高位在前,低位在后,通道地址的范圍為0到10,并且在IOCLK的第四個脈沖的下降沿到來時,讀入選擇的通道中的模擬信號并開始轉(zhuǎn)換;調(diào)用延時函數(shù)作為其轉(zhuǎn)換時間,然后單片機要給A/D芯片的IOCLK端口連
98、續(xù)16個脈沖,在每個脈沖的下降沿到來時讀取A/D中的一位數(shù)據(jù),先讀入的數(shù)據(jù)為高位,在程序中利用左移功能,將前12位數(shù)據(jù)保存在變量ad中,后4位數(shù)據(jù)為無效數(shù)據(jù)舍去,然后返回到上級函數(shù)。其實在該函數(shù)中采用送通道數(shù)和讀數(shù)據(jù)在同一個時刻進行,事實上讀的數(shù)據(jù)是上次送的通道數(shù)的結(jié)果。因此在主函數(shù)中預先調(diào)用一次ad2543()函數(shù)作為預先送通道數(shù)的操作。ad2543()函數(shù)如下所示:</p><p> /*********
99、******************************/</p><p> /* 讀取ad2543中的數(shù)據(jù) */</p><p> /***************************************/</p><p> unsigned int ad2543(unsigned char tin) //
100、tin是通道數(shù)</p><p><b> {</b></p><p> unsigned int ad;</p><p> unsigned char i,j;</p><p><b> cs=1;</b></p><p> for(i=0;i<10;i++)
101、</p><p><b> {;}</b></p><p><b> cs=0;</b></p><p><b> cjn=tin;</b></p><p> for(i=0;i<8;i++)</p><p> {
102、 //通過循環(huán)將獲得的數(shù)據(jù)保存在cjn中</p><p><b> cj=dout;</b></p><p><b> din=cj7;</b></p><p> cjn=cjn<<1;</p><p><b> cj0=cj;</b
103、></p><p><b> sclk=1;</b></p><p> j++; //脈沖高電平保持時間</p><p><b> sclk=0;</b></p><p><b> }</b></p><
104、p> ad=cjn*16; //先讀出來的是高8位</p><p> cjn=tin; //還是原來的通道</p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> c
105、j=dout;</b></p><p><b> din=cj7;</b></p><p> cjn=cjn<<1;</p><p><b> cj0=cj;</b></p><p><b> sclk=1;</b></p><
106、;p><b> j++ ;</b></p><p><b> sclk=0;</b></p><p><b> }</b></p><p> ad=ad+cjn/16; //只需要后讀入數(shù)據(jù)中低4位</p><p> cs=1;
107、 //片選無效</p><p> return(ad);</p><p><b> }</b></p><p><b> ⒍ 數(shù)據(jù)處理模塊</b></p><p> 該模塊主要包括sort()函數(shù)和jisuan()函數(shù)。</p><p> 其中so
108、rt()函數(shù)主要是將獲得的5組40個數(shù)據(jù)中每組的最大值和最小值去掉,并轉(zhuǎn)換為真實的電壓值,范圍為電壓為0~5V。jisuan()函數(shù)是將去掉最大值和最小值后每組數(shù)據(jù)進行平均,然后再參考公式進行計算,求出參數(shù)值。其函數(shù)如下所示:(其中ad0[i][j]是在ad2543()中獲得的數(shù)據(jù))</p><p> /*********************************/</p><p>
109、; /* 排序 */</p><p> /*********************************/</p><p> void sort(void) //排序</p><p> { unsigned char i,j;</p><p> unsigned i
110、nt temp;</p><p> float sum;</p><p> //比出最大值 放在最后一位</p><p> for (i=0;i<5;i++)</p><p> for(j=0;j<7;j++)</p><p> if (ad0[i][j]>ad0[i][j+1])</
111、p><p> { temp=ad0[i][j];</p><p> ad0[i][j]=ad0[i][j+1];</p><p> ad0[i][j+1]=temp;</p><p><b> }</b></p><p> //比出最小值 放在倒數(shù)第二位</p><p&
112、gt; for (i=0;i<5;i++)</p><p> for(j=0;j<6;j++)</p><p> if (ad0[i][j]<ad0[i][j+1])</p><p> { temp=ad0[i][j];</p><p> ad0[i][j]=ad0[i][j+1];</p><
113、p> ad0[i][j+1]=temp;</p><p><b> }</b></p><p> //求和時只求出前6位 去掉一個最大值去掉一個最小值</p><p> for (i=0;i<5;i++)</p><p> { sum=ad0[i][0];</p><
114、p> for(j=1;j<6;j++)</p><p> sum=sum+ad0[i][j];</p><p> average[i]=sum/6;</p><p><b> }</b></p><p> //假設(shè)放大倍數(shù)為1</p><p> for(i=0;i<5
115、;i++)</p><p> average[i]=average[i]*5/4096 ;</p><p><b> }</b></p><p> /***************************************/</p><p> /** 計算結(jié)果 */<
116、;/p><p> /***************************************/</p><p> void jisuan(void)</p><p><b> {</b></p><p> float temp;</p><p> average[0]=average[
117、0]/21; //vio</p><p> average[1]=average[1]/21-average[0]; //Iio</p><p> temp=average[2]; //avd</p><p> temp=average[4]/temp/21;</p><p
118、> temp=20*log10(temp);</p><p> average[2]=temp;</p><p> temp=average[4]/average[3]; </p><p> temp=temp/21; //kcmr</p><p> temp
119、=20*log10(temp);</p><p><b> }</b></p><p><b> 系統(tǒng)測試</b></p><p> 當我們調(diào)試用I/O方式在液晶上顯示數(shù)據(jù)時,不小心燒壞了LCD。最后在硬件上只能用LED來代替LCD,軟件上也重新編寫了LED顯示程序和其他相關(guān)程序,經(jīng)過調(diào)試,能正確顯示結(jié)果。顯示數(shù)據(jù)結(jié)
120、果時每次顯示一個參數(shù)結(jié)果,通過按鍵顯示下一個參數(shù)結(jié)果。以I/O方式顯示的程序在附錄四中給出。</p><p><b> ?。ㄒ唬┏绦蛘{(diào)試方法</b></p><p> 1、修改語法上的錯誤:軟件仿真編譯程序,查改有錯誤的地方,直到編譯通過;</p><p> 2、按軟件模塊的劃分,用仿真器結(jié)合硬件進行仿真各模塊程序,查找邏輯錯誤;</
121、p><p> 3、通過單步運行和打斷點的方式調(diào)試程序,直到出現(xiàn)自己想要的結(jié)果。</p><p><b> ?。ǘ┸浖{(diào)試</b></p><p> 測試儀器:微機電源(WD999)、仿真器(E6000/L)、數(shù)字示波器(TDS2012)、</p><p> 萬用表(HONEYTEK A830L)</p>
122、<p> 測試方案:將每個子程序經(jīng)過匯編后分別進行軟件模擬仿真,然后聯(lián)合硬件用仿真 器進行仿真。</p><p><b> 調(diào)試過程和結(jié)果:</b></p><p> ①LCD顯示的測試過程和結(jié)果:運行清屏程序,在屏幕任意位置顯示一個漢字和西文,發(fā)現(xiàn)無任何反應,參考其它的程序,發(fā)現(xiàn)所包含的頭文件與我的程序都是不同的,于是改變頭文件,結(jié)果顯示正確;然
123、后在所要的位置顯示所需要的漢字和字母,顯示程序正確;</p><p> ?、诮oTCL2543芯片的0通道輸入2V電壓,調(diào)用ad2543()函數(shù)測試獲得數(shù)據(jù),并將獲得的數(shù)據(jù)在液晶上顯示,看得到的數(shù)據(jù)是否正確。</p><p> ?、壅{(diào)用highsource()函數(shù)將頻率控制字送入AD9851芯片,控制輸出頻率為4M的正弦波,并用示波器看輸出波形的效果,修改程序直到輸出的波形就是所要的波形。&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 集成運放參數(shù)測試儀b題
- 畢業(yè)論文(集成運放參數(shù)測試儀)
- 集成運放參數(shù)測試儀畢業(yè)設(shè)計論文
- 題目 簡易數(shù)字集成電路參數(shù)測試儀
- 電力參數(shù)測試儀設(shè)計.pdf
- 正弦參數(shù)測試儀論文.doc
- 集成運放習題
- 皮膚水份流失測試儀-招標參數(shù)
- 井下參數(shù)測試儀的研制.pdf
- yk-53電參數(shù)測試儀
- 基于探針測試儀的電參數(shù)測試.pdf
- 絕緣參數(shù)測試儀的研制.pdf
- 導線參數(shù)測試儀的研制.pdf
- 電能參數(shù)測試儀設(shè)計【任務書】
- 列車絕緣參數(shù)測試儀的開發(fā).pdf
- 便攜式在線局放測試儀技術(shù)條件
- 電能參數(shù)測試儀的設(shè)計【開題報告】
- 畢業(yè)論文--脈沖信號參數(shù)測試儀
- 畢業(yè)論文--脈沖信號參數(shù)測試儀
- 絞車綜合參數(shù)測試儀設(shè)計研究.pdf
評論
0/150
提交評論