arm課程設計報告--基于lpc2131數字電壓表設計_第1頁
已閱讀1頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  電控學院</b></p><p><b>  課程設計</b></p><p>  課程名稱: ARM課程設計 </p><p>  題 目: 基于LPC2131數字電壓表設計 </p><

2、;p>  院 (系): 電氣與控制工程學院 </p><p>  專業(yè)班級: 測控技術與儀器1001班 </p><p>  姓 名: </p><p>  學 號:

3、 </p><p>  指導教師: </p><p>  2013年12月28日</p><p><b>  目 錄</b></p><p><b>  一概述1</b></p><p>  1.1課題設計背景

4、1</p><p>  1.2ARM開發(fā)板(簡介)1</p><p>  1.3、LPC2131微控制器2</p><p><b>  二、 方案設計3</b></p><p><b>  2.1設計思路3</b></p><p><b>  2.2設計要求

5、3</b></p><p><b>  三、 硬件設計4</b></p><p>  3.1硬件設計原理圖及介紹4</p><p><b>  四、 軟件設計5</b></p><p><b>  五、 參考文獻6</b></p><p

6、><b>  六、 心得體會6</b></p><p><b>  七、 附件8</b></p><p>  基于LPC2131數字電壓表</p><p><b>  一概述</b></p><p><b>  1.1課題設計背景</b><

7、/p><p>  電壓表已經有100多年的發(fā)展歷史,雖然不斷改進與完善,仍然無法滿足現代電子測量的需求,數字電壓表(Digital Voltmeter簡稱DVM)自1952年問世以來,顯示出強大的生命力,現已成為在電子測量領域中應用最廣泛的一種儀器。數字電壓表可以顯示清晰、直觀,讀數準確,準確度高,分辨力強,測量范圍廣,擴展能力強,測量速度快,輸入阻抗高,集成度高,微功耗和抗干擾能力強等優(yōu)點,獨占電壓表產品的熬頭。

8、 DVM的高速發(fā)展,使它已成為實現測量自動化、提高工作效率不可缺少的儀表,數字化是當前計量儀器發(fā)展的主要方向之一,而高準度的DC-DVC的出現,又使DVM進入了精密標準測量領域。隨著現代化技術的不斷發(fā)展,數字電壓表的功能和種類將越來越強,越來越多,其使用范圍也會越來越廣泛。采用智能化的數字儀器也將是必然的趨勢,它們將不僅能提高測量準確度,而且能提高電測量技術的自動化程序,可以擴展成各種通用數字儀表、專用數字儀表及各種非電量的數字化儀表(

9、如:溫度計、濕度計、酸度計、重量、厚度儀等),幾乎覆蓋了電子電工測量、工業(yè)測量、自動化儀表等各個領域。從而提高計量檢定人員的工作效。 目前數字電壓表的內部核</p><p>  1.2ARM開發(fā)板(簡介)</p><p>  ARM開發(fā)板,即以基于ARM內核的芯片作為CPU,同時附加其他功能外圍的嵌入式開發(fā)板,用以評估內核芯片的功能。ARM開發(fā)板可以分為Cortex-M0開發(fā)板、Cort

10、ex-M3開發(fā)板、Cortex-A5開發(fā)板[1]、Cortex-A8開發(fā)板、Cortex-A9開發(fā)板、Cortex-A15開發(fā)板等,而提供這些內核芯片的廠商有飛思卡爾、TI、NXP、三星、Atmel和ST等。英國ARM公司是嵌入式RISC處理器的IP(知識產權)供應商,它為ARM架構處理器提供ARM處理器內核(如ARM7TDMI、ARM9TDMI及ARM10TDMI等)。由各半導體公司在上述處理器內核基礎上進行再設計,嵌入各種外圍和處理

11、部件,形成各種MCU。目前基于ARM內核的芯片在嵌入式處理器市場上占據75%的份額。ARM作為嵌入式系統(tǒng)的處理器,具有低電壓,低功耗和高集成度等特點,并具有開放性和可擴充性。事實上,ARM內核已成為嵌入式系統(tǒng)首選的處理器內核。而對于醫(yī)療電子設備而言,并不需要圖像處理等方面更高的要求,因此,ARM7TDMI內核以0.9MIPS(百萬條指令每秒)/MHz的高效處理能力足以滿足應用需要。ARM7TD</p><p> 

12、 1.3、LPC2131微控制器 </p><p><b>  1、簡介</b></p><p>  LPC2131/2132/2138 是基于一個支持實時仿真和跟蹤的16/32 位ARM7TDMI-STM CPU,并帶有32kB、64kB 和512kB 嵌入的高速Flash 存儲器。128 位寬度的存儲器接口和獨特的加速結構使32 位代碼能夠在最大時鐘速率下運行。對

13、代碼規(guī)模有嚴格控制的應用可使用16 位Thumb 模式將代碼規(guī)模降低超過30%,而性能的損失卻很小。較小的封裝和很低的功耗使 LPC2131/2132/2138 特別適用于訪問控制和POS 機等小型應用中;由于內置了寬范圍的串行通信接口和8/16/32kB 的片內SRAM,它們也非常適合于通信網關、協(xié)議轉換器、軟件</p><p>  modem、語音識別、低端成像,為這些應用提供大規(guī)模的緩沖區(qū)和強大的處理功能。

14、多個32 位定時器、1個或2 個10 位8 路的ADC、10 位DAC、PWM 通道、47 個GPIO 以及多達9 個邊沿或電平觸發(fā)的外部中斷使它們特別適用于工業(yè)控制應用以及醫(yī)療系統(tǒng)。</p><p><b>  2、主要性能</b></p><p>  a、 8/16/32kB 的片內靜態(tài)RAM 和32/64/512kB 的片內Flash 程序存儲器。128 位寬度

15、接口/加速器可實現高達60 MHz 工作頻率。</p><p>  b、 1 個(LPC2131/2132)或2 個(LPC2138)8 路10 位的A/D 轉換器,共提供16 路模擬輸入,每個通道的轉換時間低至2.44us。</p><p>  c、 1 個10 位的D/A 轉換器,可產生不同的模擬輸出。(僅適用于LPC2132/2138)</p><p>  d

16、、 2 個32 位定時器/計數器(帶4 路捕獲和4 路比較通道)、PWM 單元(6 路輸出)和看門狗。</p><p>  e、多個串行接口,包括2 個16C550 工業(yè)標準UART、2 個高速I2C 接口(400 kbit/s)、SPITM 。</p><p><b>  方案設計</b></p><p><b>  2.1設計思路

17、</b></p><p>  通過LPC2131板內的A/D轉換器,采取中斷方式,完成對2路0—5V的模擬電壓進行循環(huán)采集,采集的數據通過串口UARTO</p><p>  向PC機發(fā)送顯示 。</p><p><b>  2.2設計要求</b></p><p> ?。?)對2路模擬信號輸入實行循環(huán)采集,每路

18、連續(xù)采集16次,取平均值。</p><p> ?。?)分別設定每一路的上限值,若采集的平均值超過該上限值,則對應通道的指示燈閃爍10次后一直亮,指示燈閃爍時喇叭發(fā)聲,以示警告。</p><p><b>  硬件設計</b></p><p>  3.1硬件設計原理圖及介紹</p><p><b>  圖3.1原理

19、框圖</b></p><p>  由上圖知,兩個被測信號進入ARM開發(fā)板,經過A/D轉換模塊轉換得出電壓值,再經由上位機顯示出數值。</p><p>  圖3.2蜂鳴器報警電路</p><p>  圖3.3指示燈閃爍電路</p><p><b>  軟件設計</b></p><p> 

20、 4.1程序流程圖如圖4.1所示。根據流程圖編程實現各自功能。</p><p><b>  圖4.1程序流程圖</b></p><p><b>  參考文獻</b></p><p>  [1]周立功.ARM嵌入式系統(tǒng)基礎教程[M].北京航空航天大學出版社,2008.9.</p><p>  [2]李

21、紅巖,楊學存.ARM嵌入式實驗+實訓指導書[M].西安科技大學出版社,2013.9.</p><p>  [3]周立功,張華等.深入淺出ARM7——LPC213x/LPC214x(上冊)[M].北京航空航天大學出版社,2005. </p><p>  [4]黃智偉,稅夢玲,張強.全國大學生電子設計大賽ARM嵌入式系統(tǒng)應用設計與實踐[M].北京航空航天大學出版社,2011.</p>

22、;<p><b>  [7]百度文庫</b></p><p><b>  心得體會</b></p><p>  心得體會一(龐海洋)</p><p>  這次的課程設計是基于LPC2131的數字電壓表,實現的主要功能用ARM的A/D轉換模塊功能,外部擴展蜂鳴器報警電路和指示燈閃爍電路,用串口UART0向PC機

23、發(fā)送顯示。</p><p>  在做數字電壓表的設計時,開始是遇到不少的問題,比如我們想數字電壓表到底是什么設計原理呢,模擬電壓信號是怎樣被數字電壓表循環(huán)采集的呢。由于只是在課堂上學習過理論知識,還沒有接觸過實際真正設計和開發(fā),所以在考慮問題的時候往往是不全面的,導致設計過程中存在著這樣那樣的問題。經過這一個星期的課程設計實習,過程曲折坎坷讓人一言難盡啊。我們組一共二個人,整體上是我們二個人都在做,但個人的分工不

24、同,呼霄鵬負責硬件部分,我負責軟件部分。在設計程序的過程中,我明白到做一個好程序的不易,做一個好的編程者就更加困難。我主要負責軟件程序編寫以及調試工作。通過這次課程設計,加強了我的動手、思考和解決問題的能力。在整個設計過程中主要是軟件編寫,這個我們花了好長時間,幾乎是前四天都在編寫數字電壓表程序。最后,在老師和同學的幫助下,我們完成了程序設計。經過一天的調試,我們的課程設計終于成功了。我們兩個都很激動,嘗到了通過自己設計電壓表的喜悅。&

25、lt;/p><p>  這次課程設計我最大的收獲就是“細節(jié)”?!凹毠?jié)決定成敗”這句話太對了。我以后在生活中要注重細節(jié)。在課程設計過程中,我的程序框架是對的,可是細節(jié)部分出現很多錯誤。導致我的程序雖然在語法上沒有錯誤但是出現邏輯錯誤使電壓表不能完成其設計功能。我要做一個細心的人。最后,謝謝老師和同學們的幫助。</p><p>  心得體會二(呼霄鵬)</p><p>  

26、這次的課程設計是基于LPC2131的數字電壓表,實現的主要功能用ARM的A/D轉換模塊功能,外部擴展蜂鳴器報警電路和指示燈閃爍電路,用串口UART0向PC機發(fā)送顯示。</p><p>  本學期在學院的安排下我們學習了ARM嵌入式系統(tǒng)的理論知識,這門課程是我們測控專業(yè)的主要課程。雖然我們學的都是一些簡單的知識,注重學習如何去分析和研究嵌入式系統(tǒng)的功能和結構等,但學習的過程中還是有一定的困難。在理論課結束后老師為我

27、們安排了ARM的課程設計實習。</p><p>  本次課程實習我們兩個人組,我主要負責硬件的設計、調試和電路圖的繪制,另一個同學負責軟件的編寫和調試。這次實習對于我來說還是有一定難度的,因為幾乎沒有什么實際經驗而不像有的同學以前參加過電子設計大賽。他們做起來感覺得心應手可以說是一氣合成,而我畫圖所用的軟件以前雖然用過但還是不太熟悉,畫圖過程中有很多問題。</p><p>  通過這次課程

28、設計,雖然學到了不少東西不管是電路圖的繪制還是軟件的編寫和調試,但同時也發(fā)現了自身的不足。就比如說實際動手能力吧。畫基本一樣的一電路圖,熟悉畫圖軟件的同學可能有一上午就可以畫好所有的,而我卻需要差不多一天的時間還不能保證還所畫圖完全正確。希望通過這次實習可以對自己的操作能力有所提高。</p><p><b>  附件</b></p><p><b>  程序

29、清單:</b></p><p>  /****************************************************************************</p><p>  * 文 件 名:main.c</p><p>  * 功 能:使用ADC模塊的通道0、1進行電壓的測量,然后將轉換結果從串口輸出,<

30、/p><p>  * 上位機使用EasyARM軟件全仿真的DOS字符窗口觀察。</p><p>  * 說 明:跳線JP8、JP30短接。由W1、W2調節(jié)測量電壓值。</p><p>  * 通訊格式:8位數據位,1位停止位,無奇偶校驗,波特率為115200。</p><p>  **********

31、******************************************************************/</p><p>  #include "config.h"</p><p>  #define LED1 1<<16 // P2.16 </p><p>  #defin

32、e LED2 1<<17// P2.17 </p><p>  #define BEEPCON 1<<20</p><p>  // P0.7引腳控制B1,低電平蜂鳴</p><p>  #define LEDCON0x00000000</p><p>  /*************

33、***************************************************************</p><p>  * 名 稱:DelayNS()</p><p>  * 功 能:長軟件延時</p><p>  * 入口參數:dly延時參數,值越大,延時越久</p><p><b> 

34、 * 出口參數:無</b></p><p>  ****************************************************************************/</p><p>  void DelayNS(uint32 dly)</p><p>  { uint32 i;</p><

35、;p>  for(; dly>0; dly--) </p><p><b>  {</b></p><p>  for(i=0; i<5000; i++);</p><p><b>  }</b></p><p><b>  }</b></p>

36、<p>  /****************************************************************************</p><p>  * 名 稱:UART0Init()</p><p>  * 功 能:初始化串口0。設置為8位數據位,1位停止位,無奇偶校驗</p><p>  * 入口參數:

37、bps 通訊波特率 </p><p><b>  * 出口參數:無</b></p><p>  ****************************************************************************/</p><p>  void UART0Init(uint32 bps)</p>

38、<p>  { uint16 Fdiv;</p><p>  PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05;// 不影響其它管腳連接,設置I/O連接到UART0</p><p>  U0LCR = 0x83;// DLAB = 1,可設置波特率</p><p>  Fdiv = (Fpclk /

39、16) / bps;// 設置波特率</p><p>  U0DLM = Fdiv / 256;</p><p>  U0DLL = Fdiv % 256;</p><p>  U0LCR = 0x03;</p><p><b>  }</b></p><p> 

40、 /****************************************************************************</p><p>  * 名 稱:UART0SendByte()</p><p>  * 功 能:向串口發(fā)送字節(jié)數據,并等待發(fā)送完畢。</p><p>  * 入口參數:data 要發(fā)送的數據<

41、;/p><p><b>  * 出口參數:無</b></p><p>  ****************************************************************************/</p><p>  void UART0SendByte(uint8 data)</p><p&g

42、t;<b>  { </b></p><p>  U0THR = data;// 發(fā)送數據</p><p>  while( (U0LSR&0x40)==0 );// 等待數據發(fā)送完畢</p><p><b>  }</b></p><p>  /**********

43、******************************************************************</p><p>  * 名 稱:UART0SendStr()</p><p>  * 功 能:向串口發(fā)送一字符串</p><p>  * 入口參數:srt要發(fā)送的字符串的指針</p><p>&

44、lt;b>  * 出口參數:無</b></p><p>  ****************************************************************************/</p><p>  void UART0SendStr(char *str)</p><p><b>  { </

45、b></p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  if( *str == '\0' ) break;</p><p>  UART0SendByte(*str++);// 發(fā)送數據</p&g

46、t;<p><b>  }</b></p><p><b>  }</b></p><p>  /****************************************************************************</p><p>  * 名 稱:PCDispChar

47、()</p><p>  * 功 能:向PC機發(fā)送顯示字符。</p><p>  * 入口參數:x 顯示位置的縱坐標,0-79 </p><p>  * y 顯示位置的橫坐標,0-24 </p><p>  * chr 顯示的字符,不能為0xff</

48、p><p>  * color 顯示的狀態(tài)包括前景色、背景色、閃耀位。它與dos的字符顯示狀態(tài)一樣。 </p><p>  * 即0~3位:前景色,4~6位:背景色,7位:閃耀位。</p><p><b>  * 出口參數:無</b></p><p>  ****

49、************************************************************************/</p><p>  void PCDispChar(uint8 x, uint8 y, uint8 chr, uint8 color)</p><p><b>  { </b></p><p>

50、  UART0SendByte(0xff); // 發(fā)送起始字節(jié)</p><p>  UART0SendByte(x);// 發(fā)送字符顯示坐標(x,y)</p><p>  UART0SendByte(y);</p><p>  UART0SendByte(chr);// 發(fā)送顯示字符</p><p> 

51、 UART0SendByte(color);</p><p><b>  }</b></p><p>  /****************************************************************************</p><p>  * 名 稱:ISendStr()</p>

52、<p>  * 功 能:向PC機發(fā)送字串,以便顯示。</p><p>  * 入口參數:x 顯示位置的縱坐標,0-79 </p><p>  * y 顯示位置的橫坐標,0-24 </p><p>  * color 顯示的狀態(tài)包括前景色、背景色、閃耀位。它與dos的字符

53、顯示狀態(tài)一樣。 </p><p>  * 即0~3位:前景色,4~6位:背景色,7位:閃耀位。</p><p>  * str 要發(fā)送的字符串,字串以'\0'結束</p><p><b>  * 出口參數:無</b></p><p>  *

54、***************************************************************************/</p><p>  void ISendStr(uint8 x, uint8 y, uint8 color, char *str)</p><p><b>  { </b></p><p>

55、;<b>  while(1)</b></p><p><b>  { </b></p><p>  if(*str=='\0') break; // 若為'\0',則退出</p><p>  PCDispChar(x++, y, *str++, co

56、lor); // 發(fā)送顯示數據</p><p><b>  if(x>=80)</b></p><p><b>  { </b></p><p><b>  x = 0;</b></p><p><b>  y++;</b></p

57、><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  /************************************************************************

58、****</p><p>  * 名 稱:main()</p><p>  * 功 能:進行通道0、1電壓ADC轉換,并把結果轉換成電壓值,然后發(fā)送到串口。</p><p>  * 說 明:在CONFIG.H文件中包含stdio.h。</p><p>  ***********************************

59、*****************************************/</p><p>  int main(void)</p><p><b>  { </b></p><p>  uint32 ADC_Data;</p><p>  char str[20];</p><

60、p>  UART0Init(115200);// 初始化UART0</p><p>  PINSEL1 = 0x01400000;// 設置P0.27、P0.28連接到AIN0、AIN1</p><p>  IO1DIR = BEEPCON; // 設置I/O為輸出</p><p>  IO2DIR = 0x000

61、00000; </p><p>  IO1SET = BEEPCON; </p><p>  /* 進行ADC模塊設置,其中x<<n表示第n位設置為x(若x超過一位,則向高位順延) */</p><p>  ADCR = (1 << 0) |// SEL = 1 ,選擇通道0</p>

62、<p>  ((Fpclk / 1000000 - 1) << 8) | // CLKDIV = Fpclk / 1000000 - 1 ,即轉換時鐘為1MHz</p><p>  (0 << 16) |// BURST = 0 ,軟件控制轉換操作</p><p>  (0 << 17)

63、 | // CLKS = 0 ,使用11clock轉換</p><p>  (1 << 21) | // PDN = 1 , 正常工作模式(非掉電轉換模式)</p><p>  (0 << 22) | // TEST1:0 = 00 ,正常工作模式(非測

64、試模式)</p><p>  (1 << 24) | // START = 1 ,直接啟動ADC轉換</p><p>  (0 << 27);// EDGE = 0 (CAP/MAT引腳下降沿觸發(fā)ADC轉換)</p><p>  DelayNS(10);</p>

65、;<p>  ADC_Data = ADDR;// 讀取ADC結果,并清除DONE標志位</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  ADCR = (ADCR&0x00FFFF00)|0x01|(1 <<

66、; 24);// 設置通道1,并進行第一次</p><p><b>  轉換</b></p><p>  while( (ADDR&0x80000000)==0 ); // 等待轉換結束</p><p>  ADCR = ADCR | (1 << 24);// 再次啟運轉換</p&g

67、t;<p>  while( (ADDR&0x80000000)==0 ); // 等待轉換結束</p><p>  ADC_Data = ADDR;// 讀取ADC結果</p><p>  ADC_Data = (ADC_Data>>6) & 0x3FF; // 提取AD轉換值</

68、p><p>  ADC_Data = ADC_Data * 3300; // 數值轉換</p><p>  ADC_Data = ADC_Data / 1024;</p><p>  sprintf(str, "%4dmV at VIN1", ADC_Data);</p><p>  ISend

69、Str(30, 23, 0x30, str); </p><p>  if( ADC_Data>=3000) </p><p>  { uint32 i;</p><p>  for(i=0;i<10;i++)</p><p>  { IO1SET = BEEPCON;</p><p>

70、;  IO2DIR = 0x00010000; // BEEPCON = 1</p><p>  DelayNS(15);</p><p>  IO1CLR = BEEPCON; // BEEPCON = 0</p><p>  IO2DIR = 0x00000000;</p><p>  Dela

71、yNS(15);</p><p><b>  }</b></p><p>  IO2DIR = 0x00010000;</p><p>  DelayNS(150);</p><p><b>  } </b></p><p><b>  else</b>

72、</p><p>  { IO1SET = BEEPCON; // BEEPCON = 0</p><p>  IO2DIR = 0x00000000;} </p><p>  ADCR = (ADCR&0x00FFFF00)|0x02|(1 << 24);// 設置通道2,并進行第一次轉換</p><

73、p>  while( (ADDR&0x80000000)==0 ); // 等待轉換結束</p><p>  ADCR = ADCR | (1 << 24);// 再次啟運轉換</p><p>  while( (ADDR&0x80000000)==0 ); // 等待轉換結束</p><

74、p>  ADC_Data = ADDR;// 讀取ADC結果</p><p>  ADC_Data = (ADC_Data>>6) & 0x3FF; // 提取AD轉換值</p><p>  ADC_Data = ADC_Data * 3300; // 數值轉換</p><p&g

75、t;  ADC_Data = ADC_Data / 1024;</p><p>  sprintf(str, "%4dmV at VIN2", ADC_Data);</p><p>  ISendStr(30, 21, 0x30, str); </p><p>  if( ADC_Data>=2500) </p>

76、<p>  { uint32 i;</p><p>  for(i=0;i<10;i++)</p><p>  { IO1SET = BEEPCON;</p><p>  IO2DIR = 0x00020000; // BEEPCON = 1</p><p>  DelayNS(15)

77、;</p><p>  IO1CLR = BEEPCON; // BEEPCON = 0</p><p>  IO2DIR = 0x00000000;</p><p>  DelayNS(15);</p><p><b>  }</b></p><p>  IO2DIR = 0x000

78、20000;</p><p>  DelayNS(150);</p><p><b>  } </b></p><p><b>  else</b></p><p>  { IO1SET = BEEPCON; // BEEPCON = 0</p><p>

溫馨提示

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

評論

0/150

提交評論