關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于S12的無線傳感器網絡樣機系統設計

        基于S12的無線傳感器網絡樣機系統設計

        作者: 時間:2010-05-19 來源:網絡 收藏

        1.4 選擇
          為降低能耗,本所選用的均為低功耗的小型。其中,溫度傳感器選用Maxim公司的MAX6611。正常工作狀態下,供電電流僅為150 μA,功耗為0.75 mW;在SHDN腳接地時處于省電狀態,供電電流僅為1 μA,功耗僅為5 μW。濕度傳感器選用Honeywell公司的HIH4000,其正常工作狀態下的供電電流僅為200 μA,功耗為1 mW。壓力傳感器選用Motorola公司的MPX4100A,其正常工作狀態下的供電電流為7 mA,功耗為35 mW。3個傳感器在正常工作狀態下的總功耗為36.75 mW;在節電工作狀態下,總功耗為36.005 mW。
        2 軟件
        2.1 MC9DT128的中斷控制方式
          本中,MC9DT128采用集編輯、編譯、調試、程序下載于一體的開發環境CodeWarrior4.5進行開發。CodeWarrior4.5是一種交叉編譯器,支持高級語言(如C、C++和Java),以及大部分微控制器的匯編語言。
          中斷控制方式是微處理器發展的一個重要里程碑,是提高CPU的工作效率、降低系統功耗的有效方式。
          在CodeWarrior4.5下,中斷函數的定義只有2種方法:采用pragma TRAP_PROC或者interrupt關鍵字進行定義。具體使用方法分別為(假定中斷函數名為INCount):
          ① #pragma TRAP_PROC
            void INCount(void){
              Tcount++;
          }
          ② interrupt void INCount(void){
              tcount++;
          }
          對應于中斷函數不同的定義方式,CodeWarrior4.5下初始化中斷向量表也有2種方法:
          ① 采用VECTOR ADDRESS或者VECTOR關鍵字。具體實現方法為,在工程的.prm文件中加入中斷函數的入口地址:
          VECTOR ADDRESS0x8AINCount
          其中,0x8A為中斷入口地址。或者,加入中斷向量標號:
          VECTOR 69 INCount
          其中,69為中斷向量標號。
          ② 采用關鍵字interrupt。具體實現方法為在中斷函數定義時加入中斷向量標號:
          interrupt 69 void INCount(void){
            tcount++;
          }
          其中,69為中斷向量標號。
        2.2 A/D轉換中斷方式的實現
          本系統中,傳感器采集到模擬信號的A/D轉換是通過單片機的ATD模塊實現的。對ATD模塊采用中斷的控制方式,可以節約系統資源,提高系統執行速度。
          首先,必須在ATD模塊的初始化程序中將ATD模塊設置為中斷模式,啟用ATD轉換完成中斷。轉換完成中斷函數名為ATD0,其功能為讀取A/D轉換結果,采用interrupt關鍵字進行定義:
          #pragma CODE_SEG ATD0Interrupt_SEG
          interrupt void ATD0(void){
            ATD0STAT0_SCF = 0;//關中斷
            MeasureResult[0]=ATD0DR0H;
            MeasureResult[1]=ATD0DR0L;
            MeasureResult[2]=ATD0DR1H;
            MeasureResult[3]=ATD0DR1L;
            MeasureResult[4]=ATD0DR2H;
            MeasureResult[5]=ATD0DR2L;
          }
          #pragma CODE_SEG DEFAULT
          中斷函數入口通過在預編譯文件中添加ATD中斷入口地址0xFFD2實現,即在PE_Multilink_CyclonePro_linker.prm中加入語句:
          VECTOR ADDRESS 0xFFD2 ATD0
          MC9DT128的Flash空間為128 KB,采用分頁管理方式,其地址分配為:
          RAM = READ_WRITE 0x0400 TO 0x1FFF;
          /*unbanked Flash*/
          ROM_4000 = READ_ONLY0x4000TO0x7FFF;
          ROM_C000 = READ_ONLY0xC000 TO0xFEFF;
          /*banked Flash*/
          PAGE_38=READ_ONLY0x388000TO0x38BFFF;
          PAGE_39=READ_ONLY0x398000TO0x39BFFF;
          PAGE_3A=READ_ONLY0x3A8000TO0x3ABFFF;
          PAGE_3B=READ_ONLY0x3B8000TO0x3BBFFF;
          PAGE_3C=READ_ONLY0x3C8000TO0x3CBFFF;
          PAGE_3D=READ_ONLY0x3D8000TO0x3DBFFF;
          可以看到Flash空間被劃分為兩部分:unbanked Flash以及banked Flash。對于banked Flash,定義在其空間內的函數只能被本頁的程序所調用;而定義在unbanked Flash內的函數則可以為工程內任意程序所調用。中斷函數想要正確地響應中斷請求,必須放在unbanked Flash內,因此需要將中斷函數置于特定的位置。可以從A/D中斷函數ATD0的定義中看出,ATD0被定義在CODE_SEG ATD0Interrupt_SEG部分。CODE_SEG ATD0Interrupt_SEG是自己定義的ATD0中斷代碼段,其存放位置在PE_Multilink_CyclonePro_linker.prm文件的PLACEMENT關鍵字下定義:
          PLACEMENT
          ATD0Interrupt_SEG,
          COPY
          INTOROM_C000
          這樣,就將ATD0Interrupt_SEG的位置定義在了unbanked Flash空間的ROM_C000。
          最后,在工程中建立ATD0Interrupt.c文件,在其中聲明中斷函數ATD0()為外部函數:
          #pragma CODE_SEG ATD0Interrupt_SEG
            extern void ATD0();
          #pragma CODE_SEG DEFAULT
          這樣,就能保證置于任意存儲空間的主程序在請求中斷時,都可以得到及時、正確的中斷響應。
        2.3 主從藍牙模塊驅動
          藍牙技術是一種使用2.4 GHz頻段的短距離通信技術。與其他幾種通信方式比較,藍牙的傳輸速率并不是最快的,但由于其具有主從式的自組織微微網、低功耗、頻段的開放性等優勢,因此在傳感器的應用中具有良好的前景。
          本中的無線傳感器模塊正是采用藍牙通信實現的。傳感器采集的信號經過A/D轉換,轉換結果需要通過藍牙無線通信傳至PC機。藍牙系統能夠支持2種連接,即點對點連接和點對多點連接。這就形成了2種結構:微微網和散射網。本系統屬于只有一個從設備的微微網。這個微微網中,主藍牙為與PC機相連的藍牙模塊,從藍牙由與單片機相連的藍牙模塊擔任。主從藍牙的區別在于:主藍牙可以主動發出指令搜索藍牙設備,建立和斷開鏈接;而從藍牙則必須等待主藍牙的指令才能開始工作。
          PC機與主藍牙模塊、單片機與從藍牙模塊之間都是串行通信,波特率為57 600 b/s。主從藍牙模塊的初始化過程大致相同,通過串行通信順序發送如下10條指令:
          Reset[01 03 0C 00]
          Read_Buffer_Size[01 05 10 00]
          Clear:Set_Event_Filter[01 05 0C 01 00]
          Write_Scan_Enable[01 1A 0C 01 03]
          Write_Authentication_Enable[01 20 0C 01 00]
          Write_Voice_Setting[01 26 0C 02 60 00]
          Set_Event_Filter[01 05 0C 03 02 00 02]
          Write_Connection_Accept_Timeout[01 16 0C 02 00 20]
          Write_Page_Timeout[01 18 0C 02 00 30]
          Read_BD_ADDR[01 09 10 00]

        電磁爐相關文章:電磁爐原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 苏尼特左旗| 乐业县| 衢州市| 砀山县| 安福县| 三门峡市| 余庆县| 清水县| 兰州市| 东乌| 威宁| 钟祥市| 鄄城县| 吉安县| 托克逊县| 乌苏市| 东阳市| 雷山县| 四子王旗| 永宁县| 仙桃市| 高清| 云和县| 合阳县| 朝阳区| 蒙城县| 监利县| 大英县| 麻阳| 阿鲁科尔沁旗| 夹江县| 昭觉县| 高陵县| 宁蒗| 沙雅县| 中江县| 修文县| 汶上县| 长宁区| 富锦市| 垣曲县|