一種紅外遙控式步進電機控制器的設計與實現
紅外接收電路的輸出接單片機的P3.2,該口對應的第二功能是外部中斷0(INT0),利用該口的第二功能,一旦紅外線信號到來,P3.2被拉低,單片機中止當前的工作轉移到接收、處理紅外信號。開啟中斷功能的目的,既減輕了單片機的工作負擔,又保證接收到的紅外信號的完整性,單片機進入睡眠后,利用外部中斷功能完成對單片機的喚醒,其接線圖如圖3所示。本文引用地址:http://www.104case.com/article/159589.htm
紅外發送電路可選用昂達播放器的遙控器,也可采用電視遙控器。由于系統簡單,采用昂達播放器的遙控器。
2.3 時鐘電路
時鐘電路采用DS1302集成芯片,其主要特點是采用串行數據傳輸,可為掉電保護電源提供可編程的充電功能,并且可以關閉充電功能。采用普通32768 Hz晶振,步進電機的啟閉時間都保存在DS1302自帶的RAM中,不需要單獨的EEPROM。
DS1302與CPU的連接僅需要三條線,即SCLK(7)、I/O(6)、RST(5)。
3 系統軟件設計
軟件系統主要包括主程序、紅外中斷子程序、A/D轉換子程序、顯示子程序、時鐘控制子程序及步進電機程序。下面主要介紹紅外線解碼程序。
3.1 紅外線解碼原理
昂達播放器的遙控器產生的遙控編碼是連續的32位二進制碼組,其中前16位為用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾。該芯片的用戶識別碼同定高8位地址為0BFH,低8位地址為40H;后16位為8位操作碼(功能碼)及其反碼。
遙控器按鍵按下后,周期性地發出同一種32位二進制碼,周期約為108 ms。一組碼本身的持續時間隨它包含的二進制“0”和“1”的個數不同而不同,大約在45~63 ms之間。
當一個鍵按下超過36 ms,振蕩器使芯片激活,將發射一組108 ms的編碼脈沖,這108 ms發射代碼由一個起始碼(9 ms),一個結果碼(4.5 ms),低8位地址碼(9~18 ms),高8位地址碼(9~18 ms),8位數據碼(9~18 ms)和這8位數據的反碼(9~18 ms)組成。如果鍵按下超過108 ms仍未松開,接下來發射的代碼(連發代碼)將僅由起始碼(9 ms)和結束碼(2.5 ms)組成。
其代碼寬度的計算方法為:
16位地址碼的最短寬度:1.12×16=18 ms
16位地址碼的最長寬度:2.24 msX16=36 ms
已知8位數據代碼及其8位反代碼的寬度和不變:(1.12 ms+2.24 ms)x8=27 ms。所以得32位代碼的寬度為(18 ms+27 ms)~(36 ms+27 ms)。
解碼的關鍵是如何識別“0”和“1”,代碼格式以接收代碼為準,接收代碼與發射代碼反向。從位的定義我們可以發現“0”、“1”均以0.56 ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56 ms,“1”為1.68 ms,所以必須根據高電平的寬度區別“0”和“1”。如果從0.56 ms低電平過后,開始延時,0.56 ms以后,若讀到的電平為低,說明該位為“0”,反之則為“1”,為了可靠起見,
延時必須比0.56 ms長些,但又不能超過1.12 ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12 ms+0.56 ms)/2=0.84 ms最為可靠,一般取0.84 ms左右均可;根據碼的格式,應該等待9 ms的起始碼和4.5 ms的結果碼完成后才能讀碼。
3.2 解碼程序設計
根據以上分析,采用89C2051單片機實現紅外解解碼的思路為:有信號產生中斷→EA清零→延時小于9 ms (低電平)→等待高電平的到來→延時小于4.5 ms(高電平)→等待下一次高電平的到來→延時0.84 ms左右→讀區P3.2腳電平值→再等待下一次高電平的到來→延時0.84 ms左右→讀取P3.2腳電平值,依次取得32位代碼,前16位為識別碼,后18位既為8位數據碼和8位數據反碼。解碼中斷服務程序流程圖如圖4所示。
4 結束語
通過系統調試及運行結果表明,采用步進電機作為執行元件,89C2051單片機作為控制器,光敏元件傳感器作為檢測元件,以手動輸入按鈕作為手動輸入信號,以紅外遙控裝置進行遙控操作,并輔以時鐘控制及狀態顯示的步進電機控制系統,能夠方便實現步進電機的手動、自動及遙控多功能操作,操作更加方便可靠。
評論