王 超,趙 亓
(內蒙古工業大學 機械學院,內蒙古 呼和浩特 010051)
近年來,無線傳輸技術發展迅猛,被不斷地應用于機器人、無人機、深海探測等領域,而這些領域的應用大都要使用搖桿進行遠程控制,因而對搖桿信號無線傳輸技術的研究是極其必要的。
無線遙控和無線傳輸系統與有線設備相比提高了移動自由度,相對有線數據傳輸系統,其可以免去繁瑣的設計過程,并且安裝簡便,操控方便,便于移動,能更好地適應環境變化,提高了設備的靈活性并降低了維護成本。
本文通過編程實現無線數據的模數轉換與無線傳輸功能,為后期的數據利用奠定基礎。本設計所使用的是Nordic公司生產的NRF24L01+單片射頻收發芯片,它具有功率小、開發簡單的特點,其使用的是微功率無線通信技術,利用數字信號單片射頻收發芯片,加上微控制器和少量外圍元器件即可構成專用或通用無線通信模塊。
搖桿信號的輸出大多為模擬量輸出,即電壓方式輸出,所以需要加設A/D轉換器,將模擬量轉換為數字量后,再把數據傳送到單片機系統。由于最終要實現無線數據的傳輸,因而選取了2個NRF24L01+模塊,其中一片連接單片機、A/D和 搖桿,作為發送端;另一片連接單片機和上位機,作為接收端。
本設計以兩個帶有STC89C52單片機的ST-3A學習板作為主機,其上帶有無線模塊的接口,并使用3.3V穩壓芯片,還帶有4個外接的5V輸出接線柱,方便連接實驗設備,而且減少了杜邦線的使用,使得實驗裝置布線簡單,簡化了實驗過程。
本設計使用YL-40模塊作為A/D轉換裝置,該模塊的核心是PCF8591芯片,它是一種具有I2C總線接口的A/D轉換芯片,僅依靠時鐘線SCL和數據線SDA就可以實現與主機的信息傳遞。
因為要使搖桿操作起來更加簡便和直觀,本設計使用了JoyStick搖桿模塊,其有X,Y兩路模擬輸出。
考慮到無線傳輸的距離,最終選擇了無線收發模塊NRF24L01+,其核心芯片是Nordic公司生產的NRF24L01+芯片,特點是成本低、體積小、傳輸速率高,適合實驗室使用。
PCF8591是單片、單電源低功耗8位CMOS數據采集器件,具有4路模擬輸入、4路模擬輸出和4個串行I2C總線接口。其中,VREF為A/D轉換的參考電壓,而I2C總線通過上拉電阻R9,R10接電源。PCF8591的3個地址引腳A0,A1和A2用于編程硬件地址,允許將最多8個器件連接至I2C總線而不需要額外的硬件。其器件的地址、控制和數據通過兩線雙向I2C總線傳輸。
本設計因手柄只有2路模擬輸出,所以只需要利用2個A/D轉換接口即可,因此,只使用AIN0和AIN1接口,其中AIN0和手柄S-Y口相接,AIN1與手柄S-X口相接。SCL和SDA分別接單片機的I/O口P20和P21。
從單片機控制的角度來看,對于NRF24L01+,我們只需要關注以下6個控制和數據信號:
(1)CSN:芯片的片選線,CSN為低電平時芯片才會工作。
(2)SCK:芯片控制的時鐘線。
(3)MISO:SPI數據主入從輸端(Master input slave output)。狀態信息和數據信息是從MISO引腳輸出并送給單片機。
(4)MOSI:SPI數據主輸從入端(Master output slave input)。單片機的控制指令從MOSI引腳輸入。
(5)IRQ:中斷信號。無線通信過程中單片機主要通過IRQ與NRF24L01+進行通信。
(6)CE:芯片的模式控制線。在CE為低電平的情況下,CE會協同NRF24L01+的CONFIG寄存器共同決定NRF24L01+的狀態。
發送端流程如圖1所示。數據在傳輸過程中以3個字節為一組傳輸,Y向數據為第1個字節,X向數據為第2個字節,然后每組數以00H結尾。

圖1 發送端流程圖
應注意的是:本設計使用的數據都是實時數據,即發送端隨時產生不同的數據信息傳送到接收端送PC顯示。因此定義的發送數據Tx_Buf不能使用code定義,因為code內的代碼都是下載到Flash中的,是修改不了的,所以只能發送固定的數值而不能發送實時數據。修改后,使用data來定義發送數據。
發送端主程序流程是:首先是對I2C進行初始化,然后初始化NRF24L01+,并將其置為發射模式;由于設計實現的是數據的實時無線不間斷傳輸,因此在主程序中加入一個while(1)無限循環;同時,由于有2路輸出量和1路固定值要發送給接收機,經過多次程序試驗驗證后,采用switch開關語句最為合適,其中case 0為Y向輸出賦值發送,case 1為X向輸出賦值發送,case 2為00H固定值發送,當case后的數值大于2時,程序自動跳回case 0,這樣就保證每次循環只發送一個包含3個字節數據的數據組。
發送端主函數代碼如下:


接收端流程如圖2所示。

圖2 接收端流程圖
接收端主程序中nRF24L01_RxPacket函數的作用是讀取狀態寄存器的值,并判斷是否接收到數據,如果接收到數據則讀取來自RX_FIFO緩沖區的有效數據,放入Rx_Buf中,讀取完成后要將 TX_DS,RX_DR,MAX_PT都置為1。
接收端主函數代碼如下:

圖3為實驗結果顯示。從圖3中可以看到,初始化后,A/D模塊讀出的第一個值為80H,每次傳輸都要反應3次,即每次實驗開始傳輸數據的前3組數據為初始數據,數據無效。每次測數據時都會選擇一定時間關閉無線傳輸,這樣每次初始化的3組數據后的幾組數都代表一個大組,每個組代表一種狀態,總共有5大組:X和Y不動,即待機;X正向;X負向;Y正向;Y負向。這里的正負向參考搖桿模塊實物。
當搖桿待機時,即不做任何操作時X和Y方向分別為0xC0和0xC6;當把手柄向X正向推到底時,X向實際數據為0x1A,Y向數據無變化;同理,X負向最大時,實際數據為0xFC;Y正向最大角度時,對應實際數據為0x2C;Y負向最大角度時,對應實際數據為0xFD。
本文利用現有的硬件設備,采用模塊化的編程方法,針對搖桿信號的無線傳輸程序進行了分析設計,編寫了主要的功能函數,實現了數據的轉換和無線傳輸功能,為后續的應用奠定了良好的基礎。

圖3 實驗結果
[1]譚曲江.基于nRF2401無線通信模塊設計的遙控出鋁手柄[J].冶金自動化,2008(增刊2):181-183.
[2]莢慶.基于nRF24L01的無線數據傳輸系統[J].現代電子技術,2008,31(7):68-70.