欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2323|回復: 0
收起左側

單片機循跡小車論文 電賽資料下載

[復制鏈接]
ID:370451 發(fā)表于 2018-7-12 19:29 | 顯示全部樓層 |閱讀模式
第十五屆“長通杯”大學生電子設計競賽

循跡小車(I題)

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

目  錄

摘  要
目  錄              III

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

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

循跡小車I題)

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

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

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

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

   本設計方案采用方案一中的易于操作的AT89C516RD+單片機作為電信號處理、控制電機驅動以及紅外尋跡功能。

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

(1)對單片機的程序編程與燒錄

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

2.1.3 小車的電源模塊分析

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

圖1 電源模塊
2.1.4電機驅動模塊分析

電機驅動采用L298N集成芯片與單片機和電機連接。通過單片機運行程序將高低電平送給驅動模塊從而控制電機的前進、后退、左轉、后傳、停止。電機驅動集成板自帶穩(wěn)壓芯片高壓端接電源電壓(8v左右),GND接地線,然后輸出5v電壓;out1、out2用導線和左電機連接,out3、out4用導線和右電機連接。驅動模塊的IN1、IN2與單片機的p1.2、p1.3連接,IN3、IN4與單片機 的p1.6、p1.7連接。使能端ENA、ENB通過跳帽連接。

2.1.5 紅外尋跡模塊分析

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

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

3 電路與程序設計

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

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

程序有小車直走,左轉,右轉,停止,延時,尋跡子程序。

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

3.2.2程序流程圖:見附錄1

4 測試方案與測試結果

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

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

4.1 測試方案

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

4.2 測試條件與儀器

條件:光線正常的房間。

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

儀器:萬用表,計算機。

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

結果:小車只能進行單黑線尋跡

4.3.2測試分析與結論

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

5 心得體會

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

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


  4.     //定義小車驅動模塊輸入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信號端

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

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

  37. /************************************************************************/            
  38. //延時函數(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. //前速前進
  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 ;   //左電機往前走
  52.               Right_moto_go ;  //右電機往前走
  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;   //左電機往后走
  60.               Right_moto_back;  //右電機往后走
  61. }

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

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

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

  81.               Right_moto_Stop ;  //右電機停止
  82.      Left_moto_Stop  ;  //左電機停止
  83. }

  84. /************************************************************************/
  85. /*                    PWM調(diào)制電機轉速                                   */
  86. /************************************************************************/
  87. /*                    左電機調(diào)速                                        */
  88. /*調(diào)節(jié)push_val_left的值改變電機轉速,占空比            */
  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. /*                    右電機調(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中斷服務子函數(shù)產(chǎn)生PWM信號*/
  139.               void timer0()interrupt 1   using 2
  140. {
  141.      TH0=0XFc;                //1Ms定時
  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單片機頭文件,內(nèi)部有各種寄存器定義
  152.               #include<ZY-4WD_PWM.H>                              //包含HL-1藍牙智能小車驅動IO口定義等函數(shù)

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

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


  164.               while(1)              //無限循環(huán)
  165.               {
  166.             
  167.                                           //有光信號輸出為0  沒有光信號輸出為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)用前進函數(shù)

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

  185.                                                }
  186.                                             
  187.                                                                                                       if(Right_1_led==1&&Left_1_led==0)                            //右邊檢測到黑線
  188.                                                           {               
  189.                                                               rightrun();                               //調(diào)用小車右轉              函數(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.               }
復制代碼

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


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表