小車參數(shù):控制鍵5個:前進、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止;有效距離200米;速度:
我想遙控小車大家都玩過,網(wǎng)上也有各種DIY小車的制作詳解,我做的這個遙控小車和其他的作品大同小異,但作為單片機設計,這次設計我主要強調(diào)單片機控制,就是說,這個小車是由單片機控制的,這次我把單片機按鍵發(fā)送程序、無線模塊使用、電機驅(qū)動作為本教程的核心內(nèi)容。
一 硬件組裝
1 小車運動部分
此圖是我?guī)煹芙M裝好的,請大家作為參考
所需工件:直流電機4個,L293D電機驅(qū)動模塊,蓄電池一塊,車身底盤
說明:車身底盤大家根據(jù)自己的購買力自行購買,蓄電池也是,至于L293D模塊,淘寶上賣的比較貴,不過我用的就是成品模塊,效果非常好,錢不多的同學可以自己買芯片,自制模塊,原理很簡單,官方資料是很詳細的;或者改為繼電器控制都可以,具體看自己的實際購買力。用模塊的好處是,模塊可以輸出5V電源給系統(tǒng)供電,詳細請參考淘寶網(wǎng)。
如果你買的是現(xiàn)成的底盤,那就和我的一樣了,組裝實在是沒啥可說的,把電機固定上去就是,不行?別開玩笑了,小學生都會的!至于想自己做底盤的,我想說,要搞結(jié)實點,咱這次的小車馬力是很足的,因為有電機驅(qū)動,速度比較快(不帶減速齒輪的底盤一定要小心,速度非常的快),后勁也足,不小心撞墻很正常,所以不好的底盤就得小心了!
組裝好后,就是電機和驅(qū)動模塊的接線了,下面我就詳細的說一下L293D模塊的使用:
L293D是專門的電機驅(qū)動芯片,工作電壓5V,驅(qū)動電壓輸入可達36V,輸出電流正負600ma,4個控制端,4個輸出端,原理如
圖:
其中A為輸出控制端,Y為輸出控制端,1A即控制1Y,以此類推。1,2EN 3,4EN需要短接,芯片最大工作電壓不得超過7V。
封裝圖:
Vcc1接工作電壓,5V,Vcc2接電機的驅(qū)動電源,一般來說,這個電壓要比5V高,我用的是12V蓄電池,就把12v的正極接到VCC2,要記住的是,芯片、單片機、蓄電池電源是需要共地的,不要覺得你電機是12V,單片機控制部分是5V就把電源完全獨立開來,正極是完全獨立的沒錯,但是GND(負極)都必須是接在一起的。
驅(qū)動芯片與電機的接法:
例:左邊前后輪:
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)
右邊的和左邊的接法是完全一樣的
注意:前進和后退并不是絕對的,因為是直流電機,不刻意的強調(diào)正負極,就看你電機是怎么接線的,結(jié)果完全可以與我的相反。不過一定要保證電機接線的統(tǒng)一性,不能隨意,不能說前輪接的是順時針線序,后輪是逆時針線序,如果買的電機連接線不帶顏色,一定要自己測好了那種接法是順時針的,哪種是逆時針,否則前輪前進后輪后退,很摧殘電機的,或者左右邊的2對電機轉(zhuǎn)動方向不統(tǒng)一,導致編程麻煩。
芯片默認輸出0V ,所以在沒有程序的時候,大家不需要擔心電機會轉(zhuǎn)動。一個芯片只能控制2個電機,右邊的再接個芯片就可以了,網(wǎng)上賣的模塊都是2個驅(qū)動芯片的,剛剛好夠4個電機。買模塊的好處就是拿來可以直接接線,而且模塊上有標號,不必擔心接錯,希望初學者還是買模塊,貴是貴了,但是速度有保證的!驅(qū)動模塊如圖:
接好之后,我就說下小車的轉(zhuǎn)動方式:前進后退就是4個電機同時的正轉(zhuǎn)、反轉(zhuǎn);左轉(zhuǎn)彎和有轉(zhuǎn)彎有2種方式:A一邊轉(zhuǎn)動一邊不轉(zhuǎn),B一邊正向轉(zhuǎn)動一邊反向轉(zhuǎn)動,這兩種各有個的好處,各位可以根據(jù)自己的實際情況來確定轉(zhuǎn)彎的方式,不同車的底盤效果肯定是不一樣的,轉(zhuǎn)彎的方式是程序控制的,本程序是B種方式。
我的小車圖:
這種電機是減速的,所以不會很快,如果是直接電機帶動的輪子,再用12V電源的話,那速度就非常快了,模塊的輸出直接連接電機電源線,輸出根據(jù)標號或根據(jù)程序接入到單片機上
單片機的接線:
如圖:
這是我的最小系統(tǒng)板,全部引出IO,帶板載USB下載功能,P0口輸出接了8路流水燈(有選通開關(guān)),這樣設計板子是為了P0口做輸出時專門看輸出狀態(tài)的。板子是我們工作室自己設計的,我們所有的作品調(diào)試都是建立在它的基礎(chǔ)上,網(wǎng)上也有的賣這種USB下載板,40元左右吧!
我這個人比較懶,用的是電機驅(qū)動模塊,L293D的輸入是有標號的,1——8直接按照順序接到P1.0——P1.7就可以了,說到這里,我不得不說一下,單片機的接線是非常自由的,因為是程序控制,無法就是改改端口而已,我只根據(jù)我的程序來說明接線,有基礎(chǔ)的可以自己設計!
驅(qū)動芯片和電機連接好后,就是要把線固定好,留出要與單片機連接的8跟控制線。也要注意給無線模塊留一個小空間。
無線模塊解說:
我們工作室一直使用的是433無線串口模塊,具體型號和價格我會附在清單表里,現(xiàn)在我說下它的性能、這種無線模塊最大的好處就是有較強的抗干擾性,2個模塊直接可以設置ID,只有在一個ID號下的個模塊才可以通信,而且可以實現(xiàn)一對多通信;而且這種模塊是無需編程的,直接把數(shù)據(jù)發(fā)送到串口即可,模塊會自動調(diào)制解調(diào),就目前使用的情況而言,還沒發(fā)現(xiàn)它有調(diào)制解調(diào)錯誤的時候,可以說,在數(shù)據(jù)傳輸上,這個模塊誤碼率還是極低的,不過需要注意的是,模塊2次接收(發(fā)送)之間的間隔要大于200ms,這是非常重要的一個參數(shù),如果想做高速數(shù)據(jù)傳輸?shù)呐笥颜埳髦剡x用!(本段文字來源于淘寶睿迪無線模塊手冊,本人也已經(jīng)上傳,也請讀者尊重該店的著作權(quán))。
模塊的接線還是蠻簡單的,電源2根線,數(shù)據(jù)線2根:TX(接單片機RX)、RX(接單片機TX),關(guān)于無線模塊的設置方案,請參考淘寶睿迪無線XL02-232AP1型號的資料手冊。模塊在通電的一瞬間紅燈綠燈同時會閃一下,然后熄滅,此時進入待機狀態(tài),模塊發(fā)送數(shù)據(jù)時,紅燈亮;接收數(shù)據(jù)時,綠燈亮。
組裝好之后的圖:
我用是12v蓄電池,接到驅(qū)動模塊后,模塊的5V輸出又可以直接給無線模塊和最小系統(tǒng)部分供電。雖然看起來比較笨重,但是12V的電源,與一般的小車在速度和耐力上,都有了本質(zhì)的提高!
遙控部分:
hex代碼,仿真提供16進制文件
源代碼:
;接收程序
ORG 0 ;程序起始地址
SJMP STAR ;跳轉(zhuǎn)到主程序
ORG 30H ;串口中斷地址
sjmp loop ;跳轉(zhuǎn)到中斷服務程序
STAR:
MOV SP,#5FH ;設置堆棧
MOV SCON,#50H ;串行數(shù)據(jù)格式(詳情請參考51手冊)
MOV TMOD,#20H ;定時器工作方式(請參考51手冊)
MOV PCON,#0 ;波特率不倍速(請參考51手冊)
MOV TH1,#0fdH ;設置波特率在9600
MOV TL1,#0fdH ;設置波特率在9600
SETB EA ;開起中斷
clr ET1 ;關(guān)閉定時1中斷
SETB ES ;開起串口中斷
SETB TR1 ;啟動定時器1
mov a,#0 ;
mov p1,a ;設置初始值,即開機p1輸出00h小車不動作
main:
mov p1,a ;把a值給p1端口
sjmp main ;無限循環(huán)main程序
LOOP:
jnb ri,$ ;判斷接收位是否接收完
clr ri ;接收完后清空接收位
mov a,sbuf ;發(fā)送的數(shù)據(jù)給a
reti ;返回后,a的值就會給p1
END
;發(fā)送程序
ORG 0 ;程序起始地址
SJMP START ;跳轉(zhuǎn)到主程序
ORG 30H ;串口中斷地址
START:
MOV SP,#5FH ;設置堆棧
MOV TMOD,#20H ;定時器工作方式(請參考51手冊)
MOV PCON,#0 ;波特率不倍速(請參考51手冊)
MOV SCON,#50H ;串行數(shù)據(jù)格式(詳情請參考51手冊)
MOV TH1,#0fdH ;設置波特率在9600
MOV TL1,#0fdH
setb EA ;開起中斷
clr ET1 ;關(guān)閉定時1中斷
setb ES ;開起串口中斷
SETB TR1 ;啟動定時器1
main:
lcall kcs ;調(diào)用按鍵掃描程序
jnz key ;有鍵按下則跳轉(zhuǎn)到key程序段
sjmp main ;無限循環(huán)main程序
kcs:
mov p1,#0ffh ;p1給初值
mov a,p1 ;p1的數(shù)值給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 ;左轉(zhuǎn)指令
sjmp send
send4:
mov r1,#10100101b ;右轉(zhuǎn)指令
sjmp send
send5:
mov r1,#00h ;停止指令
sjmp send
send:
MOV SBUF,r1 ;指令給sbuf
JNB TI,$ ;判斷是否發(fā)送完
reti ;中斷返回
END
評論
查看更多