<strike id="um4h1"></strike>
<legend id="um4h1"><pre id="um4h1"><dl id="um4h1"></dl></pre></legend>
<th id="um4h1"><track id="um4h1"></track></th>
  • <dd id="um4h1"></dd><nav id="um4h1"><sub id="um4h1"></sub></nav>
    <rp id="um4h1"></rp>

    <dd id="um4h1"></dd>
    1. <th id="um4h1"></th>
       找回密碼
       馬上注冊

      QQ登錄

      只需一步,快速開始

      搜索

      [ 單片機 ] 51四驅無線遙控小車(200米有效距離)

      2012-6-5 15:54| 發布者: Chinked-out | 查看: 31553 |原作者: Chinked-out |來自: 原創

              51四驅無線遙控小車(200米有效距離)


           前不久在網上發了《led金字塔》教程,得到了不少好評,很多單片機愛好者都向我咨詢關于金字塔或立方體,作品得到大家的肯定自然是值得欣慰的。和極客迷的管理交流了各自的想法后,我打算把極客迷網站作為展示自己工作室設計的平臺,以后會更多的上傳51單片機作品,并且公開全部資料和程序代碼。


           在正式講解之前,先簡單的自我介紹下我的工作室。工作室取名為“Chinked-out”是王力宏曲風的名字,取這個的名字的意義在于,我更注重表達的內容,而不是表達的方式,加上自己非常喜歡Chinked-out的曲風,所以就想了這個名字


            本工作室由重慶三峽職業學院信息科技系和機械與電子工程系共同成立,其目的在于改善教學質量,培養學生對單片機的學習興趣。為了好的利用互聯網平臺來拓展工作室的知識面和交往面,廣交51單片機愛好者,特此做開源性的DIY設計和單片機課程。目前工作室人數不多,作品產量不高,期待有能力者加入,共同建立一個開源、開放的團隊,一起學習,一起進步。!聯系群:231931086,聯系人QQ136678431


            我對開源的理解:其實,很多51制作網上都是有現成資料的,但是因為種種原因,要么是電路不全,要么是程序只有部分,這種情況想必困擾過每一個單片機初學者,即便是有現成全套資料,但是在制作過程中遇到了問題,又無從詢問,這也是單片機初學者的一大難題,在這里我代表工作室向大家保證,所有制作教程和課程教材本人都親自實驗,確保正確性。至于程序代碼,全部開源,不做任何保留,而且也會給出詳細的中文注釋,現在只能給出匯編或者C語言的教程,后期會給出雙語教程,敬請期待!


            關于轉載:我寫的所有文章只發表在極客迷里(首創作品也會投稿和另一網站),絕不會再有第三網站登出我們工作室的文章,如果您覺得工作室的作品比較好,請您把極客迷的網址發給你的朋友,一起學習交流,如果您覺得又不足之處或者發現錯誤,請聯系我QQ136678431,如需教學性的轉載,請務必著名出處和原作者(本人網名Chinked-out實名李志遠),在此,我希望各位讀者尊重開源人的勞動成果。盡管現在的作品沒有什么技術含量,但是做到了真正的開源,相信以后有大家的一起努力,會做出更好的作品,形成良性循環,這樣對大家都好。我代表全體工作室成員對所有尊重我們勞動成果的讀者表達最真摯的謝意。!希望大家和我們一起把極客迷建設成為51初學者、單片機開源教程的良好平臺。


          好了,說了這么多,現在就開始進入教程。


      小車參數:控制鍵5個:前進、后退、左轉、右轉、停止;有效距離200米;速度:


      我想遙控小車大家都玩過,網上也有各種DIY小車的制作詳解,我做的這個遙控小車和其他的作品大同小異,但作為單片機設計,這次設計我主要強調單片機控制,就是說,這個小車是由單片機控制的,這次我把單片機按鍵發送程序、無線模塊使用、電機驅動作為本教程的核心內容。


      硬件組裝


      1 小車運動部分


      此圖是我師弟組裝好的,請大家作為參考


      所需工件:直流電機4個,L293D電機驅動模塊,蓄電池一塊,車身底盤


      說明:車身底盤大家根據自己的購買力自行購買,蓄電池也是,至于L293D模塊,淘寶上賣的比較貴,不過我用的就是成品模塊,效果非常好,錢不多的同學可以自己買芯片,自制模塊,原理很簡單,官方資料是很詳細的;或者改為繼電器控制都可以,具體看自己的實際購買力。用模塊的好處是,模塊可以輸出5V電源給系統供電,詳細請參考淘寶網。


      如果你買的是現成的底盤,那就和我的一樣了,組裝實在是沒啥可說的,把電機固定上去就是,不行?別開玩笑了,小學生都會的!至于想自己做底盤的,我想說,要搞結實點,咱這次的小車馬力是很足的,因為有電機驅動,速度比較快(不帶減速齒輪的底盤一定要小心,速度非常的快),后勁也足,不小心撞墻很正常,所以不好的底盤就得小心了!


      組裝好后,就是電機和驅動模塊的接線了,下面我就詳細的說一下L293D模塊的使用:


      L293D是專門的電機驅動芯片,工作電壓5V,驅動電壓輸入可達36V,輸出電流正負600ma,4個控制端,4個輸出端,原理如

      圖:

      其中A為輸出控制端,Y為輸出控制端,1A即控制1Y,以此類推。1,2EN   3,4EN需要短接,芯片最大工作電壓不得超過7V。

      封裝圖:

      Vcc1接工作電壓,5V,Vcc2接電機的驅動電源,一般來說,這個電壓要比5V高,我用的是12V蓄電池,就把12v的正極接到VCC2,要記住的是,芯片、單片機、蓄電池電源是需要共地的,不要覺得你電機是12V,單片機控制部分是5V就把電源完全獨立開來,正極是完全獨立的沒錯,但是GND(負極)都必須是接在一起的。


      驅動芯片與電機的接法:


      例:左邊前后輪:

      1Y接電機紅線,2Y接電機黑線,左邊前輪電機

      3Y接電機紅線,4Y接電機黑線,左邊后輪電機

      前進指令:1A=1(輸出12V),2A=0(輸出0V),3A=1(輸出12V),4A=0(輸出0V

      后退指令:1A=0(輸出12V),2A=1(輸出0V),3A=0(輸出12V),4A=1(輸出0V


      右邊的和左邊的接法是完全一樣的


      注意:前進和后退并不是絕對的,因為是直流電機,不刻意的強調正負極,就看你電機是怎么接線的,結果完全可以與我的相反。不過一定要保證電機接線的統一性,不能隨意,不能說前輪接的是順時針線序,后輪是逆時針線序,如果買的電機連接線不帶顏色,一定要自己測好了那種接法是順時針的,哪種是逆時針,否則前輪前進后輪后退,很摧殘電機的,或者左右邊的2對電機轉動方向不統一,導致編程麻煩。


      芯片默認輸出0V ,所以在沒有程序的時候,大家不需要擔心電機會轉動。一個芯片只能控制2個電機,右邊的再接個芯片就可以了,網上賣的模塊都是2個驅動芯片的,剛剛好夠4個電機。買模塊的好處就是拿來可以直接接線,而且模塊上有標號,不必擔心接錯,希望初學者還是買模塊,貴是貴了,但是速度有保證的!驅動模塊如圖

      接好之后,我就說下小車的轉動方式:前進后退就是4個電機同時的正轉、反轉;左轉彎和有轉彎有2種方式:A一邊轉動一邊不轉,B一邊正向轉動一邊反向轉動,這兩種各有個的好處,各位可以根據自己的實際情況來確定轉彎的方式,不同車的底盤效果肯定是不一樣的,轉彎的方式是程序控制的,本程序是B種方式。

      我的小車圖:

      這種電機是減速的,所以不會很快,如果是直接電機帶動的輪子,再用12V電源的話,那速度就非?炝,模塊的輸出直接連接電機電源線,輸出根據標號或根據程序接入到單片機上


      單片機的接線:


      如圖:

       

      這是我的最小系統板,全部引出IO,帶板載USB下載功能,P0口輸出接了8路流水燈(有選通開關),這樣設計板子是為了P0口做輸出時專門看輸出狀態的。板子是我們工作室自己設計的,我們所有的作品調試都是建立在它的基礎上,網上也有的賣這種USB下載板,40元左右吧!


      我這個人比較懶,用的是電機驅動模塊,L293D的輸入是有標號的,1——8直接按照順序接到P1.0——P1.7就可以了,說到這里,我不得不說一下,單片機的接線是非常自由的,因為是程序控制,無法就是改改端口而已,我只根據我的程序來說明接線,有基礎的可以自己設計!


      驅動芯片和電機連接好后,就是要把線固定好,留出要與單片機連接的8跟控制線。也要注意給無線模塊留一個小空間。


      無線模塊解說:


      我們工作室一直使用的是433無線串口模塊,具體型號和價格我會附在清單表里,現在我說下它的性能、這種無線模塊最大的好處就是有較強的抗干擾性,2個模塊直接可以設置ID,只有在一個ID號下的個模塊才可以通信,而且可以實現一對多通信;而且這種模塊是無需編程的,直接把數據發送到串口即可,模塊會自動調制解調,就目前使用的情況而言,還沒發現它有調制解調錯誤的時候,可以說,在數據傳輸上,這個模塊誤碼率還是極低的,不過需要注意的是,模塊2次接收(發送)之間的間隔要大于200ms,這是非常重要的一個參數,如果想做高速數據傳輸的朋友請慎重選用。ū径挝淖謥碓从谔詫氼5蠠o線模塊手冊,本人也已經上傳,也請讀者尊重該店的著作權)。


      模塊的接線還是蠻簡單的,電源2根線,數據線2根:TX(接單片機RX)、RX(接單片機TX),關于無線模塊的設置方案,請參考淘寶睿迪無線XL02-232AP1型號的資料手冊。模塊在通電的一瞬間紅燈綠燈同時會閃一下,然后熄滅,此時進入待機狀態,模塊發送數據時,紅燈亮;接收數據時,綠燈亮。


      組裝好之后的圖:

      我用是12v蓄電池,接到驅動模塊后,模塊的5V輸出又可以直接給無線模塊和最小系統部分供電。雖然看起來比較笨重,但是12V的電源,與一般的小車在速度和耐力上,都有了本質的提高!

      遙控部分:

      下面是原理圖和hex代碼,以后程序我會直接掛在網頁上,仿真提供16進制文件

      原理仿真.zip

      原件清單.xls

      源代碼:
       
      ;接收程序
      ORG  0          ;程序起始地址
      SJMP STAR       ;跳轉到主程序
      ORG 30H         ;串口中斷地址
      sjmp loop       ;跳轉到中斷服務程序
      STAR:
      MOV SP,#5FH     ;設置堆棧
      MOV SCON,#50H   ;串行數據格式(詳情請參考51手冊)
      MOV TMOD,#20H   ;定時器工作方式(請參考51手冊)
      MOV PCON,#0     ;波特率不倍速(請參考51手冊)
      MOV TH1,#0fdH   ;設置波特率在9600
      MOV TL1,#0fdH   ;設置波特率在9600
      SETB EA         ;開起中斷
      clr ET1         ;關閉定時1中斷
      SETB ES         ;開起串口中斷
      SETB TR1        ;啟動定時器1
      mov a,#0        ;
      mov p1,a        ;設置初始值,即開機p1輸出00h小車不動作

      main:
      mov p1,a       ;把a值給p1端口
      sjmp main      ;無限循環main程序
       
      LOOP:         
      jnb  ri,$     ;判斷接收位是否接收完
      clr  ri       ;接收完后清空接收位
      mov  a,sbuf   ;發送的數據給a
      reti          ;返回后,a的值就會給p1
      END
       
       

      ;發送程序

      ORG 0          ;程序起始地址
      SJMP START     ;跳轉到主程序
      ORG 30H        ;串口中斷地址
      START:
      MOV SP,#5FH    ;設置堆棧
      MOV TMOD,#20H  ;定時器工作方式(請參考51手冊)
      MOV PCON,#0    ;波特率不倍速(請參考51手冊)
      MOV SCON,#50H  ;串行數據格式(詳情請參考51手冊)
      MOV TH1,#0fdH  ;設置波特率在9600
      MOV TL1,#0fdH
      setb EA        ;開起中斷
      clr  ET1       ;關閉定時1中斷
      setb ES        ;開起串口中斷
      SETB TR1       ;啟動定時器1
       

      main:
      lcall kcs      ;調用按鍵掃描程序
      jnz   key      ;有鍵按下則跳轉到key程序段
      sjmp main      ;無限循環main程序

      kcs: 
      mov p1,#0ffh   ;p1給初值
      mov a,p1       ;p1的數值給a
      cpl a          ;取反a
      anl a,#0ffh    ;與運算
      ret           
      key:
      lcall delay     ;軟件延時程序,按鍵去抖
      jb  acc.0,send1
      jb  acc.1,send2
      jb  acc.2,send3
      jb  acc.3,send4
      jb  acc.4,send5
      ret

      DELAY:
      MOV R5,#20
      D1:MOV R6,#10
      D2:MOV R7,#100
      DJNZ R7,$
      DJNZ R6,D2
      DJNZ R5,D1
       ret    
      send1:
      mov  r1,#10101010b     ;前進指令
      sjmp send
      send2:
      mov  r1,#01010101b     ;后退指令
      sjmp send
      send3:
      mov  r1,#01011010b     ;左轉指令
      sjmp send
      send4:
      mov  r1,#10100101b     ;右轉指令
      sjmp send
      send5:
      mov  r1,#00h           ;停止指令
      sjmp send
       send: 
           
            MOV SBUF,r1     ;指令給sbuf
            JNB TI,$        ;判斷是否發送完
            reti            ;中斷返回
      END
       
      收藏 邀請
      已有57人參與

      會員評論

      查看全部評論>>

      推薦閱讀

      QQ|極客迷網 ( ICP09011854

      44030602000010

      © 2009-2016 All Rights Reserved

      GMT+8, 2022-4-16 12:41 , Processed in 0.075818 second(s), 47 queries , Gzip On, Memcache On.