點(diǎn)光源跟蹤系統(tǒng)課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  指導(dǎo)教師評定成績: </p><p>  審定成績: </p><p><b>  自 動 化 學(xué) 院</b></p><p>  計(jì)算機(jī)控制技術(shù)課程設(shè)計(jì)報告</p><p>  設(shè)計(jì)題目:光源隨動系統(tǒng)</p><p>  單

2、位(二級學(xué)院): </p><p>  學(xué) 生 姓 名: </p><p>  專 業(yè): </p><p>  班 級: </p><p>  學(xué) 號:

3、 </p><p>  指 導(dǎo) 教 師: </p><p>  設(shè)計(jì)時間: 2013 年 6 月</p><p><b>  摘 要</b></p><p>  本設(shè)計(jì)給出了一種基于單片機(jī)的點(diǎn)光源自動跟蹤系統(tǒng)設(shè)計(jì)方案, 該設(shè)計(jì)使用TI公司的超低功耗的AT89C52

4、單片機(jī)作為整個系統(tǒng)的控制核心,主要由電機(jī)驅(qū)動模塊,點(diǎn)光源檢測模塊,電源轉(zhuǎn)換模塊等模塊組成。利用8路光敏電阻來檢測點(diǎn)光源的位置并將檢測到的信號經(jīng)過放大后進(jìn)行AD轉(zhuǎn)換,將轉(zhuǎn)換的結(jié)果傳給控制器AT89C52單片機(jī),經(jīng)過過單片機(jī)的運(yùn)算和處理來確定點(diǎn)光源的運(yùn)動趨勢,并將運(yùn)算的控制信號控制兩臺步進(jìn)電機(jī),使其跟隨點(diǎn)光源運(yùn)動。</p><p>  本設(shè)計(jì)可以擴(kuò)展為以后的太陽能發(fā)電的自動跟蹤系統(tǒng)。該系統(tǒng)不僅能自動根據(jù)太陽光方向來調(diào)

5、整太陽能電池板朝向, 結(jié)構(gòu)簡單、成本低, 而且在跟蹤過程中能自動記憶和更正不同時間的坐標(biāo)位置, 不必人工干預(yù), 特別適合天氣變化比較復(fù)雜和無人值守的情況, 有效地提高了太陽能的利用率, 有較好的推廣應(yīng)用價值。</p><p>  關(guān)鍵詞:AT89C52單片機(jī)、光源、自動跟蹤、傳感器</p><p><b>  目 錄</b></p><p>&

6、lt;b>  摘要2</b></p><p><b>  目錄3</b></p><p><b>  一 設(shè)計(jì)題目4</b></p><p>  1.1 基于單片機(jī)的光源自適應(yīng)控制系統(tǒng)設(shè)計(jì)4</p><p>  1.2 設(shè)計(jì)要求4</p><p>

7、  二 設(shè)計(jì)報告正文5</p><p>  2.1 設(shè)計(jì)方案總體方向的選擇5</p><p>  2.1.1 系統(tǒng)方案的擬定5</p><p>  2.1.2 方案選擇5</p><p>  2.2 硬件電路的設(shè)計(jì)6</p><p>  2.2.1 A/D轉(zhuǎn)換模塊6</p><p>

8、  2.2.2 步進(jìn)電機(jī)模塊9</p><p>  2.2.3 電機(jī)驅(qū)動模塊11</p><p>  2.2.4 檢測模塊13</p><p>  2.2.5 單片機(jī)模塊14</p><p>  2.3 系統(tǒng)軟件設(shè)計(jì)18</p><p><b>  三 總體調(diào)試19</b></p

9、><p>  3.1 總體調(diào)試19</p><p>  3.2 問題及解決方案19</p><p>  3.2.1 通道比較閥值的設(shè)置19</p><p>  3.2.2 電機(jī)的防抖19</p><p>  四 設(shè)計(jì)總結(jié) 20</p><p><b>  五 參考文獻(xiàn)21<

10、;/b></p><p><b>  六 附錄22</b></p><p><b>  設(shè)計(jì)題目</b></p><p>  1.1基于單片機(jī)的光源自適應(yīng)控制系統(tǒng)設(shè)計(jì)</p><p>  設(shè)計(jì)一控制系統(tǒng),假設(shè)有一個太陽能電池板,為了使電池板最大限度的接受光照強(qiáng)度,通過控制器調(diào)節(jié)電池板的角度使

11、電池板始終正對光線。采用步進(jìn)電機(jī)作為角度調(diào)整裝置,使系統(tǒng)能上下和左右旋轉(zhuǎn)。</p><p><b>  1.2設(shè)計(jì)要求</b></p><p><b>  繪制原理圖;</b></p><p><b>  連接電路;</b></p><p><b>  編寫程序;&l

12、t;/b></p><p><b>  調(diào)試運(yùn)行。</b></p><p><b>  設(shè)計(jì)報告正文</b></p><p>  2.1設(shè)計(jì)方案的選擇2.1.1系統(tǒng)方案的擬定</p><p><b>  方案一</b></p><p>  由檢測

13、電路、AT89C52單片機(jī)、時鐘電路、A/D轉(zhuǎn)換控制電路等主要模塊組成。傳感器部分采用光敏二極管,將光信號變換為電信號。經(jīng)過A/D轉(zhuǎn)換將其轉(zhuǎn)化離散的數(shù)字信號??刂齐娐芬詥纹瑱C(jī)為核心,能夠?qū)Σ杉臄?shù)字信號進(jìn)行處理和判斷,控制步進(jìn)電機(jī)運(yùn)轉(zhuǎn)使傳感器光板正對光線。</p><p><b>  方案二</b></p><p>  以單片機(jī)低功耗LM3S1138微控制器作為核心控

14、制單元,光強(qiáng)度檢測模塊,時鐘模塊,電機(jī)驅(qū)動,電源供電,步進(jìn)電機(jī)控制電路模塊等主要模塊組成。傳感器采用光敏電阻,LM3S1138微控制器自帶8個10位A/D,能夠識別模擬信號??刂齐娐芬詥纹瑱C(jī)為核心,能夠?qū)Σ杉哪M信號進(jìn)行處理和判斷對步進(jìn)電機(jī)實(shí)現(xiàn)控制。</p><p><b>  2.1.2方案選擇</b></p><p>  比較以上兩方案可知,系統(tǒng)的工作原理是一致

15、的,都是通過傳感器感受光強(qiáng)變化并間接或直接將其轉(zhuǎn)化成單片機(jī)能夠識別的信號,通過單片機(jī)處理信號并進(jìn)行判斷,步進(jìn)電機(jī)控制電路根據(jù)單片機(jī)傳出的信號轉(zhuǎn)動。不同的是選擇的控制器,從單片機(jī)方面考慮,方案一所使用的傳統(tǒng)的AT89C52單片機(jī)器件比方案二所使用的LM3S1138微控制器成本低,但是方案二集成8為A/D/處理模塊,對于處理數(shù)模顯得簡單方便。經(jīng)過試驗(yàn),采用外接A/D模塊的方案一,傳感器采集數(shù)據(jù)電路處理較復(fù)雜,A/D模塊后期程序編寫遇到瓶頸,

16、無法實(shí)現(xiàn),于是改為選擇采用LM3S1138微控制器的方案二,因?yàn)橛薪?jīng)驗(yàn)借鑒,因此設(shè)計(jì)題目的要求得以方便實(shí)現(xiàn)。綜合考慮,最后確定選擇方案二。</p><p>  系統(tǒng)組成及工作原理以單片機(jī)為控制核心,采用光強(qiáng)度檢測電路測量,以光敏電阻傳感器作為測量元件,構(gòu)成光電測量模塊。該系統(tǒng)可分為電源模塊電路、光電測量電路、步進(jìn)電機(jī)控制電路、單片機(jī)、A/D轉(zhuǎn)換電路。選用的主要器件有:光敏電阻,LM3S1138微控制器,ULN20

17、03步進(jìn)電機(jī)驅(qū)動模塊,步進(jìn)電機(jī)等。</p><p>  圖2-1 系統(tǒng)設(shè)計(jì)框圖</p><p>  2.2硬件電路的設(shè)計(jì)</p><p>  2.2.1 步進(jìn)電機(jī)模塊</p><p>  驅(qū)動方法及主要參數(shù):</p><p>  驅(qū)動方式(4-1-2相驅(qū)動)</p><p><b> 

18、 主要技術(shù)參數(shù)</b></p><p>  2.步進(jìn)電機(jī)的主要特性:</p><p>  1) 步進(jìn)電機(jī)必須加驅(qū)動才可以運(yùn)轉(zhuǎn), 驅(qū)動信號必須為脈沖信號,沒有脈沖的時候,步進(jìn)電機(jī)靜止, 如果加入適當(dāng)?shù)拿}沖信號, 就會以一定的角度(稱為步角)轉(zhuǎn)動。轉(zhuǎn)動的速度和脈沖的頻率成正比。</p><p>  2)28BYJ48是減速步進(jìn)電機(jī),減速比為1:64,步進(jìn)角為

19、5.625/64度。如果需要轉(zhuǎn)動1圈,那么需要360/5.625*64=4096個脈沖信號。</p><p>  3) 步進(jìn)電機(jī)具有瞬間啟動和急速停止的優(yōu)越特性。</p><p>  4)改變脈沖的順序, 可以方便的改變轉(zhuǎn)動的方向。</p><p>  電機(jī)線圈由四相組成,即A、B、C、D四相,電機(jī)示意圖和各線圈通電順序圖如下圖所示:</p><

20、p><b>  步進(jìn)電機(jī)原理圖</b></p><p>  相順序從0到1稱為一步,電機(jī)軸將轉(zhuǎn)過5.625度,四相四拍為0-1-2-3則稱為通電一周,若循環(huán)進(jìn)行這種通電一周的操作,電機(jī)便連續(xù)的轉(zhuǎn)動起來,而進(jìn)行相反的通電順序如3-2-1-0將使電機(jī)同速反轉(zhuǎn)。同理四相八拍的通電順序?yàn)锳-AB-B-BC-C-CD-D-DA-A(本設(shè)計(jì)用的是四相八拍)。通電一周的周期越短,即驅(qū)動頻率越高,則電

21、機(jī)轉(zhuǎn)速越快,但步進(jìn)電機(jī)的轉(zhuǎn)速也不可能太快,因?yàn)樗孔咭徊叫枰欢ǖ臅r間,若信號頻率過高,可能導(dǎo)致電機(jī)失步,甚至只在原步顫動。</p><p>  2.2.3電機(jī)驅(qū)動模塊 </p><p>  本設(shè)計(jì)采用LM3S1138微控制器(晶振頻率為12MHZ)對該四線八相制步進(jìn)電機(jī)進(jìn)行控制。通過I/O口輸出的具有時序的方波作為步進(jìn)電機(jī)的控制信號,信號經(jīng)過特定芯片驅(qū)動步進(jìn)電機(jī)。本文選用ULN2003構(gòu)

22、成步進(jìn)電機(jī)的驅(qū)動電路,ULN2003 是高耐壓、大電流達(dá)林頓陳列,由七個硅NPN 達(dá)林頓管組成。</p><p>  選擇ULN2003A作為步進(jìn)電機(jī)的驅(qū)動電路。其內(nèi)部集成了一個消線圈反電動勢的二極管,可用來驅(qū)動繼電器。它是雙列16腳封裝,NPN晶體管矩陣,最大驅(qū)動電壓=50V,電流=500mA,輸入電壓=5V,適用于TTL COMS,由達(dá)林頓管組成驅(qū)動電路。ULN是集成達(dá)林頓管IC,內(nèi)部還集成了一個消

23、線圈反電動勢的二極管,它的輸出端允許通過電流為200mA,飽和壓降VCE約1V左右,耐壓BVCEO約為36V。用戶輸出口的外接負(fù)載可根據(jù)以上參數(shù)估算。采用集電極開路輸出,輸出電流大,故可直接驅(qū)動繼電器或固體繼電器,也可直接驅(qū)動低壓燈泡。通常單片機(jī)驅(qū)動ULN2003時,上拉2K的電阻較為合適,同時,COM引腳應(yīng)該懸空或接電源。</p><p>  圖如圖2-7所示。ULN2003和LM3S1138微控制器構(gòu)成的驅(qū)動

24、電路如圖2-8所示。</p><p>  圖2-7 ULN2003內(nèi)部方框圖</p><p>  該電路的特點(diǎn)如下:ULN2003 的每一對達(dá)林頓都串聯(lián)一個2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來處理的數(shù)據(jù)。ULN2003 工作電壓高,工作電流大,灌電流可達(dá)500mA,并且能夠在關(guān)態(tài)時承受50V 的電壓,輸出還可

25、以在高負(fù)載電流并行運(yùn)行。ULN2003 采用DIP—16 塑料封裝。</p><p>  輸入低電平輸出高電平,輸入高電平輸出低電平。</p><p>  ULN2003A的輸出結(jié)構(gòu)是集電極開路的,所以要在輸出端接一個上拉電阻,在輸入低電平的時候輸出才是高電平 本次課程設(shè)計(jì)使用的5線4相步進(jìn)電28BYJ-48有VCC線 故不需接上拉電阻。</p><p>  圖2-

26、8 ULN2003和LM3S1138微控制器構(gòu)成的驅(qū)動電路</p><p>  2.2.4檢測模塊:</p><p>  圖2-9 光敏電阻分布圖</p><p>  通過比較1、2和3、4兩組電壓的大小,實(shí)現(xiàn)豎直方向的轉(zhuǎn)動,通過比較1、3和2、4兩組電壓的大小,實(shí)現(xiàn)水平方向的轉(zhuǎn)動。</p><p><b>  圖2-10檢測電路&

27、lt;/b></p><p>  2.2.5單片機(jī)模塊</p><p>  1.LM3S1138微控制器結(jié)構(gòu)和引腳</p><p>  單片機(jī)的選擇主要考慮了單片機(jī)自帶資源是否滿足設(shè)計(jì)要求,如果能夠選擇合適的單片機(jī),則可大為簡化電路設(shè)計(jì)的復(fù)雜程度,從而提高系統(tǒng)的可靠性。本系統(tǒng)采用LM3S1138微控制器作為核心控制單元。LM3S1138微控制器具有的電池備用的

28、休眠模塊,可以有效地使LM3S1138掉電,在長時間的器件停止工作過程中讓器件進(jìn)入一個低功耗的狀態(tài),這非常適合要求最大限度降低功耗的應(yīng)用。LM3S1138微控制器的優(yōu)勢還在于能夠方便的運(yùn)用多種ARM的開發(fā)工具和片上系統(tǒng)(SoC)的底層IP應(yīng)用方案,以及廣大的用戶群體。另外,該微控制器使用了兼容ARM Thumb的Thumb2指令集來減少存儲容量的需求,并以此達(dá)到降低成本的目的。最后,LM3S1138微控制器Stellaris系列的所有成

29、員是代碼兼容的,這為用戶提供了靈活性,能夠適應(yīng)各種精確的需求。</p><p>  LM3S1138微控制器的相關(guān)特性:</p><p>  單輸入和微分輸入配置 </p><p>  用作單終端輸入的8個10位通道(輸入) </p><p>  靈活、可配置的模數(shù)轉(zhuǎn)換 </p><p>  可以把輸出配置為:驅(qū)動輸出

30、管腳、產(chǎn)生中斷或者ADC采樣序列 </p><p>  比較兩個外部管腳輸入或者將外部管腳輸入與內(nèi)部可編程參考電壓相比較 </p><p>  片內(nèi)低壓差(LDO)穩(wěn)壓器,具有可編程的輸出電壓,用戶可調(diào)節(jié)的范圍為2.25V到2.75V </p><p>  因此采用LM3S1138微控制器可以最大程度提高本系統(tǒng)的準(zhǔn)確度。</p><p>  

31、圖2-11 LM3S1138芯片引腳圖</p><p><b>  2.3系統(tǒng)軟件設(shè)計(jì)</b></p><p>  本設(shè)計(jì)中程序采用C語言進(jìn)行設(shè)計(jì)。程序中主要有以下幾個主要子程序:主程序,LM3S1138微控制器內(nèi)部集成的A/D模塊初始化、采集、轉(zhuǎn)換數(shù)據(jù)程序,電機(jī)驅(qū)動控制程序。程序源代碼見附錄。</p><p><b>  三、總體調(diào)

32、試</b></p><p>  3.1 軟硬件調(diào)試 </p><p>  寫完成后,在對整個系統(tǒng)調(diào)試的過程中,出現(xiàn)了電機(jī)不運(yùn)轉(zhuǎn)等問題。主要通過單獨(dú)調(diào)試各個模塊及檢查相關(guān)硬件電路的焊接,找出問題所在,然后針對問題逐個擊破,最后成功完成本設(shè)計(jì)。</p><p><b>  四、設(shè)計(jì)總結(jié)</b></p><p>

33、  本系統(tǒng)是點(diǎn)光源隨動系統(tǒng),通過采用lm3s1138單片機(jī)作為核心部件,光敏三級管檢測到的信號時通過AD轉(zhuǎn)換為數(shù)字信號傳輸給單片機(jī),將處理的結(jié)果以脈沖的形式輸出給驅(qū)動電路uln2003,驅(qū)動步進(jìn)電機(jī)運(yùn)動。使其追蹤到點(diǎn)光源的位置。通過老師同學(xué)的共同努力,大家相互配合,不斷彌補(bǔ)知識的漏洞,基本可以實(shí)現(xiàn)點(diǎn)光源隨動的功能</p><p><b>  五、參考文獻(xiàn)</b></p><

34、;p>  [1]薛建國.基于單片機(jī)的太陽能電池自動跟蹤系統(tǒng)的設(shè)計(jì)[J].長春師范學(xué)院學(xué)報:自然科學(xué)版,2005,24(3):26-30.</p><p>  [2]張興磊,楊麗麗.一種太陽自動跟蹤系統(tǒng)的設(shè)計(jì)[J].青島農(nóng)業(yè)大學(xué)學(xué)報,2008,26(4):315—318.</p><p>  [3]李敏,劉京城,劉俊,等.一種新型的太陽能自動跟蹤裝置[J].電子器件,2008,31(5

35、):1702 1703,1708.</p><p>  [4]侯長來.一種太陽自動跟蹤裝置的設(shè) JJ.現(xiàn)代機(jī)械,2005(1):66—68.</p><p><b>  六、附錄</b></p><p><b>  1.系統(tǒng)整體電路圖</b></p><p><b>  3.程序</

36、b></p><p>  #include "systemInit.h"</p><p>  #include "uartGetPut.h"</p><p>  #include <adc.h></p><p>  #include <stdio.h></p&

37、gt;<p>  #define ADCSequEnable ADCSequenceEnable</p><p>  #define ADCSequDisable ADCSequenceDisable</p><p>  #define ADCSequConfig ADCSequenceConfigure</p&

38、gt;<p>  #define ADCSequStepConfig ADCSequenceStepConfigure</p><p>  #define ADCSequDataGet ADCSequenceDataGet</p><p>  tBoolean ADC_EndFlag = false; // 定義ADC轉(zhuǎn)換結(jié)束的標(biāo)

39、志</p><p><b>  // 定義KEY</b></p><p>  #define KEY_PERIPH SYSCTL_PERIPH_GPIOG</p><p>  #define KEY_PORT GPIO_PORTG_BASE</p><p>  #

40、define KEY_PIN GPIO_PIN_5</p><p>  unsigned char FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正轉(zhuǎn)編碼</p><p>  unsigned char REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0

41、x01}; ////四相八拍反轉(zhuǎn)編碼</p><p>  void motor_ffw()</p><p><b>  { </b></p><p>  unsigned char i;</p><p>  unsigned int j;</p><p>  for (j=0; j<1

42、; j++) //轉(zhuǎn)1*n圈 </p><p>  { </p><p>  for (i=0; i<8; i++) //一個周期轉(zhuǎn)45度</p><p><b>  {</b></p><p>  GPIOPinWrite(GPIO_PORTB_BASE, G

43、PIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, FFW[i]);</p><p>  // P1 = FFW[i]; //取數(shù)據(jù)</p><p>  SysCtlDelay(1 * (TheSysClock / 3000

44、)); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void motor_rev()</p><p><b>  {</b><

45、/p><p>  unsigned char i;</p><p>  unsigned int j;</p><p>  for (j=0; j<1; j++) //轉(zhuǎn)1×n圈</p><p><b>  {</b></p><p><b>  //退出此循環(huán)

46、程序</b></p><p>  for (i=0; i<8; i++) //一個周期轉(zhuǎn)45度</p><p><b>  {</b></p><p>  GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3 | G

47、PIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 , REV[i]);</p><p>  // P1 = REV[i]; //取數(shù)據(jù)</p><p>  SysCtlDelay(1 * (TheSysClock / 3000)); </p><p><b>  }</b><

48、/p><p><b>  }</b></p><p><b>  }</b></p><p>  void motor_ffw1()</p><p><b>  { </b></p><p>  unsigned char i;</p>&l

49、t;p>  unsigned int j;</p><p>  for (j=0; j<1; j++) //轉(zhuǎn)1*n圈 </p><p>  { </p><p>  for (i=0; i<8; i++) //一個周期轉(zhuǎn)45度</p><p><b>  {

50、</b></p><p>  GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, FFW[i]);</p><p>  // P1 = FFW[i];

51、 //取數(shù)據(jù)</p><p>  SysCtlDelay(1 * (TheSysClock / 3000)); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  

52、void motor_rev1()</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  unsigned int j;</p><p>  for (j=0; j<1; j++) //轉(zhuǎn)1×n圈</p><p

53、><b>  {</b></p><p><b>  //退出此循環(huán)程序</b></p><p>  for (i=0; i<8; i++) //一個周期轉(zhuǎn)45度</p><p><b>  {</b></p><p>  GPIOPinWrite(GPIO

54、_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 , REV[i]);</p><p>  // P1 = REV[i]; //取數(shù)據(jù)</p><p>  SysCtlDelay(1 * (TheS

55、ysClock / 3000)); </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  // ADC初始化</p><p>  void adcInit(void

56、)</p><p><b>  {</b></p><p>  SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); </p><p>  SysCtlPeriEnable(SYSCTL_PERIPH_GPIOE); <

57、;/p><p>  GPIOPinTypeOut(GPIO_PORTE_BASE,GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3); </p><p>  GPIOPinTypeOut(GPIO_PORTB_BASE,GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2 | GPIO_PIN_3);

58、</p><p>  SysCtlPeriEnable(KEY_PERIPH); </p><p>  GPIOPinTypeIn(KEY_PORT, KEY_PIN); </p><p>  SysCtlPeriEnable(SYSCTL_PERIPH_ADC);

59、 // 使能ADC模塊</p><p>  SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 設(shè)置ADC采樣率</p><p>  ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采樣序列</p>

60、<p>  // 采樣序列配置:ADC基址,采樣序列編號,觸發(fā)事件,采樣優(yōu)先級</p><p>  ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);</p><p>  // ADC采樣序列步進(jìn)配置:ADC基址,采樣序列0,步值,采樣通道</p><p>  ADCSequStepConfi

61、g(ADC_BASE, 0, 0, ADC_CTL_CH0); // 第0步:采樣ADC0</p><p>  ADCSequStepConfig(ADC_BASE, 0, 1, ADC_CTL_CH1); // 第1步:采樣ADC1</p><p>  ADCSequStepConfig(ADC_BASE, 0, 2, ADC_CTL_CH2);

62、 // 第2步:采樣ADC2</p><p>  ADCSequStepConfig(ADC_BASE, 0, 3, ADC_CTL_CH3); // 第3步:采樣ADC3</p><p>  ADC_CTL_END | // 結(jié)束,并</p><p>  ADC_CTL_IE); //

63、 申請中斷</p><p>  ADCIntEnable(ADC_BASE, 0); // 使能ADC中斷</p><p>  IntEnable(INT_ADC0); // 使能ADC采樣序列中斷</p><p>  

64、IntMasterEnable(); // 使能處理器中斷</p><p>  ADCSequEnable(ADC_BASE, 0); // 使能采樣序列</p><p><b>  }</b></p><p>

65、  // ADC采樣:*pulVal保存采樣結(jié)果</p><p>  void adcSample(unsigned long *pulVal)</p><p><b>  {</b></p><p>  ADCProcessorTrigger(ADC_BASE, 0); // 處理器觸發(fā)采樣序列

66、</p><p>  while (!ADC_EndFlag); // 等待采樣結(jié)束</p><p>  ADC_EndFlag = false; // 清除ADC采樣結(jié)束標(biāo)志</p><p>  ADCSequDataGet

67、(ADC_BASE, 0, pulVal); // 自動讀取全部ADC結(jié)果</p><p><b>  }</b></p><p>  int main(void)</p><p><b>  {</b></p><p>  unsigned char r,N

68、=64; //N 步進(jìn)電機(jī)運(yùn)轉(zhuǎn)圈數(shù)</p><p>  unsigned long ulVal[8],v[8];</p><p>  int left,right,up,down,limit360l=0,limit180u=0,limit360r=0,limit180d=0;</p><p>  char s[40];</p>

69、<p>  unsigned long i;</p><p>  jtagWait(); // 防止JTAG失效,重要!</p><p>  clockInit(); // 時鐘初始化:PLL,20MHz

70、</p><p>  uartInit(); // UART初始化</p><p>  adcInit(); // ADC初始化</p><p><b>  for (;;)&

71、lt;/b></p><p><b>  {</b></p><p>  adcSample(ulVal); // ADC采樣</p><p>  for (i = 0; i < 8; i++)</p><p><b>  {

72、</b></p><p>  v[i] = (ulVal[i] * 3) / 1024; // 轉(zhuǎn)換成電壓值</p><p>  sprintf(s, "ADC%d = %d(mV)\r\n", i, v); // 采樣值格式化為電壓值</p><p>  uartPuts(s);

73、 // 通過UART輸出電壓值</p><p><b>  }</b></p><p>  if( ((v[1]+v[2])-(v[0]+v[3])) > 3 )</p><p><b>  left = 1;</b></p><p><b>

74、;  else</b></p><p><b>  left = 0;</b></p><p>  if( ((v[0]+v[3])-(v[2]+v[1])) > 3 )</p><p>  right = 1;</p><p><b>  else</b></p>

75、<p>  right = 0;</p><p>  if( ((v[2]+v[3])-(v[1]+v[0])) > 3 )</p><p><b>  up = 1;</b></p><p><b>  else</b></p><p><b>  up = 0;<

76、/b></p><p>  if( ((v[1]+v[0])-(v[2]+v[3])) > 3)</p><p><b>  down = 1;</b></p><p><b>  else</b></p><p><b>  down = 0;</b></p

77、><p>  SysCtlDelay(15 * (TheSysClock / 3000)); // 延時約1500ms</p><p>  if (GPIOPinRead(KEY_PORT, KEY_PIN) == 0x00) // 如果按下KEY</p><p><b>  {</b></p>

78、<p>  // GPIOPinWrite(LED_PORT, LED_PIN, 0x00); // 點(diǎn)亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_ffw(); //電機(jī)正轉(zhuǎn)</

79、p><p><b>  }</b></p><p><b>  } </b></p><p>  if (right == 1 )//&& limit360r < 181) // 如果按下KEY</p><p><b>  {</b><

80、/p><p>  // GPIOPinWrite(LED_PORT, LED_PIN, 0x00); // 點(diǎn)亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_ffw(); //電機(jī)

81、正轉(zhuǎn)</p><p><b>  }</b></p><p>  right = 0;</p><p>  limit360r += 45;</p><p>  limit360l -= 45;</p><p><b>  }</b></p><p>

82、  if (left == 1 )//&& limit360l < 181) // 如果按下KEY</p><p><b>  {</b></p><p>  // GPIOPinWrite(LED_PORT, LED_PIN, 0x00); // 點(diǎn)亮LED</p><

83、p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_rev(); //電機(jī)正轉(zhuǎn)</p><p><b>  }</b></p><p><b>  left = 0;</b></p&g

84、t;<p>  limit360r -= 45;</p><p>  limit360l += 45;</p><p><b>  }</b></p><p>  if (up == 1 )//&& limit180u < 91) // 如果按下KEY</p><p>

85、;<b>  {</b></p><p>  // GPIOPinWrite(LED_PORT, LED_PIN, 0x00); // 點(diǎn)亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p&g

86、t;  motor_rev1(); //電機(jī)正轉(zhuǎn)</p><p><b>  }</b></p><p><b>  up = 0;</b></p><p>  limit180u += 45;</p><p>  limit180d -= 45;</p><p>

87、;<b>  }</b></p><p>  if (down == 1 )//&& limit180d < 91) // 如果按下KEY</p><p><b>  {</b></p><p>  // GPIOPinWrite(LED_PORT, LED_PIN

88、, 0x00); // 點(diǎn)亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_ffw1(); //電機(jī)正轉(zhuǎn)</p><p><b>  }</b></p><

89、;p><b>  down = 0;</b></p><p>  limit180u -= 45;</p><p>  limit180d += 45;</p><p><b>  }</b></p><p><b>  }</b></p><p>

90、;<b>  }</b></p><p>  // ADC采樣序列0的中斷</p><p>  void ADC_Sequence_0_ISR(void)</p><p><b>  {</b></p><p>  unsigned long ulStatus;</p><p&

91、gt;  ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 讀取中斷狀態(tài)</p><p>  ADCIntClear(ADC_BASE, 0); // 清除中斷狀態(tài),重要</p><p>  if (ulStatus != 0)

92、 // 如果中斷狀態(tài)有效</p><p><b>  {</b></p><p>  ADC_EndFlag = true; // 置位ADC采樣結(jié)束標(biāo)志</p><p><b>  }</b></p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論