謝元成
廣州工程技術(shù)職業(yè)學(xué)院機(jī)電工程學(xué)院,廣東廣州,510075
單片機(jī)的學(xué)習(xí)跟平常學(xué)習(xí)的很多課程是完全不一樣的,它既要求學(xué)習(xí)者掌握相關(guān)的硬件知識(shí),還要求學(xué)習(xí)者必須掌握相關(guān)的軟件知識(shí),而且還必須對(duì)硬件和軟件相結(jié)合后多實(shí)踐。對(duì)于想掌握單片機(jī)技術(shù)的初學(xué)者或者其他工程技術(shù)人員,可以通過學(xué)習(xí)單片機(jī)控制循跡小車的方式,理解和掌握單片機(jī)技術(shù)的基本規(guī)律及應(yīng)用。
以單片機(jī)為核心控制器件,在選擇單片機(jī)的過程中,最好選擇帶有模數(shù)轉(zhuǎn)換處理的芯片。單片機(jī)控制的優(yōu)勢(shì)就是接口豐富,可以根據(jù)需要編寫程序,電路簡潔實(shí)用,很多其他的芯片都可以直接跟單片機(jī)對(duì)接。紅外識(shí)別模塊主要用于路徑的識(shí)別,循跡路徑用對(duì)比度大的黑白路徑,根據(jù)反射光的強(qiáng)弱來分辨路徑。電機(jī)驅(qū)動(dòng)模塊除了提供動(dòng)力外,可以實(shí)現(xiàn)前進(jìn)、后退功能,如果安裝“麥克納姆”輪,還可以實(shí)現(xiàn)整車的原地掉頭及橫向運(yùn)行。防撞避障模塊可以采用超聲波或者紅外線對(duì)管,以判斷障礙物的距離,從而實(shí)現(xiàn)防撞和避障功能。數(shù)碼顯示模塊可以選用簡單的數(shù)碼管,也可以選用相對(duì)復(fù)雜的LCD顯示器件,主要功能就是顯示小車目前的運(yùn)行狀態(tài)。聲光報(bào)警模塊可以采用簡單的蜂鳴器和LED二極管,以實(shí)現(xiàn)聲光報(bào)警和提醒功能。遠(yuǎn)程遙控模塊采用普通的紅外遙控器,以增加控制的便利性和趣味性。
計(jì)算機(jī)包括五個(gè)組成部分,分別是中央控制器、存儲(chǔ)器、時(shí)鐘器、總線、接口。隨著工業(yè)的發(fā)展、制造工藝的提升,計(jì)算機(jī)的體積越來越小,現(xiàn)在已經(jīng)可以把計(jì)算機(jī)的五個(gè)組成部分集成在一塊芯片上,這種芯片就是單片機(jī)[1]。由于可以編寫程序?qū)崿F(xiàn)不同的控制功能,它可以讓電腦設(shè)計(jì)變得簡潔高效,所以在工業(yè)控制、家用電器、智能汽車、電子通信等領(lǐng)域都有廣泛的應(yīng)用。
(1)中央處理器:中央處理器也就是CPU,它主要負(fù)責(zé)從存儲(chǔ)器中讀取指令、運(yùn)算和處理指令及數(shù)據(jù),根據(jù)處理和運(yùn)算的結(jié)果向其他部件發(fā)送控制信號(hào),中央處理器的作用類似于人類的大腦。
(2)存儲(chǔ)器:存儲(chǔ)器用來存儲(chǔ)代碼和數(shù)據(jù)。存儲(chǔ)器主要分兩種,即程序存儲(chǔ)器和隨機(jī)存儲(chǔ)器,存儲(chǔ)器的容量也就是能夠存儲(chǔ)數(shù)據(jù)的單元容量,每個(gè)存儲(chǔ)單元都有一個(gè)對(duì)應(yīng)的地址編碼,數(shù)據(jù)的存放和讀取都要進(jìn)行尋址,C語言在編寫程序時(shí)基本不需要考慮存儲(chǔ)單元的地址編號(hào),軟件會(huì)自動(dòng)執(zhí)行存儲(chǔ)單元的尋址。
(3)時(shí)鐘器:時(shí)鐘器的主要作用是產(chǎn)生時(shí)鐘信號(hào),時(shí)鐘信號(hào)經(jīng)過處理以后也就可以用作定時(shí)信號(hào),可以用來作為跟時(shí)間相關(guān)的基本信號(hào)。時(shí)鐘信號(hào)也是數(shù)字電路中所有器件統(tǒng)一工作的節(jié)拍器,它的快慢決定著整個(gè)計(jì)算機(jī)處理的節(jié)拍和快慢[2]。
(4)總線:總線的主要作用是把計(jì)算機(jī)內(nèi)部的各個(gè)組成部分連接成一個(gè)有機(jī)的整體。各個(gè)部件之間數(shù)據(jù)的傳送依靠總線來進(jìn)行,總線又分為控制總線和數(shù)據(jù)總線,分別用來傳輸控制信號(hào)和數(shù)據(jù)信號(hào)??偩€傳輸信號(hào)的公共通道還簡化了計(jì)算的硬件設(shè)計(jì)和系統(tǒng)結(jié)構(gòu),使得系統(tǒng)的性能和擴(kuò)充性更好。
(5)接口:初學(xué)者很多時(shí)候認(rèn)為計(jì)算機(jī)的組成中一定有顯示器和鍵盤,其實(shí)顯示器和鍵盤并不是計(jì)算機(jī)五個(gè)組成部分之一,計(jì)算機(jī)需要顯示時(shí)可以通過接口連接顯示器件,根據(jù)顯示內(nèi)容的復(fù)雜性選擇相應(yīng)的顯示器件。單片機(jī)通過接口來與外界進(jìn)行相應(yīng)的通信[3]。
(1)電源:所有的電子器件只有在提供相應(yīng)電源的情況下才能正常工作,這個(gè)條件也是所有電子設(shè)備的基本條件。
(2)時(shí)鐘信號(hào):時(shí)鐘信號(hào)是單片機(jī)的節(jié)氣器,也是單片機(jī)中定時(shí)信號(hào)的基本素材,沒有時(shí)鐘信號(hào),單片機(jī)是沒有辦法正常工作的。
(3)復(fù)位電路:復(fù)位電路確保單片機(jī)在通電時(shí)從默認(rèn)的狀態(tài)開始工作,或者在整個(gè)電路死機(jī)的情況下,從默認(rèn)的狀態(tài)下開始工作。復(fù)位電路主要有兩種,即上電復(fù)位和按鍵復(fù)位。
紅外光是波長介于0.76微米至1000微米的不可見光,紅外發(fā)射二極管所發(fā)出的紅外光集中在800微米至1000微米。紅外對(duì)管在設(shè)計(jì)時(shí)可以根據(jù)需要采用直射式和反射式,紅外發(fā)射管一般是二極管,而接收管一般是晶體三極管。當(dāng)紅外接收管接收到發(fā)射二極管的紅外光時(shí),接收管控制電路輸出端會(huì)產(chǎn)生明顯的電平跳變,利用這個(gè)跳變信號(hào),來控制相應(yīng)的設(shè)備,實(shí)現(xiàn)一定程度的自動(dòng)控制[4]。
循跡小車上面安裝的紅外對(duì)管一般采用的方式是反射式紅外對(duì)管,小車的地面路徑一般是在白色地面上畫一條黑色的路徑,紅外發(fā)射二極管發(fā)射的紅外光碰到白色地面或者黑色地面時(shí),所反射回來的紅外光光量有著明顯的差別,紅外晶體接收管接收到的紅外光光量,也就隨著地面路徑顏色的不同而有著明顯的區(qū)別。為了確保循跡小車沿著規(guī)劃的路徑運(yùn)行,在循跡小車上的左右兩側(cè)各裝一對(duì)紅外發(fā)射接收管。當(dāng)循跡小車向左偏移軌跡時(shí),右側(cè)的紅外管可以識(shí)別到,同理,當(dāng)循跡小車向右偏移軌跡時(shí),左側(cè)的紅外管可以識(shí)別到。
紅外對(duì)管的工作原理很簡單,有二極管和三極管的基礎(chǔ)之后,很容易理解紅外對(duì)管的工作原理。在具體學(xué)習(xí)的過程中,可以先搭建一個(gè)具體的電路,通過對(duì)具體電路的輸入輸出電平進(jìn)行測(cè)量,來判斷紅外管的工作狀態(tài)。
直流電機(jī)是一種將直流電直接轉(zhuǎn)換成機(jī)械轉(zhuǎn)矩的電機(jī),直流電機(jī)調(diào)速性能好,在負(fù)載較大的情況下,可以通過改變直流電機(jī)的轉(zhuǎn)速,達(dá)到均勻、平滑無級(jí)的調(diào)速,調(diào)速范圍也比較寬。直流電機(jī)的另外一個(gè)特點(diǎn)就是起動(dòng)轉(zhuǎn)矩比較大,能夠帶動(dòng)較大的負(fù)載。直流電機(jī)控制容易,結(jié)構(gòu)簡單,在很多地方有著廣泛的應(yīng)用,在循跡小車的電機(jī)選擇中,很多就選擇了直流電機(jī)。
步進(jìn)電機(jī)是一種精密的控制儀器,在工業(yè)中應(yīng)用十分廣泛,例如工業(yè)機(jī)器人、打印機(jī)、機(jī)械硬盤等。步進(jìn)電機(jī)的工作原理是讓步進(jìn)電機(jī)的定子產(chǎn)生一個(gè)旋轉(zhuǎn)的磁場(chǎng),這個(gè)旋轉(zhuǎn)磁場(chǎng)跟三相異步電機(jī)原理是有區(qū)別的。三相異步電機(jī)的旋轉(zhuǎn)磁場(chǎng)是通過加入三相交流電來實(shí)現(xiàn)的,而步進(jìn)電機(jī)定子的旋轉(zhuǎn)磁場(chǎng)是通過給定的脈沖來實(shí)現(xiàn)的。三相異步電機(jī)的轉(zhuǎn)速和轉(zhuǎn)動(dòng)的角度是很難直接控制的,而在步進(jìn)電機(jī)中,這些很容易實(shí)現(xiàn),只需要通過給定脈沖的“個(gè)數(shù)”就可以控制步進(jìn)電機(jī)的精確轉(zhuǎn)動(dòng)角度,通過改變給定脈沖的頻率就可以改變步進(jìn)電機(jī)的轉(zhuǎn)速[5]。但是,步進(jìn)電機(jī)的體重相對(duì)比較大,它的轉(zhuǎn)動(dòng)速度較慢,價(jià)格也比較高。
伺服電機(jī)是依靠脈沖來進(jìn)行定位的,可以簡單理解為每輸入一個(gè)脈沖就可以旋轉(zhuǎn)一個(gè)脈沖的角度,從而實(shí)現(xiàn)準(zhǔn)確的位移。但與步進(jìn)電機(jī)不一樣的地方是伺服電機(jī)本身可以發(fā)出脈沖,每旋轉(zhuǎn)一個(gè)角度,可以發(fā)出對(duì)應(yīng)的脈沖。這樣就可以形成一種“閉環(huán)控制”,相對(duì)步進(jìn)電機(jī)的“開環(huán)控制”,伺服電機(jī)的位移角度控制也就更加精確。伺服電機(jī)在控制精確度、運(yùn)行性能各方面都是優(yōu)于步進(jìn)電機(jī)的,但是價(jià)格較高。在循跡小車的設(shè)計(jì)過程中,考慮到速度要求、精度要求、成本問題、重量要求,選擇了簡單的直流電機(jī)。
在設(shè)計(jì)中,可以選擇應(yīng)用廣泛且較經(jīng)典的L293D芯片模塊。該模塊有四個(gè)輸入端和四個(gè)輸出端,通過單片機(jī)向L293D的輸入端發(fā)出高低控制電平,它的四個(gè)輸出端可以輸出相應(yīng)的高低電平,四個(gè)輸出端可以連接兩個(gè)直流電機(jī)。在初學(xué)者學(xué)習(xí)時(shí),首先構(gòu)建一個(gè)獨(dú)立的學(xué)習(xí)電路,這個(gè)電路要求盡量簡單,與系統(tǒng)里面的其他電路盡量是分隔的,以方便進(jìn)行單個(gè)模塊的測(cè)試與學(xué)習(xí),在實(shí)際實(shí)驗(yàn)測(cè)試之前,可以通過仿真軟件先進(jìn)行仿真測(cè)試,仿真測(cè)試通過之后再進(jìn)行實(shí)際測(cè)試[6]。
單片機(jī)通過接收高低電平來檢測(cè)SW1的接通與閉合,從而決定向L293D發(fā)出正反轉(zhuǎn)信號(hào),實(shí)現(xiàn)電機(jī)的正轉(zhuǎn)或者反轉(zhuǎn)。電阻R1模擬一個(gè)可調(diào)電阻,輸出電壓通過單片機(jī)內(nèi)部的模數(shù)轉(zhuǎn)換電路,轉(zhuǎn)換成相應(yīng)大小的數(shù)據(jù)。通過這個(gè)數(shù)據(jù)向L293D電機(jī)模塊發(fā)出相應(yīng)脈沖寬度,控制電機(jī)轉(zhuǎn)動(dòng)速度。這樣一個(gè)簡單的電路,可以實(shí)現(xiàn)電機(jī)的轉(zhuǎn)動(dòng)方向與轉(zhuǎn)動(dòng)速度的模擬與檢測(cè)。
基于單片機(jī)的超聲波測(cè)距系統(tǒng),是利用單片機(jī)編程產(chǎn)生頻率為40kHz的方波,經(jīng)過發(fā)射驅(qū)動(dòng)電路放大,使超聲波傳感器發(fā)射端振蕩,發(fā)射超聲波。超聲波經(jīng)反射物反射回來后,由傳感器接收端接收,再經(jīng)接收電路放大、整形,控制單片機(jī)中斷口。這種以單片機(jī)為核心的超聲波測(cè)距系統(tǒng)通過單片機(jī)記錄超聲波發(fā)射的時(shí)間和收到反射波的時(shí)間。當(dāng)收到超聲波的反射波時(shí),接收電路輸出端產(chǎn)生一個(gè)負(fù)跳變,在單片機(jī)的外部中斷源輸入口產(chǎn)生一個(gè)中斷請(qǐng)求信號(hào),單片機(jī)響應(yīng)外部中斷請(qǐng)求,執(zhí)行外部中斷服務(wù)子程序,讀取時(shí)間差,計(jì)算距離,結(jié)果輸出給LED顯示。利用單片機(jī)準(zhǔn)確計(jì)時(shí),測(cè)距精度高,而且單片機(jī)控制方便,計(jì)算簡單。許多超聲波測(cè)距系統(tǒng)都采用這種設(shè)計(jì)方法。
學(xué)生在繪制流程圖的時(shí)候,選擇一款自己喜歡的流程圖繪制軟件,可以提高自己的繪圖效率,用電腦繪制的流程圖也清晰、整潔,容易更改。在流程圖的繪制過程中,如果使用C語言進(jìn)行程序編寫,要遵守流程圖的繪制規(guī)范,比如“矩形”“菱形”等,所表示的含義是不一樣的,“菱形”表示判斷,即“是”或者“否”。另外就是在流程圖繪制的時(shí)候,有主流程圖和子流程圖,最好分開繪制,子流程圖又有普通子流程圖和中斷子流程圖。主流程圖一般都是“閉合的”“循環(huán)的”,而子流程圖一般是流程式的,一般是可以“返回”的。
在單片機(jī)控制系統(tǒng)中,程序常用C語言編寫,匯編語言使用較少。C語言編寫程序相對(duì)簡單,不需要記住111條指令。編寫程序時(shí),應(yīng)先編寫并調(diào)試單個(gè)模塊,確保每個(gè)模塊正常運(yùn)行后再編寫和調(diào)試整個(gè)系統(tǒng)程序。
循跡小車作為一種典型且實(shí)用的學(xué)習(xí)項(xiàng)目,可以使完成任務(wù)的過程中更加具有趣味性。學(xué)習(xí)者在完成循跡小車的具體項(xiàng)目任務(wù)時(shí),不僅能夠提高對(duì)學(xué)習(xí)內(nèi)容的理解和掌握水平,還能夠培養(yǎng)分析問題、解決問題的思維能力和實(shí)踐操作的技能。