王 超,趙 亓
(內(nèi)蒙古工業(yè)大學 機械學院,內(nèi)蒙古 呼和浩特 010051)
近年來,無線傳輸技術(shù)發(fā)展迅猛,被不斷地應(yīng)用于機器人、無人機、深海探測等領(lǐng)域,而這些領(lǐng)域的應(yīng)用大都要使用搖桿進行遠程控制,因而對搖桿信號無線傳輸技術(shù)的研究是極其必要的。
無線遙控和無線傳輸系統(tǒng)與有線設(shè)備相比提高了移動自由度,相對有線數(shù)據(jù)傳輸系統(tǒng),其可以免去繁瑣的設(shè)計過程,并且安裝簡便,操控方便,便于移動,能更好地適應(yīng)環(huán)境變化,提高了設(shè)備的靈活性并降低了維護成本。
本文通過編程實現(xiàn)無線數(shù)據(jù)的模數(shù)轉(zhuǎn)換與無線傳輸功能,為后期的數(shù)據(jù)利用奠定基礎(chǔ)。本設(shè)計所使用的是Nordic公司生產(chǎn)的NRF24L01+單片射頻收發(fā)芯片,它具有功率小、開發(fā)簡單的特點,其使用的是微功率無線通信技術(shù),利用數(shù)字信號單片射頻收發(fā)芯片,加上微控制器和少量外圍元器件即可構(gòu)成專用或通用無線通信模塊。
搖桿信號的輸出大多為模擬量輸出,即電壓方式輸出,所以需要加設(shè)A/D轉(zhuǎn)換器,將模擬量轉(zhuǎn)換為數(shù)字量后,再把數(shù)據(jù)傳送到單片機系統(tǒng)。由于最終要實現(xiàn)無線數(shù)據(jù)的傳輸,因而選取了2個NRF24L01+模塊,其中一片連接單片機、A/D和 搖桿,作為發(fā)送端;另一片連接單片機和上位機,作為接收端。
本設(shè)計以兩個帶有STC89C52單片機的ST-3A學習板作為主機,其上帶有無線模塊的接口,并使用3.3V穩(wěn)壓芯片,還帶有4個外接的5V輸出接線柱,方便連接實驗設(shè)備,而且減少了杜邦線的使用,使得實驗裝置布線簡單,簡化了實驗過程。
本設(shè)計使用YL-40模塊作為A/D轉(zhuǎn)換裝置,該模塊的核心是PCF8591芯片,它是一種具有I2C總線接口的A/D轉(zhuǎn)換芯片,僅依靠時鐘線SCL和數(shù)據(jù)線SDA就可以實現(xiàn)與主機的信息傳遞。
因為要使搖桿操作起來更加簡便和直觀,本設(shè)計使用了JoyStick搖桿模塊,其有X,Y兩路模擬輸出。
考慮到無線傳輸?shù)木嚯x,最終選擇了無線收發(fā)模塊NRF24L01+,其核心芯片是Nordic公司生產(chǎn)的NRF24L01+芯片,特點是成本低、體積小、傳輸速率高,適合實驗室使用。
PCF8591是單片、單電源低功耗8位CMOS數(shù)據(jù)采集器件,具有4路模擬輸入、4路模擬輸出和4個串行I2C總線接口。其中,VREF為A/D轉(zhuǎn)換的參考電壓,而I2C總線通過上拉電阻R9,R10接電源。PCF8591的3個地址引腳A0,A1和A2用于編程硬件地址,允許將最多8個器件連接至I2C總線而不需要額外的硬件。其器件的地址、控制和數(shù)據(jù)通過兩線雙向I2C總線傳輸。
本設(shè)計因手柄只有2路模擬輸出,所以只需要利用2個A/D轉(zhuǎn)換接口即可,因此,只使用AIN0和AIN1接口,其中AIN0和手柄S-Y口相接,AIN1與手柄S-X口相接。SCL和SDA分別接單片機的I/O口P20和P21。
從單片機控制的角度來看,對于NRF24L01+,我們只需要關(guān)注以下6個控制和數(shù)據(jù)信號:
(1)CSN:芯片的片選線,CSN為低電平時芯片才會工作。
(2)SCK:芯片控制的時鐘線。
(3)MISO:SPI數(shù)據(jù)主入從輸端(Master input slave output)。狀態(tài)信息和數(shù)據(jù)信息是從MISO引腳輸出并送給單片機。
(4)MOSI:SPI數(shù)據(jù)主輸從入端(Master output slave input)。單片機的控制指令從MOSI引腳輸入。
(5)IRQ:中斷信號。無線通信過程中單片機主要通過IRQ與NRF24L01+進行通信。
(6)CE:芯片的模式控制線。在CE為低電平的情況下,CE會協(xié)同NRF24L01+的CONFIG寄存器共同決定NRF24L01+的狀態(tài)。
發(fā)送端流程如圖1所示。數(shù)據(jù)在傳輸過程中以3個字節(jié)為一組傳輸,Y向數(shù)據(jù)為第1個字節(jié),X向數(shù)據(jù)為第2個字節(jié),然后每組數(shù)以00H結(jié)尾。
圖1 發(fā)送端流程圖
應(yīng)注意的是:本設(shè)計使用的數(shù)據(jù)都是實時數(shù)據(jù),即發(fā)送端隨時產(chǎn)生不同的數(shù)據(jù)信息傳送到接收端送PC顯示。因此定義的發(fā)送數(shù)據(jù)Tx_Buf不能使用code定義,因為code內(nèi)的代碼都是下載到Flash中的,是修改不了的,所以只能發(fā)送固定的數(shù)值而不能發(fā)送實時數(shù)據(jù)。修改后,使用data來定義發(fā)送數(shù)據(jù)。
發(fā)送端主程序流程是:首先是對I2C進行初始化,然后初始化NRF24L01+,并將其置為發(fā)射模式;由于設(shè)計實現(xiàn)的是數(shù)據(jù)的實時無線不間斷傳輸,因此在主程序中加入一個while(1)無限循環(huán);同時,由于有2路輸出量和1路固定值要發(fā)送給接收機,經(jīng)過多次程序試驗驗證后,采用switch開關(guān)語句最為合適,其中case 0為Y向輸出賦值發(fā)送,case 1為X向輸出賦值發(fā)送,case 2為00H固定值發(fā)送,當case后的數(shù)值大于2時,程序自動跳回case 0,這樣就保證每次循環(huán)只發(fā)送一個包含3個字節(jié)數(shù)據(jù)的數(shù)據(jù)組。
發(fā)送端主函數(shù)代碼如下:
接收端流程如圖2所示。
圖2 接收端流程圖
接收端主程序中nRF24L01_RxPacket函數(shù)的作用是讀取狀態(tài)寄存器的值,并判斷是否接收到數(shù)據(jù),如果接收到數(shù)據(jù)則讀取來自RX_FIFO緩沖區(qū)的有效數(shù)據(jù),放入Rx_Buf中,讀取完成后要將 TX_DS,RX_DR,MAX_PT都置為1。
接收端主函數(shù)代碼如下:
圖3為實驗結(jié)果顯示。從圖3中可以看到,初始化后,A/D模塊讀出的第一個值為80H,每次傳輸都要反應(yīng)3次,即每次實驗開始傳輸數(shù)據(jù)的前3組數(shù)據(jù)為初始數(shù)據(jù),數(shù)據(jù)無效。每次測數(shù)據(jù)時都會選擇一定時間關(guān)閉無線傳輸,這樣每次初始化的3組數(shù)據(jù)后的幾組數(shù)都代表一個大組,每個組代表一種狀態(tài),總共有5大組:X和Y不動,即待機;X正向;X負向;Y正向;Y負向。這里的正負向參考搖桿模塊實物。
當搖桿待機時,即不做任何操作時X和Y方向分別為0xC0和0xC6;當把手柄向X正向推到底時,X向?qū)嶋H數(shù)據(jù)為0x1A,Y向數(shù)據(jù)無變化;同理,X負向最大時,實際數(shù)據(jù)為0xFC;Y正向最大角度時,對應(yīng)實際數(shù)據(jù)為0x2C;Y負向最大角度時,對應(yīng)實際數(shù)據(jù)為0xFD。
本文利用現(xiàn)有的硬件設(shè)備,采用模塊化的編程方法,針對搖桿信號的無線傳輸程序進行了分析設(shè)計,編寫了主要的功能函數(shù),實現(xiàn)了數(shù)據(jù)的轉(zhuǎn)換和無線傳輸功能,為后續(xù)的應(yīng)用奠定了良好的基礎(chǔ)。
圖3 實驗結(jié)果
[1]譚曲江.基于nRF2401無線通信模塊設(shè)計的遙控出鋁手柄[J].冶金自動化,2008(增刊2):181-183.
[2]莢慶.基于nRF24L01的無線數(shù)據(jù)傳輸系統(tǒng)[J].現(xiàn)代電子技術(shù),2008,31(7):68-70.