版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 點(diǎn)光源跟蹤系統(tǒng)_第三組
- 太陽跟蹤課程設(shè)計(jì)---太陽跟蹤儀系統(tǒng)設(shè)計(jì)
- 智能點(diǎn)餐系統(tǒng)課程設(shè)計(jì)
- plc光源機(jī)械手課程設(shè)計(jì)
- 餐館點(diǎn)餐系統(tǒng)課程設(shè)計(jì)--餐館點(diǎn)餐系統(tǒng)
- 課程設(shè)計(jì)--民宿點(diǎn)餐系統(tǒng)
- c++課程設(shè)計(jì)自助點(diǎn)餐系統(tǒng)
- 軟件工程課程設(shè)計(jì)餐廳點(diǎn)餐系統(tǒng)
- 軟件工程課程設(shè)計(jì)餐廳點(diǎn)餐系統(tǒng)
- 軟件工程課程設(shè)計(jì)——餐廳點(diǎn)餐系統(tǒng)
- 軟件工程課程設(shè)計(jì)—餐廳點(diǎn)餐系統(tǒng)
- 畢業(yè)論文---電光源跟蹤系統(tǒng)
- 畢業(yè)論文---電光源跟蹤系統(tǒng)
- 課程設(shè)計(jì)—火車售票系統(tǒng)課程設(shè)計(jì)
- 24點(diǎn)游戲課程設(shè)計(jì)報告
- 24點(diǎn)游戲課程設(shè)計(jì)報告
- c語言課程設(shè)計(jì)--- 21點(diǎn)游戲設(shè)計(jì)
- java課程設(shè)計(jì)-21點(diǎn)小游戲
- java餐廳點(diǎn)餐系統(tǒng)課程設(shè)計(jì)說明書
- c_課程設(shè)計(jì)游戲21點(diǎn)
評論
0/150
提交評論