<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的IRIG-B編碼器的設計

          基于FPGA的IRIG-B編碼器的設計

          作者: 時間:2012-08-27 來源:網(wǎng)絡 收藏

          if pps上升沿then rx_count=0

          else接收到數(shù)據(jù)and rx_count

          M12T在每個1 pps的上升沿過后送出當前時間,而通過UART接收到時間時,B碼當前幀已經(jīng)啟動,據(jù)此形成的B碼要等下一個pps參考點之后才可以發(fā)送,所以對接收的時間要進行預進位處理。

          本文在預處理部分設計了一個RTC計時鏈,在每個1 pps的上升沿,計時鏈向上進位,編碼模塊從RTC計時鏈取絕對時間。從UART接收到新的時間后,如果該時間與計時鏈的值有差異,則將通過計時鏈的同步置數(shù)接口修正計時鏈的值。同時計時鏈負責把M12T的二進制時間轉(zhuǎn)換成壓縮的BCD碼,還要根據(jù)當前接收到的年月日,計算當天是全年中的第幾天,即碼中的Day字段,而且在預加1 s和轉(zhuǎn)換時間格式時,要注意閏年和月大和月小對Day字段的影響。

          4 編碼模塊實現(xiàn)

          4.1 DC編碼模塊

          分析B碼可以發(fā)現(xiàn),秒的最低位出現(xiàn)在MMH=1處,分的最低位出現(xiàn)在MMH=10處,小時的最低位出現(xiàn)在MMH=20處,依次類推。按照圖1,容易得出時間寄存器輸出時刻和碼元計數(shù)器MMH之間的關系。由于碼元周期固定為10 ms,可以這樣實現(xiàn)編碼,定義一個模10的計數(shù)器MML和邏輯向量CMP(9 down to0)來表征一個碼元在10 ms的狀態(tài)。MML每ms加1,同時根據(jù)MML的值,選擇CMP的一位更新輸出狀態(tài),步驟如下:

          (1)構(gòu)建模10計數(shù)器MML,以及一個1 ms定時器;

          (2)在PPM12信號的上升沿復位MML和1 ms定時器;

          (3)1 ms定時器溢出時,MML加1;

          (4)根據(jù)MML和CMP輸出編碼信號IRIG_B_OUT,即IRIG_B_OUT=CMP(MML);

          (5)在PPM12的上升沿根據(jù)第3.1節(jié)所得碼元計數(shù)器MMH重新加載CMP

          算法VHDL描述如下:

          在上述VHDL編碼的實現(xiàn)中,MSCLK為1 mS計數(shù)脈沖,同步于PPM12信號的上升沿。CMP的輸出值由函數(shù)IRIG_B根據(jù)輸入?yún)?shù)決定,若為0,則輸出“0000000011”,對應2 ms;若為1則輸出“0000011111”,對應5 ms,在索引脈沖和參考點Pr處,CMP取值“0011111111”,對應8 ms。而最終的編碼輸出IRIG_B_OUT在每個1 ms脈沖的上升沿,根據(jù)CMP(MML)的值決定為高或為低。



          關鍵詞: IRIG-B FPGA 編碼器

          評論


          相關推薦

          技術(shù)專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();