專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

基于51單片機的無線遙控小車設計

作者:胡碌圩   來源:51hei   點擊數(shù):  更新時間:2010年08月17日   【字體:

   這次的院里的電子設計競賽我們做的是遙控小車。其實兩個禮拜前就做完了,工作量加起來其實也就2天的功夫,之后由于懶,所以大家就沒有往里面加入東西發(fā)揮。今晚答辯被老師說了一頓,還好老師都是認識的,我們有多少實力都清楚。無所謂了,呵呵,又要開始做其他的東西了。這個課題本身就是很簡單的。還是不廢話了上圖吧。

 

  這是遙控器,當然焊工不錯(關鍵是看背面,阿康的技術絕對OK)【實物圖】

 

  這個是遙控器的【原理圖】,上一幅圖的綠色的PCB板子就是原理圖上的2262,這個模塊是老師發(fā)的包括有接收的2272,因為地址碼已經(jīng)做好了,所以只要發(fā)數(shù)據(jù)碼就可以了,聯(lián)系到接收,因為接收有懸空、0、1的三種狀況,為了避免誤發(fā)信息所以將懸空的功能隱去,只在按鍵按下的時候發(fā)送高信號。


 

  小車【實物圖】,底座、輪胎、齒輪是買的其他均為手工制作




 

  以上是小車的【原理圖】,截圖截了兩次

  這一部分是小車的驅動和控制模塊,是最主要的模塊。分別是2272的接收模塊,單片機,L298的驅動芯片。2272是M型的也就是非鎖存模式的,檢測到信號的時候會在相應的地址位輸出高,當沒有檢測到的時候是為低,雖然2272是CMOS工藝2.5到15V均可以工作,但是兼容TTL電平,所以,單片機完全可以讀取電平信號。L298電機驅動芯片的功能強大,因為本身自帶邏輯電壓輸入端,所以只要電壓控制在7V以下,單片機即可直接驅動這塊芯片。電機啟動時候的電壓電流會高一點,但是L298可以輸出電流達2A這個是比較大的了,驅動小電機完全不在話下。

 

以上是L298的【封裝】以及引腳圖

 

下面貼一下程序吧,呵呵。

//////////////////////////////////////////////////////////***C51程序*******////////////////////////////////////////

#include <reg51.h>

#define TH0C  0xff
#define TL0C  0xf6

unsigned int  dr_l,dr_r,times;      //duty  ratio  是占空比的意思。
unsigned char flag;

sbit leftv=P1^0;
sbit leftg=P1^1;
sbit rightv =P1^2;
sbit rightg =P1^3;
sbit ena=P1^4;
sbit enb=P1^5;
sbit key0=P2^5;
sbit key_a=P2^0;
sbit key_r=P2^1;
sbit key_l=P2^2;
sbit key_b=P2^3;


void beforeint(void);

void main()
{
  
  
  while(1)
  {     
       P2=0xff;
       
       if(key0)
       {
          ena=1;
       enb=1;
       if(key_a)
       {
          flag=1;
          dr_l=50;
          dr_r=50;
          leftv=1;
          rightv=1;
          beforeint();
       }
       if(key_r)
       {
          flag=2;
          dr_l=99;
          dr_r=1;
          leftv=1;
          rightg=1;
          beforeint();
       }
       if(key_l)
       {
          flag=3;
          dr_l=1;
          dr_r=99;
          leftg=1;
          rightv=1;
          beforeint();
       }
       if(key_b)
       {
          flag=4;
          dr_l=50;
          dr_r=50;
          leftg=1;
          rightg=1;
          beforeint();
        }
    }
    else
    {
       ena=0;
       enb=0;
       flag=0;
       P1=0xff;
       continue;
    }          
    
    
   
   }
}

void  beforeint(void)
{
   TMOD=0x01;
   TH0=TH0C;
   TL0=TL0C;
   TR0=1;
   ET0=1;
   EA=1;

}

void time0(void) interrupt 1 using 2
{
     times=0;
     TH0=TH0C;
     TL0=TL0C;
     times+=1;
     if(times>99)
     {
        times=0;
     }
     
     if(flag==1)
     {
        if(times<=dr_l)
        {
           leftg=0;
        }
        else
        {
           leftg=1;
        }
        if(times<=dr_r)
        {
           rightg=0;
        }
        else
        {
           rightg=1;
        }
   }
   else  if(flag==2)
   {
        if(times<=dr_l)
        {
           leftg=0;
        }
        else
        {
           leftg=1;
        }
        if(times<=dr_r)
        {
           rightv=0;
        }
        else
        {
           rightv=1;
        }     
   }
   else if(flag==3)
   {
     if(times<=dr_l)
     {
        leftv=0;
     }
     else
     {
        leftv=1;
     }
     if(times<=dr_r)
     {
        rightg=0;
     }
     else
     {
        rightg=1;
     }
   }
   else if(flag==4)
   {
     if(times<=dr_l)
     {
        leftv=0;
     } 
     else
     {
        leftv=1;
     }
     if(times<=dr_r)
     {
        rightv=0;
     }
     else
     {
        rightv=1;
     }
   }

}

////////////////////////////////////////////////////******************************///////////////////////////////////
  完整的程序代碼從這里下:http://www.torrancerestoration.com/ziliao/file/xiaoch.rar 
  小車的演示視頻:http://v.youku.com/v_show/id_XMTM3MDkyMDA4.html
  程序是根據(jù)2272接收到的型號判斷該左轉右轉還是前進后退,這個是四個基本功能,我們的小車也就實現(xiàn)這些功能,對于電源我們處理的不是很好,只是簡單的將小車共地。并且把L298的邏輯電壓單獨接出來,這個小車以后還是會改進的,呵呵。

  后記:該說的都說的差不多了,程序很簡單,我只用了幾個鐘頭包括仿真(Proteus仿真圖就不貼出來了),主要是控制,然后就是產(chǎn)生PWM來進行對小車的調速,不過調試的時候 一次通過,雖然轉的比較快,但是不影響轉彎。有問題請隨意,呵呵。

關閉窗口

相關文章