侯 歡,施洪生
(北京交通大學 電氣工程學院,北京100044)
在數(shù)字電路設計中,現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)技術得到越來越廣泛的應用,特別是在通信領域。 對于FPGA 處理器之間的通信,一般采用傳統(tǒng)的有線連接,例如UART、CAN 等方式。 可當FPGA 處理器之間存在相對運動(即一個FPGA 處理器在旋轉側,而另一個在固定側)時,傳統(tǒng)有線通信方法會帶來不便,而無線通信恰好適用于此情況。 將基于FPGA 的PPM 調制解調無線數(shù)據(jù)通信技術應用在風機齒輪箱應力測試中,可以規(guī)避傳統(tǒng)有線式齒輪箱測量的種種風險[1],并且可以簡化復雜的滑環(huán)工裝設計,更加準確地對齒輪箱應力進行測試,同時也可以將此技術應用于其他旋轉器件的信號測試場合,例如,在數(shù)控機床技術中對其卡盤在不同轉速下的夾緊力性能進行實時監(jiān)測;在航空航天技術中對其航空發(fā)動機旋翼的應力、扭矩等進行測試。
隨著無線通信技術的不斷發(fā)展,無線通信的方式也不斷出現(xiàn),其中各種方式的誤碼率、抗干擾能力和傳輸速率也不同,為了提高數(shù)據(jù)傳輸?shù)乃俾屎涂垢蓴_能力,本設計采用光電耦合的無線數(shù)據(jù)傳輸方式,其具有良好的抗干擾能力,它利用光波作為載波對信號進行傳輸,可以達到很高的傳輸速率,在光無線通信領域中,保證一定的速率下,要求傳輸功率盡可能小。脈沖位置調制(PPM)是一種正交調制方式,相比于傳統(tǒng)的開關鍵控(OOK)調制,它具有更高的光功率利用率和頻帶利用率,并能進一步提高傳輸信道的抗干擾能力[2]。 且基于FPGA 的脈沖位置調制(PPM)可以在高轉速、數(shù)據(jù)量大的旋轉件中快速、可靠地傳輸測量到的數(shù)據(jù),因而本設計采用基于FPGA 的脈沖位置調制(PPM)方式。
本設計由旋轉側數(shù)據(jù)的采集和發(fā)送以及固定側數(shù)據(jù)的接收和處理兩部分組成,其中發(fā)送側包括PPM 調制電路的實現(xiàn),接收側包括PPM 解調電路的實現(xiàn)。 發(fā)送側是將A/D 轉化后的數(shù)據(jù)通過CRC 生成器加入CRC 校驗碼,再通過PPM 調制模塊轉化為PPM 脈沖信號,最后通過發(fā)送電路的紅外發(fā)射二極管以光的形式發(fā)送出去。接收側是將接收電路中的紅外接收頭接收到的數(shù)據(jù)通過PPM 解調模塊將數(shù)據(jù)解碼出來,再將數(shù)據(jù)進行CRC校驗,最后將數(shù)據(jù)傳給上位機進行顯示和處理。 系統(tǒng)整體設計流程如圖1 所示,圖2 為發(fā)送數(shù)據(jù)流程圖,圖3為接收數(shù)據(jù)流程圖。
圖1 系統(tǒng)整體結構
圖2 發(fā)送數(shù)據(jù)流程圖
圖3 接收數(shù)據(jù)流程圖
PPM 調制的編碼方式是將輸入的n 位二進制數(shù)據(jù)映射在脈沖位置調制一幀的L(L=2n)個時隙中,即在L個時隙中對應的第l 個時隙發(fā)送一個光脈沖信號[2],l 代表的是時隙的位置數(shù)。
PPM 調制是將輸入數(shù)據(jù)轉化為不同時隙位置的脈沖,此過程可以用一個計數(shù)器來進行計數(shù),從而在不同時隙輸出脈沖的過程[2]。 以時鐘脈沖作為一個標準的時間間隔,將計時過程轉換成一個計數(shù)的過程。 計數(shù)模塊在時鐘的上升沿開始計數(shù),當計數(shù)數(shù)據(jù)與二進制調制數(shù)據(jù)相等時就在相應的時隙輸出高電平,其余時隙輸出低電平,由此得到一個不同周期內不同位置上出現(xiàn)脈沖的波形。
在程序設計中PPM 調制思路如下,將系統(tǒng)時鐘分別進行四分頻和八分頻,其中四分頻時鐘是計數(shù)器的時鐘信號,八分頻時鐘是串并轉換的時鐘信號。 串行數(shù)據(jù)經過串并轉換模塊轉化為并行數(shù)據(jù),根據(jù)系統(tǒng)所需要的是4PPM,將系統(tǒng)時鐘信號經過四分頻器轉化為周期為4的計數(shù)器,把串并轉換輸出的數(shù)據(jù)和計數(shù)器數(shù)據(jù)輸入到比較器模塊中進行比較,如果兩者相同則輸出高電平,反之輸出低電平。最后經過一個脈沖成形模塊輸出窄脈沖,這樣可以減小鄰近信道對其的干擾。 圖4 是PPM 調制Verilog 流程圖。
圖4 PPM 調制Verilog 流程圖
本設計是對4PPM 調制系統(tǒng)的設計,因此需要將A/D轉化出來的數(shù)據(jù)進行串并轉換,使這些數(shù)據(jù)轉換為兩位一組的數(shù)據(jù),此部分是實現(xiàn)PPM 調制的關鍵。 串并轉換可以通過移位寄存器來實現(xiàn),本設計的思路是:先將第一位進入系統(tǒng)的數(shù)據(jù)緩存到寄存器中,等到第二個數(shù)據(jù)進來后,在下一個時鐘的上升沿到來時將這兩位數(shù)據(jù)同時輸出。 其主要代碼如下:
PPM 調制的頂層設計就是將調制部分的所有模塊都拼接在一塊,最終來實現(xiàn)調制的功能。 由于本設計是將A/D 轉換后的數(shù)據(jù)作為PPM 調制模塊的輸入數(shù)據(jù),因此編寫Verilog 代碼來產生一個隨機的m 序列來代替A/D 轉換后的數(shù)據(jù),最后在頂層設計中將m 序列發(fā)生器和PPM 調制模塊連接到一起形成完整的PPM 調制系統(tǒng)。 4PPM 調 制RTL 級 圖 如 圖5 所 示。 4PPM 調 制 仿 真 圖如圖6 所示。
在圖6 的4PPM 調制仿真中,截取其中一段如圖所示,PPM 調制系統(tǒng)輸入的數(shù)據(jù)為InDat(0x55、0x79、0xd8、0xd8、0x55、0x79),其中0x79(0111_1001)經串并轉換后變?yōu)?1、11、10、01 四組數(shù)據(jù),4 位計數(shù)器依次計數(shù)00、01、10、11,當串并轉換后的數(shù)據(jù)與計數(shù)器的數(shù)值相等時,輸出數(shù)據(jù)q 就為高電平,得到輸出的q 之后,再將其高電平的寬度縮小為原來的四分之一,這樣可以減小鄰近信道對其的干擾。 由此得到了最終的4PPM 調制波形dataout。在圖7 中,輸入0x79 時間段中,經過了8 個八分頻時鐘,輸入數(shù)據(jù)依次為01、11、10、01,在與計數(shù)器值count 相比較后,分別在4 個時隙的第二個位置、第四個位置、第三個位置、第二個位置輸出了一個脈沖,這剛好與PPM 調制原理一致,從而證明了系統(tǒng)設計的正確性。
PPM 解調可以由PPM 調制的逆向思路來實現(xiàn),在FPGA 解調過程中首先要提取幀同步信號,本設計中采用在數(shù)據(jù)的頭和尾分別插入特殊的幀頭和幀尾,以此來判斷數(shù)據(jù)的起始位和終止位。 進入FPGA 的是有一定規(guī)律的脈沖信號,檢測到幀頭后,再確定脈沖在一幀數(shù)據(jù)中所占據(jù)的時隙位置。
4PPM 的編碼格式為:00 對應1000;01 對應0100;10 對應0010;11 對應0001,一幀PPM 數(shù)據(jù)由幀頭SOF(0111)、n 個字節(jié)的數(shù)據(jù)以及幀尾EOF(1101)組成,一般每幀數(shù)據(jù)有1 到16 個字節(jié),而且兩幀數(shù)據(jù)之間的時間間隔是任意的。
表1 PPM 數(shù)據(jù)幀格式
本設計中,首先每16 個時鐘周期采集1 位PPM 信號(din),所以需要一個16 位的計數(shù)器count0;解碼2 bit需要采到4 位din 信號, 因此需要一個3 位的計數(shù)器count1;完成一個完整的8 位信號,需要解碼2 bit 數(shù)據(jù)4次,所以還需要一個3 位的計數(shù)器count2。 其次,用移位寄存器將輸入的8 位數(shù)據(jù)進行暫存以便對其進行讀取,與此同時, 輸出的8 bit 數(shù)據(jù)是2 bit 數(shù)據(jù)輸出累加到8 bit,所以也需要移位寄存器對輸出數(shù)據(jù)進行暫存。設計一個4 位寄存器reg1 對輸入的數(shù)據(jù)進行移位操作,一個8 位寄存器reg2 對輸出的數(shù)據(jù)進行暫存,等待8 bit 移滿,就進行數(shù)據(jù)的輸出;最后需要設計一個狀態(tài)機來判斷是否進行解碼,S0 表示沒有收到幀頭,處于未工作狀態(tài);S1表示收到幀頭,開始進行解碼。 圖7 是PPM 解調Verilog流程圖。
圖7 PPM 解調Verilog 流程圖
圖5 4PPM 調制RTL 級圖
圖6 4PPM 調制仿真
在PPM 解調過程中,將最后解調出的數(shù)據(jù)以8 位數(shù)據(jù)的形式進行數(shù)據(jù)的輸出,所以需要一個8 位寄存器對數(shù)據(jù)進行緩存,等8 位數(shù)據(jù)移滿后將數(shù)據(jù)輸出。 其主要代碼如下所示:
在進行PPM 解調系統(tǒng)的仿真之前,首先需要編寫測試文件,然后將各個模塊加入到工程中[3]。 測試文件通過讀取"F:/PPM1.txt"的文件中的數(shù)據(jù)作為PPM 脈沖數(shù)據(jù)輸入到解調系統(tǒng)中,其中PPM 脈沖輸入數(shù)據(jù)如圖8所示,4PPM 解調仿真圖如圖9 所示。
圖8 PPM 脈沖輸入數(shù)據(jù)
由圖9 可以看出,解調出來的數(shù)據(jù)為0x55、0x79、0xd8、0xd8、0x55、0x79,與輸入的數(shù)據(jù)一致,而且輸出的數(shù)據(jù)都是在輸出數(shù)據(jù)有效標志位高電平之后輸出下一個字節(jié)的數(shù)據(jù)。 由此驗證了代碼功能的正確性。
在紅外數(shù)據(jù)傳輸過程中,由于存在較多的干擾源,因此數(shù)據(jù)傳輸?shù)倪^程中容易發(fā)生錯誤。 采用CRC 校驗進行差錯控制,可以比較正確可靠地實現(xiàn)紅外數(shù)據(jù)傳輸[4]。首先將A/D 轉換后的數(shù)據(jù)生成CRC 碼,將CRC 碼加入到A/D 轉換后的數(shù)據(jù)后面一起進入到調制模塊,將調制出來的PPM 數(shù)據(jù)經過發(fā)射電路發(fā)送出去,之后將紅外接收頭接收到的數(shù)據(jù)進行CRC 碼校驗。 這樣可以保證紅外傳輸部分的數(shù)據(jù)更加可靠。 本設計將CRC 校驗碼的Verilog 實現(xiàn)方法展現(xiàn)出來。
由于CRC-CCITT 的生成多項式G(X)為x16+x12+x5+1,輸入數(shù)據(jù)用多項式表示為C(X),將C(X)左移R 位,用C(x)×2R除以生成多項式G(x)得到的余數(shù)就是校驗碼[7]。根據(jù)CRC 校驗碼的生成原理,采用模二除法在程序設計中得到CRC 碼。 其結構圖如圖10 所示。 在接收側的CRC 校驗是一邊接收數(shù)據(jù)一邊進行校驗,當把數(shù)據(jù)都接收完畢后, 最終得出的CRC 校驗碼與固定的CRC 值進行比較,如果兩者相同則接收到了正確的數(shù)據(jù),反之則接收到的數(shù)據(jù)有誤。
在測試文件中輸入數(shù)據(jù)為10101010 和11110000,最終得到的CRC 碼生成器仿真結果如圖11 所示,為0001010010100000 和1110111100011111, 與 用 理 論 計 算結果一致,因此確定了此電路設計的可行性。
本文通過研究PPM 調制解調的原理,設計了基于FPGA 的PPM 調制解調系統(tǒng),詳細論述了調制解調系統(tǒng)的程序設計原理以及CRC 校驗碼的實現(xiàn)。 用Verilog HDL 硬件描述語言編寫了PPM 調制代碼、PPM 解調代碼和CRC 校驗代碼,并在Modelsim 中進行了聯(lián)合仿真,從仿真結果可以看出PPM 調制解調系統(tǒng)設計的正確性。 加入了CRC 校驗,提高了后續(xù)實際應用中數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
圖9 4PPM 解調仿真圖
圖10 CRC 電路結構圖
圖11 CRC 碼生成器仿真圖
實際應用中與仿真必定會有偏差,在后續(xù)實用化中還需要對其進行完善與改進。