課程設(shè)計(jì)報(bào)告---車體傾斜姿態(tài)測(cè)量儀_第1頁
已閱讀1頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  《智能儀表課程設(shè)計(jì)》設(shè)計(jì)報(bào)告</p><p>  課題名稱 車體傾斜姿態(tài)測(cè)量儀 </p><p>  學(xué)生學(xué)號(hào)、姓名 </p><p>  班級(jí)名稱 測(cè)控0802 </p><p>  指導(dǎo)教師

2、 </p><p>  揚(yáng)州大學(xué)能源與動(dòng)力工程學(xué)院</p><p><b>  二〇一一年九月</b></p><p><b>  總 目 錄</b></p><p>  第一部分:任務(wù)書 </p><p>  第二部分:課程設(shè)計(jì)報(bào)告</p><p&

3、gt;  第三部分:附錄 </p><p><b>  第 一 部 分</b></p><p><b>  任</b></p><p><b>  務(wù)</b></p><p><b>  書</b></p><p

4、>  《智能儀表課程設(shè)計(jì)》課程設(shè)計(jì)任務(wù)書</p><p><b>  一、課題名稱</b></p><p><b>  車體傾斜姿態(tài)測(cè)量儀</b></p><p>  二、設(shè)計(jì)內(nèi)容及設(shè)計(jì)要求</p><p>  利用SCA100t-D01傾斜角傳感器作為測(cè)量元件,設(shè)計(jì)一個(gè)傾斜姿態(tài)測(cè)量儀,具有下

5、面的功能:</p><p>  1.測(cè)量范圍為-30°~30°。</p><p>  2.精度為0.001°。</p><p><b>  3.誤差為°。</b></p><p>  4. 雙行LCD液晶顯示。</p><p>  5. 可以設(shè)置上下報(bào)警溫度

6、,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警。</p><p>  6. 具有RS232通信接口。</p><p><b>  三、時(shí)間安排</b></p><p><b>  第一周:</b></p><p>  星期一~星期二:布置任務(wù),熟悉資料,確定儀表的功能要求、性能指標(biāo)。熟悉實(shí)驗(yàn)板原理圖和印刷板圖。

7、</p><p>  星期三~星期五:進(jìn)行儀表的方案選擇,確定主要芯片、工作方式、輸入輸出信號(hào)的接口方式、鍵盤和顯示方式、以及通信方式。進(jìn)行硬件設(shè)計(jì)和元器件選擇,畫出硬件原理圖。</p><p><b>  第二周:</b></p><p>  星期一~星期五:根據(jù)硬件原理圖,焊接硬件電路;測(cè)試硬件電路的功能;軟件設(shè)計(jì),包括軟件需求說明、軟件結(jié)

8、構(gòu)框圖、主要軟件功能模塊的流程圖;編寫程序。</p><p><b>  第三周:</b></p><p>  星期一~星期三:調(diào)試程序,聯(lián)調(diào)軟件和硬件。</p><p>  星期四~星期五:寫課程設(shè)計(jì)報(bào)告。</p><p><b>  四、應(yīng)交成果</b></p><p>

9、<b>  應(yīng)交成果包括:</b></p><p>  紙質(zhì)課程設(shè)計(jì)報(bào)告和電子文檔;</p><p>  硬件原理圖的Protel文件,程序;</p><p>  可以演示的硬件和軟件成果。</p><p><b>  五、課程報(bào)告內(nèi)容</b></p><p>  課程設(shè)計(jì)報(bào)

10、告應(yīng)包括下列部分:</p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  儀表的功能要求、性能指標(biāo)要求。</p><p>  方案選擇:提出多種方案,進(jìn)行方案比較,說明選定方案的理由,描述硬件和軟件的功能分工。</p><p>  硬件設(shè)計(jì):包括硬件結(jié)構(gòu)框圖、原理圖及其各個(gè)主要環(huán)節(jié)的工作原理說明,元器件

11、選擇的計(jì)算方法或者理由,利用提供的實(shí)驗(yàn)板焊接元器件。</p><p>  軟件設(shè)計(jì):首先提出軟件的功能需求,然后進(jìn)行軟件的結(jié)構(gòu)設(shè)計(jì),再畫出主要功能模塊的軟件框圖。</p><p><b>  程序編寫和調(diào)試。</b></p><p><b>  設(shè)計(jì)小結(jié)。</b></p><p>  報(bào)告中硬件原理

12、于用Protel畫出,軟件框圖和程序流程圖用Visio畫出。</p><p><b>  第 二 部 分</b></p><p><b>  課</b></p><p><b>  程</b></p><p><b>  設(shè)</b></p>

13、<p><b>  計(jì)</b></p><p><b>  報(bào)</b></p><p><b>  告</b></p><p><b>  目 錄</b></p><p>  第一章 簡介…………………………………………………………………(

14、8-11)</p><p>  1.1 引言……………………………………………………………………… (8)</p><p>  1.2 雙軸傾角傳感器SCA100t簡介…………………………………………(8)</p><p>  1.3 SCA100t工作原理…………………………………………………… (8-9)</p><p>  1.4 ST

15、C89C51單片機(jī)簡介……………………………………………… (9-11)</p><p>  第二章 設(shè)計(jì)內(nèi)容及要求………………………………………………………(12)</p><p>  2.1 設(shè)計(jì)內(nèi)容……………………………………………………………… (12)</p><p>  2.2 設(shè)計(jì)要求……………………………………………………………… (12)</

16、p><p>  第三章 總體設(shè)計(jì)方案及原理框圖……………………………………… (13-15)</p><p>  3.1 原理框圖……………………………………………………………… (13)</p><p>  3.2 總體設(shè)計(jì)方案……………………………………………………… (13-15)</p><p>  第四章 硬件設(shè)計(jì)……………………………

17、…………………………… (16-18)</p><p>  4.1 傳感器硬件電路……………………………………………………… (16)</p><p>  4.2 液晶顯示器硬件電路……………………………………………… (16-17)</p><p>  4.3 通信接口硬件電路…………………………………………………… (17)</p><p&

18、gt;  4.4 報(bào)警電路…………………………………………………………… (17-18)</p><p>  4.5 總硬件原理圖………………………………………………………… (18)</p><p>  第五章 軟件設(shè)計(jì)………………………………………………………… (19-24)</p><p>  5.1 軟件的功能需求……………………………………………………

19、… (19)</p><p>  5.2 各部分程序框圖…………………………………………………… (19-24)</p><p>  第六章 程序編寫……………………………………………………………… (25)</p><p>  6.1 程序編寫中遇到的問題及解決辦法…………………………………… (25)</p><p>  第七章 結(jié)果

20、調(diào)試…………………………………………………………………(26)</p><p>  第八章 設(shè)計(jì)小結(jié)…………………………………………………………………(27)</p><p>  第九章 參考文獻(xiàn)…………………………………………………………………(28)</p><p>  附 錄 器件清單全部程序和實(shí)物圖片…………………………………… (30-41)</p&

21、gt;<p><b>  第一章 簡 介</b></p><p><b>  1.1 引言</b></p><p>  隨著市場(chǎng)需求和科技的發(fā)展,人們對(duì)工程、機(jī)械、航空、航海設(shè)備的可靠性和穩(wěn)定性提出了更高的要求,其中姿態(tài)測(cè)量是一項(xiàng)重要的指標(biāo)。傾角傳感器是測(cè)量關(guān)于某一基準(zhǔn)面的傾斜角或者是姿態(tài)的裝置。目前,市場(chǎng)上已有單軸、雙軸、三軸的傾

22、角傳感器,但大多都價(jià)格昂貴或者體積較大。本文提出以雙軸傳感器SCA100t和STC89C51單片機(jī)實(shí)現(xiàn)的設(shè)計(jì),可大大降低系統(tǒng)成本,不但可以構(gòu)成一個(gè)單獨(dú)的數(shù)字輸出傳感器,也可以作為一個(gè)測(cè)量模塊,嵌入到測(cè)量控制系統(tǒng)中,廣泛應(yīng)用于機(jī)器人控制、平臺(tái)姿態(tài)(俯仰和滾轉(zhuǎn))測(cè)量、雙軸加速度測(cè)量等系統(tǒng)中。</p><p>  1.2 雙軸傾角傳感器SCA100t簡介</p><p>  SCA100T傾角傳

23、感器是芬蘭 VTI公司 2005年最新推出的, 利用MEMS技術(shù)開發(fā)生產(chǎn)的高精度的雙軸傾角傳感器 , 體積小重量輕僅1.2克。</p><p>  MEMS(Micro electro mechanical system)是二十一世紀(jì)的前沿技術(shù),采用MEMS技術(shù)可以在硅芯片上加工出完整的徽型電子機(jī)械系統(tǒng),包含了微型傳感器、微型機(jī)械結(jié)構(gòu)、以及信號(hào)處理和控制電路、通訊接口等于一體的微型器件, 把信息系統(tǒng)的微型化、多功

24、能化、 智能化和可靠性水平提高到新的高度 。</p><p>  該芯片的引腳圖及(圖1-1)說明如下:</p><p>  圖1-1 芯片引腳圖</p><p>  1.3 SCA100t工作原理</p><p>  該器件內(nèi)部包含了一個(gè)硅敏感微電容傳感器,測(cè)量芯片在X和Y方向的加速度以及一個(gè)專用ASIC集成電路, ASIC電路集成了EEP

25、ROM存儲(chǔ)器、信號(hào)放大器、AD轉(zhuǎn)換器、溫度傳感器和SPI串行通信接口,組成了一個(gè)完整的數(shù)字化傳感器。有±30o和±90o兩種量程 ,其主要原理如下:</p><p>  圖1-2 工作原理圖</p><p>  圖中g(shù)代表重力加速度,x和y分別代表雙軸的重力加速度,a和b分別代表雙軸上的重力加速度與水平的夾角;芯片內(nèi)部通過對(duì)x,y,g以及合成量的測(cè)量,再將信號(hào)通過一定

26、得集成電路,將輸出量與角度線性化、數(shù)字化,這樣得出的輸出量就為隨傾角變化的分量。</p><p>  其內(nèi)部結(jié)構(gòu)如圖1-3所示:</p><p>  圖 1-4 芯片內(nèi)部結(jié)構(gòu)圖</p><p>  分析內(nèi)部結(jié)構(gòu)可知SCA100t輸出有兩種形式,即模擬量與數(shù)字量,且:</p><p>  模擬輸出到角度的轉(zhuǎn)化公式為:α= arcsin [(Vo

27、ut-offset)/Sensitivity]</p><p>  其中Vout為芯片輸出的電壓(OUT_1、OUT_2輸出X、Y軸角度對(duì)應(yīng)電壓),offset是0°是輸出電壓(2.5V),Sensitivity是芯片靈敏度(SCA100t-D01為4V/g,SCA100t-D02為2V/g);</p><p>  數(shù)字輸出到角度轉(zhuǎn)化公式為:α= arcsin[(Dout -Do

28、ut@0°)/ Sensitivity]</p><p>  其中Dout為X或Y通道的數(shù)字輸出量,Dout@0°為0°時(shí)X或Y通道的數(shù)字輸出量,Sensitivity為芯片靈敏度(SCA100t-D01為1638LSB/g,SCA100t-D02為819LSB/g)。</p><p>  1.4 STC89C51單片機(jī)簡介</p><p&

29、gt;  1.4.1 STC89C51系列單片機(jī)的主要性能特點(diǎn)</p><p>  STC89C51系列單片機(jī)是宏晶科技推出的新一代超強(qiáng)抗干擾、高速、低功耗的單片機(jī),指令代碼與傳統(tǒng)8051單片機(jī)完全兼容。</p><p>  MCS-51的主要特點(diǎn)為:</p><p><b>  ◆CPU為8位;</b></p><p>

30、;  ◆片內(nèi)帶振蕩器,頻率范圍為1.2~12MHz;</p><p>  ◆片內(nèi)帶128字節(jié)的數(shù)據(jù)存儲(chǔ)器;(RAM)</p><p>  ◆片內(nèi)帶4KB的Flash程序存儲(chǔ)器;(ROM)</p><p>  ◆程序存儲(chǔ)器的尋址空間為64KB;(需要擴(kuò)展ROM)</p><p>  ◆片外數(shù)據(jù)存儲(chǔ)器的尋址空間為64KB;(需要擴(kuò)展RAM)<

31、;/p><p>  ◆128位(16字節(jié))用戶位尋址空間;(在128個(gè)字節(jié)中)</p><p>  ◆18個(gè)字節(jié)特殊功能寄存器SFR(MCS—52子系列為21個(gè));</p><p>  ◆4個(gè)8位的并行I/O接口:P0、P1、P2、P3;</p><p>  ◆2個(gè)16位定時(shí)器/計(jì)數(shù)器T0、T1;(MCS-52子系列為3個(gè),T2)</p&g

32、t;<p>  ◆2個(gè)優(yōu)先級(jí)別的5個(gè)中斷源;(高、低2個(gè))</p><p>  ◆1個(gè)全雙工的串行I/O接口,可多機(jī)通信;</p><p>  ◆片內(nèi)采用單總線結(jié)構(gòu);</p><p>  ◆有較強(qiáng)的位處理能力;</p><p>  1.4.2 MCS-51系列單片機(jī)的基本組成</p><p><b&

33、gt;  圖1-5 管腳圖</b></p><p>  AT89C51與51系列中各種型號(hào)芯片的引腳互相兼容。目前多采用40只引腳雙列直插,如圖2-2所示。</p><p>  引腳按其功能可分為如下3類: </p><p>  電源及時(shí)鐘引腳——VCC、VSS;XTAL1、XTAL2;</p><p>  控制引腳——、、、和;

34、</p><p>  I/O口引腳——P0、P1、P2、P3,為4個(gè)8位I/O口。</p><p>  第二章 設(shè)計(jì)內(nèi)容及要求</p><p><b>  2.1 設(shè)計(jì)內(nèi)容</b></p><p>  利用SCA100t-D01傾斜角傳感器作為測(cè)量元件,設(shè)計(jì)一個(gè)傾斜姿態(tài)測(cè)量儀</p><p>&l

35、t;b>  2.2 設(shè)計(jì)要求</b></p><p>  該傾斜姿態(tài)測(cè)量儀需具有以下功能:</p><p>  1.測(cè)量范圍為-30°~30°。</p><p>  2.精度為0.001°。</p><p><b>  3.誤差為°。</b></p>

36、<p>  4.雙行LCD液晶顯示。</p><p>  5.可以設(shè)置上下報(bào)警溫度,當(dāng)溫度不在設(shè)置范圍內(nèi)時(shí),可以報(bào)警。</p><p>  6.具有RS232通信接口。</p><p>  第三章 設(shè)計(jì)總體方案及原理框圖</p><p><b>  3.1 原理框圖</b></p><p&

37、gt;  本課題設(shè)計(jì)原理框圖如下圖(圖3-1):</p><p><b>  圖3-1原理框圖</b></p><p>  該車體傾斜姿態(tài)測(cè)量儀原理框圖主要由傳感器、信號(hào)調(diào)理電路、AD轉(zhuǎn)換器、單片機(jī)、液晶顯示器、報(bào)警電路等組成;通過傳感器感應(yīng)被測(cè)物體角度的變化,然后經(jīng)過處理后,由AD轉(zhuǎn)換器將模擬量轉(zhuǎn)換為單片機(jī)能處理的數(shù)字量,然后由單片機(jī)輸出信號(hào)控制顯示、報(bào)警等。<

38、;/p><p><b>  3.2 設(shè)計(jì)方案</b></p><p><b>  3.2.1方案一</b></p><p><b> ?。?)傳感器選用</b></p><p>  本方案中選用的傳感器是SCA100t-D02,引腳圖見圖3-2, 此芯片能測(cè)量的角度范圍為-90&#

39、176;~+90°,數(shù)字靈敏度為819LSB/g,模擬輸出靈敏度為2V/g,可采用模擬輸出或數(shù)字輸出均可,為簡化電路、減少外加AD轉(zhuǎn)換器帶來的花費(fèi),最優(yōu)采用數(shù)字輸出的方式。</p><p>  圖3-2 SCA100t-D02引腳圖</p><p> ?。?)液晶顯示器選用</p><p>  本方案中選用的液晶顯示器的型號(hào)是1602,引腳圖見圖3-3,L

40、CD1602顯示器有20個(gè)引腳,能夠雙行顯示20為字符,本方案的思想是顯示器的兩行分別顯示傳感器的X和Y軸對(duì)應(yīng)角度;當(dāng)角度超過20°時(shí),在對(duì)應(yīng)角度后面顯示‘DANGER?。?!’字符,警示傾斜角度過大。</p><p>  圖3-3 LCD1602引腳圖</p><p><b> ?。?)單片機(jī)選用</b></p><p>  單片機(jī)選

41、用的是STC89C51系列,具體資料參見1.4節(jié)STC89C51簡介。</p><p><b> ?。?)通信協(xié)議</b></p><p>  本方案中的通信接口采用的是MAX232,引腳圖見圖3-4,通過此通信接口可實(shí)現(xiàn)單片機(jī)與上位機(jī)PC的通信;程序的燒錄也是通過通信接口實(shí)現(xiàn)的。</p><p>  圖3-4 MAX232引腳圖</p&

42、gt;<p><b> ?。?)報(bào)警電路</b></p><p>  根據(jù)設(shè)計(jì)要求,即,當(dāng)傾斜角度超過20°時(shí),要報(bào)警;本方案中的報(bào)警思想是:傾斜角超過20°時(shí),通過I/O口發(fā)出控制信號(hào),控制LED發(fā)光和蜂鳴器發(fā)生模擬報(bào)警。如圖3-5,</p><p><b>  圖3-5 報(bào)警電路</b></p>

43、<p><b>  3.2.3 方案二</b></p><p>  方案二與方案一的不同之處在于傳感器的選用和報(bào)警電路的改進(jìn):</p><p><b> ?。?)傳感器的選用</b></p><p>  本方案中選用的傳感器是SCA100t-D01,引腳圖見圖3-6, 此芯片能測(cè)量的角度范圍為-30°

44、~+30°,數(shù)字靈敏度為1638LSB/g,模擬輸出靈敏度為4V/g,可采用模擬輸出或數(shù)字輸出均可,為簡化電路、減少外加AD轉(zhuǎn)換器帶來的花費(fèi),最優(yōu)采用數(shù)字輸出的方式。</p><p>  圖3-6 SCA100t-D01引腳圖</p><p><b>  (2)報(bào)警電路</b></p><p>  在方案一報(bào)警電路中,外部會(huì)通過接口向

45、單片機(jī)內(nèi)部輸入一定量的電流,長時(shí)間工作會(huì)給單片機(jī)帶來危害,因此改為圖3-7的形式,此時(shí)外部電路就沒有電流輸入單片機(jī)。</p><p><b>  圖3-7 報(bào)警電路</b></p><p>  3.2.4 最終方案選擇</p><p>  通過比較兩個(gè)方案的優(yōu)缺點(diǎn),最終選用的是方案二。</p><p><b>

46、  第四章 硬件設(shè)計(jì)</b></p><p>  4.1 傳感器硬件電路</p><p>  傳感器與單片機(jī)的連接如圖4-1</p><p>  圖4-1 傳感器與單片機(jī)連接圖</p><p>  傳感器選用傾斜角傳感器SCA100T-D02,按照?qǐng)D3-2連接,此時(shí)傳感器輸出量為數(shù)字量,數(shù)字輸出到角度轉(zhuǎn)化公式為:α= arcsin

47、[(Dout -Dout@0°)/ Sensitivity]</p><p>  其中Dout為X或Y通道的數(shù)字輸出量,Dout@0°為0°時(shí)X或Y通道的數(shù)字輸出量,Sensitivity芯片靈敏度為1638LSB/g。</p><p>  4.2 液晶顯示器硬件電路</p><p>  LCD1602顯示器與單片機(jī)的連接如圖4-2&l

48、t;/p><p>  圖4-2 顯示器與單片機(jī)連接圖</p><p>  LCD1602液晶模塊內(nèi)部的字符發(fā)生器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)和日文假名等,每一個(gè)字符都有一定的代碼,比如大寫字母‘A’的代碼是01000001(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就可以看到‘A’。因此,傳感器測(cè)得

49、的傾斜角經(jīng)過單片機(jī)軟件處理程序處理后,通過P0口輸出即可顯示。</p><p>  4.3 通信接口硬件電路</p><p>  通信接口與單片機(jī)的連接如圖4-3</p><p>  圖4-3 MAX232與單片機(jī)連接圖</p><p>  如圖4-3,MAX232的R1OUT、T1IN分別與單片機(jī)的RXD、TXD相連,然后MAX232的T1

50、OUT、R1IN分別與PC機(jī)的TXD、RXD相連,這樣單片機(jī)就可以通過MAX232實(shí)現(xiàn)與PC機(jī)的數(shù)據(jù)傳輸。</p><p><b>  4.4 報(bào)警電路</b></p><p><b>  報(bào)警電路如圖4-4</b></p><p><b>  圖4-4 報(bào)警電路</b></p><

51、;p><b>  R1、R2的選擇</b></p><p>  當(dāng)通過LED的電流為3~5mA時(shí),LED就可以發(fā)光;忽略LED的內(nèi)阻,分析計(jì)算得:R1(R2)=5V/5mA=1000=1K</p><p><b>  蜂鳴器外圍電路設(shè)計(jì)</b></p><p>  如圖所示,當(dāng)三極管8550基極電壓為0時(shí),三極管工作

52、,蜂鳴器就可以發(fā) </p><p>  聲,R3、R4均為限流作用,同時(shí)也與電容一起起到保護(hù)電路的作用。</p><p>  4.5 總硬件原理圖</p><p>  綜合前幾節(jié)的分析可得設(shè)計(jì)的總體硬件原理圖,如圖4-5</p><p>  圖4-5 總體硬件原理圖</p><p><b>  第五章 軟件設(shè)

53、計(jì)</b></p><p>  5.1 軟件的功能需求</p><p>  因?yàn)樗捎玫膫鞲衅魇侵苯虞敵鰯?shù)字量的,所以程序的編寫就變的簡單了。不需要進(jìn)行A/D轉(zhuǎn)換了。而且因?yàn)閭鞲衅鬏敵龅臅r(shí)間和單片機(jī)處理的速度很匹配所以我們也沒有進(jìn)行中斷處理。采用的是查詢的方式。</p><p>  軟件的功能主要包括:(1)能在LCD上面顯示傳感器傳出的角度。</

54、p><p> ?。?)判斷值是否在報(bào)警范圍內(nèi)從而做出不同的判斷。</p><p>  (3)能進(jìn)行串口通信。</p><p>  5.2 各部分程序框圖</p><p>  圖5-1 總體軟件原理框圖</p><p>  圖5-2 LCD顯示子程序</p><p>  圖5-3 傾斜角采集框圖<

55、;/p><p>  圖5-4 報(bào)警程序框圖</p><p>  圖5-5 通信程序框圖</p><p><b>  第六章 程序編寫</b></p><p>  6.1 程序編寫中遇到的問題及解決辦法</p><p>  程序的編寫中遇到了很多問題,很多問題都能解決。因?yàn)槲覀兌加幸欢ǖ模谜Z言的編程能力

56、,所以語法上面的問題沒有。有的都是邏輯上面的錯(cuò)誤。第一個(gè)遇到的問題就是標(biāo)準(zhǔn)問題,在處理數(shù)據(jù)的時(shí)候我們需要用到三角函數(shù),我們剛開始用習(xí)慣上面的表達(dá)方式,后來老是出錯(cuò)。在同學(xué)的幫助下面我們到C51的安裝文件夾下面找到了函數(shù)表達(dá)式的標(biāo)準(zhǔn)表達(dá)方式,解決了問題。</p><p>  我們遇到的最大的問題就是在編寫通信的時(shí)候遇到的問題,在那邊卡了三天。后來在黃老師和唐老師的幫助下我們從邏輯順序入手,本來我們是用一直在發(fā)送,根

57、據(jù)標(biāo)志位的狀態(tài)決定程序的執(zhí)行順序,但是實(shí)際使用的時(shí)候發(fā)現(xiàn)這樣的話會(huì)出現(xiàn)顯示器無法顯示角度的情況,后來從結(jié)構(gòu)上面和邏輯上面考慮發(fā)現(xiàn)我們少了判斷,就是判斷通信的標(biāo)志位的狀態(tài),所以出現(xiàn)了數(shù)據(jù)只在保持通信的情況下面才會(huì)讀取,但是在不需要通信的時(shí)候就不能正常讀取數(shù)據(jù)。發(fā)現(xiàn)問題以后解決就好辦了,只需要在通信程序前面加一個(gè)判斷就可以了,在正常通信的情況下面應(yīng)該怎么辦,在不需要通信的情況下應(yīng)該怎么辦。</p><p>  還有一

58、個(gè)問題就是顯示的時(shí)候遇到的問題,在顯示數(shù)據(jù)的時(shí)候是好的,但是我們有報(bào)警功能,在報(bào)警的時(shí)候屏幕上面會(huì)出現(xiàn)“DANGER!”字樣,剛開始的時(shí)候字母能出現(xiàn),但是當(dāng)不需要報(bào)警的時(shí)候字母就不消失了,后來發(fā)現(xiàn)也是判斷上面出了問題,就是我們少了判斷在不需要報(bào)警的情況下面應(yīng)該怎么辦的語句,把語句加上以后問題就解決了。</p><p><b>  第七章 結(jié)果調(diào)試</b></p><p&g

59、t;  因?yàn)槲覀冇布厦孀龅墓ぷ鞅容^足,所以硬件上面沒什么大問題,主要的硬件的問題是報(bào)警電路那邊的,當(dāng)時(shí)從安全角度考慮用了反相器,但是實(shí)際使用的時(shí)候發(fā)現(xiàn)反相器的輸出電壓很小,不足以帶動(dòng)LED燈和蜂鳴器。后來直接把反相器去掉了,這樣既簡化了電路還實(shí)現(xiàn)了需要的功能。</p><p>  剩下的問題就是軟件上面的問題了,而且軟件上面的問題都是邏輯上面的錯(cuò)誤。解決這些錯(cuò)誤的時(shí)候我們采用了“排除法”,先是把每個(gè)小程序編好,

60、然后進(jìn)行整合,這樣錯(cuò)誤容易檢查出來。當(dāng)子程序都整合好以后再出現(xiàn)問題以后我們可以根據(jù)相對(duì)應(yīng)的問題很快定位到軟件中那部分的問題,然后采用隔離部分語句的辦法查問題,發(fā)現(xiàn)這樣查問題又快又準(zhǔn)。</p><p><b>  第八章 設(shè)計(jì)小結(jié)</b></p><p>  為期三周的課程設(shè)計(jì)結(jié)束了,在這次課程設(shè)計(jì)中我學(xué)到了很多。</p><p>  設(shè)計(jì)一個(gè)產(chǎn)

61、品必須按部就班的來,從硬件的設(shè)計(jì)、選擇到組合,然后到軟件的編寫和最后的調(diào)試,一部都不可以馬虎。在課程設(shè)計(jì)的過程中我們遇到了很多問題就像前面軟件部分所說的那樣,每個(gè)人都想一步成功,可惜這個(gè)概率很小。在做的過程中我們同樣遇到了很多的問題,有的問題,比如通信的問題,我們還費(fèi)了大力氣去解決。解決的過程是痛苦的,但是結(jié)果是喜悅的。每次看到問題解決以后我們的心中都很高興,同時(shí)在解決問題的過程中我們還學(xué)到了很多。比如對(duì)于軟件的編寫采用先部分再整體的辦

62、法會(huì)使效率更高些,排除問題的時(shí)候用隔離法會(huì)跟快些。</p><p>  我們組的課程設(shè)計(jì)在我們四個(gè)人的努力下面提前兩天完成了,這個(gè)與我們每個(gè)人都出力是分不開的。</p><p>  在做課程設(shè)計(jì)的時(shí)候還要感謝兩位老師的幫助,有了他們的幫助我們找問題的時(shí)候能更快更準(zhǔn)。</p><p>  當(dāng)然收獲也是很大的,比如在這次課程設(shè)計(jì)之前我根本不知道蜂鳴器有有源和無源之分,在

63、這次設(shè)計(jì)中我們遇到蜂鳴器的問題,在解決的過程中知道了蜂鳴器還有有源和無源之分。</p><p>  在選擇電阻的問題上面也擺脫了以前靠瞎說,靠老師給數(shù)據(jù)的境況,比如在選擇LED燈的配套電阻上面,我們根據(jù)電源大小和二極管的通過電流算出來電阻應(yīng)該用四百歐姆左右的,我相信以后再遇到這種問題我都能解決了。</p><p><b>  第九章 參考文獻(xiàn)</b></p>

64、;<p>  程德福、林君、智能儀器、2009、機(jī)械工業(yè)出版社</p><p>  張毅剛、單片機(jī)原理及應(yīng)用、2010、高等教育出版社</p><p><b>  第 三 部 分</b></p><p><b>  附</b></p><p><b>  錄</b>

65、;</p><p><b>  附  錄</b></p><p><b>  附錄一:元器件清單</b></p><p>  STC11F16XE單片機(jī)  ?。眰€(gè)</p><p>  MAX232串行接口 ?。眰€(gè)</p><p>  SCA100t-D01傾斜角

66、傳感器?。眰€(gè)</p><p>  LCD1602液晶顯示器?。眰€(gè)</p><p>  蜂鳴器            1個(gè)</p><p>  LED發(fā)光二極管        2個(gè)</p><p>  三極管8550          1個(gè)</p><p>  1K電阻            3個(gè)</p&

67、gt;<p>  10K電阻           2個(gè)</p><p>  470電阻           1個(gè)</p><p>  10K滑動(dòng)變阻器        1個(gè)</p><p>  0.1uF電容          6個(gè)</p><p>  30pF電容  2個(gè)</p><p>  1

68、0uF電解電容 2個(gè)</p><p>  12MHz晶振 1個(gè)</p><p><b>  附錄二:完整程序</b></p><p>  #include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義</p><p>  #include<i

69、ntrins.h></p><p>  #include<math.h></p><p>  #include<stdio.h></p><p>  #include<absacc.h></p><p>  #include<ctype.h></p><p>  #

70、include<stdlib.h></p><p>  #define RS_CLR RS=0 </p><p>  #define RS_SET RS=1</p><p>  #define RW_CLR RW=0 </p><p>  #define RW_SET RW=1 </p><p>  #de

71、fine EN_CLR EN=0</p><p>  #define EN_SET EN=1</p><p>  #define DataPort P0</p><p>  #define MEAS 0x00 //測(cè)量模式</p><p>  #define RWTR 0x08 //讀寫溫度數(shù)據(jù)寄存器</p><p>

72、  #define STX 0x0E //x通道自檢</p><p>  #define STY 0x0F //Y通道自檢</p><p>  #define RDAX 0x10 //讀X通道加速度值</p><p>  #define RDAY 0x11 //讀Y通道加速度值</p><p>  sbit RS = P2^4; //

73、定義端口 </p><p>  sbit RW = P2^5;</p><p>  sbit EN = P2^6;</p><p>  sbit SPK=P2^0;</p><p>  sbit SCK=P1^7; </p><p>  sbit MISO=P1^6;</p><p>  sb

74、it MOSI=P1^5;</p><p>  sbit CSB=P1^4;</p><p>  unsigned char frq; </p><p>  sbit P0_0 = P0^0;</p><p>  sbit P0_1 = P0^1;</p><p>  sbit P0_2 = P0^2;</p&g

75、t;<p>  sbit P0_3 = P0^3;</p><p>  sbit P0_4 = P0^4;</p><p>  sbit P0_5 = P0^5;</p><p>  sbit P0_6 = P0^6;</p><p>  sbit P0_7 = P0^7;</p><p>  sbit

76、P1_0 = P1^0;</p><p>  sbit P1_1 = P1^1;</p><p>  sbit P1_2 = P1^2;</p><p>  sbit P1_3 = P1^3;</p><p>  sbit P1_4 = P1^4;</p><p>  sbit P1_5 = P1^5;</p&g

77、t;<p>  sbit P1_6 = P1^6;</p><p>  sbit P1_7 = P1^7;</p><p>  sbit P2_0 = P2^0;</p><p>  sbit P2_1 = P2^1;</p><p>  sbit P2_2 = P2^2;</p><p>  sbit

78、P2_3 = P2^3;</p><p>  sbit P2_4 = P2^4;</p><p>  sbit P2_5 = P2^5;</p><p>  sbit P2_6 = P2^6;</p><p>  sbit P2_7 = P2^7;</p><p>  sbit P3_0 = P3^0;</p&g

79、t;<p>  sbit P3_1 = P3^1;</p><p>  sbit P3_2 = P3^2;</p><p>  sbit P3_3 = P3^3;</p><p>  sbit P3_4 = P3^4;</p><p>  sbit P3_5 = P3^5;</p><p>  sbit

80、P3_6 = P3^6;</p><p>  sbit P3_7 = P3^7; </p><p>  unsigned int SPI_ReadBits(unsigned char n );</p><p>  void SPI_WriteByte( unsigned char wdata );</p><p>  void SPI_Sta

81、rt(void);</p><p>  void SPI_Stop(void);</p><p>  void SPI_Reset(void);</p><p>  void SPI_Delay(unsigned char);</p><p>  unsigned int SPI_GetX( void );</p><p&

82、gt;  unsigned int SPI_GetY( void );</p><p>  void SPI_Init( void );</p><p>  void SPI_Stop( void )</p><p><b>  {</b></p><p><b>  SCK = 0;</b><

83、;/p><p>  CSB = 1; </p><p>  SPI_Delay(10);</p><p><b>  }</b></p><p>  void SPI_Reset(void)</p><p><b>  {</b></p><p> 

84、 SPI_Stop();</p><p><b>  }</b></p><p>  void SPI_Delay(unsigned char n)</p><p><b>  {</b></p><p>  while(n--);</p><p><b>  }&

85、lt;/b></p><p>  void SPI_Start(void)</p><p><b>  {</b></p><p><b>  SCK = 0;</b></p><p><b>  CSB = 0;</b></p><p>  SP

86、I_Delay(10);</p><p><b>  }</b></p><p>  //主機(jī)寫一個(gè)BYTE到器件</p><p>  //最終狀態(tài):CLK = LOW</p><p>  void SPI_WriteByte( unsigned char wdata )</p><p><

87、b>  {</b></p><p>  unsigned char i;</p><p>  for( i = 0 ; i < 8 ; ++i )</p><p><b>  {</b></p><p><b>  SCK = 0;</b></p><p&

88、gt;  SPI_Delay(10);</p><p>  MOSI = wdata & 0x80;</p><p>  wdata = wdata << 1;</p><p>  SPI_Delay(10);</p><p><b>  SCK = 1;</b></p><p&g

89、t;  SPI_Delay(10);</p><p><b>  }</b></p><p><b>  SCK = 0;</b></p><p><b>  }</b></p><p>  //主機(jī)讀入N個(gè)比特</p><p>  //n 限制為16及

90、其以下</p><p>  //結(jié)束狀態(tài) CLK = 0</p><p>  unsigned int SPI_ReadBits( unsigned char n )</p><p><b>  {</b></p><p>  unsigned int rtemp,i;</p><p><b

91、>  MISO = 1;</b></p><p>  for( i = 0 ; i < n ; ++i )</p><p><b>  {</b></p><p>  rtemp <<= 1 ;</p><p>  SPI_Delay(10);</p><p&

92、gt;  if( MISO == 1 ){</p><p>  rtemp |= 0x0001;</p><p><b>  }else{</b></p><p>  rtemp &= 0xFFFE;</p><p><b>  }</b></p><p><b

93、>  SCK = 1;</b></p><p>  SPI_Delay(10);</p><p><b>  SCK = 0;</b></p><p>  SPI_Delay(10);</p><p><b>  }</b></p><p>  return

94、 rtemp;</p><p><b>  }</b></p><p><b>  //讀X方向角度</b></p><p>  unsigned int SPI_GetX( void )</p><p><b>  {</b></p><p>  un

95、signed int result;</p><p>  SPI_Start();</p><p>  SPI_WriteByte( RDAX );</p><p>  result = SPI_ReadBits(11);</p><p>  SPI_Stop();</p><p>  return result;&l

96、t;/p><p><b>  }</b></p><p><b>  //讀Y方向角度</b></p><p>  unsigned int SPI_GetY( void )</p><p><b>  {</b></p><p>  unsigned in

97、t result;</p><p>  SPI_Start();</p><p>  SPI_WriteByte( RDAY );</p><p>  result = SPI_ReadBits(11);</p><p>  SPI_Stop();</p><p>  return result;</p>

98、<p><b>  }</b></p><p><b>  //SPI測(cè)量模式</b></p><p>  void SPI_Init( void )</p><p><b>  {</b></p><p>  SPI_Start();</p><

99、;p>  SPI_WriteByte( MEAS );</p><p>  SPI_Stop();</p><p><b>  }</b></p><p>  unsigned char code C[]={'0','1','2','3','4','5

100、','6','7','8','9'};</p><p>  /*------------------------------------------------</p><p>  uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值</p><p>  unsigned cha

101、r 是定義無符號(hào)字符變量,其值的范圍是</p><p>  0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)</p><p>  長度如下 T=tx2+5 uS </p><p>  ------------------------------------------------*/</p><p>  void DelayUs2

102、x(unsigned char t)</p><p><b>  { </b></p><p>  while(--t);</p><p><b>  }</b></p><p>  /*------------------------------------------------</p

103、><p>  mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值</p><p>  unsigned char 是定義無符號(hào)字符變量,其值的范圍是</p><p>  0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編</p><p>  --------------------------------------------

104、----*/</p><p>  void DelayMs(unsigned char t)</p><p><b>  {</b></p><p>  while(t--)</p><p><b>  {</b></p><p><b>  //大致延時(shí)1mS&l

105、t;/b></p><p>  DelayUs2x(245);</p><p>  DelayUs2x(245);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*-------------------------

106、-----------------------</p><p><b>  判忙函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  bit LCD_Check_Busy(void) </p><p><b>

107、  { </b></p><p>  DataPort= 0xFF; </p><p><b>  RS_CLR; </b></p><p><b>  RW_SET; </b></p><p><b>  EN_CLR; </b></p><p

108、><b>  _nop_(); </b></p><p><b>  EN_SET;</b></p><p>  return (bit)(DataPort & 0x80);</p><p><b>  }</b></p><p>  /*------------

109、------------------------------------</p><p><b>  寫入命令函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  void LCD_Write_Com(unsigned char com) &l

110、t;/p><p><b>  { </b></p><p>  while(LCD_Check_Busy()); //忙則等待</p><p><b>  RS_CLR; </b></p><p><b>  RW_CLR; </b></p><p>&l

111、t;b>  EN_SET; </b></p><p>  DataPort= com; </p><p><b>  _nop_(); </b></p><p><b>  EN_CLR;</b></p><p><b>  }</b></p>

112、<p>  /*------------------------------------------------</p><p><b>  寫入數(shù)據(jù)函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  void LCD_Write_

113、Data(unsigned char Data) </p><p><b>  { </b></p><p>  while(LCD_Check_Busy()); //忙則等待</p><p><b>  RS_SET; </b></p><p><b>  RW_CLR; </b&

114、gt;</p><p><b>  EN_SET; </b></p><p>  DataPort= Data; </p><p><b>  _nop_();</b></p><p><b>  EN_CLR;</b></p><p><b>

115、;  }</b></p><p>  /*------------------------------------------------</p><p><b>  清屏函數(shù)</b></p><p>  ------------------------------------------------*/</p>&l

116、t;p>  void LCD_Clear(void) </p><p><b>  { </b></p><p>  LCD_Write_Com(0x01); </p><p>  DelayMs(5);</p><p><b>  }</b></p><p>  /*

117、------------------------------------------------</p><p><b>  寫入字符串函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  void LCD_Write_String(unsig

118、ned char x,unsigned char y,unsigned char *s) </p><p><b>  { </b></p><p>  if (y == 0) </p><p><b>  { </b></p><p>  LCD_Write_Com(0x80 +

119、x); //表示第一行</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  { </b></p><p>  LCD_Write_Com(0xC0 + x); //表示第二行</p

120、><p><b>  } </b></p><p>  while (*s) </p><p><b>  { </b></p><p>  LCD_Write_Data( *s); </p><p>  s ++; </p>

121、<p><b>  }</b></p><p><b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  寫入字符函數(shù)</b></p><p>  --

122、----------------------------------------------*/</p><p>  void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) </p><p><b>  { </b></p><p>  if (y

123、== 0) </p><p><b>  { </b></p><p>  LCD_Write_Com(0x80 + x); </p><p><b>  } </b></p><p><b>  else </b></p><p>

124、;<b>  { </b></p><p>  LCD_Write_Com(0xC0 + x); </p><p><b>  } </b></p><p>  LCD_Write_Data( Data); </p><p><b>  }</b>

125、</p><p>  /*------------------------------------------------</p><p><b>  角度轉(zhuǎn)化函數(shù)</b></p><p>  ------------------------------------------------*/</p><p>  flo

126、at angle_transfer( double result)</p><p>  { double angle,f;</p><p>  f=asin((result-1024)/1638);</p><p>  angle=f*180/3.14;</p><p>  return(angle);</p><p>

127、;<b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  初始化函數(shù)</b></p><p>  ------------------------------------------------*/<

128、/p><p>  void LCD_Init(void) </p><p><b>  {</b></p><p>  LCD_Write_Com(0x38); /*顯示模式設(shè)置*/ </p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x38); &

129、lt;/p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x38); </p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x38); </p><p>  LCD_Write_Com(0x08); /*顯示關(guān)閉*/ </p

130、><p>  LCD_Write_Com(0x01); /*顯示清屏*/ </p><p>  LCD_Write_Com(0x06); /*顯示光標(biāo)移動(dòng)設(shè)置*/ </p><p>  DelayMs(5); </p><p>  LCD_Write_Com(0x0C); /*顯示開及光標(biāo)設(shè)置*/</p><

131、p><b>  }</b></p><p>  /*------------------------------------------------</p><p><b>  LCD顯示函數(shù)</b></p><p>  ------------------------------------------------

132、*/ </p><p>  void LCD_Display(unsigned int i,double angle)</p><p>  { int m,n,c,d,e,an;</p><p>  an=(int)(angle*1000);</p><p><b>  m=an%10;</b></p>&

133、lt;p>  LCD_Write_Char(8,i,C[m]);</p><p>  DelayMs(245); </p><p>  DelayMs(245);</p><p><b>  an=an/10;</b></p><p><b>  n=an%10;</b></p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論