點光源跟蹤系統(tǒng)課程設計_第1頁
已閱讀1頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

9、><p>  3.1 總體調試19</p><p>  3.2 問題及解決方案19</p><p>  3.2.1 通道比較閥值的設置19</p><p>  3.2.2 電機的防抖19</p><p>  四 設計總結 20</p><p><b>  五 參考文獻21<

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

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

12、t;/b></p><p><b>  調試運行。</b></p><p><b>  設計報告正文</b></p><p>  2.1設計方案的選擇2.1.1系統(tǒng)方案的擬定</p><p><b>  方案一</b></p><p>  由檢測

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

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

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

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

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

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

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

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

21、機轉速越快,但步進電機的轉速也不可能太快,因為它每走一步需要一定的時間,若信號頻率過高,可能導致電機失步,甚至只在原步顫動。</p><p>  2.2.3電機驅動模塊 </p><p>  本設計采用LM3S1138微控制器(晶振頻率為12MHZ)對該四線八相制步進電機進行控制。通過I/O口輸出的具有時序的方波作為步進電機的控制信號,信號經過特定芯片驅動步進電機。本文選用ULN2003構

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

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

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

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

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

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

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

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

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

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

32、試</b></p><p>  3.1 軟硬件調試 </p><p>  寫完成后,在對整個系統(tǒng)調試的過程中,出現了電機不運轉等問題。主要通過單獨調試各個模塊及檢查相關硬件電路的焊接,找出問題所在,然后針對問題逐個擊破,最后成功完成本設計。</p><p><b>  四、設計總結</b></p><p>

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

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

35、):1702 1703,1708.</p><p>  [4]侯長來.一種太陽自動跟蹤裝置的設 JJ.現代機械,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轉換結束的標

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}; //四相八拍正轉編碼</p><p>  unsigned char REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0

41、x01}; ////四相八拍反轉編碼</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++) //轉1*n圈 </p><p>  { </p><p>  for (i=0; i<8; i++) //一個周期轉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]; //取數據</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++) //轉1×n圈</p><p><b>  {</b></p><p><b>  //退出此循環(huán)

46、程序</b></p><p>  for (i=0; i<8; i++) //一個周期轉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]; //取數據</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++) //轉1*n圈 </p><p>  { </p><p>  for (i=0; i<8; i++) //一個周期轉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、 //取數據</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++) //轉1×n圈</p><p

53、><b>  {</b></p><p><b>  //退出此循環(huán)程序</b></p><p>  for (i=0; i<8; i++) //一個周期轉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]; //取數據</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); // 設置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采樣序列步進配置: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 | // 結束,并</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保存采樣結果</p><p>  void adcSample(unsigned long *pulVal)</p><p><b>  {</b></p><p>  ADCProcessorTrigger(ADC_BASE, 0); // 處理器觸發(fā)采樣序列

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

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

68、=64; //N 步進電機運轉圈數</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; // 轉換成電壓值</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); // 點亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_ffw(); //電機正轉</

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); // 點亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_ffw(); //電機

81、正轉</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); // 點亮LED</p><

83、p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_rev(); //電機正轉</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); // 點亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p&g

86、t;  motor_rev1(); //電機正轉</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); // 點亮LED</p><p>  for(r=0;r<N;r++)</p><p><b>  { </b></p><p>  motor_ffw1(); //電機正轉</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采樣結束標志</p><p><b>  }</b></p>

溫馨提示

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

評論

0/150

提交評論