久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2179|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)循跡小車論文 電賽資料下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:370451 發(fā)表于 2018-7-12 19:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
第十五屆“長通杯”大學(xué)生電子設(shè)計(jì)競賽

循跡小車(I題)

摘  要
隨著現(xiàn)代化的不斷發(fā)展,智能水平逐漸進(jìn)步,某些智能引導(dǎo)機(jī)器人已經(jīng)逐步出現(xiàn)在無人駕駛機(jī)動(dòng)車,倉庫,無人快遞工廠及服務(wù)機(jī)器人等方面,智能循跡小車就是其中一個(gè)重要的應(yīng)用方向。本文論述了智能循跡小車的控制過程,本設(shè)計(jì)采用STC89C516RD+單片機(jī)作為智能小車的控制核心,運(yùn)用紅外對(duì)管傳感器檢測道路情況,識(shí)別白色路面中央的黑色標(biāo)識(shí)線,采集信號(hào)并將信號(hào)轉(zhuǎn)換為能被單片機(jī)識(shí)別的數(shù)字信號(hào),在電機(jī)驅(qū)動(dòng)中,采用L298N電機(jī)驅(qū)動(dòng)模塊控制直流電機(jī),通過相應(yīng)程序完成雙線循跡及自動(dòng)泊車,自動(dòng)避障,整體系統(tǒng)電路設(shè)計(jì)簡單,可靠性能高。

目  錄

摘  要
目  錄              III

1 系統(tǒng)方案
1.1 智能循跡小車控制芯片的論證與選擇
2 系統(tǒng)理論分析與計(jì)算
2.1 系統(tǒng)整體的分析
2.1.1  所用元件的分析              1
2.1.2 系統(tǒng)模塊與接線分析              2
2.1.3 小車電源模塊分析              2
2.1.4 電機(jī)驅(qū)動(dòng)模塊分析              2
2.1.5 紅外循跡模塊分析              3
3 電路與程序設(shè)計(jì)              3
3.1 電路的設(shè)計(jì)              4
3.1.1 系統(tǒng)總體框圖              4
3.1.2 驅(qū)動(dòng)系統(tǒng)框圖與電路原理圖              4
3.2 程序的設(shè)計(jì)              5
3.2.1 程序功能描述與設(shè)計(jì)思路              5
3.2.2 程序流程圖              5

4 測試方案與測試結(jié)果              6
4.1 測試方案              6
4.2 測試條件與儀器              6
4.3 測試結(jié)果及分析                            6
4.3.1 測試結(jié)果(數(shù)據(jù))                            6
4.3.2 測試分析與結(jié)論                            7
5 心得體會(huì)                            7
附錄1:電路原理圖              8
附錄2:源程序              10

循跡小車I題)

1 系統(tǒng)方案
1.1智能小車控制芯片的論證與選擇

方案1:采用Atmel公司的AT89C516RD+單片機(jī)作為智能小車的主控芯片, AT89C516RD+是一種低功耗、高性能CMOS8位微控制器,工作電壓為5V,32個(gè)I/O口,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。該芯片價(jià)格便宜,應(yīng)用廣泛,操作簡單,硬件與軟件設(shè)計(jì)相對(duì)簡單。大學(xué)生廣泛用于單片機(jī)學(xué)習(xí)與創(chuàng)作。資源足夠用于智能小車的設(shè)計(jì)。因此,本設(shè)計(jì)選擇了此芯片。

方案2:采用單片機(jī)MSP430F1611作為智能小車的主控芯片,MSP430F1611是一款超低功耗單片機(jī),工作電壓范圍為1.8V-3.6V,48 位I/O 口線,16-Bit RISC 架構(gòu),但相應(yīng)硬件復(fù)雜,軟件編寫相對(duì)難度大,而且價(jià)格昂貴,用于智能小車資源過剩,造成浪費(fèi)。所以我們放棄了此方案。

方案3:采用AT89C51單片機(jī),4k字節(jié)Flash 閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32 個(gè)I/O 口線,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)5向量兩級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。現(xiàn)已被C52逐漸取代,故放棄。

   本設(shè)計(jì)方案采用方案一中的易于操作的AT89C516RD+單片機(jī)作為電信號(hào)處理、控制電機(jī)驅(qū)動(dòng)以及紅外尋跡功能。

2 系統(tǒng)理論分析與計(jì)算
2.1系統(tǒng)整體的分析
2.1.1 所用元件的分析
(1)采用AT89C516RD+主控芯片。
  • 采用L298N作為電機(jī)驅(qū)動(dòng)模塊的主芯片。
  • 采用紅外對(duì)管制作黑線檢測模塊。
  • 采用超聲波傳感器作為避障模塊。
2.1.2 系統(tǒng)模塊與接線分析

(1)對(duì)單片機(jī)的程序編程與燒錄

程序采用c語言編程,通過keil uVision4軟件對(duì)程序進(jìn)行調(diào)試以及對(duì)可以運(yùn)行的程序生成單片機(jī)可以運(yùn)行的hex文件;程序的燒錄采用stc-isp-15-v6.85燒錄軟件;用USB轉(zhuǎn)TTL小板給單片機(jī)燒錄程序。小板的RX接單片機(jī)的TX(p3.1),TX接單片機(jī)的RX(p3.0),GND接單片機(jī)的GND,VCC接單片機(jī)的VCC。但需要注意的是在用燒錄軟件給單片機(jī)燒錄程序時(shí)要用冷啟動(dòng),即先點(diǎn)擊‘下載/編程’按鈕,再將USB小板的VCC連接單片機(jī)的VCC。

2.1.3 小車的電源模塊分析

電池模塊采用4節(jié)干電池對(duì)小車送電。電機(jī)的運(yùn)行需要8V左右的電壓,而單片機(jī)、超聲波、以及紅外模塊都需要穩(wěn)定的5v的邏輯電壓;因此采用L7805CV穩(wěn)壓芯片輸出穩(wěn)定的5v電壓。

圖1 電源模塊
2.1.4電機(jī)驅(qū)動(dòng)模塊分析

電機(jī)驅(qū)動(dòng)采用L298N集成芯片與單片機(jī)和電機(jī)連接。通過單片機(jī)運(yùn)行程序?qū)⒏叩碗娖剿徒o驅(qū)動(dòng)模塊從而控制電機(jī)的前進(jìn)、后退、左轉(zhuǎn)、后傳、停止。電機(jī)驅(qū)動(dòng)集成板自帶穩(wěn)壓芯片高壓端接電源電壓(8v左右),GND接地線,然后輸出5v電壓;out1、out2用導(dǎo)線和左電機(jī)連接,out3、out4用導(dǎo)線和右電機(jī)連接。驅(qū)動(dòng)模塊的IN1、IN2與單片機(jī)的p1.2、p1.3連接,IN3、IN4與單片機(jī) 的p1.6、p1.7連接。使能端ENA、ENB通過跳帽連接。

2.1.5 紅外尋跡模塊分析

紅外尋跡采用兩個(gè)集成的紅外對(duì)管。紅外對(duì)管有發(fā)射管和接收管,發(fā)射管發(fā)射紅外線,接收管接收。一個(gè)紅外對(duì)管有3個(gè)引腳,VCC引腳接5v電平,GND引腳接地,OUT引腳輸出高低電平并通過杜邦線與單片機(jī)連接。左紅外對(duì)管與單片機(jī)p3.7引腳連接,右紅外對(duì)管與單片機(jī)p3.6引腳連接。若沒有尋

到黑線,接收管接收到反射的紅外光,光敏電阻變小,輸出低電平‘0’;若尋到黑線,接收管不能接收到紅外光,光敏電阻大小不變,輸出高電平‘1’;單片機(jī)處理高低電平并給電機(jī)驅(qū)動(dòng)模塊輸出命令,從而控制電機(jī)的運(yùn)行。

3 電路與程序設(shè)計(jì)

根據(jù)題目要求,把技術(shù)指標(biāo)分配到方框圖或主流程圖中各部分(即各單元電路或程序模塊中)。設(shè)計(jì)各單元之間的匹配關(guān)系對(duì)各單元的技術(shù)要求。

3.1 電路的設(shè)計(jì)
3.1.1系統(tǒng)總體框圖
圖4 系統(tǒng)總體框圖
3.2 程序的設(shè)計(jì)
3.2.1程序功能描述與設(shè)計(jì)思路

程序有小車直走,左轉(zhuǎn),右轉(zhuǎn),停止,延時(shí),尋跡子程序。

用If和while等語句將小車尋到黑跡以及走在白線上用‘0、1’表示。尋到黑跡輸出為‘1’,未尋到輸出為‘0’。‘IN1=1,IN2=0’表示小車左輪正轉(zhuǎn);‘IN3=1,IN4=0’表示小車右輪正轉(zhuǎn);‘IN1=0,IN2=1’表示小車左輪倒轉(zhuǎn);‘IN3=0,IN4=1’表示小車右輪倒轉(zhuǎn);‘IN1=1,IN2=0,IN3=1,IN4=0’表示小車直走;通過紅外尋跡模塊向單片機(jī)引腳輸出‘0、1’電平,從而單片機(jī)控制電機(jī)驅(qū)動(dòng)芯片驅(qū)動(dòng)電機(jī)尋跡行走。

3.2.2程序流程圖:見附錄1

4 測試方案與測試結(jié)果

根據(jù)總體設(shè)計(jì)對(duì)各單元電路的要求,實(shí)測該單元電路的對(duì)應(yīng)指標(biāo)。用表格的形式列出實(shí)測數(shù)據(jù)及實(shí)測時(shí)所用儀器設(shè)備的名稱、型號(hào)。有些數(shù)據(jù)最好能畫出實(shí)測曲線。要求數(shù)據(jù)、曲線必須真實(shí)。

根據(jù)題目技術(shù)要求,測試作品整體技術(shù)指標(biāo)。用表格的形式列出實(shí)測數(shù)據(jù)及實(shí)測時(shí)所用儀器設(shè)備的名稱、型號(hào)。有些數(shù)據(jù)最好能畫出實(shí)測曲線。要求數(shù)據(jù)、曲線必須真實(shí)。

4.1 測試方案

將設(shè)計(jì)的程序燒錄到單片機(jī)中,并用自制的賽道測試小車的行走情況;通過小車在運(yùn)行中出現(xiàn)的問題在程序中進(jìn)行更改,并繼續(xù)進(jìn)行行走測試。

4.2 測試條件與儀器

條件:光線正常的房間。

工具:焊槍,焊錫,螺絲,螺絲刀,小道,鉗子等。

儀器:萬用表,計(jì)算機(jī)。

4.3 測試結(jié)果及分析            
4.3.1 測試結(jié)果(數(shù)據(jù))

結(jié)果:小車只能進(jìn)行單黑線尋跡

4.3.2測試分析與結(jié)論

分析:小車硬件缺少紅外收發(fā)管,只能進(jìn)行黑線尋跡;軟件編程不熟練,超聲波避障程序未能調(diào)試成功。

5 心得體會(huì)

在收到長通杯競賽通知后,憑借著心中的熱情與好奇,我們便迅速的組隊(duì)參加,但參與過程是異常艱辛與困難的,靠熱情無疑難以脫穎而出,在眾多的課題中,經(jīng)過認(rèn)真考慮,綜合實(shí)際因素,我們便選擇了循跡小車的題目。
  由于腦中沒有絲毫頭緒,我們就瘋狂的在網(wǎng)絡(luò)上尋找信息,向?qū)I(yè)性更強(qiáng)的伙伴求援,還購買了一個(gè)成品小車認(rèn)真研究。然而制作過程仍然坎坷異常,小車的拼接算是最簡單的一個(gè)環(huán)節(jié),但如何在有限的面板合理美觀的安裝上各種系統(tǒng)還是讓我們費(fèi)盡了心思。另外,各模塊的焊接也是個(gè)精細(xì)活,雖然反復(fù)的修正,嘗試結(jié)果也只能算是差強(qiáng)人意。
  當(dāng)小車可以做簡單的直線運(yùn)動(dòng)后,我們便想讓其實(shí)現(xiàn)更多的功能,可程序的編寫燒入又是橫亙?cè)谖覀兠媲暗囊坏离y題,縱然是廢寢忘食,我們也只是做出了簡單的循跡模塊。對(duì)于更加困難的功能,由于能力不足,時(shí)間緊迫,課程緊張,終究未能實(shí)現(xiàn),我們實(shí)在是感到遺憾與羞愧。
  最后,雖然我們的成品十分簡陋,功能不全,但這終歸是我們小組努力的成果,是我們的心血之作。我們對(duì)自己所做的感到驕傲,對(duì)未能實(shí)現(xiàn)的會(huì)繼續(xù)研究,完善作品。我們小組不是最強(qiáng)的,但我們用盡全力,堅(jiān)如磐石!

附錄1:電路原理圖
圖12 程序流程圖
  1. #include<ZY-4WD_PWM.H>            
  2. #ifndef _LED_H_
  3. #define _LED_H_


  4.     //定義小車驅(qū)動(dòng)模塊輸入IO口
  5.               sbit IN1=P1^2;
  6.               sbit IN2=P1^3;
  7.               sbit IN3=P1^6;
  8.               sbit IN4=P1^7;
  9.               sbit EN1=P1^4;
  10.               sbit EN2=P1^5;
  11.             

  12.               /***蜂鳴器接線定義*****/
  13.     sbit BUZZ=P2^3;

  14.     #define Left_1_led        P3_7              //左循跡傳感器
  15.             
  16.     #define Right_1_led       P3_6              //右循跡傳感器
  17.             
  18.     #define LeftIRBZ          P3_5              //左避障傳感器            
  19.             
  20.               #define RightIRBZ         P3_4              //右避障傳感器               

  21.               #define Left_moto_pwm                P1_6              //PWM信號(hào)端

  22.               #define Right_moto_pwm                P1_7              //PWM信號(hào)端
  23.             
  24.               #define Left_moto_go      {P1_2=1,P1_3=0;}  //左電機(jī)向前走
  25.               #define Left_moto_back    {P1_2=0,P1_3=1;}               //左邊電機(jī)向后轉(zhuǎn)
  26.               #define Left_moto_Stop    {P1_2=0,P1_3=0;}         //左邊電機(jī)停轉(zhuǎn)                    
  27.               #define Right_moto_go     {P1_6=1,P1_7=0;}              //右邊電機(jī)向前走
  28.               #define Right_moto_back   {P1_6=0,P1_7=1;}              //右邊電機(jī)向后走
  29.               #define Right_moto_Stop   {P1_6=0,P1_7=0;}                    //右邊電機(jī)停轉(zhuǎn)  

  30.               unsigned char pwm_val_left  =0;//變量定義
  31.               unsigned char push_val_left =0;// 左電機(jī)占空比N/20
  32.               unsigned char pwm_val_right =0;
  33.               unsigned char push_val_right=0;// 右電機(jī)占空比N/20
  34.               bit Right_moto_stop=1;
  35.               bit Left_moto_stop =1;
  36.               unsigned  int  time=0;

  37. /************************************************************************/            
  38. //延時(shí)函數(shù)            
  39.    void delay(unsigned int k)
  40. {   
  41.      unsigned int x,y;
  42.               for(x=0;x<k;x++)
  43.                  for(y=0;y<2000;y++);
  44. }
  45. /************************************************************************/
  46. //前速前進(jìn)
  47.      void  run(void)
  48. {
  49.      push_val_left=15;              //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
  50.               push_val_right=15;
  51.               Left_moto_go ;   //左電機(jī)往前走
  52.               Right_moto_go ;  //右電機(jī)往前走
  53. }

  54. //后退函數(shù)
  55.      void  backrun(void)
  56. {
  57.      push_val_left=15;              //速度調(diào)節(jié)變量 0-20。。。0最小,20最大
  58.               push_val_right=15;
  59.               Left_moto_back;   //左電機(jī)往后走
  60.               Right_moto_back;  //右電機(jī)往后走
  61. }

  62. //左轉(zhuǎn)
  63.      void  leftrun(void)
  64. {            
  65.      push_val_left=5;
  66.               push_val_right=15;
  67.               Right_moto_go ;  //右電機(jī)往前走
  68.      Left_moto_back   ;  //左電機(jī)后走
  69. }

  70. //右轉(zhuǎn)
  71.      void  rightrun(void)
  72. {
  73.               push_val_left=16;
  74.               push_val_right=8;
  75.      Left_moto_go  ;   //左電機(jī)往前走
  76.               Right_moto_back    ;  //右電機(jī)往后走            
  77. }

  78. //停止
  79.      void  stop(void)
  80. {            

  81.               Right_moto_Stop ;  //右電機(jī)停止
  82.      Left_moto_Stop  ;  //左電機(jī)停止
  83. }

  84. /************************************************************************/
  85. /*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
  86. /************************************************************************/
  87. /*                    左電機(jī)調(diào)速                                        */
  88. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  89.                             void pwm_out_left_moto(void)
  90. {
  91.    if(Left_moto_stop)
  92.    {
  93.     if(pwm_val_left<=push_val_left)
  94.                      {
  95.                                  Left_moto_pwm=1;
  96. //                                 Left_moto_pwm1=1;
  97.                                }
  98.               else
  99.                      {
  100.                        Left_moto_pwm=0;
  101. //                                 Left_moto_pwm1=0;
  102.                                }
  103.               if(pwm_val_left>=20)
  104.                      pwm_val_left=0;
  105.    }
  106.    else   
  107.           {
  108.            Left_moto_pwm=0;
  109. //           Left_moto_pwm1=0;
  110.                               }
  111. }
  112. /******************************************************************/
  113. /*                    右電機(jī)調(diào)速                                  */
  114.    void pwm_out_right_moto(void)
  115. {
  116.   if(Right_moto_stop)
  117.    {
  118.     if(pwm_val_right<=push_val_right)
  119.                     {
  120.                      Right_moto_pwm=1;
  121. //                               Right_moto_pwm1=1;
  122.                                }
  123.               else
  124.                     {
  125.                                Right_moto_pwm=0;
  126. //                               Right_moto_pwm1=0;
  127.                               }
  128.               if(pwm_val_right>=20)
  129.                      pwm_val_right=0;
  130.    }
  131.    else   
  132.           {
  133.            Right_moto_pwm=0;
  134. //           Right_moto_pwm1=0;
  135.                     }
  136. }

  137. /***************************************************/
  138. ///*TIMER0中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  139.               void timer0()interrupt 1   using 2
  140. {
  141.      TH0=0XFc;                //1Ms定時(shí)
  142.               TL0=0X18;
  143.               time++;
  144.               pwm_val_left++;
  145.               pwm_val_right++;
  146.               pwm_out_left_moto();
  147.               pwm_out_right_moto();
  148. }            

  149. /*********************************************************************/            

  150. #endif
  151.               #include<AT89X52.H>                              //包含51單片機(jī)頭文件,內(nèi)部有各種寄存器定義
  152.               #include<ZY-4WD_PWM.H>                              //包含HL-1藍(lán)牙智能小車驅(qū)動(dòng)IO口定義等函數(shù)

  153. //主函數(shù)
  154.               void main(void)
  155. {            

  156.               unsigned char i;
  157.     P1=0X00;   //關(guān)電機(jī)            
  158.                                           TMOD=0X01;
  159.                       TH0= 0XFc;                              //1ms定時(shí)
  160.                        TL0= 0X18;
  161.                          TR0= 1;
  162.                       ET0= 1;
  163.                       EA = 1;                                             //開總中斷


  164.               while(1)              //無限循環(huán)
  165.               {
  166.             
  167.                                           //有光信號(hào)輸出為0  沒有光信號(hào)輸出為1
  168.                             /*              if( LeftIRBZ == 0 || RightIRBZ == 0 )

  169.                                           {
  170.                                          
  171.                                             stop();                               //調(diào)用小車停止

  172.                                           }

  173.                                          

  174.                                             else                            */

  175.                             /*              {              */                                               if(Left_1_led==0&&Right_1_led==0)

  176.                                              {
  177.                                                run();   //調(diào)用前進(jìn)函數(shù)

  178.                                           
  179.                                              }
  180.                                                                      
  181.                                                                                                      if(Left_1_led==1&&Right_1_led==0)                  //左邊檢測到黑線
  182.                                                         {
  183.                                                                         leftrun();                              //調(diào)用小車左轉(zhuǎn)  函數(shù)
  184.                                                                       // delay(2);

  185.                                                }
  186.                                             
  187.                                                                                                       if(Right_1_led==1&&Left_1_led==0)                            //右邊檢測到黑線
  188.                                                           {               
  189.                                                               rightrun();                               //調(diào)用小車右轉(zhuǎn)              函數(shù)
  190.                                                                       // delay(2);

  191.                                                           }
  192.                                                                                         if(Right_1_led==1&&Left_1_led==1)                            //懸空狀態(tài)  避懸崖
  193.                                                           {               
  194.                                                               stop();                               //調(diào)用小車停止

  195.                                                           }

  196.                                           }            
  197.               }
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
循跡小車 電子版.docx (499.79 KB, 下載次數(shù): 44)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产中文视频 | 亚洲一区二区在线电影 | 97av在线| 成人久久18免费网站麻豆 | 大伊人久久 | 黄网站色大毛片 | 亚洲国产福利视频 | 日韩成人在线网址 | 一区二区久久 | 欧美在线免费 | 国产日韩久久久久69影院 | 91精品久久久久久久久中文字幕 | 日韩一区二区久久 | 福利视频亚洲 | 国产精品视频一二三 | 日韩欧美三级 | 欧美福利| 亚洲一区在线免费观看 | 亚洲高清在线 | 亚洲精品美女视频 | 久久综合九九 | 九九九久久国产免费 | 日韩在线观看中文字幕 | 久久蜜桃av一区二区天堂 | 国产免费一区二区 | 一区二区三区国产在线观看 | a毛片| 久久精品中文字幕 | 亚洲1区 | 国产一区日韩在线 | 青青久在线视频 | 中文字幕在线三区 | 中文字幕av网站 | 欧美视频网 | 91国产在线播放 | 亚洲人人| 本地毛片 | 亚洲成人免费观看 | 亚洲一区二区三区久久 | 日韩最新网址 | 在线观看h视频 |