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

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 一種PC104溫度采集卡的設(shè)計

          一種PC104溫度采集卡的設(shè)計

          作者: 時間:2011-06-08 來源:網(wǎng)絡(luò) 收藏

            因為分配給每塊采集卡的I/O地址空間有限,所以利用板卡命令寄存器的低8位作為參數(shù)數(shù)據(jù),高8位作為命令/參數(shù)類型。為了穩(wěn)定可靠地鎖存數(shù)據(jù),參數(shù)寄存器的使能信號由板卡命令寄存器寫造中信號延時兩個野兔周期得到。參數(shù)類型是指采樣速率、輸出因子、中斷號。板卡命令寄存器高8位提供的命令有啟動(START)、停止、同步(驅(qū)動AD7711的/sync線)、復(fù)位、FIFO清零等命令。
            圖2中的粗線表示數(shù)據(jù)的流向。通道主控器(ChnMaster)與AD7711數(shù)字界面接口,負(fù)責(zé)產(chǎn)生AD7711的所有讀寫時序。一共有12個通道主控器,可以并行地工作,由通道觸發(fā)電路(ChnTrigger)觸發(fā)和指定串/并工作方式。它將通道操作寄存器給出的并行24位控制字或校準(zhǔn)數(shù)據(jù)(由CtlReg.F1F0決定)轉(zhuǎn)換成串行數(shù)據(jù),由SDATA發(fā)送出去,或者讀取AD7711的數(shù)據(jù)寄存器和控制/校準(zhǔn)寄存器,將串行數(shù)據(jù)轉(zhuǎn)換成24位和16位的并行數(shù)據(jù)。當(dāng)通道主控器產(chǎn)生Rdy信號時表示接收完畢,新的數(shù)據(jù)已經(jīng)獲得。根據(jù)通道操作寄存器的24~28位,有全通道和單通道工作方式。
            當(dāng)CH=1時,為全通道的數(shù)據(jù)采集并行工作方式。如果板卡命令START有效,可編程時鐘發(fā)生器(ProgClkGen)則根據(jù)采樣速率輸出采樣時鐘。采樣時鐘直接或經(jīng)定時器(Timer)延時后產(chǎn)生Tpt信號輸入到通道觸發(fā)電路,產(chǎn)生通道使能信號Ena,從而觸發(fā)通道主控器開始工作。每個通道的通道主控器讀取AD7711的數(shù)據(jù),當(dāng)16位數(shù)據(jù)讀完時,輸出Rdy信號??刂品峙淦鳎―irector)接收采樣時鐘和Rdy信號。當(dāng)所有通道的Rdy信號都收到時,輸出通道選擇信號到4~16多路選擇器,依次選通各個通道的數(shù)據(jù),并產(chǎn)生FIFO寫控制信號,將每個通道的數(shù)據(jù)寫入FIFO里。當(dāng)采樣次數(shù)達(dá)到輸出因子大小時,就通過中斷產(chǎn)生模塊(IntrGen)輸出一個指定的中斷脈沖。主機(jī)接收到中斷后,讀取參數(shù)寄存器(0x280)的值,其大小即為輸出數(shù)據(jù)的個數(shù)??刂品峙淦鬟€對主機(jī)連續(xù)讀取數(shù)據(jù)的/IOR信號進(jìn)行計數(shù),若該次中斷讀取的數(shù)據(jù)完畢,產(chǎn)生中斷處理結(jié)束信號,允許下次對FIFO進(jìn)行寫操作。
            當(dāng)CH=0時,由CH3CH2CH1CH0決定對哪個通道操作,一般對AD7711讀寫控制字和校準(zhǔn)字時使用單通道的操作。當(dāng)主機(jī)寫控制寄存器時,內(nèi)部產(chǎn)生一個表示寫新控制字完畢的脈沖信號,觸發(fā)通道觸發(fā)電路使之產(chǎn)生一個通道使能信號Ena,使相應(yīng)的通道主控器開始工作。如果寫AD7711控制/校準(zhǔn)寄存器,則通道主控器將24位數(shù)據(jù)鎖存,進(jìn)行并-串轉(zhuǎn)換發(fā)送出去。如果讀AD7711控制/校準(zhǔn)豁口,則通道主控器接收串行數(shù)據(jù)并轉(zhuǎn)換成24位并行數(shù)據(jù)。通道操作寄存器的通道號決定多路選擇器的輸出,將數(shù)據(jù)鎖存到通道寄存器數(shù)據(jù)鎖存器(0x284)里。操作完成后,狀態(tài)寄存器的busy位為0,主機(jī)就可以從地址0x284讀取到相應(yīng)AD7711控制/校準(zhǔn)寄存器里的數(shù)據(jù)。
            圖2里還包括了內(nèi)部RAM和對外部串口E2PROM??梢猿跏蓟疪AM,使CPLD在上電時就保存有各通道校準(zhǔn)參數(shù),但是若修改固化參數(shù),必須重新編譯和對外部配置器件編程,用戶主機(jī)不能修改。若將參數(shù)保存在片外的串口E2PROM,則可以對其讀和寫,以方便用戶主機(jī)根據(jù)實際情況校準(zhǔn)各個通道,并保存新的校準(zhǔn)參數(shù)。
            2.2 通道主控器的設(shè)計
            通道主控器的主要結(jié)構(gòu)如圖3所示,包括左移移位寄存器、/RFS和TFS生成模塊、SCLK計數(shù)器。發(fā)送時,內(nèi)部輸入數(shù)據(jù)通過LodSht鎖存,通過移位從Sdata_o輸出;接收時,串行數(shù)據(jù)從Sdata_I輸入,通過移位得到并行數(shù)據(jù)(24位)輸出到內(nèi)部。ClrSht和EnaSht分別是清零和使能信號。
            2.3 FIFO和RAM
            FIFO提供數(shù)據(jù)緩沖能力。FLEX10K50QC240能夠提供2880個邏輯單元、10個嵌入式陣列塊(EAB),總計20480個RAM位。根據(jù)板卡的要求,最大的輸出因子為32,它所需的最大RAM位為32×12×16=6144。每個EAB只能配置成256×8bit,深度為384、數(shù)據(jù)位寬為16的FIFO需要占用4個EAB。所以FIEX10K50QC240完全可以滿足要求,實際上它可以實現(xiàn)最大輸出因子為64所需要的FIFO緩沖。這里使用Altera公司提供的參數(shù)化模塊LPM_FIFO來實現(xiàn)所需的模塊。它是一個單時鐘同步FIFO,支持同時讀和寫。
            2.4 控制分配器
            控制分配器主要輸出通道選擇信號和FIFO的寫控制信號。當(dāng)條件滿足時,便輸出從1~12個FIFO寫控制信號。這里休用狀態(tài)機(jī)實現(xiàn)這一過程。
            2.5 可編程時鐘發(fā)生器
            采樣脈沖由10MHz時鐘計數(shù)分頻得到,其頻率由主機(jī)寫到參數(shù)寄存器的參數(shù)決定。計數(shù)器的預(yù)置值與參數(shù)存在一一對應(yīng)關(guān)系。方法一是采用譯碼器,由于輸出的預(yù)置值是24位,則邏輯復(fù)雜,需占用大量的邏輯單元資源?! 》椒ǘ鞘褂貌檎冶?,采用三段8位的ROM來實現(xiàn),僅占用若干RAM位,簡單有效。
            通道控制器內(nèi)部邏輯的原理設(shè)計完成后,所有的詳細(xì)設(shè)計都采用硬件描述語言VHDL實現(xiàn),并在MAX+PULSII集成環(huán)境下編譯、模擬、綜合,最后下載到外部配置器件E2中。首先規(guī)劃好每個子功能塊的模型,子功能模型可以使用狀態(tài)模型,也可以使用時序圖進(jìn)程模型來描繪。其次選擇適當(dāng)?shù)拿枋龇绞骄帉懘a。編寫代碼的方式非常重要,因為VHDL綜合工具將依據(jù)設(shè)計代碼方式映射成相應(yīng)的器件邏輯,VHDL代碼的編寫方式將直接影響到設(shè)計的結(jié)果。
            本文介紹的PC卡不僅完成了代碼設(shè)計和功能仿真驗證,最后還在實際系統(tǒng)中得到成功應(yīng)用。結(jié)果表明,這款PC104卡不僅設(shè)計緊湊、功能強(qiáng)大而且非常靈活,很適合用于過程控制、智能傳感器、便攜式工業(yè)設(shè)備、分布式工業(yè)測量等場合。其中通道控制器是采集核心,它的詳細(xì)設(shè)計過程對其它類似的采集卡控制器設(shè)計也有一定的借鑒意義。

          本文引用地址:http://www.ex-cimer.com/article/194906.htm


          上一頁 1 2 下一頁

          關(guān)鍵詞: 104 PC 溫度采集 卡的設(shè)計

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁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); })();