歡迎您光臨本站 登入註冊首頁

概述

   在某些環境監測、安防警報等環境下,不便進行有線線路的鋪設,而採用無線數據通信方式。採用一般的無線傳輸方式時可能因為環境雜訊大,干擾信號強而導致接收數據的準確性很低。……

    在某些環境監測、安防警報等環境下,不便進行有線線路的鋪設,而採用無線數據通信方式。採用一般的無線傳輸方式時可能因為環境雜訊大,干擾信號強而導致接收數據的準確性很低。針對這種情況,設計一種低成本、高準確率的無線數據傳輸系統—— 基於PIC16F876的SPI和nRF905模塊的點對點無線通信系統。利用PIC16F876和nRF905模塊直接進行SPI數據交換,時序同步性好,程序編寫簡單。PIC16F876通過相應的I/O口連接到編程器,可直接進行在線調試。鑒於無線通信環境中雜訊大,信號干擾大的特點,採用的nRF905模塊引入自動重發,高抗干擾GFSK調製和最高16位CRC校驗機制,確保了數據傳輸的可靠性。

1 硬體電路規劃
    PIC16F876、nRF905模塊及編程器連接頭J1之間的電路連接,220V一5V電路實現,5V一3V電壓轉換電路如圖1、圖2、圖3所示。
 
圖1 PIC16F876、nRF905模塊及編程器之間的電路連接
① 本系統所用的nRF905模塊系指迅通科技公司的一個nRF905無線通信模塊。此模塊在與單片機P1C16F876相連時,只用了核心晶元nRF905的14個引腳(見圖1)。
 
    在圖1中,單片機PIC16F876輸入 輸出口與nRF905模塊相應介面連接情況:RC7~nRF905模塊時鐘分頻輸出,RC6~nRF905模塊地址匹配輸出AM,RC5~MISO,RC4~MOSI,RC3~ SCK,RC2~CSN,RB7 RB6&RB3~J1編程器連接線,RB5~nRF905模塊數據就緒輸出DR,RB2~PWR,RB1~ TXEN,RB0~ TRX_CE。單片機通過RB7、RB6和RB3與編程器相連,可進行在線編程;由RC5輸出數據到nRF905模塊,由RC4從nRF905模塊輸入數據。由一個4 MHz陶瓷晶體振蕩器為單片機提供時鐘輸入。16F876的工作電壓是4.5~5.5 V,通過圖2中的DBA元件實現從220 V市電到5 V電壓的轉換。由於nRF905模塊的工作電壓是1.9~3.6 V,需從5 V電壓轉換得到一個符合nRF905模塊正常工作的穩定電壓。考慮使用分壓電阻與3 V穩壓管串聯分壓,從穩壓管兩端可得到一個穩定的3 V電壓輸出,如圖3所示。

2 軟體設計
    考慮到nRF905模塊內置完整的通信協議和CRC,軟體設計工作主要集中在如何實現對nRF905模塊的有效初始配置,以及16F876與nRF905模塊之間SPI通信的實現。其中須保證16F876與nRF905模塊時序的一致,並充分考慮nRF905模塊對時序的要求。SPI時序如圖4所示。
 
對應程序設計:
MOVLW B'11000000' ;bit7=smp=1
MOVWF SSPSTAT ;在輸出數據的末尾採樣輸入數據
;bit6=cke=1,ckp=0時上升沿
;發送數據
MOVLW B'00000001' ;bit2~bito設置晶振/16,SPI主控方式
MOVWF SSPCON ;bit4=CKP=0空閑時鐘低電平

    nRF905模塊存在4種工作模式:掉電和SPI編程模式、待機和SPI編程模式、發射模式、接收模式。
BSF PORTB,2 ;待機和SPI編程方式
BCF PORTB,0 ;PWR_UP= 1,TRX_EN= 0,TX_EN= 0
BCF PORTB,1
BSF PORTB,0 ;往晶元中寫數據操作完畢,轉換到發射模式
BSF PORTB,1
BSF PORTB,0 ;往晶元中寫數據操作完畢,轉換到接收模式
             ;RB0_TRX_CE= 1,RB1_TXEN= 0
    通過對16F876相應輸出口高低電平的轉換,可控制nRF905模塊工作模式的變化。將單片機的SPI介面與nRF905模塊的相應SPI口互連,實現16F876與nRF905模塊之間的數據傳遞或實現16F876向nRF905模塊發出控制命令;在編程模式下,可將預配置的命令或數據送入單片機收發緩衝器SSPBUF中,以16F876作為主控模式,並提供SPI通信必需的SCK時鐘,nRF905模塊作為從動模式,在SCK上升沿,雙方進行數據傳遞,啟動SCK后可將單片機數據逐位移人nRF905模塊中,以完成對其初始配置。
    參照nRF905模塊數據手冊進行初始配置:nRF905模塊的發射功率,工作頻段,發送數據寬度,發送數據地址,接收數據寬度,接收數據地址,CRC校驗等。若該nRF905模塊作為發射部分,則將已採集並存儲在單片機中的數據送入nRF905模塊,以備發射。
MOVLW 58H
;BIT7=CRC_MODE=1,8位CRC校驗位
;BIT6=CRC_EN=1,CRC校驗允許
;BIT[5:3]=XOF[2:0]=000,晶振4 MHz
;BIT2=UP_CLK_EN=0外部時鐘信號禁止
;BIT[1:0]=UP_CLK_FREQ[1:0]=11,500 kHz
MOVLW B'001001100'
;BIT5=AUTO_RETRAN=0不重發數據
;輸出功率為-10 dBm,
;BIT4=RX_RED_PWR=0正常工作模式
;BIT1=HEREQ_PLL=0.433 MHz頻段
;CH_NO[8]=0

    設計一個SPI通信模塊程序進行循環調用,以簡化程序設計,提高可讀性。
;SPI通信子程序
OUT_IN
BSF SSPCON,SSPEN ;允許SPI模式
MOVWF SSPBUF ;數據送給SSPBUF后開始發送LP2
BCF STATUS,RP1 ;選擇RAM 體1
RSF STATUS.RP0
BTFSS SSPSTAT,BF ;查詢發送/接收完否
GOTO LP2 ;否,繼續查詢
BCF STATUS,RP0 ;是,選擇RAM 體0
MOVF SSPBUF,W ;從緩衝器取出數據
RETURN ;子程序返回
程序流程如圖5所示。
 

結語
    本無線數據傳輸系統已成功應用於無線抄表項目之中,在實際的工作環境運行半年多時間,情況良好。經過現場測試,在空曠地,無須另加功放或外接天線,無線通信的有效半徑約100 m。本系統除可應用在無線抄表領域外,還可用於環境監測、門禁系統、無線遙控系統等。


[admin via 研發互助社區 ] nRF905模塊和SPI介面的點對點無線通信系統已經有3700次圍觀

http://cocdig.com/docs/show-post-44787.html