張家港沙洲職業工學院 趙海蘭
江蘇省梁豐高級中學 趙之赫
利用單片機最小系統加紅外遙控器及紅外接收模塊及電機驅動模塊通過編程來實現小車的啟動和停止,左轉右轉和前進后退等功能,本設計采用模塊化設計結構,各個功能相互不受影響,具有較高的智能化、人性化。
紅外遙控小車的實現主要由遙控發射器、紅外接收頭、電機驅動模塊及可擴展接口電路及液晶顯示模塊組成,如圖1所示。紅外遙控器用來產生遙控編碼脈沖,驅動紅外發射管輸出紅外遙控信號,遙控接收頭完成對遙控信號的放大、檢波、整形、解調出遙控編碼脈沖。遙控編碼脈沖是一組串行二進制碼,此串行碼輸入到單片機,由單片機完成對遙控指令解碼,并執行相應的遙控功能。使用紅外遙控器作為控制系統的輸入,然后單片機一方面根據接收到的遙控碼來驅動電機模塊控制小車的運行,同時控制液晶實時顯示小車的運行狀態。為了實現此功能,首先需要解決如下幾個關鍵問題:如何接收紅外遙控信號;如何識別紅外遙控信號以及解碼軟件的設計、驅動電機運行及液晶顯示的程序設計。
遙控發射器專用芯片很多,根據編碼格式可以分成兩大類,這里我們以運用比較廣泛,解碼比較容易的一類來加以說明,現以日本NEC的uPD6121G組成發射電路為例說明編碼原理。當發射器按鍵按下后,即有遙控碼發出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:
(1)采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”。
(2)UPD6121G產生的遙控編碼是連續的32位二進制碼組,其中前16位為用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾。該芯片的用戶識別碼固定為十六位;后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多可支持128種不同組合的編碼。
(3)遙控器在按鍵按下后,周期性地發出同一種32位二進制碼,周期約為108ms。一組碼本身的持續時間隨它包含的二進制“0”和“1”的個數不同而不同,大約在45~63ms之間。
(4)當一個鍵按下超過36ms,振蕩器使芯片激活,將發射一組108ms的編碼脈沖,這108ms發射代碼由一個起始碼(9ms),一個結果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數據碼(9ms~18ms)和這8位數據的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未松開,接下來發射的代碼(連發代碼)將僅由起始碼(9ms)和結束碼(2.5ms)組成。
一體化紅外線接收器是一種集紅外線接收和放大于一體,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數據傳輸。其外形圖如圖2所示。
紅外一開始發送一段13.5ms的引導碼,引導碼由9ms的高電平和4.5ms的低電平組成,跟著引導碼是系統碼,系統反碼,按鍵碼,按鍵反碼,如果按著鍵不放,則遙控器則發送一段重復碼,重復碼由9ms的高電平,4.5ms的低電平,跟著是一個短脈沖。經過紅外接收頭后,所有的碼都經過反碼,然后單片機通過中斷及定時器定時加算法把這些碼接收到后進行相應的處理。單片機接收到的紅外碼如圖3所示。
遙控端發出以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如圖4。
紅外接收頭將38K載波信號過濾,得到與發射代碼反向接收代碼。
注意:解碼的關鍵是如何識別“0”和“1”,從位的定義我們可以發現“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據高電平的寬度。區別“0”和“1”。如果從0.56ms低電平過后,開始延時,0.56ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。
紅外接收模塊外形如圖2所示,使用一體化紅外接收頭1838,其電路原理圖如下圖6所示。瓷片電容104為去耦電容,1端即解調信號的輸出端,直接與單片機的P3.2口相連。有紅外編碼信號發射時,輸出為檢波整形后的方波信號,并直接提供給單片機。
按遙控器的按鍵,遙控器發出的碼通過紅外接收模塊1838解碼后送入單片機,單片機通過定時器和中斷對接收到的碼進行高電平與低電平的測量,最后把遙控器的碼解出后,根據不同的碼進行不同的碼操作,具體解碼操作流程圖如圖7所示。
用單片機控制直流電機時,需要加驅動電路,為直流電機提供足夠大的驅動電流,如圖8所示:我們選擇了達林頓驅動器,它實際上是一塊集成芯片,單塊芯片同時可驅動多個電機,每個電機由單片機的一個I/O口控制,當需要調節直流電機轉速時,使單片機的相應I/O口輸出不同占空比的PWM波形即可。占空比是指高電平持續時間在一個周期時間內的百分比。控制電機的轉速時,占空比越大,速度越快,如果全為高電平,占空比為100%時,速度達到最快。
當用單片機I/O口輸出PWM信號時,可采用以下兩種方法:
1)利用軟件延時。當高電平延時時間到時,對I/O口電平取反變成低電平,然后再延時;當低電平延時時間到時,再對I/O口電平取反,如此循環就可得到PWM信號。
2)利用定時器。控制方法同上,只是在這里利用單片機的定時器來定時進行高、低電平的翻轉,而不用軟件延時。
電機驅動還可以用圖9方式。該電路工作的原理為:當Q5與Q8同時導通時,電機會順時針的轉動,當Q6與Q7同時導通時電機會逆時針的旋轉,這樣我們就可以實現電機的正傳與反轉的控制了,單片機的控制引腳只用了兩個,一個接Q5和Q8的基級這樣可以實現電機的正轉,另一個接Q6與Q7的基級實現電機的反轉。如果用PWM波控制該電機,那PWM波就可以從基級直接輸入,但是對于三極管的選型特別要注意。第一,要看管子的耐壓特性,第二,要看管子的頻率特性,如果頻率特性不太好,那PWM控制電機就失去了意義。
1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊,它有若干個5X7或5X11點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此,所以他不能顯示圖形(用自定義CGRAM,顯示效果也不好)
1602LCD是指顯示的內容為16X2,即可以顯示兩行,每行16個字符液晶模塊(顯示字符和數字)。字符型LCD1602通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),和單片機連接的原理圖如圖10所示。

圖1 紅外遙控小車系統組成方框圖

圖2 紅外接收頭外形圖
由于LCD1602的用法簡單明了,硬件只要上圖連接,軟件只要根據紅外接收碼判斷出是前進還是后退,然后用英文字母顯示出前進或后退或左轉或右轉等字樣。軟件實現起來不難。如果小車還想拓展,可以加一塊語音芯片,提前把聲音錄下來,根據紅外遙控發出不同的命令,然后報出相應的運行狀態。

圖3 紅外接收端發出的波形示意圖

圖4 發射端發出“0”和“1”的表示方法

圖5 紅外接收后的接收代碼

本文設計的紅外遙控小車具有操作簡單,穩定可靠,易擴展升級,在小車的主板上預留了多個擴展端口,比如還可以再增加超聲波避障模塊,可以增加語音播報模塊及巡線模塊等等,對于我們中學生的創新思維及動手能力都很有提高的實用價值。
[1]郭天祥.新概念51單片機C語言教程:入門、提高、開發、拓展全攻略[M].北京:電子工業出版社,2009.
[2]孫賢安,等.基于51單片機的小車蔽障電路實現[M].電氣技術與自動化,2006.
[3]裴彥純,陳志超.基于單片機系統的紅外遙控器應用[J].現代儀器,2004.