找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 8833|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)多功能智能小車源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:633081 發(fā)表于 2020-2-22 11:54 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
智能小車設(shè)計
1.硬件設(shè)計
1.1單片機(jī)
單片機(jī)是循跡避障小車的核心部件,一方面它要接收傳感器送來的路線信息和障礙物信號;另一方面要對兩種信號進(jìn)行處理控制發(fā)光二極管的亮滅,以顯示其信息,同時控制電機(jī)進(jìn)行相應(yīng)動作。并且查詢模式選擇開關(guān)的狀態(tài)。在單片機(jī)實現(xiàn)的功能中使用查詢方式獲取傳感器返回的信息,即讀取傳感器返回信號,需要單片機(jī)有較快的處理速度,使小車對信息的獲取及處理是實時準(zhǔn)確的,實現(xiàn)小車的準(zhǔn)確循跡與及時避障。因此我們的芯片選用stc15f2k系列芯片。
STC15F2K60S2系列單片機(jī)是STC生產(chǎn)的單時鐘/機(jī)器周期(1T)的單片機(jī),是高速/高可靠/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī),采用第八代加密技術(shù),加密性超強(qiáng),兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成高精度R/C時鐘(±0.3%),±1%溫飄(-40℃~+85℃),常溫下溫飄±0.6%(-20℃~+65℃),5MHz~35MHz寬范圍可設(shè)置,可徹底省掉外部昂貴的晶振和外部復(fù)位電路(內(nèi)部已集成高可靠復(fù)位電路,ISP編程時8級復(fù)位門檻電壓可選)。3路CCP/PWM/PCA,8路高速10位A/D轉(zhuǎn)換(30萬次/秒),內(nèi)置2K字節(jié)大容量SRAM,2組高速異步串行通信端口(UART1/UART2,可在5組管腳之間進(jìn)行切換,分時復(fù)用可作5組串口使用),1組高速同步串行通信端口SPI,針對多串行口通信/電機(jī)控制/強(qiáng)干擾場合。
1.2電機(jī)驅(qū)動
電機(jī)驅(qū)動是小車最重要的模塊之一,在我們的系統(tǒng)中使用的是L298N驅(qū)動芯片,L298N是ST公司生產(chǎn)的一種高電壓、大電流電機(jī)驅(qū)動芯片。該芯片采用15腳封裝
L298N芯片的主要特點是:
  a、工作電壓高,最高電壓可達(dá)46V;
  b、輸出電流大,瞬間峰值電流可達(dá)3A,持續(xù)工作電流為2A;
c、額定功率25W,內(nèi)含兩個H橋的高電壓大電流全橋式驅(qū)動器可以驅(qū)動直流電動機(jī)和步進(jìn)電機(jī)。
  d、該芯片可以驅(qū)動一臺兩相步進(jìn)電機(jī)或四相步進(jìn)電機(jī),也可驅(qū)動兩臺直流電機(jī)。
  e、適合應(yīng)用于機(jī)器人設(shè)計及智能小車的設(shè)計
   


單片機(jī)源程序如下:
  1. #include <stc15.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int    //宏定義

  4.        
  5. uchar zkb_left1,zkb_right1,zkb_left2,zkb_right2,i1,j1,i2,j2; //占空比標(biāo)志

  6. sbit IN1=P3^5;        //電機(jī)控制端口
  7. sbit IN2=P3^6;
  8. sbit IN3=P3^7;
  9. sbit IN4=P1^6;

  10. sbit xj_left=P0^1;           //循跡端口
  11. sbit xj_right=P0^2;         



  12. sbit zkba=P1^0;          //占空比控制端
  13. sbit zkbb=P1^1;
  14. sbit zkbc=P1^2;          //占空比控制端
  15. sbit zkbd=P1^3;

  16. //sbit fm=P2^5;

  17. void delay_ms(uint z)         //延時函數(shù)
  18. {
  19.         uchar x,y;
  20.         for(x=z;x>0;x--)
  21.                 for(y=110;y>0;y--);
  22. }

  23. void init()          //初始化函數(shù)
  24. {
  25.         TMOD=0x01;
  26.         TH0=(65536-100)/256;
  27.         TL0=(65536-100)%256        ;
  28.         EA=1;
  29.         ET0=1;
  30.         TR0=1;
  31.         zkba=1;
  32.         zkbb=1;
  33.         zkbc=1;
  34.         zkbd=1;
  35. }

  36. void time0() interrupt 1   //中斷服務(wù)函數(shù)
  37. {
  38.         i1++;j1++;i2++;j2++;                  //進(jìn)入中斷i,j自加1
  39.         if(i1<zkb_right1)        {zkbb=1;}        //如果i小于設(shè)定值,使能端置1,否則置0
  40.         else zkbb=0;
  41.         if(i1==40)        {zkbb=~zkbb;i1=0;}  //如果i加到40;使能端取反,i置0

  42.         if(j1<zkb_left1)        {zkba=1;}
  43.         else zkba=0;
  44.         if(j1==40)        {zkba=~zkba;j1=0;}
  45.        
  46.         if(i2<zkb_right2)        {zkbd=1;}        //如果i小于設(shè)定值,使能端置1,否則置0
  47.         else zkbd=0;
  48.         if(i2==40)        {zkbd=~zkbd;i2=0;}  //如果i加到40;使能端取反,i置0

  49.         if(j2<zkb_left2)        {zkbc=1;}
  50.         else zkbc=0;
  51.         if(j2==40)        {zkbc=~zkbc;j2=0;}       
  52.        
  53.        
  54.         TH0=(65536-100)/256;          //定時器0重裝初值
  55.         TL0=(65536-100)%256;
  56. }

  57. void go()         //前進(jìn)函數(shù)
  58. {
  59.         zkb_left1=8;
  60.         zkb_right1=8;
  61.         zkb_left2=8;
  62.         zkb_right2=8;
  63.        
  64.         IN1=1;        IN2=0;                  
  65.         IN3=1;        IN4=0;
  66. }
  67. void back()         //后退函數(shù)
  68. {
  69.         zkb_left1=8;
  70.         zkb_right1=8;
  71.         zkb_left2=8;
  72.         zkb_right2=8;
  73.        
  74.         IN1=0;        IN2=1;
  75.         IN3=0;        IN4=1;
  76. }
  77. void left()                //左轉(zhuǎn)彎函數(shù),
  78. {
  79.         zkb_left1=14;   //設(shè)置一個速度
  80.         zkb_right1=14;
  81.         zkb_left2=14;   
  82.         zkb_right2=14;
  83.        
  84.         IN1=0;        IN2=1;        //
  85.         IN3=1;        IN4=0;
  86. }
  87. void right()                //右轉(zhuǎn)彎函數(shù)
  88. {
  89.         zkb_left1=14;                //設(shè)置一個速度
  90.         zkb_right1=14;
  91.         zkb_left2=14;               
  92.         zkb_right2=14;
  93.        
  94.         IN1=1;        IN2=0;         //
  95.         IN3=0;        IN4=1;
  96. }
  97. void stop()                //停止函數(shù)
  98. {
  99.         IN1=0;        IN2=0;
  100.         IN3=0;        IN4=0;       
  101. }

  102. /*void bee()         //蜂鳴器發(fā)聲函數(shù)
  103. {
  104.          fm=1;
  105.          delay_ms(50);
  106.          fm=0;
  107.          delay_ms(50);
  108. }*/

  109. void xunji()         //循跡函數(shù)
  110. {
  111.         uchar flag;           //定義一個標(biāo)志位,用于狀態(tài)判斷
  112.         if(xj_left==0  & xj_right==0)         //未檢測到黑線
  113.         {flag=0;}
  114.          else if(xj_left==1  & xj_right==0)        //左邊檢測到黑線
  115.         {flag=1;}
  116.          else if(xj_left==0& xj_right==1)        //右邊檢測到黑線
  117.         {flag=2;}
  118.          else if(xj_left==1  & xj_right==1)        //全部檢測到黑線
  119.         {flag=3;}
  120.                 else flag=4;   //其他情況標(biāo)志位置0
  121.         switch (flag)
  122.         {
  123.                 case 0: stop(); break;        //情況0,停止
  124.                 case 1: left(); break;        //情況1,左轉(zhuǎn)
  125.                 case 2: right(); break;        //情況2,右轉(zhuǎn)
  126.                 case 3: go(); break;        //情況3,前進(jìn)
  127.                 case 4: stop(); break;        //情況4,停止
  128.                 default: stop(); break;        //其他情況,停止
  129.         }
  130. }

  131. void main()
  132. {
  133.         init();
  134.         delay_ms(1);
  135.         while(1)
  136.         {
  137.                 xunji();
  138.         }
  139. }
復(fù)制代碼

所有資料51hei提供下載:
智能小車.rar (96.38 KB, 下載次數(shù): 58)





評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:813537 發(fā)表于 2021-4-28 21:25 | 只看該作者
很不錯的資料學(xué)習(xí)了,51智能小車代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表