專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

基于51單片機(jī)的無(wú)線遙控小車(chē)設(shè)計(jì)

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

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

 

  這是遙控器,當(dāng)然焊工不錯(cuò)(關(guān)鍵是看背面,阿康的技術(shù)絕對(duì)OK)【實(shí)物圖】

 

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


 

  小車(chē)【實(shí)物圖】,底座、輪胎、齒輪是買(mǎi)的其他均為手工制作




 

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

  這一部分是小車(chē)的驅(qū)動(dòng)和控制模塊,是最主要的模塊。分別是2272的接收模塊,單片機(jī),L298的驅(qū)動(dòng)芯片。2272是M型的也就是非鎖存模式的,檢測(cè)到信號(hào)的時(shí)候會(huì)在相應(yīng)的地址位輸出高,當(dāng)沒(méi)有檢測(cè)到的時(shí)候是為低,雖然2272是CMOS工藝2.5到15V均可以工作,但是兼容TTL電平,所以,單片機(jī)完全可以讀取電平信號(hào)。L298電機(jī)驅(qū)動(dòng)芯片的功能強(qiáng)大,因?yàn)楸旧碜詭н壿嬰妷狠斎攵耍灾灰妷嚎刂圃?V以下,單片機(jī)即可直接驅(qū)動(dòng)這塊芯片。電機(jī)啟動(dòng)時(shí)候的電壓電流會(huì)高一點(diǎn),但是L298可以輸出電流達(dá)2A這個(gè)是比較大的了,驅(qū)動(dòng)小電機(jī)完全不在話下。

 

以上是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 
  小車(chē)的演示視頻:http://v.youku.com/v_show/id_XMTM3MDkyMDA4.html
  程序是根據(jù)2272接收到的型號(hào)判斷該左轉(zhuǎn)右轉(zhuǎn)還是前進(jìn)后退,這個(gè)是四個(gè)基本功能,我們的小車(chē)也就實(shí)現(xiàn)這些功能,對(duì)于電源我們處理的不是很好,只是簡(jiǎn)單的將小車(chē)共地。并且把L298的邏輯電壓?jiǎn)为?dú)接出來(lái),這個(gè)小車(chē)以后還是會(huì)改進(jìn)的,呵呵。

  后記:該說(shuō)的都說(shuō)的差不多了,程序很簡(jiǎn)單,我只用了幾個(gè)鐘頭包括仿真(Proteus仿真圖就不貼出來(lái)了),主要是控制,然后就是產(chǎn)生PWM來(lái)進(jìn)行對(duì)小車(chē)的調(diào)速,不過(guò)調(diào)試的時(shí)候 一次通過(guò),雖然轉(zhuǎn)的比較快,但是不影響轉(zhuǎn)彎。有問(wèn)題請(qǐng)隨意,呵呵。

關(guān)閉窗口

相關(guān)文章