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

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

QQ登錄

只需一步,快速開(kāi)始

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

基于51單片機(jī)控制智能車(chē)設(shè)計(jì)報(bào)告 含源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:336130 發(fā)表于 2018-5-22 22:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  •          前言
  •          方案設(shè)計(jì)與論證
    • 控制器模塊選取
    • 電機(jī)模塊選取
    • 電機(jī)驅(qū)動(dòng)器模塊選取
    • 電源模塊選取
  •          硬件設(shè)計(jì)
    • 主控系統(tǒng)            
    • 電機(jī)模塊
    • 電機(jī)驅(qū)動(dòng)模塊
    • 電源模塊
    • 按鍵模塊
  •          軟件設(shè)計(jì)
    • 直行設(shè)計(jì)
    • 轉(zhuǎn)彎設(shè)計(jì)
  •          調(diào)試中存在的問(wèn)題
  •          參考文獻(xiàn)


一、前言:

隨著汽車(chē)工業(yè)的迅速發(fā)展,關(guān)于汽車(chē)的研究也就越來(lái)越受人關(guān)注。全國(guó)電子大賽和省內(nèi)電子大賽幾乎每次都有智能小車(chē)這方面的題目,全國(guó)各高校也都很重視該題目的研究?梢(jiàn)其研究意義很大。本設(shè)計(jì)就是在這樣的背景下提出的,指導(dǎo)教師已經(jīng)有充分的準(zhǔn)備。本題目是結(jié)合科研項(xiàng)目而確定的設(shè)計(jì)類(lèi)課題。我們?cè)O(shè)計(jì)的智能電動(dòng)小車(chē)該具有圓形運(yùn)行、三角形運(yùn)行、矩形運(yùn)行和三者一起運(yùn)行的功能。都是運(yùn)行一循環(huán)自動(dòng)停車(chē)。

根據(jù)題目的要求,確定如下方案:在現(xiàn)有玩具電動(dòng)車(chē)的基礎(chǔ)上,加了四個(gè)按鍵,實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的運(yùn)行軌跡的啟動(dòng),并將按鍵的狀態(tài)傳送至單片機(jī)進(jìn)行處理,然后由單片機(jī)根據(jù)所檢測(cè)的各種按鍵狀態(tài)實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的智能控制。

這種方案能實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的運(yùn)動(dòng)狀態(tài)進(jìn)行實(shí)時(shí)控制,控制靈活、可靠,精度高,可滿(mǎn)足對(duì)系統(tǒng)的各項(xiàng)要求。本設(shè)計(jì)采用STC89C52單片機(jī)。以STC89C52為控制核心,利用按鍵的動(dòng)作,控制電動(dòng)小汽車(chē)的軌跡。實(shí)現(xiàn)四種運(yùn)行軌跡。STC89C52是一款八位單片機(jī),它的易用性和多功能性受到了廣大使用者的好評(píng)。

二、方案設(shè)計(jì)與論證



    • 控制器模塊選取

我們采用STC公司的STC89S52單片機(jī)作為主控制器,STC公司的單片機(jī)內(nèi)部資源比起ATMEL公司的單片機(jī)來(lái)要豐富的多,它在5V供電情況下,最多支持80M晶振、且內(nèi)部有512B的RAM數(shù)據(jù)存儲(chǔ)器、片內(nèi)含8k空間的可反復(fù)擦些1000次的Flash只讀存儲(chǔ)器、1K的EEPROM、8個(gè)中斷源、4個(gè)優(yōu)先級(jí)、3個(gè)定時(shí)器、32個(gè)IO口、片機(jī)自帶看門(mén)狗、雙數(shù)據(jù)指針等。但是不兼容Atmel。

從方便使用的角度考慮,我們選擇了此方案




    • 電機(jī)模塊選取

采用普通直流電機(jī)。直流電機(jī)運(yùn)轉(zhuǎn)平穩(wěn),精度有一定的保證。直流電機(jī)控制的精確度雖然沒(méi)有步進(jìn)電機(jī)那樣高,但完全可以滿(mǎn)足本題目的要求。通過(guò)單片機(jī)的PWM輸出同樣可以控制直流電機(jī)的旋轉(zhuǎn)速度,實(shí)現(xiàn)電動(dòng)車(chē)的速度控制。并且直流電機(jī)相對(duì)于步進(jìn)電機(jī)價(jià)格經(jīng)濟(jì)。




    • 電機(jī)驅(qū)動(dòng)器模塊選取

采用電機(jī)驅(qū)動(dòng)芯片L298N。L298N為單塊集成電路,高電壓,高電流,四通道驅(qū)動(dòng),可直接的對(duì)電機(jī)進(jìn)行控制,無(wú)須隔離電路。通過(guò)單片機(jī)的I/O輸入改變芯片控制端的電平,即可以對(duì)電機(jī)進(jìn)行正反轉(zhuǎn),停止的操作,非常方便,亦能滿(mǎn)足直流減速電機(jī)的大電流要求。調(diào)試時(shí)在依照芯片手冊(cè),用程序輸入對(duì)應(yīng)的碼值,能夠?qū)崿F(xiàn)對(duì)應(yīng)的動(dòng)作。




    • 電源模塊選取

在本系統(tǒng)中,需要用到的電源有單片機(jī)的5V,L298N芯片的電源5V和電機(jī)的電源7-15V。所以需要對(duì)電源的提供必須正確和穩(wěn)定可靠。用9V的鋅電源給前、后輪電機(jī)供電,然后使用7805穩(wěn)壓管來(lái)把高電壓穩(wěn)成5V分別給單片機(jī)和電機(jī)驅(qū)動(dòng)芯片供電。因此為了方便,這里我們采用12V電源給電機(jī)供電,再用7805轉(zhuǎn)換成5V電源給單片機(jī)使用。

三、硬件設(shè)計(jì)

              小車(chē)采用四輪驅(qū)動(dòng),一側(cè)的前后兩個(gè)車(chē)輪共用一個(gè)電機(jī)驅(qū)動(dòng),另外兩個(gè)前后輪共用一個(gè)驅(qū)動(dòng),調(diào)節(jié)左右車(chē)輪轉(zhuǎn)速?gòu)亩_(dá)到控制轉(zhuǎn)向的目的。


系統(tǒng)結(jié)構(gòu)框圖

3.2、電機(jī)驅(qū)動(dòng)模塊

              L298N驅(qū)動(dòng)直流電機(jī),它靠?jī)蓚(gè)引腳控制一個(gè)電機(jī)的運(yùn)動(dòng)。小車(chē)采用四輪驅(qū)動(dòng),小車(chē)兩側(cè)的電機(jī)短接起來(lái)各接到L298N的一個(gè)輸出端。通過(guò)調(diào)制兩邊輪子的轉(zhuǎn)速或正反轉(zhuǎn)來(lái)達(dá)到控制小車(chē)轉(zhuǎn)向的目的。芯片引腳和功能如圖1,驅(qū)動(dòng)電路如圖2。


EN A(B)

IN1(IN3)

IN2(IN4)

電機(jī)運(yùn)行情況

H

H

L

正轉(zhuǎn)

H

L

H

反轉(zhuǎn)

H

同IN2(IN4)

同IN2(IN4)

快速停止

L

X

X

停止


將L298N的IN0、1、2、3,接到P2.5到P2.2上,ENA、ENB接到P2.1、P2.0.

四個(gè)按鍵接到P1.0~P1.3.

3.3、電機(jī)模塊

電機(jī)模塊采用2塊電機(jī)同時(shí)驅(qū)動(dòng),分別接到L298N的兩個(gè)輸出端。

3.4、電源模塊

采用一片HT7550電壓穩(wěn)壓5V后給單片機(jī)系統(tǒng)和其他芯片供電。

該電源模塊的功能是把6伏鋅錳干電池通過(guò)HT7550轉(zhuǎn)換為5伏電壓,向單片機(jī)、邏輯芯片供電?紤]到如果用電池組同時(shí)向電機(jī)和芯片供電時(shí),由于驅(qū)動(dòng)電機(jī)所需電流較大,容易影響對(duì)芯片的供電,因此我們決定電池組單獨(dú)對(duì)驅(qū)動(dòng)電機(jī)供電

,四節(jié)1.5V的南孚電池對(duì)其供電。





    • 按鍵模塊

本系統(tǒng)添加4個(gè)按鍵,用來(lái)選擇控制小車(chē)。并接于P2.0到P2.3口上。



四、軟件設(shè)計(jì)

4.1、小車(chē)直行設(shè)計(jì):

              若要求小車(chē)直走,這需要給4個(gè)電機(jī)正轉(zhuǎn)命令。根據(jù)L298N芯片手冊(cè)

EN A(B)

IN1(IN3)

IN2(IN4)

電機(jī)運(yùn)行情況

H

H

L

正轉(zhuǎn)

H

L

H

反轉(zhuǎn)

H

同IN2(IN4)

同IN2(IN4)

快速停止

L

X

X

停止


4.2、小車(chē)轉(zhuǎn)彎設(shè)計(jì):

              若要求小車(chē)轉(zhuǎn)彎,需要給一側(cè)電機(jī)正轉(zhuǎn),一側(cè)電機(jī)反轉(zhuǎn)或者不旋轉(zhuǎn)。

4.3、小車(chē)調(diào)速設(shè)計(jì):

              若要求車(chē)調(diào)速,只需用PWM來(lái)控制L298N的ENA和ENB就可以對(duì)小車(chē)進(jìn)行調(diào)速。這里我使用定時(shí)器T0的工作模式2自動(dòng)重裝。并賦初值              TH0=0xf6;TL0=0xf6;




C語(yǔ)言源代碼實(shí)現(xiàn):

  1. <font color="rgb(0, 0, 0)">#include<reg52.h>
  2. sbit IN1=P2^5;
  3. sbit IN2=P2^4;
  4. sbit IN3=P2^3;
  5. sbit IN4=P2^2;
  6. sbit ENA=P2^1;
  7. sbit ENB=P2^0;
  8. sbit key1=P1^0;
  9. sbit key2=P1^1;
  10. sbit key3=P1^2;
  11. sbit key4=P1^3;
  12. void delay(unsigned int z);
  13. void delay_us(unsigned int aa);
  14. void delay2s(void)   //誤差 0us
  15. {
  16.     unsigned char a,b,c,n;
  17.     for(c=167;c>0;c--)
  18.         for(b=39;b>0;b--)
  19.             for(a=152;a>0;a--);
  20.     for(n=1;n>0;n--);
  21. }
  22. void yuan()
  23. {
  24. while(1)
  25. {
  26.               unsigned int i;
  27.               IN1=1;   
  28.               IN2=0;
  29.               IN3=1;
  30.               IN4=0;
  31.               for(i=0;i<400;i++)
  32.               {
  33.               delay(3);
  34.               ENA=~ENA;
  35.               }               } }
  36. void juxing()
  37. {
  38. while(1)
  39. {
  40. unsigned int i;
  41.               IN1=1;   
  42.               IN2=0;
  43.               IN3=1;
  44.               IN4=0;
  45.               for(i=0;i<200;i++)
  46.               {
  47.               delay(1);
  48.     ENA=~ENA;
  49.               ENB=~ENB;
  50.               }
  51.               delay2s();
  52.               IN1=1;   
  53.               IN2=0;
  54.               IN3=0;
  55.               IN4=0;
  56.               for(i=0;i<40;i++)
  57.               {
  58.               delay(10);
  59.               ENA=~ENA;
  60.               }
  61.               IN1=1;   
  62.               IN2=0;
  63.               IN3=1;
  64.               IN4=0;
  65.                             for(i=0;i<200;i++)
  66.               {
  67.               delay(1);
  68.     ENA=~ENA;
  69.               ENB=~ENB;
  70.               }
  71.                             delay2s();
  72.               IN1=1;   
  73.               IN2=0;
  74.               IN3=0;
  75.               IN4=0;
  76.               for(i=0;i<40;i++)
  77.               {
  78.               delay(10);
  79.               ENA=~ENA;
  80.               }
  81.               IN1=1;   
  82.               IN2=0;
  83.               IN3=1;
  84.               IN4=0;
  85.     for(i=0;i<200;i++)
  86.               {
  87.               delay(1);
  88.     ENA=~ENA;
  89.               ENB=~ENB;
  90.               }
  91.                             delay2s();
  92.               IN1=1;   
  93.               IN2=0;
  94.               IN3=0;
  95.               IN4=0;
  96.               for(i=0;i<40;i++)
  97.               {
  98.               delay(10);
  99.               ENA=~ENA;
  100.               }
  101.               IN1=1;   
  102.               IN2=0;
  103.               IN3=1;
  104.               IN4=0;
  105.               for(i=0;i<200;i++)
  106.               {
  107.               delay(1);
  108.     ENA=~ENA;
  109.               ENB=~ENB;
  110.               }
  111.                             delay2s();
  112.               IN1=1;   
  113.               IN2=0;
  114.               IN3=0;
  115.               IN4=0;
  116.               for(i=0;i<40;i++)
  117.               {
  118.               delay(10);
  119.               ENA=~ENA;
  120.               }
  121.               IN1=0;   
  122.               IN2=0;
  123.               IN3=0;
  124.               IN4=0;
  125.               }              }
  126. void sanjiao()
  127. {              
  128.     while(1)
  129. {
  130.               unsigned int i;
  131.               IN1=1;   
  132.               IN2=0;
  133.               IN3=1;
  134.               IN4=0;
  135.               for(i=0;i<200;i++)
  136.               {
  137.               delay(1);
  138.     ENA=~ENA;
  139.               ENB=~ENB;
  140.               }
  141.               delay2s();
  142.               IN1=1;   
  143.               IN2=0;
  144.               IN3=0;
  145.               IN4=0;
  146.               for(i=0;i<70;i++)
  147.               {
  148.               delay(10);
  149.               ENA=~ENA;
  150.               }
  151.               IN1=1;   
  152.               IN2=0;
  153.               IN3=1;
  154.               IN4=0;
  155.               for(i=0;i<200;i++)
  156.               {
  157.               delay(1);
  158.     ENA=~ENA;
  159.               ENB=~ENB;
  160.               }
  161.               delay2s();
  162.               IN1=1;   
  163.               IN2=0;
  164.               IN3=0;
  165.               IN4=0;
  166.               for(i=0;i<70;i++)
  167.               {
  168.               delay(10);
  169.               ENA=~ENA;
  170.               }
  171.               IN1=1;   
  172.               IN2=0;
  173.               IN3=1;
  174.               IN4=0;
  175.                             for(i=0;i<200;i++)
  176.               {
  177.               delay(1);
  178.     ENA=~ENA;
  179.               ENB=~ENB;
  180.               }
  181.               delay2s();
  182.               IN1=1;   
  183.               IN2=0;
  184.               IN3=0;
  185.               IN4=0;
  186.               for(i=0;i<70;i++)
  187.               {
  188.               delay(10);
  189.               ENA=~ENA;
  190.               }
  191.               IN1=0;   
  192.               IN2=0;
  193.               IN3=0;
  194.               IN4=0;            
  195.               }              }
  196. void delay(unsigned int z)
  197. {
  198. unsigned int x,y;
  199. for(x=z;x>0;x--)
  200. for(y=110;y>0;y--);
  201. }
  202. void delay_us(unsigned int aa)
  203. {
  204. while(aa--);
  205. }
  206. void main()
  207. {
  208. while(1)
  209. {
  210. if(key1==0)
  211. {
  212. delay(10);
  213. if(key1==0)
  214. {
  215. yuan();
  216. while(!key1);
  217. }}
  218. if(key2==0)
  219. {
  220. delay(10);
  221. if(key2==0)
  222. {
  223. juxing();
  224. while(!key2);
  225. }}
  226. if(key3==0)
  227. {
  228. delay(10);
  229. if(key3==0)
  230. {
  231. sanjiao();
  232. while(!key3);
  233. }
  234. }
  235. if(key4==0)
  236. {
  237. delay(10);
  238. if(key4==0)
  239. {
  240. while(1)
  241. {
  242. IN1=1;
  243. IN2=0;
  244. IN3=0;
  245. IN4=0;
  246. }}}}}</font>
復(fù)制代碼


調(diào)試中出現(xiàn)的問(wèn)題
轉(zhuǎn)向時(shí)間需要慢慢調(diào),時(shí)間長(zhǎng),旋轉(zhuǎn)弧度大;時(shí)間短,旋轉(zhuǎn)弧度小。
直行時(shí),由于每個(gè)電機(jī)的性能不一樣,導(dǎo)致兩側(cè)占空比一樣時(shí),小車(chē)會(huì)存在轉(zhuǎn)彎,這樣需要微調(diào)占空比。
出現(xiàn)單片機(jī)供電不足的現(xiàn)象,需要增加電量。


完整的Word格式文檔51黑下載地址:

51單片機(jī)控制智能小車(chē).doc (1.87 MB, 下載次數(shù): 30)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:336217 發(fā)表于 2018-5-23 08:22 | 只看該作者
贊一個(gè)
回復(fù)

使用道具 舉報(bào)

板凳
ID:336130 發(fā)表于 2018-5-23 12:43 | 只看該作者
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产一区二区三区 | 久久精品一 | 欧美福利一区 | 91在线中文字幕 | 成人一区二区视频 | 99久久精品一区二区毛片吞精 | 久久久久久电影 | 精品乱码一区二区 | 国产精品视屏 | 亚洲精品国产a久久久久久 午夜影院网站 | www国产亚洲精品久久网站 | 免费看黄色片 | 成人深夜福利在线观看 | 成人亚洲 | 国产欧美日韩精品一区二区三区 | 国产一区二 | 国产激情片在线观看 | 亚洲一区二区免费视频 | 精品婷婷 | 中文av电影| 欧美久久天堂 | 午夜伦理影院 | 日本一区二区三区视频在线 | 天天干夜夜 | 久久成人精品视频 | 欧美xxxx黑人又粗又长 | 91精产国品一二三区 | 午夜在线精品 | 黄色网址免费在线观看 | 国产区视频在线观看 | 国产在线视频在线观看 | 噜噜噜噜狠狠狠7777视频 | 黄网免费看 | 91原创视频在线观看 | 亚洲国产成人精品女人久久久 | 国产清纯白嫩初高生在线播放视频 | 亚洲欧洲视频 | 狠狠av| 五月婷婷激情网 | www.狠狠干| www.久久.com|