亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學習啦>論文大全>學科論文>計算機論文>

      淺談基于stm32實現(xiàn)的紅外遙控控制USB鼠標論文

      時間: 謝樺657 分享

        遠程遙控技術又稱為遙控技術,是指實現(xiàn)對被控目標的遙遠控制,在工業(yè)控制、航空航天、家電領域應用廣泛。紅外遙控是一種無線、非接觸控制技術,具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易實現(xiàn)等顯著優(yōu)點,被諸多電子設備特別是家用電器廣泛采用,并越來越多的應用到計算機系統(tǒng)中。以下是學習啦小編為大家精心準備的:淺談基于stm32實現(xiàn)的紅外遙控控制USB鼠標相關論文。內容僅供參考,歡迎閱讀!

        淺談基于stm32實現(xiàn)的紅外遙控控制USB鼠標全文如下:

        加快嵌入式技術的開發(fā)應用,掌握嵌入式開發(fā)核心技術,對于未能趕上前幾次世界范圍計算機技術發(fā)展機遇的中國來說非常重要?;赟TM32 實現(xiàn)的紅外遙控控制USB 鼠標就是利用STM32 的中斷系統(tǒng)將各模塊相互連接。當STM32 捕獲到信號時,向CUP 發(fā)送中斷請求,然后響應該中斷,對中斷進行處理。STM32 通過識別捕獲到的紅外信號向PC 端通過USB 協(xié)議發(fā)送鼠標控制信號。

        1、STM32 中斷系統(tǒng)

        在STM32 中,外部中斷可由每一個I/O 口進行外部事件的中斷觸發(fā)。在中斷控制器支持的19 個外部中斷事件中,只有線0 至15 對應外部I/O 的輸入中斷,線16 則連接到PVD 的輸出,線17 連接到RTC 的鬧事件,線18 連接到USB 的喚醒時事件。在主程序運行之前,需要先進行中斷初始化,包括使能中斷通道、中斷優(yōu)先級分組初始化、配置中斷線。當有多個中斷時,CUP 處理中斷時嚴格按照中斷優(yōu)先級分組來決定處理哪個中斷。中斷優(yōu)先級分為搶占優(yōu)先級和子優(yōu)先級,中斷處理的順序先有搶占優(yōu)先級決定,當搶占優(yōu)先級相同時,則由子優(yōu)先級決定。

        2、STM32 通用定時器

        STM32 的通用定時器是一個通過可編程預分頻器(PSC)驅動的16 位自動裝載計數(shù)器(CNT)構成。在這次開發(fā)中,STM32 的通用定時器主要用于測量輸入信號的脈沖長度即輸入捕獲。當輸入捕獲發(fā)生時將產生中斷/DMA。當從獨立通道中捕獲到外界信號時,定時器將測量外界信號的周期、占空比來實現(xiàn)信號的識別。例如,在測量時,定時器設置為邊沿觸發(fā),即定時器會計算信號上升沿和下降沿之間的時間差,其計算精度取決于定時器本身頻率的精度。在測量方法中分為測頻法和測周法,當被測信號頻率大于中介頻率時采用測頻法,即在STM32 中采用測頻法。

        3、STM32 紅外遙控

        紅外遙控是通過紅外發(fā)射信號的過程,在遙控器上不同的按鍵所發(fā)射的信號是不同的,這樣在接受端才能區(qū)別按鍵。紅外是不能穿墻的,但紅外遙控器也有無線電遙控器無法比擬的優(yōu)點—在多個紅外遙控器同時使用時,盡管采用相同的遙控頻率或編碼,但不會出現(xiàn)遙控信號“串門”的情況。

        在一點在家電中運用非常廣泛。在STM32 中,我們使用的紅外遙控器編碼方式為PWM(脈沖寬度調制)的NEC 協(xié)議。其特征為:8 位地址和8 位指令長度;地址和命令2 次傳輸(確??煽啃?;PWM 脈沖位置調制,以發(fā)射紅外載波的占空比代表“0”和“1”;載波頻率為38Khz;位時間為1.125ms 或2.25ms。不同的邏輯和位碼采用了不同時間間隔的紅外高低脈沖。地址碼和控制碼等都采用8 位的數(shù)據(jù)格式,且用反碼表示以增加傳輸?shù)目煽啃浴?/p>

        4、STM32 的主程序

        在主程序中,首先要完成STM32 的延時函數(shù)、中斷分組設置、串口初始化、紅外接受初始化、USB 配置及初始化,其次就是while循環(huán)部分,這部分是最核心、最主要的一部分。在while(1)的死循環(huán)中,首先對遙控器的按鍵進行監(jiān)控掃描。遙控器上的每一個按鍵都對應一個獨一無二的鍵值key。通過函數(shù)Remote_Scan()進行按鍵監(jiān)控掃描,若沒有檢測到按鍵,則鍵值key 為假,若檢測到遙控器有按鍵,則獲取相應的鍵值并保存到key 中,并通過switch(key)對不同的key 進行不同的處理。對相應key 值的處理實際上就是準備要發(fā)送的控制鼠標的數(shù)據(jù)。

        如何對相應的key 值經(jīng)行數(shù)據(jù)處理呢,在這里,就要先了解它的發(fā)送數(shù)據(jù)的函數(shù)Joystick_Send(a,b,c,d)。參數(shù)a 是一個八位的數(shù)據(jù),a 的不同位置1 分別代表鼠標中鍵按下、右鍵按下、左鍵按下、xy 坐標的變化量和變化符號(光標移動方向)等。參數(shù)b 表示x 坐標的變化量,這個變化量是相對上一次坐標的變化量。

        參數(shù)c 表示y 坐標的變化量,同理為相對變化量。參數(shù)d 為滾輪的變化,可以控制滾輪的上下滾動和滾動速率。這里要介紹一下電腦的坐標系,電腦的坐標系不同于一般的直角坐標系。電腦坐標以屏幕左上角為原點,水平向右為x 軸正方向,豎直向下為y 軸正方向。了解了數(shù)據(jù)發(fā)送函數(shù),就可以經(jīng)行數(shù)據(jù)準備了。例如接受的鍵值key代表鼠標左鍵按下,則設置參數(shù)a 的相應位;若key 代表鼠標右移,則設置參數(shù)b 為相應整數(shù);若key 代表鼠標滾輪上滾,則設置參數(shù)d。

        理論上講,這樣的數(shù)據(jù)處理已經(jīng)比較完美了,可在實際使用中會發(fā)現(xiàn)另外一個問題,就是鼠標移動靈敏度的問題。這時需要定義另外一個參數(shù)s 代表靈敏度,在發(fā)送坐標數(shù)據(jù)b 和c 時,改為發(fā)送b*s 和c*s,這樣就可以相應地擴大或減小鼠標靈敏度了。當發(fā)送完數(shù)據(jù)后,需要將b、c、d 數(shù)據(jù)清0。以上的處理在檢測到鍵值key 的情況下,當沒有檢測到鍵值的情況下,若之前有鍵按下,則需發(fā)送松開命令,即將a 置為0。

        以上的整個過程都處在while(1)的死循環(huán)中,這樣的話,當鼠標長時間沒有移動的時候就會造成資源浪費。這里提供一個解決思路:當鼠標在一定時間內沒有任何觸發(fā)信號產生時,可認為此時之后的很長一段時間內都不會有信號產生,可將STM32 設置為休眠狀態(tài)。當有觸發(fā)信號產生時,可先用該觸發(fā)信號將STM32從休眠狀態(tài)喚醒,當程序正常執(zhí)行時,再處理該信號(當然,也可以直接將該信號丟棄)。

        5、結論

        基于STM32 實現(xiàn)的紅外遙控控制USB 鼠標旨在研究嵌入式系統(tǒng)的原理及系統(tǒng)設計。在本次的開發(fā)中涉及到嵌入式特別重要的定時器、中斷等概念,將書本知識運用于實際,注重基礎知識,為以后嵌入式開發(fā)奠定良好基礎。

      423739