張家港沙洲職業(yè)工學(xué)院 趙海蘭
江蘇省梁豐高級中學(xué) 趙之赫
利用單片機(jī)最小系統(tǒng)加紅外遙控器及紅外接收模塊及電機(jī)驅(qū)動模塊通過編程來實(shí)現(xiàn)小車的啟動和停止,左轉(zhuǎn)右轉(zhuǎn)和前進(jìn)后退等功能,本設(shè)計(jì)采用模塊化設(shè)計(jì)結(jié)構(gòu),各個(gè)功能相互不受影響,具有較高的智能化、人性化。
紅外遙控小車的實(shí)現(xiàn)主要由遙控發(fā)射器、紅外接收頭、電機(jī)驅(qū)動模塊及可擴(kuò)展接口電路及液晶顯示模塊組成,如圖1所示。紅外遙控器用來產(chǎn)生遙控編碼脈沖,驅(qū)動紅外發(fā)射管輸出紅外遙控信號,遙控接收頭完成對遙控信號的放大、檢波、整形、解調(diào)出遙控編碼脈沖。遙控編碼脈沖是一組串行二進(jìn)制碼,此串行碼輸入到單片機(jī),由單片機(jī)完成對遙控指令解碼,并執(zhí)行相應(yīng)的遙控功能。使用紅外遙控器作為控制系統(tǒng)的輸入,然后單片機(jī)一方面根據(jù)接收到的遙控碼來驅(qū)動電機(jī)模塊控制小車的運(yùn)行,同時(shí)控制液晶實(shí)時(shí)顯示小車的運(yùn)行狀態(tài)。為了實(shí)現(xiàn)此功能,首先需要解決如下幾個(gè)關(guān)鍵問題:如何接收紅外遙控信號;如何識別紅外遙控信號以及解碼軟件的設(shè)計(jì)、驅(qū)動電機(jī)運(yùn)行及液晶顯示的程序設(shè)計(jì)。
遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成兩大類,這里我們以運(yùn)用比較廣泛,解碼比較容易的一類來加以說明,現(xiàn)以日本NEC的uPD6121G組成發(fā)射電路為例說明編碼原理。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:
(1)采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”。
(2)UPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進(jìn)制碼組,其中前16位為用戶識別碼,能區(qū)別不同的電器設(shè)備,防止不同機(jī)種遙控碼互相干擾。該芯片的用戶識別碼固定為十六位;后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多可支持128種不同組合的編碼。
(3)遙控器在按鍵按下后,周期性地發(fā)出同一種32位二進(jìn)制碼,周期約為108ms。一組碼本身的持續(xù)時(shí)間隨它包含的二進(jìn)制“0”和“1”的個(gè)數(shù)不同而不同,大約在45~63ms之間。
(4)當(dāng)一個(gè)鍵按下超過36ms,振蕩器使芯片激活,將發(fā)射一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個(gè)起始碼(9ms),一個(gè)結(jié)果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數(shù)據(jù)碼(9ms~18ms)和這8位數(shù)據(jù)的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成。
一體化紅外線接收器是一種集紅外線接收和放大于一體,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。其外形圖如圖2所示。
紅外一開始發(fā)送一段13.5ms的引導(dǎo)碼,引導(dǎo)碼由9ms的高電平和4.5ms的低電平組成,跟著引導(dǎo)碼是系統(tǒng)碼,系統(tǒng)反碼,按鍵碼,按鍵反碼,如果按著鍵不放,則遙控器則發(fā)送一段重復(fù)碼,重復(fù)碼由9ms的高電平,4.5ms的低電平,跟著是一個(gè)短脈沖。經(jīng)過紅外接收頭后,所有的碼都經(jīng)過反碼,然后單片機(jī)通過中斷及定時(shí)器定時(shí)加算法把這些碼接收到后進(jìn)行相應(yīng)的處理。單片機(jī)接收到的紅外碼如圖3所示。
遙控端發(fā)出以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”,其波形如圖4。
紅外接收頭將38K載波信號過濾,得到與發(fā)射代碼反向接收代碼。
注意:解碼的關(guān)鍵是如何識別“0”和“1”,從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度。區(qū)別“0”和“1”。如果從0.56ms低電平過后,開始延時(shí),0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時(shí)必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此?。?.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。
紅外接收模塊外形如圖2所示,使用一體化紅外接收頭1838,其電路原理圖如下圖6所示。瓷片電容104為去耦電容,1端即解調(diào)信號的輸出端,直接與單片機(jī)的P3.2口相連。有紅外編碼信號發(fā)射時(shí),輸出為檢波整形后的方波信號,并直接提供給單片機(jī)。
按遙控器的按鍵,遙控器發(fā)出的碼通過紅外接收模塊1838解碼后送入單片機(jī),單片機(jī)通過定時(shí)器和中斷對接收到的碼進(jìn)行高電平與低電平的測量,最后把遙控器的碼解出后,根據(jù)不同的碼進(jìn)行不同的碼操作,具體解碼操作流程圖如圖7所示。
用單片機(jī)控制直流電機(jī)時(shí),需要加驅(qū)動電路,為直流電機(jī)提供足夠大的驅(qū)動電流,如圖8所示:我們選擇了達(dá)林頓驅(qū)動器,它實(shí)際上是一塊集成芯片,單塊芯片同時(shí)可驅(qū)動多個(gè)電機(jī),每個(gè)電機(jī)由單片機(jī)的一個(gè)I/O口控制,當(dāng)需要調(diào)節(jié)直流電機(jī)轉(zhuǎn)速時(shí),使單片機(jī)的相應(yīng)I/O口輸出不同占空比的PWM波形即可。占空比是指高電平持續(xù)時(shí)間在一個(gè)周期時(shí)間內(nèi)的百分比??刂齐姍C(jī)的轉(zhuǎn)速時(shí),占空比越大,速度越快,如果全為高電平,占空比為100%時(shí),速度達(dá)到最快。
當(dāng)用單片機(jī)I/O口輸出PWM信號時(shí),可采用以下兩種方法:
1)利用軟件延時(shí)。當(dāng)高電平延時(shí)時(shí)間到時(shí),對I/O口電平取反變成低電平,然后再延時(shí);當(dāng)?shù)碗娖窖訒r(shí)時(shí)間到時(shí),再對I/O口電平取反,如此循環(huán)就可得到PWM信號。
2)利用定時(shí)器。控制方法同上,只是在這里利用單片機(jī)的定時(shí)器來定時(shí)進(jìn)行高、低電平的翻轉(zhuǎn),而不用軟件延時(shí)。
電機(jī)驅(qū)動還可以用圖9方式。該電路工作的原理為:當(dāng)Q5與Q8同時(shí)導(dǎo)通時(shí),電機(jī)會順時(shí)針的轉(zhuǎn)動,當(dāng)Q6與Q7同時(shí)導(dǎo)通時(shí)電機(jī)會逆時(shí)針的旋轉(zhuǎn),這樣我們就可以實(shí)現(xiàn)電機(jī)的正傳與反轉(zhuǎn)的控制了,單片機(jī)的控制引腳只用了兩個(gè),一個(gè)接Q5和Q8的基級這樣可以實(shí)現(xiàn)電機(jī)的正轉(zhuǎn),另一個(gè)接Q6與Q7的基級實(shí)現(xiàn)電機(jī)的反轉(zhuǎn)。如果用PWM波控制該電機(jī),那PWM波就可以從基級直接輸入,但是對于三極管的選型特別要注意。第一,要看管子的耐壓特性,第二,要看管子的頻率特性,如果頻率特性不太好,那PWM控制電機(jī)就失去了意義。
1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶模塊,它有若干個(gè)5X7或5X11點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱?,所以他不能顯示圖形(用自定義CGRAM,顯示效果也不好)
1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),和單片機(jī)連接的原理圖如圖10所示。
圖1 紅外遙控小車系統(tǒng)組成方框圖
圖2 紅外接收頭外形圖
由于LCD1602的用法簡單明了,硬件只要上圖連接,軟件只要根據(jù)紅外接收碼判斷出是前進(jìn)還是后退,然后用英文字母顯示出前進(jìn)或后退或左轉(zhuǎn)或右轉(zhuǎn)等字樣。軟件實(shí)現(xiàn)起來不難。如果小車還想拓展,可以加一塊語音芯片,提前把聲音錄下來,根據(jù)紅外遙控發(fā)出不同的命令,然后報(bào)出相應(yīng)的運(yùn)行狀態(tài)。
圖3 紅外接收端發(fā)出的波形示意圖
圖4 發(fā)射端發(fā)出“0”和“1”的表示方法
圖5 紅外接收后的接收代碼
本文設(shè)計(jì)的紅外遙控小車具有操作簡單,穩(wěn)定可靠,易擴(kuò)展升級,在小車的主板上預(yù)留了多個(gè)擴(kuò)展端口,比如還可以再增加超聲波避障模塊,可以增加語音播報(bào)模塊及巡線模塊等等,對于我們中學(xué)生的創(chuàng)新思維及動手能力都很有提高的實(shí)用價(jià)值。
[1]郭天祥.新概念51單片機(jī)C語言教程:入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2009.
[2]孫賢安,等.基于51單片機(jī)的小車蔽障電路實(shí)現(xiàn)[M].電氣技術(shù)與自動化,2006.
[3]裴彥純,陳志超.基于單片機(jī)系統(tǒng)的紅外遙控器應(yīng)用[J].現(xiàn)代儀器,2004.