2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  嵌入式探月小車作品設計報告</p><p>  廣東科貿職業(yè)學院信息工程系</p><p>  開發(fā)小組成員:黃文哲、歐信、楊毅英</p><p>  指導老師: 滕泓虬、禹濤</p><p><b>  2011年5月</b></p><p><b>  目

2、 錄</b></p><p>  1.原創(chuàng)性聲明1</p><p><b>  2.摘要2</b></p><p>  3.嵌入式探月小車系統(tǒng)方案3</p><p><b>  3.1概述3</b></p><p>  3.2系統(tǒng)方案3<

3、;/p><p>  3.3嵌入式探月小車4</p><p>  3.4功能與指標4</p><p>  4.探月小車硬件設計5</p><p>  4.1硬件框圖5</p><p>  4.2MINI2440開發(fā)板簡介5</p><p>  4.3主要I/O口說明6</

4、p><p>  4.4直流電機驅動模塊7</p><p>  4.4.1電機驅動模塊實物圖7</p><p>  4.4.2L298N驅動原理圖8</p><p>  4.4.3H橋控制方案8</p><p>  4.5超聲波測距模塊(避障)9</p><p>  4.6無線通

5、訊模塊10</p><p>  4.7攝像頭模塊11</p><p>  5嵌入式探月車軟件設計11</p><p>  5.1軟件整體設計12</p><p>  5.2驅動程序設計12</p><p>  5.3添加MINI2440 GPIO LED燈支持12</p><p

6、>  5.4電機控制子程序13</p><p>  5.5無線通訊子程序16</p><p>  5.6攝像頭控制程序17</p><p>  5.7Openwrt嵌入式系統(tǒng)的移植17</p><p>  5.8嵌入式小車的PC客戶端設計22</p><p>  6系統(tǒng)測試方案25<

7、/p><p>  6.1直流電機驅動模塊(l298n)測試25</p><p>  6.2無線通信模塊測試26</p><p>  7創(chuàng)新性描述27</p><p><b>  8附錄1</b></p><p><b>  原創(chuàng)性聲明</b></p>

8、<p><b>  參賽作品原創(chuàng)性聲明</b></p><p>  本人鄭重聲明:所呈交的參賽作品報告,是本人和隊友獨立進行研究工作所取得的成果。除文中已經注明引用的內容外,本論文不包含任何其他個人或集體已經發(fā)表或撰寫過的作品成果,不侵犯任何第三方的知識產權或其他權利。本人完全意識到本聲明的法律結果由本人承擔。</p><p><b>  參賽隊

9、員簽名:</b></p><p>  日期: 年 月 日</p><p><b>  摘要</b></p><p>  探月小車實現(xiàn)了全方位自主移動及避障,行走中的圖像采集、無線數(shù)據(jù)傳輸。采用ARM處理器S3C2440作為主板控制器。選擇一種獨特的嵌入式LINUX發(fā)行版— OpenWrt作為操作系統(tǒng)。小車系統(tǒng)采用兩層

10、架構,上層以S3C2440為核心,負責圖像采集,并將圖像通過wifi方式發(fā)送給PC機;下層以51單片機為核心,負責運動控制,傳感器數(shù)據(jù)處理。</p><p>  兩層架構在控制、用戶擴展方面有明顯優(yōu)勢。下層單片機接口上可接多個擴展模塊。選擇OpenWrt作為操作系統(tǒng),也是作品的一個大膽創(chuàng)新之處。</p><p>  關鍵詞:ARM 嵌入式 linux S3C2440 OpenWrt 智能

11、wifi 攝像</p><p>  嵌入式探月小車系統(tǒng)方案</p><p><b>  概述</b></p><p>  近年來隨著人工智能技術、計算機技術等相關技術的發(fā)展,對移動機器人的研究越來越多。嵌入式探月小車實際上是一種移動機器人,它可實現(xiàn)多種不同功能,如探測險情、巡視、圖像采集、定位、無線通信等。它還可以作為各種智能控制方法(包括動態(tài)

12、避障、路徑規(guī)劃、群體協(xié)作策略) 的良好載體,開展研究。</p><p><b>  系統(tǒng)方案</b></p><p>  “履帶式探月小車”采用兩層架構。上層以ARM處理器S3C2440為核心,選用MINI2440開發(fā)板作為上層的主板,負責圖像采集,并將圖像通過wifi方式發(fā)送給遠端的PC機。wifi無線通信是利用PC機與無線路由器搭配環(huán)境平臺共同實現(xiàn)的。</p

13、><p>  下層是以51單片機為核心的單片機控制板,由作者手工焊接單片機芯片及外圍電路而成。下層負責小車運動控制,傳感器數(shù)據(jù)處理。51單片機通過IO口輸出PWM信號控制直流電機的轉速,實現(xiàn)小車的前進、停止、左轉和右轉。單片機接口電路上掛接了1個超聲波測距模塊、1個人體紅外感應模塊、1個步進電機模塊。超聲波測距模塊用來實現(xiàn)小車避障。在探月小車的前端安裝了一個步進電機,而超聲波測距模塊安置在步進電機的轉軸上,步進電機不

14、停地來回轉動,隨之轉動,這樣用1個超聲波測距模塊就可實現(xiàn)多方位測距,大大減少了超聲波測距模塊的數(shù)量。</p><p>  小車主要由硬件系統(tǒng)和軟件系統(tǒng)構成。硬件系統(tǒng)主要包括:ARM處理器、單片機、外圍接口電路、外設、小車車體以及電源等,其中ARM處理器是上層的核心,51單片機是下層的核心;軟件包括:嵌入式LINUX操作系統(tǒng)、外設驅動程序、LINUX應用程序以及單片機應用程序等。我們并沒有選用平常的嵌入式LINUX

15、版本,而是另辟蹊徑,選用一種獨特的嵌入式LINUX發(fā)行版之— OpenWrt 作為操作系統(tǒng)。OpenWrt提供了一個完全可寫的文件系統(tǒng)及軟件包管理,它通過簡單易用的方式,極大地降低了嵌入式linux開發(fā)的門檻,它允許開發(fā)者使用軟件包的概念來定制嵌入式設備,簡化了嵌入軟件開發(fā)的工序。我們由于選擇了OpenWrt,在開發(fā)過程中,我們發(fā)現(xiàn),定制linux的內核變成了一件相當容易的事情。</p><p>  探月小車的工

16、作流程為:車載傳感器模塊實時采集周圍環(huán)境信息,將此數(shù)據(jù)信息傳輸?shù)叫≤嚳刂葡到y(tǒng)中,單片機通過數(shù)據(jù)分析獲取有效數(shù)據(jù),從而獲知小車與障礙物的相對位置,然后根據(jù)此位置信息產生控制信號,單片機會產生PWM信號控制直流電機來控制小車轉向,從而達到小車自主“行走”的目的。下層的單片機與上層的ARM處理器通過串口來通信,ARM主板可將下層單片機控制板的工作數(shù)據(jù)通過無線wifi的方式傳輸?shù)竭h端的PC機。ARM主板平時不間斷地將USB攝像頭采集的清晰現(xiàn)場圖

17、片發(fā)給PC機。</p><p><b>  嵌入式探月小車</b></p><p><b>  功能與指標</b></p><p>  探月小車的功能特點:</p><p>  小車直線行走和轉彎行走</p><p>  履帶式小車,履帶底盤長180mm,寬135mm,高58

18、mm,可成功越障30~40mm,爬坡能力:40度</p><p>  USB攝像頭圖像采集</p><p>  無線圖像傳輸,可達每秒15幀</p><p>  超聲波測距及避障,最大測距80CM</p><p>  攝像頭帶云臺,轉動范圍360度</p><p>  主板采用S3C2440處理芯片,系統(tǒng)主頻穩(wěn)定400

19、MHz,可以輕松應對視頻采集,視頻處理,無線傳輸,聯(lián)網和語音控制等功能。</p><p>  可擴展能力強:多種傳感器模塊,并支持傳感器擴展</p><p>  Linux操作系統(tǒng)支持,可擴展高級網絡和圖形應用</p><p>  通過WebUI的方式對小車上的嵌入式linux系統(tǒng)進行配置</p><p><b>  探月小車硬件設

20、計</b></p><p><b>  硬件框圖</b></p><p>  MINI2440開發(fā)板簡介</p><p>  MINI2440開發(fā)板基于三星S3C2440芯片,如下圖所示:</p><p><b>  主要接口說明:</b></p><p>  電

21、源接口:輸入電壓不能大于7伏電壓,標準電源試配器為5伏。</p><p>  音頻接口:紅色為音頻輸入接口,另一個為音頻輸出接口。</p><p>  USB接口:主要用于傳輸數(shù)據(jù)。</p><p>  串口接口:串口接口主要是它能使PC機和開發(fā)板直接進行交換操作和數(shù)據(jù)傳送,完成調試。SB</p><p>  網卡接口:在啟動操作系統(tǒng)后,接上

22、無線網卡,就可以對小車發(fā)送無線信號。</p><p>  J tag接口:J tag接口主要作用是當Nand Flash或 Nor Flash 中沒有bootloader時,使用J tag接口進行燒寫。</p><p><b>  主要I/O口說明</b></p><p>  主控芯片為三星S3C2440芯片,如圖:</p>&l

23、t;p>  主要用到的I/O口包括:</p><p>  1. 用COM2 IO與單片機通訊。</p><p>  2. 用GPIO nLED_1、nLED_2、nLED_3、nLED_4</p><p>  來顯示當前系統(tǒng)狀態(tài).</p><p><b>  直流電機驅動模塊</b></p>&l

24、t;p><b>  電機驅動模塊實物圖</b></p><p>  驅動板主要采用了L298N芯片,它具有帶載能力強的特點。</p><p>  L298N驅動原理圖</p><p>  驅動電路芯片外圍電路主要用由二極管構成的電橋電路,兩組電機</p><p><b>  并聯(lián)而成。</b>

25、</p><p><b>  H橋控制方案 </b></p><p>  小車通過采用L298N芯片可以達到目的,整體控制方案如圖</p><p>  電機共有四4路PWM輸出分別作為左右輪的驅動,而通過兩路PWM輸出可控制一個電機,兩電機為并聯(lián)即可。</p><p>  當使能信號 ENABLE 為高時 輸出才隨輸入變

26、化,否則為高阻態(tài),所以焊接時,ENABLE及VS均接VCC。</p><p><b>  具體驅動過程為:</b></p><p>  通過編程由控制芯片經PWM發(fā)出驅動信號,PWM輸出作為L298N的輸入,經L298N轉換輸出控制信號使電機轉動,從而實現(xiàn)電動機的驅動。</p><p>  PWM輸出信號的高低則可以控制直流電機轉速,當占空比大

27、時,轉速高,占空比小時,轉速低,所以當PWM信號輸出占空比為0時可控制電機的停止。</p><p>  當左輪停止,右輪轉時,小車左轉。 當右輪停止,左輪轉動時,小車右轉。而兩路PWM輸出的正負順序轉換則可控制電機的正反轉,進而控制小車的前進和后退。</p><p>  超聲波測距模塊(避障)</p><p><b>  基本工作原理:</b>

28、</p><p> ?。?)采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號;</p><p> ?。?)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回;</p><p> ?。?)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。測試距離=(高電平時間*聲速(340M/S))/2;</p>&

29、lt;p>  與單片機連接如右圖接線,VCC供5V電源,GND為地,TRIG(接單片機P1^0)觸發(fā)控制信號輸入,ECHO(接單片機P1^1)回響信號輸出等四支線。</p><p><b>  無線通訊模塊</b></p><p>  通過無線網卡實現(xiàn)無線數(shù)據(jù)的傳輸。</p><p>  上圖是我們在小車上使用的無線網卡模塊。</p

30、><p>  下面是他的具體參數(shù):</p><p>  主芯片:RealTek RTL8187L</p><p>  網絡標準 IEEE 802.11g、IEEE 802.11b     數(shù)據(jù)傳輸率 54、48、36、24、18、12、11、9、6、5.5、2、1Mbps  有

31、效工作距離 室內最遠100米、外最遠300米(環(huán)境而異)   頻率范圍 2.4-2.4835GHz      信道數(shù) 13       調制方式 OFDM、DBPSK、DQPSK、CCK    

32、支持網絡協(xié)議 CSMA/CA with ACK     傳輸方式 直接序列擴頻 (DSSS)     靈敏度 54:-68dBm@10%PER、11M:-85dBm@8% PER、6M:-88dBm@10% PER、1M:-90dBm@8% PER、256K:-105dBm@8% PER(典型值)

33、60;   天線 天線增益 5dBi    總線接口 USB.</p><p>  在Openwrt里面對該網卡的支持也非常簡單。</p><p>  只需要選擇上對應的驅動就可以。        </p><

34、;p><b>  攝像頭模塊</b></p><p>  攝像頭的安裝位置對小車的性能有很大的影響,主要體現(xiàn)在圖像采樣效果和對小車重心的影響兩個方面。安裝的低了,易導致視野不夠廣闊,影響尋線的有效范圍;安裝得高了,指引線在圖像坐標上會變得過窄而無法被檢測到。 若安裝的太高,系統(tǒng)會因重心抬高而穩(wěn)定性變差。若安裝太靠前,則小車的重心會前移,進而在前行的過程中容易出現(xiàn)“點頭”的不穩(wěn)定情況,重

35、心前移也易導致驅動輪即后輪對地的壓力減小,容易出現(xiàn)驅動力不足或者打滑的現(xiàn)象。安裝位置合適的一個原則就是:攝像頭的安裝,首先必須滿足頭像采樣效果的需要??刂撇呗院唵?,則所需的拍攝范圍就可較?。环粗呗詮碗s,需獲得的賽道信息較多,則拍攝范圍應大一些。其次,攝像頭的安裝對小車重心的影響不能導致小車出現(xiàn)運動不穩(wěn)定的現(xiàn)象。 </p><p>  另外,在Openwrt對該攝像頭的支持只需要選擇上下面kmod-video-c

36、ore. kmod-video-gspca-core. kmod-video-gspca-zc3xx. kmod-usb-video.內核模塊。</p><p>  嵌入式探月車軟件設計</p><p>  軟件部分是小車的智能化的體現(xiàn),它控制小車所有的運行狀態(tài)。</p><p>  程序在Kubuntu CodeBlock IDE進行編寫,用Openwrt編譯出來

37、的ARM eabi交叉編譯工具編譯,在經過終端Sercurt-CRT通過串行口向小車燒入交叉編譯后的程序以及系統(tǒng)。</p><p>  應用軟件控制小車的避障、攝像、發(fā)送視頻等行為。</p><p>  此外,在主機端用vsftp軟件架設FTP服務器,并通過802.11.g(RTL8187)無線網卡建立無線局域網。</p><p>  這樣,小車就可以接收控制到達指

38、定地點拍照并發(fā)送圖片,而PC機端就可以接收通過wifi傳送過來的圖片。</p><p><b>  軟件整體設計</b></p><p>  “探月車”軟件部分整體設計如下圖所示:</p><p><b>  驅動程序設計</b></p><p>  驅動程序利用MINI2440開發(fā)板提供的例程進行

39、改寫,并編譯進內核。</p><p>  添加MINI2440 GPIO LED燈支持</p><p>  通過參考MINI2440電路圖,得知LED連接GPIO引腳:</p><p>  LED1 GPIO5</p><p>  LED1 GPIO6</p><p>  LED1 GPIO7</p>&

40、lt;p>  LED1 GPIO8</p><p><b>  主要代碼 :</b></p><p><b>  //LED</b></p><p>  static struct gpio_led mini2440_led_pins[] = {</p><p><b>  {<

41、;/b></p><p>  .name= "LED1",</p><p>  .gpio= S3C2410_GPB(5),</p><p>  .active_low= true,</p><p><b>  },</b></p><p><b> 

42、 {</b></p><p>  .name= "LED2",</p><p>  .gpio= S3C2410_GPB(6) ,</p><p>  .active_low= true,</p><p><b>  },</b></p><p><

43、b>  {</b></p><p>  .name= "LED3",</p><p>  .gpio= S3C2410_GPB(7),</p><p>  .active_low= true,</p><p><b>  },</b></p><p>

44、;<b>  {</b></p><p>  .name= "LED4",</p><p>  .gpio= S3C2410_GPB(8),</p><p>  .active_low= true,</p><p><b>  },</b></p><

45、;p><b>  };</b></p><p>  static struct gpio_led_platform_data mini2440_led_data = {</p><p>  .num_leds= ARRAY_SIZE(mini2440_led_pins),</p><p>  .leds= mini2440_le

46、d_pins,</p><p><b>  };</b></p><p>  static struct platform_device mini2440_leds = {</p><p>  .name= "leds-gpio",</p><p>  .id= -1,</p>

47、<p>  .dev.platform_data= &mini2440_led_data,</p><p><b>  };</b></p><p>  //GPIO resource</p><p>  static struct resource gpiodev_resource = {</p><

48、;p>  .start= 0xFFFFFFFF,</p><p><b>  };</b></p><p><b>  }</b></p><p><b>  電機控制子程序</b></p><p><b>  基本代碼如下:</b></

49、p><p>  Motor.c //電機控制</p><p>  #include<reg52.h></p><p>  sbit StepMotor1One=P2^0; //步進電機1第一相</p><p>  sbit StepMotor1Two=P2^1; //步進電機1第二相</p><

50、;p>  sbit StepMotor1Three=P2^2; //步進電機1第三相</p><p>  sbit StepMotor1Four=P2^3; //步進電機1第四相</p><p>  sbit MotorLeft1=P1^2; //直流電機</p><p>  sbit MotorLeft2=P1^3;</p><

51、;p>  sbit MotorRight1=P1^4;</p><p>  sbit MotorRight2=P1^5;</p><p>  sbit MotorLeftEn=P1^6; //直流電機使能</p><p>  sbit MotorRightEn=P1^7;</p><p>  void delay(unsigned i

52、nt s) //延時函數(shù)</p><p><b>  {</b></p><p>  while(s--);</p><p><b>  }</b></p><p>  void Motor(unsigned char a,unsigned char b,unsigned char c)

53、//主電機控制函數(shù)</p><p><b>  {</b></p><p>  unsigned char z=0;</p><p><b>  switch(a)</b></p><p><b>  {</b></p><p>  case '

54、1': //進入左右電機控制</p><p>  MotorLeftEn=1;</p><p>  MotorRightEn=1;</p><p>  if(b=='1') //左驅電機</p><p><b>  {</b></p><

55、;p>  if(c=='1')</p><p><b>  {</b></p><p>  MotorLeft1=1; //左驅正轉</p><p>  MotorLeft2=0;</p><p><b>  }</b></p><p>  else

56、 if(c=='2')</p><p><b>  {</b></p><p>  MotorLeft1=0; //左驅反轉</p><p>  MotorLeft2=1;</p><p><b>  }</b></p><p><b>  el

57、se</b></p><p><b>  {</b></p><p>  MotorLeft1=1;//停</p><p>  MotorLeft2=1;</p><p><b>  }</b></p><p><b>  }</b>&l

58、t;/p><p>  else if(b=='2') //右驅電機</p><p><b>  {</b></p><p>  if(c=='1')////右驅正轉</p><p><b>  {</b></p><p>  MotorRi

59、ght1=0;</p><p>  MotorRight2=1;</p><p><b>  }</b></p><p><b>  else</b></p><p>  if(c=='2')//右驅反轉</p><p><b>  {<

60、/b></p><p>  MotorRight1=1;</p><p>  MotorRight2=0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p&

61、gt;<p>  MotorRight1=1;//停</p><p>  MotorRight2=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p>&l

62、t;p>  case '2': //進入步進電機控制</p><p><b>  P2=0xFF;</b></p><p>  if(b=='1') //StepMotor1</p><p><b>  {</b></p>

63、<p>  if(c=='1') </p><p><b>  {</b></p><p><b>  z=135;</b></p><p><b>  while(z)</b></p><p><b>  {</b>

64、</p><p><b>  z--;</b></p><p>  StepMotor1One=0;</p><p>  delay(300);</p><p>  StepMotor1One=1;</p><p>  StepMotor1Two=0; </p><p>

65、  delay(300);</p><p>  StepMotor1Two=1;</p><p>  StepMotor1Three=0;</p><p>  delay(300);</p><p>  StepMotor1Three=1;</p><p>  StepMotor1Four=0;</p>

66、<p>  delay(300);</p><p>  StepMotor1Four=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(c=='2')</p><p><b> 

67、 {</b></p><p><b>  z=135;</b></p><p><b>  while(z)</b></p><p><b>  {</b></p><p><b>  z--;</b></p><p>

68、  StepMotor1Four=0;</p><p>  delay(300);</p><p>  StepMotor1Four=1;</p><p>  StepMotor1Three=0; </p><p>  delay(300);</p><p>  StepMotor1Three=1;</p>

69、;<p>  StepMotor1Two=0;</p><p>  delay(300);</p><p>  StepMotor1Two=1;</p><p>  StepMotor1One=0;</p><p>  delay(300);</p><p>  StepMotor1One=1;</

70、p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  P2=0xFF;</b></p><p><b>  break;</b&g

71、t;</p><p>  default :break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  無線通訊子程序</b></p><p>  此部分內容為Linux下socket編程,

72、為客戶端提供遠程控制支持,部分代碼如下:</p><p>  int sendstring(char *addr,int port,char *sendchar)</p><p><b>  {</b></p><p>  struct sockaddr_in s_addr;</p><p><b>  int

73、 sock;</b></p><p>  int addr_len;</p><p>  int len,i;</p><p>  if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {</p><p>  perror("no socket");</p&

74、gt;<p>  exit(errno);</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("create socket.\n\r");</p><p>  s_addr.sin_family

75、= AF_INET;</p><p><b>  if (port)</b></p><p>  s_addr.sin_port = htons(port);</p><p><b>  else</b></p><p>  s_addr.sin_port = htons(10001);</p

76、><p>  if (*addr)</p><p>  s_addr.sin_addr.s_addr = inet_addr(addr);</p><p><b>  else {</b></p><p>  printf("Send a message must have a receiver!\n")

77、;</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p>  addr_len = sizeof(s_addr);</p><p><b>  len = -1;</b></p><p>  for

78、 (i = 0;i<4;i++) {</p><p>  if(len < 0)len = sendto(sock,sendchar, strlen(sendchar), 0,(struct sockaddr *) &s_addr, addr_len); </p><p>  else {printf("send success!");return

79、0;}</p><p><b>  }</b></p><p>  printf("send error!");</p><p><b>  return 0;</b></p><p><b>  攝像頭控制程序</b></p><p&g

80、t;  攝像頭控制軟件mjpg-streamer由Openwrt以軟件包形式提供。</p><p>  通過端口8080輸出為mjpeg格式的圖像。</p><p>  Openwrt嵌入式系統(tǒng)的移植</p><p>  我們需要通過MINI2440使小車實現(xiàn)下面的功能:驅動并控制攝像頭,通過串口控制硬件層的C51單片機,驅動無線網卡并連接,運行服務端,提供UI界面

81、。而實現(xiàn)以上的功能,我們需要首先構建一個嵌入式操作系統(tǒng)。經過反復地討論研究,我們決定在MINI2440移植Openwrt,因為它可以大幅度減少我們的開發(fā)周期。</p><p>  OpenWrt它是一個開源的用于各種無線路由及嵌入式設備的linux發(fā)行版。它可以實現(xiàn)與另外一個著名的固件DD-WRT相類似的功能。</p><p>  OpenWrt提供了一個完全可寫文件系統(tǒng)及軟件包管理,它通

82、過簡單易用的方式,最大限度地降低了嵌入式linux開發(fā)的門檻,它允許使用軟件包的概念來定制嵌入式設備,這使得它能適用于絕大多數(shù)應用并實現(xiàn)更多的功能。對于開發(fā)人員,OpenWrt提供簡單易用的環(huán)境框架來構建應用程序。</p><p>  Openwrt主頁:http://www.openwrt.org</p><p>  經過一個星期的,如果我們使用openwrt,就可以大幅度減沙開發(fā)以及移

83、植時間,調試也非常方便。最終,花費了將近一個星期成功在mini2440上運行了openwrt。具體請參考我們的openwrt移植文檔。</p><p>  Openwrt的編譯很簡單,我們只需要獲取到我們所需要的源碼并進行簡單的配置,執(zhí)行make就可以編譯了。</p><p>  編譯完成后的Openwrt效果圖:</p><p>  Openwrt LuCi的控制

84、界面:</p><p>  嵌入式小車的PC客戶端設計</p><p>  1. 客戶端程序大致分成四大部分:初始化,顯示,更新,連接</p><p><b>  2. 程序樹</b></p><p>  界面預覽圖(注:未連接目標)。</p><p>  完成后的JAVA客戶端</p>

85、;<p><b>  系統(tǒng)測試方案</b></p><p>  系統(tǒng)采用先分塊測試,然后再整體測試的方案。先分塊測試直流電機、步進電機、超聲波測距、串口通信、嵌入式系統(tǒng)移植、無線數(shù)據(jù)傳輸?shù)饶K,然后再整體測試系統(tǒng)性能。采用直接由單片機控制和上位機通過無線數(shù)據(jù)傳輸控制等多種情況進行測試。下面是具體的兩個模塊的測試方案。</p><p>  直流電機驅動模塊

86、(l298n)測試</p><p><b>  1. 被測模塊簡介</b></p><p>  通過對直流電機的控制實現(xiàn)小車前進后退左轉右轉等動作,主要是控制速度與轉彎角度等指標。</p><p><b>  2. 測試目的</b></p><p>  通過兩路PWM波控制兩個直流電機速度,用單片機

87、4個IO口控制兩個直流電機的轉向,從而控制小車前進和后退和轉彎。</p><p>  3. 測試方法及步驟</p><p>  通過在兩電機上安裝霍耳測速傳感器,從而得到電機的轉速參數(shù);</p><p>  調節(jié)PWM的占空比從而調節(jié)電機的轉速;</p><p>  在不同環(huán)境下測試得出兩電機轉速之差與小車旋轉角度的關系;</p>

88、<p>  4. 測試環(huán)境和工具</p><p><b>  測試工具:</b></p><p>  軟件:Keil 、stc單片機isp下載軟件</p><p>  硬件:車載stc89c52單片機的小車一部、下載器一個、霍耳測速傳感器二個、尺子一套。</p><p><b>  測試環(huán)境:&

89、lt;/b></p><p>  水泥地板、平滑地面、草地、沙地等。</p><p><b>  5. 測試表格</b></p><p><b>  6. 測試結論</b></p><p>  小車在不同環(huán)境下相同運行參數(shù)下,水泥地板效果最理想,沙地最不理想。PWM的占空比與轉速之差的關系是:

90、大概占空比每差10%,轉速10s內大概差1轉。</p><p><b>  無線通信模塊測試</b></p><p><b>  1. 被測模塊簡介</b></p><p>  主芯片:RealTek RTL8187L</p><p>  網絡標準 IEEE 802.11b/g 

91、   數(shù)據(jù)傳輸率 54、48、36、24、18、12、11、9、6、5.5、2、1Mbps  有效工作距離 室內最遠100米、外最遠300米(環(huán)境而異)   頻率范圍 2.4-2.4835GHz      信道數(shù) 13   

92、;    調制方式 OFDM、DBPSK、DQPSK、CCK    支持網絡協(xié)議 CSMA/CA with ACK     傳輸方式 直接序列擴頻 (DSSS)     靈敏度 54:-68dBm@10%PER、

93、11M:-85dBm@8% PER、6M:-88dBm@10% PER、1M:-90dBm@8% PER、256K:-105dBm@8% PER(典型值)    天線 天線增益 5dBi    2. 測試目的</p><p>  測試網絡通信的信號強度及其效率.</p><p>  3. 測試方法

94、及步驟</p><p>  通過無線網卡的控制工具,檢查測試無線模塊在MINI2440的信號強度跟質量,從而得網絡連通的速率跟質量;</p><p>  在不同環(huán)境下測試得出無線模塊傳輸信號強度與傳輸距離之前的關系;</p><p>  4. 測試環(huán)境和工具</p><p><b>  測試工具:</b></p&g

95、t;<p>  軟件:wireles-stools</p><p>  硬件:無線模塊,無線接入點。</p><p>  測試環(huán)境:教室,宿舍操場空地。</p><p><b>  5. 測試表格</b></p><p><b>  6. 測試結論</b></p><

96、;p>  在距離5到30米左右無障礙物左右的為較理想通訊距離,連接信號以及連接速率都符合正常通訊的需要。</p><p><b>  創(chuàng)新性描述</b></p><p>  本設計上層通過MINI2440使小車實現(xiàn)下面的功能:驅動并控制攝像頭,通過串口控制硬件層的C51單片機,驅動無線網卡并連接,運行服務端,提供UI界面。這樣實際上實現(xiàn)了雙重控制,既可以通過底層

97、STC89C52單片機實現(xiàn)小車的運動控制,也可以在上層通過無線通訊傳回圖像,進行遠程控制。本設計可以用于可以科學探測、消防排險等多種特殊作業(yè)場合,有一定的實際應用價值。</p><p>  本設計具有以下創(chuàng)新和特點:</p><p> ?。?)使用MINI2440開發(fā)板,比較適合運動小車等現(xiàn)場控制領域。</p><p> ?。?)在MINI2440移植Openwrt

98、,大幅度減少我們的開發(fā)周期,大大提高了開發(fā)效率。</p><p> ?。?)采用B/S架構,通過無線數(shù)據(jù)傳輸,在服務端即可通過實時傳回的視頻圖像,監(jiān)控小車實際運行情況。在遇到意外情況時,可以遠程控制小車。在服務器端發(fā)送命令操控小車恢復正常運行,從而增加了系統(tǒng)的可靠性。</p><p> ?。?)模塊化設計,分工完成各個模塊,最終進行整合調試,加快了項目開發(fā)進度。</p>&l

99、t;p> ?。?)系統(tǒng)完整性強,從PC上位機軟件、嵌入式操作系統(tǒng)搭建、各模塊驅動到底層小車控制等的實現(xiàn),使整個作品設計有較好的完整度。</p><p><b>  附錄 </b></p><p>  附錄1 無線小車服務端程序</p><p>  /********************************************

100、***********************</p><p>  ; 程序名稱: 無線小車服務端程序</p><p>  ; 文件名: server.c</p><p>  ; 作者: lintel</p><p>  ; 參考: 基于TCP服務器的例子</p><p>  ; <

101、;Linux下C程序開發(fā)詳解>283頁</p><p>  *******************************************************************/</p><p>  #include <sys/types.h></p><p>  #include <sys/socket.h><

102、/p><p>  #include <netinet/in.h></p><p>  #include <arpa/inet.h></p><p>  #include <netdb.h></p><p>  #include <stdio.h></p><p>  #inc

103、lude <unistd.h> </p><p>  #include <fcntl.h></p><p>  #include <string.h></p><p>  #include <termios.h></p><p>  #include <stdio.h></p&

104、gt;<p>  #include <unistd.h></p><p>  #include <fcntl.h></p><p>  #include <sys/signal.h></p><p>  #include <sys/types.h></p><p>  #defin

105、e PORT 1500</p><p>  #define MAX 10</p><p>  #define SUCCESS 0</p><p>  #define ERROR 1</p><p>  /*******************************************************************&

106、lt;/p><p><b>  命令列表:</b></p><p><b>  5前</b></p><p><b>  2后</b></p><p><b>  1左</b></p><p><b>  3右<

107、/b></p><p><b>  4步進左</b></p><p><b>  6步進右</b></p><p><b>  0停</b></p><p><b>  8測距</b></p><p>  9返回(斷

108、續(xù)運行)</p><p>  ;*******************************************************************/</p><p>  int speed_arr[] = {B38400, B19200, B9600, B4800, B2400, B1200, B300,</p><p>  B38400, B1

109、9200, B9600, B4800, B2400, B1200, B300, };</p><p>  int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, </p><p>  19200, 9600, 4800, 2400, 1200, 300, };</p><p>  voi

110、d set_speed(int fd, int speed){</p><p><b>  int i; </b></p><p>  int status; </p><p>  struct termios Opt;</p><p>  tcgetattr(fd, &Opt); </p>

111、;<p>  for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { </p><p>  if (speed == name_arr[i]) { </p><p>  tcflush(fd, TCIOFLUSH); </p><p>  cfsetispeed(&O

112、pt, speed_arr[i]); </p><p>  cfsetospeed(&Opt, speed_arr[i]); </p><p>  status = tcsetattr(fd, TCSANOW, &Opt); </p><p>  if (status != 0) { </p><p>  perro

113、r("tcsetattr fd1"); </p><p>  return; </p><p><b>  } </b></p><p>  tcflush(fd,TCIOFLUSH); </p><p><b>  } </b></p><

114、p><b>  }</b></p><p><b>  }</b></p><p>  int main(void)</p><p><b>  {</b></p><p>  int sockfd,newsockfd,is_connected[MAX],fd,ser_f

115、d,result1;</p><p>  struct sockaddr_in addr;</p><p>  int addr_len = sizeof(struct sockaddr_in);</p><p>  fd_set myreadfds;</p><p>  char msgbuffer[256];</p><

116、;p>  char msg[] ="Welcome to Car_serv.\n";</p><p>  ser_fd = open("/dev/s3c2410_serial1", O_WRONLY); //打開串口</p><p>  if (ser_fd < 0) </p><p><b>  { &

117、lt;/b></p><p>  printf("無法打開串口.\n"); </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  se

118、t_speed(ser_fd,9600);/*設置波特率*/</p><p>  //result1 = write(ser_fd, "0", 1); //打開成功,向串口發(fā)送命令 ‘0’ 即停止</p><p>  write(ser_fd, "0", 1); //打開成功,向串口發(fā)送命令 ‘5’ 即停止</p><p>

119、<b>  }</b></p><p>  if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)</p><p><b>  {</b></p><p>  perror("socket");</p><p><b>  

120、exit(1);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("socket已連接 .\n");</p>&

121、lt;p>  printf("socked id: %d \n",sockfd);</p><p><b>  }</b></p><p>  bzero(&addr,sizeof(addr));</p><p>  addr.sin_family =AF_INET;</p><p> 

122、 addr.sin_port = htons(PORT);</p><p>  addr.sin_addr.s_addr = htonl(INADDR_ANY);</p><p>  if(bind(sockfd,&addr,sizeof(addr))<0)</p><p><b>  {</b></p><p

123、>  perror("connect");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

124、/p><p>  printf("已連接.\n");</p><p>  printf("本地端口:%d\n",PORT);</p><p><b>  }</b></p><p>  if(listen(sockfd,3)<0)</p><p><

125、;b>  {</b></p><p>  perror("listen");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  else</b></p>

126、<p><b>  {</b></p><p>  printf("正在監(jiān)聽......\n");</p><p><b>  }</b></p><p>  for(fd=0;fd<MAX;fd++)</p><p><b>  {</b>

127、;</p><p>  is_connected[fd]=0;/*設置所有*/</p><p><b>  }</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  FD_ZERO(&a

128、mp;myreadfds);</p><p>  FD_SET(sockfd,&myreadfds);</p><p>  for(fd=0;fd<MAX;fd++)</p><p><b>  {</b></p><p>  if(is_connected[fd])</p><p>

129、;<b>  {</b></p><p>  FD_SET(fd,&myreadfds);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(!select(MAX,&myreadfds,NULL,NULL

130、,NULL))</p><p><b>  {</b></p><p><b>  continue;</b></p><p><b>  }</b></p><p>  for(fd=0;fd<MAX;fd++)</p><p>  {

131、 </p><p>  if(FD_ISSET(fd,&myreadfds))</p><p><b>  {</b></p><p>  if(sockfd==fd)</p><p><b>  {</b></p><p>  if((newsockfd

132、 = accept (sockfd,&addr,&addr_len))<0)</p><p><b>  {</b></p><p>  perror("accept");</p><p><b>  }</b></p><p>  write(newsoc

133、kfd,msg,sizeof(msg));</p><p>  is_connected[newsockfd] =1;</p><p>  printf("%s已連接服務端\n",inet_ntoa(addr.sin_addr));</p><p><b>  }</b></p><p><b&

134、gt;  else</b></p><p><b>  { </b></p><p>  bzero(msgbuffer,sizeof(msgbuffer));</p><p>  if(read(fd,msgbuffer,sizeof(msgbuffer))<=0)</p><p>&l

135、t;b>  {</b></p><p>  printf("連接已關閉.\n");</p><p>  is_connected[fd]=0;</p><p>  close(fd);</p><p><b>  }</b></p><p><b>

136、  else</b></p><p><b>  {</b></p><p>  write(fd,msgbuffer,sizeof(msgbuffer));</p><p>  printf("向串口寫命令:%s \n",msgbuffer);</p><p>  write(ser_f

137、d,msgbuffer, 1); //向串口發(fā)送命令</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>&

138、lt;b>  }</b></p><p><b>  }</b></p><p>  附錄2 底層硬件(單片機部分)原理圖</p><p><b>  作者聲明</b></p><p><b>  GPL源碼聲明</b></p><p>

溫馨提示

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

評論

0/150

提交評論